From 6d6e2b813a275cce2d945f82e599a4848cca87e5 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Tue, 8 Jan 2019 15:18:25 +0100
Subject: [PATCH 001/571] Update interface/web/sites/database_edit.php

---
 interface/web/sites/database_edit.php | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/interface/web/sites/database_edit.php b/interface/web/sites/database_edit.php
index 71e5acaf27..22f3302c6c 100644
--- a/interface/web/sites/database_edit.php
+++ b/interface/web/sites/database_edit.php
@@ -152,6 +152,12 @@ class page_action extends tform_actions {
 			$app->tpl->setVar("database_name_prefix", $app->tools_sites->getPrefix($this->dataRecord['database_name_prefix'], $dbname_prefix, $global_config['dbname_prefix']), true);
 		}
 
+		if($global_config['disable_client_remote_dbserver'] == 'y' && $_SESSION["s"]["user"]["typ"] != 'admin') {
+			$app->tpl->setVar("disable_remote_db", 1);
+		} else {
+			$app->tpl->setVar("disable_remote_db", 0);
+		}
+
 		if($this->id > 0) {
 			//* we are editing a existing record
 			$edit_disabled = @($_SESSION["s"]["user"]["typ"] == 'admin')? 0 : 1; //* admin can change the database-name
@@ -351,9 +357,14 @@ class page_action extends tform_actions {
 		if($tmp['server_id'] && $tmp['server_id'] != $this->dataRecord['server_id']) {
 			// we need remote access rights for this server, so get it's ip address
 			$server_config = $app->getconf->get_server_config($tmp['server_id'], 'server');
+			
+			// Add default remote_ips from Main Configuration.
+			$remote_ips = explode(",", $global_config['default_remote_dbserver']);
+			if (!in_array($server_config['ip_address'], $default_remote_db)) { $remote_ips[] = $server_config['ip_address']; }
+
 			if($server_config['ip_address']!='') {
 				if($this->dataRecord['remote_access'] != 'y'){
-					$this->dataRecord['remote_ips'] = $server_config['ip_address'];
+					$this->dataRecord['remote_ips'] = implode(',', $remote_ips);
 					$this->dataRecord['remote_access'] = 'y';
 				} else {
 					if($this->dataRecord['remote_ips'] != ''){
@@ -361,6 +372,7 @@ class page_action extends tform_actions {
 							$this->dataRecord['remote_ips'] .= ',' . $server_config['ip_address'];
 						}
 						$tmp = preg_split('/\s*,\s*/', $this->dataRecord['remote_ips']);
+						$tmp = array_merge($tmp, $remote_ips);
 						$tmp = array_unique($tmp);
 						$this->dataRecord['remote_ips'] = implode(',', $tmp);
 						unset($tmp);
@@ -430,9 +442,14 @@ class page_action extends tform_actions {
 		if($tmp['server_id'] && $tmp['server_id'] != $this->dataRecord['server_id']) {
 			// we need remote access rights for this server, so get it's ip address
 			$server_config = $app->getconf->get_server_config($tmp['server_id'], 'server');
+			
+			// Add default remote_ips from Main Configuration.
+			$remote_ips = explode(",", $global_config['default_remote_dbserver']);
+			if (!in_array($server_config['ip_address'], $default_remote_db)) { $remote_ips[] = $server_config['ip_address']; }
+
 			if($server_config['ip_address']!='') {
 				if($this->dataRecord['remote_access'] != 'y'){
-					$this->dataRecord['remote_ips'] = $server_config['ip_address'];
+					$this->dataRecord['remote_ips'] = implode(',', $remote_ips);
 					$this->dataRecord['remote_access'] = 'y';
 				} else {
 					if($this->dataRecord['remote_ips'] != ''){
@@ -440,6 +457,7 @@ class page_action extends tform_actions {
 							$this->dataRecord['remote_ips'] .= ',' . $server_config['ip_address'];
 						}
 						$tmp = preg_split('/\s*,\s*/', $this->dataRecord['remote_ips']);
+						$tmp = array_merge($tmp, $remote_ips);
 						$tmp = array_unique($tmp);
 						$this->dataRecord['remote_ips'] = implode(',', $tmp);
 						unset($tmp);
-- 
GitLab


From 15506bef8018548c7da59a599db9d67416121c67 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Tue, 8 Jan 2019 15:19:23 +0100
Subject: [PATCH 002/571] Update
 interface/web/sites/templates/database_edit.htm

---
 interface/web/sites/templates/database_edit.htm | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/sites/templates/database_edit.htm b/interface/web/sites/templates/database_edit.htm
index 290ae30a96..0d5be00130 100644
--- a/interface/web/sites/templates/database_edit.htm
+++ b/interface/web/sites/templates/database_edit.htm
@@ -97,6 +97,7 @@
                         </select></div>
                 </tmpl_if>
             </div>
+	 <tmpl_unless name="disable_remote_db">
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='remote_access_txt'}</label>
                 <div class="col-sm-9">
@@ -106,6 +107,7 @@
             <div class="form-group">
                 <label for="remote_ips" class="col-sm-3 control-label">{tmpl_var name='remote_ips_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="remote_ips" id="remote_ips" value="{tmpl_var name='remote_ips'}" class="form-control" /></div></div>
+	 </tmpl_if>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
                 <div class="col-sm-9">
-- 
GitLab


From fefa02d353b7aca12cebe7f245588a4d1c336991 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Tue, 8 Jan 2019 15:33:54 +0100
Subject: [PATCH 003/571] Update
 interface/web/admin/lib/lang/en_system_config.lng,
 interface/web/admin/lib/lang/it_system_config.lng,
 interface/web/admin/templates/system_config_sites_edit.htm,
 interface/web/admin/form/system_config.tform.php files

---
 .../web/admin/form/system_config.tform.php    | 21 ++++++++++++++++++-
 .../web/admin/lib/lang/en_system_config.lng   |  2 ++
 .../web/admin/lib/lang/it_system_config.lng   |  2 ++
 .../templates/system_config_sites_edit.htm    | 13 +++++++++++-
 4 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 449805f3c1..fb2f1f7264 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -200,6 +200,25 @@ $form["tabs"]['sites'] = array (
 			'value'  => '',
 			'name'  => 'default_dbserver'
 		),
+		'disable_client_remote_dbserver' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+                'default_remote_dbserver' => array (
+			'datatype'  => 'TEXT',
+			'formtype'  => 'TEXT',
+			'validators'  => array (  0 => array (  'type' => 'CUSTOM',
+				'class' => 'validate_database',
+				'function' => 'valid_ip_list',
+				'errmsg' => 'database_remote_error_ips'),
+			),
+			'default' => '',
+			'value'   => '',
+			'width'   => '60',
+			'searchable' => 2
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
@@ -731,4 +750,4 @@ $form["tabs"]['misc'] = array (
 );
 
 
-?>
+?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 38f178f9f5..1a7d18b9e7 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -84,4 +84,6 @@ $wb["reseller_can_use_options_txt"] = "Reseller can use the option-tab for websi
 $wb["custom_login_text_txt"] = "Custom Text on Login-Page";
 $wb["custom_login_link_txt"] = "Custom Link on Login-Page";
 $wb["login_link_error_regex"] = "Invalid Link for Custom Login";
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 ?>
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index 396503f02e..bc72844ed8 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -81,4 +81,6 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi
 $wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
 $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
 $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb["default_remote_dbserver_txt"] = "DB remoti predefiniti";
+$wb["disable_client_remote_dbserver_txt"] = "Disabilita la configurazione dei DB Remoti per i clienti";
 ?>
diff --git a/interface/web/admin/templates/system_config_sites_edit.htm b/interface/web/admin/templates/system_config_sites_edit.htm
index 1c4c5c6f9a..8ab35989ff 100644
--- a/interface/web/admin/templates/system_config_sites_edit.htm
+++ b/interface/web/admin/templates/system_config_sites_edit.htm
@@ -75,7 +75,18 @@
                     {tmpl_var name='default_dbserver'}
                 </select></div>
             </div>
-            
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='disable_client_remote_dbserver_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='disable_client_remote_dbserver'}
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="default_remote_dbserver" class="col-sm-3 control-label">{tmpl_var name='default_remote_dbserver_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="default_remote_dbserver" id="default_remote_dbserver" value="{tmpl_var name='default_remote_dbserver'}" class="form-control" /></div>
+	    </div>
+ 
+         	
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
             
         <div class="clear"><div class="right">
-- 
GitLab


From 0c0dd4652bee894003806692b1a2c3529ed78154 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Tue, 8 Jan 2019 15:35:07 +0100
Subject: [PATCH 004/571] Show DNS Slave Zone menu only if enabled by limits.

---
 interface/web/dns/lib/module.conf.php | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/interface/web/dns/lib/module.conf.php b/interface/web/dns/lib/module.conf.php
index 75b17a98e8..4e4c645470 100644
--- a/interface/web/dns/lib/module.conf.php
+++ b/interface/web/dns/lib/module.conf.php
@@ -1,5 +1,7 @@
 <?php
 
+$userid=$app->auth->get_user_id();
+
 $module["name"]   = "dns";
 $module["title"]   = "top_menu_dns";
 $module["template"]  = "module.tpl.htm";
@@ -56,19 +58,23 @@ $module["nav"][] = array( 'title' => 'DNS',
 
 unset($items);
 
-$items[] = array( 'title'  => "Secondary Zones",
-	'target'  => 'content',
-	'link' => 'dns/dns_slave_list.php',
-	'html_id' => 'dns_slave_list');
-
-$module["nav"][] = array( 'title' => 'Secondary DNS',
-	'open'  => 1,
-	'items' => $items);
+if($app->auth->get_client_limit($userid, 'dns_slave_zone') != 0)
+{
+	$items[] = array( 'title'  => "Secondary Zones",
+		'target'  => 'content',
+		'link' => 'dns/dns_slave_list.php',
+		'html_id' => 'dns_slave_list');
+
+	$module["nav"][] = array( 'title' => 'Secondary DNS',
+		'open'  => 1,
+		'items' => $items);
+	
+	unset($items);
+}
 
-unset($items);
 
 
 
 
 
-?>
+?>
\ No newline at end of file
-- 
GitLab


From 6ea7d4c89a477765fb2dea6025484712321eae74 Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Mon, 11 Mar 2019 11:16:35 +0100
Subject: [PATCH 005/571] stats Folder created even when Statistics set to none
 - Fixes #4977

---
 .../plugins-available/apache2_plugin.inc.php  | 35 +++++++++++--------
 server/plugins-available/nginx_plugin.inc.php |  5 +++
 2 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 8ebe11d92a..e9845eec34 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1801,21 +1801,23 @@ class apache2_plugin {
 
 		//* Create .htaccess and .htpasswd file for website statistics
 		//if(!is_file($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess') or $data['old']['document_root'] != $data['new']['document_root']) {
-		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats');
-		$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user";
-		$app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', $ht_file);
-		$app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', 0755);
-		unset($ht_file);
-		//}
 
-		if(!is_file($data['new']['document_root'].'/web/stats/.htpasswd_stats') || $data['new']['stats_password'] != $data['old']['stats_password']) {
-			if(trim($data['new']['stats_password']) != '') {
-				$htp_file = 'admin:'.trim($data['new']['stats_password']);
-				$app->system->web_folder_protection($data['new']['document_root'], false);
-				$app->system->file_put_contents($data['new']['document_root'].'/web/stats/.htpasswd_stats', $htp_file);
-				$app->system->web_folder_protection($data['new']['document_root'], true);
-				$app->system->chmod($data['new']['document_root'].'/web/stats/.htpasswd_stats', 0755);
-				unset($htp_file);
+		if($data['new']['stats_type'] != '') {
+			if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats');
+			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user";
+			$app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', $ht_file);
+			$app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', 0755);
+			unset($ht_file);
+
+			if(!is_file($data['new']['document_root'].'/web/stats/.htpasswd_stats') || $data['new']['stats_password'] != $data['old']['stats_password']) {
+				if(trim($data['new']['stats_password']) != '') {
+					$htp_file = 'admin:'.trim($data['new']['stats_password']);
+					$app->system->web_folder_protection($data['new']['document_root'], false);
+					$app->system->file_put_contents($data['new']['document_root'].'/web/stats/.htpasswd_stats', $htp_file);
+					$app->system->web_folder_protection($data['new']['document_root'], true);
+					$app->system->chmod($data['new']['document_root'].'/web/stats/.htpasswd_stats', 0755);
+					unset($htp_file);
+				}
 			}
 		}
 
@@ -1824,6 +1826,11 @@ class apache2_plugin {
 			$this->awstats_update($data, $web_config);
 		}
 
+		//* Remove Stats-Folder when Statistics set to none
+		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
+			exec('rm -rf '.$data['new']['document_root'].'/web/stats');
+		}
+
 		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder);
 		$this->hhvm_update($data, $web_config);
 
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index adac20c78a..94c588c8b9 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1889,6 +1889,11 @@ class nginx_plugin {
 			$this->awstats_update($data, $web_config);
 		}
 
+		//* Remove Stats-Folder when Statistics set to none
+		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
+			exec('rm -rf '.$data['new']['document_root'].'/web/stats');
+		}
+
 		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder);
 		$this->hhvm_update($data, $web_config);
 
-- 
GitLab


From 5d019bf55f67d9b0f657f7de0f6a38af6c9234dc Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 11 Mar 2019 12:13:40 +0100
Subject: [PATCH 006/571] - added new webroot map argument to cli call of
 certbot on versions >= 0.31, should fix #5258

---
 server/lib/classes/letsencrypt.inc.php | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 4f681cc485..3807149c1c 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -284,7 +284,17 @@ class letsencrypt {
                     } else {
                         $acme_version = 'https://acme-v01.api.letsencrypt.org/directory';
                     }
-                    $letsencrypt_cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $cli_domain_arg --webroot-path /usr/local/ispconfig/interface/acme";
+					if ($letsencrypt_version >= 0.31) {
+						$webroot_map = array();
+						for($i = 0; $i < count($temp_domains); $i++) {
+							$webroot_map[$temp_domains[$i]] = '/usr/local/ispconfig/interface/acme';
+						}
+						$webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map)));
+					} else {
+						$webroot_args = "$cli_domain_arg --webroot-path /usr/local/ispconfig/interface/acme";
+					}
+					
+                    $letsencrypt_cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $webroot_args";
 					$success = $app->system->_exec($letsencrypt_cmd);
 				}
 			} else {
-- 
GitLab


From 97d1dce043e4adccaee83f42a01f8cc7e828f049 Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Mon, 11 Mar 2019 12:32:23 +0100
Subject: [PATCH 007/571] Send emails to active customers and resellers only. -
 #5216

---
 interface/web/client/client_message.php | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/interface/web/client/client_message.php b/interface/web/client/client_message.php
index 2617bbe67d..a46aefa6b4 100644
--- a/interface/web/client/client_message.php
+++ b/interface/web/client/client_message.php
@@ -71,18 +71,18 @@ if(isset($_POST) && count($_POST) > 1) {
 					$where[] = 'client_id = '.$app->functions->intval($tmp_client_id);
 				}
 				if(!empty($where)) $where_clause = ' AND ('.implode(' OR ', $where).')';
-				$sql = "SELECT * FROM client WHERE email != ''".$where_clause;
+				$sql = "SELECT * FROM client WHERE canceled != 'y' AND email != ''".$where_clause;
 			} else {
-				$sql = "SELECT * FROM client WHERE 0";
+				$sql = "SELECT * FROM client WHERE canceled != 'y'";
 			}
 		} else {
 			//* Select all clients and resellers
 			if($_SESSION["s"]["user"]["typ"] == 'admin'){
-				$sql = "SELECT * FROM client WHERE email != ''";
+				$sql = "SELECT * FROM client WHERE email != '' AND canceled != 'y'";
 			} else {
 				$client_id = $app->functions->intval($_SESSION['s']['user']['client_id']);
 				if($client_id == 0) die('Invalid Client ID.');
-				$sql = "SELECT * FROM client WHERE email != '' AND parent_client_id = '$client_id'";
+				$sql = "SELECT * FROM client WHERE email != '' AND canceled != 'y' AND parent_client_id = '$client_id'";
 			}
 		}
 
-- 
GitLab


From 89284110eb20176699afe42bd0487516eb0f3f0c Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 11 Mar 2019 12:35:05 +0100
Subject: [PATCH 008/571] Update apache2_plugin.inc.php

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index e9845eec34..3aa851f649 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1828,7 +1828,7 @@ class apache2_plugin {
 
 		//* Remove Stats-Folder when Statistics set to none
 		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
-			exec('rm -rf '.$data['new']['document_root'].'/web/stats');
+			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
 		}
 
 		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder);
-- 
GitLab


From 9768d64e9044b9fb85de7689218d2ab8853c9a47 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 11 Mar 2019 12:36:21 +0100
Subject: [PATCH 009/571] Update nginx_plugin.inc.php

---
 server/plugins-available/nginx_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 94c588c8b9..189a6f88ea 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1891,7 +1891,7 @@ class nginx_plugin {
 
 		//* Remove Stats-Folder when Statistics set to none
 		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
-			exec('rm -rf '.$data['new']['document_root'].'/web/stats');
+			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
 		}
 
 		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder);
-- 
GitLab


From f3087460f54521f331646bc6bb2b0a5f5c3cdefe Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 20 Mar 2019 18:44:03 +0100
Subject: [PATCH 010/571] Fixes #5275 DNS Wizard does not add new zone.

---
 install/sql/incremental/upd_dev_collection.sql | 6 +++---
 install/sql/ispconfig3.sql                     | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index b9fb91d46c..279d3ce211 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -78,6 +78,6 @@ INSERT IGNORE INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_us
 (NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0),
 (NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0);
 
-ALTER TABLE `dns_soa` CHANGE `xfer` `xfer` TEXT NOT NULL DEFAULT '';
-ALTER TABLE `dns_soa` CHANGE `also_notify` `also_notify` TEXT NOT NULL DEFAULT '';
-ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NOT NULL DEFAULT '';
\ No newline at end of file
+ALTER TABLE `dns_soa` CHANGE `xfer` `xfer` TEXT NULL;
+ALTER TABLE `dns_soa` CHANGE `also_notify` `also_notify` TEXT NULL;
+ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index f06a49b7ea..4cfaebb396 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -516,7 +516,7 @@ CREATE TABLE `dns_slave` (
   `origin` varchar(255) NOT NULL DEFAULT '',
   `ns` varchar(255) NOT NULL DEFAULT '',
   `active` enum('N','Y') NOT NULL DEFAULT 'N',
-  `xfer` TEXT NOT NULL DEFAULT '',
+  `xfer` TEXT NULL,
   PRIMARY KEY  (`id`),
   UNIQUE KEY `slave` (`origin`,`server_id`),
   KEY `active` (`active`)
@@ -620,8 +620,8 @@ CREATE TABLE `dns_soa` (
   `minimum` int(11) unsigned NOT NULL default '3600',
   `ttl` int(11) unsigned NOT NULL default '3600',
   `active` enum('N','Y') NOT NULL DEFAULT 'N',
-  `xfer` TEXT NOT NULL DEFAULT '',
-  `also_notify` TEXT NOT NULL DEFAULT '',
+  `xfer` TEXT NULL,
+  `also_notify` TEXT NULL,
   `update_acl` varchar(255) default NULL,
   `dnssec_initialized` ENUM('Y','N') NOT NULL DEFAULT 'N',
   `dnssec_wanted` ENUM('Y','N') NOT NULL DEFAULT 'N',
-- 
GitLab


From 12f591327e3c6c8b6b3e475cd676a9f70801b173 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 20 Mar 2019 18:45:43 +0100
Subject: [PATCH 011/571] Added INSTALLER_UPDATE constant in update.php to
 allow easier detection if installer run is an update or new installation.

---
 install/update.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/install/update.php b/install/update.php
index 62e8d5ef4a..104aab57ff 100644
--- a/install/update.php
+++ b/install/update.php
@@ -59,6 +59,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 error_reporting(E_ALL|E_STRICT);
 
 define('INSTALLER_RUN', true);
+define('INSTALLER_UPDATE', true);
 
 //** The banner on the command line
 echo "\n\n".str_repeat('-', 80)."\n";
-- 
GitLab


From 14807bde32856093b7a50a0da25e3c143783b937 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 8 Apr 2019 12:41:20 +0200
Subject: [PATCH 012/571] Fixed SQL query in DNS slave datasource component.

---
 interface/lib/classes/custom_datasource.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/classes/custom_datasource.inc.php b/interface/lib/classes/custom_datasource.inc.php
index 484d0fa055..c50d585027 100644
--- a/interface/lib/classes/custom_datasource.inc.php
+++ b/interface/lib/classes/custom_datasource.inc.php
@@ -72,7 +72,7 @@ class custom_datasource {
 			$client = $app->db->queryOneRecord("SELECT default_slave_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			$sql = "SELECT server_id,server_name FROM server WHERE server_id = ?";
 		} else {
-			$sql = "SELECT server_id,server_name FROM server WHERE dns_server = 1 ORDER BY server_name AND mirror_server_id = 0";
+			$sql = "SELECT server_id,server_name FROM server WHERE dns_server = 1 AND mirror_server_id = 0 ORDER BY server_name";
 		}
 		$records = $app->db->queryAllRecords($sql, $client['default_slave_dnsserver']);
 		$records_new = array();
-- 
GitLab


From 03f54d5ebc557b408ed80e304d2c12dab4652597 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 8 Apr 2019 13:28:36 +0200
Subject: [PATCH 013/571] Fixed: WARNING - assumed 'LOGLEVEL_WARNING' (this
 will throw an Error in a future version of PHP) in
 /usr/local/ispconfig/server/lib/classes/services.inc.php on line 44

---
 server/lib/classes/services.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/services.inc.php b/server/lib/classes/services.inc.php
index 7a8841ece5..0914081672 100644
--- a/server/lib/classes/services.inc.php
+++ b/server/lib/classes/services.inc.php
@@ -41,7 +41,7 @@ class services {
 		if(is_array($this->registered_services[$service_name])) {
 			$this->delayed_restarts[$service_name] = $action;
 		} else {
-			$app->log("Unable to add a delayed restart for '$service_name'. Service not registered.", LOGLEVEL_WARNING);
+			$app->log("Unable to add a delayed restart for '$service_name'. Service not registered.", LOGLEVEL_WARN);
 		}
 
 	}
-- 
GitLab


From c33bba3c53f913099b76d2cd7708c2cc073c18f0 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 8 Apr 2019 18:33:44 +0200
Subject: [PATCH 014/571] Fixed #5288 Wrong permissions of dkim cert folder on
 CentOS 7

---
 install/dist/lib/centos_base.lib.php | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/install/dist/lib/centos_base.lib.php b/install/dist/lib/centos_base.lib.php
index 8e6741fd69..0fe988439d 100644
--- a/install/dist/lib/centos_base.lib.php
+++ b/install/dist/lib/centos_base.lib.php
@@ -111,6 +111,25 @@ class installer_centos extends installer_dist {
 
 		removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
 		replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
+		
+		// get shell-group for amavis
+		$amavis_group=exec('grep -o "^amavis:\|^vscan:" /etc/group');
+		if(!empty($amavis_group)) {
+			$amavis_group=rtrim($amavis_group, ":");
+		}
+		// get shell-user for amavis
+		$amavis_user=exec('grep -o "^amavis:\|^vscan:" /etc/passwd');
+		if(!empty($amavis_user)) {
+			$amavis_user=rtrim($amavis_user, ":");
+		}
+		
+		// Create the director for DKIM-Keys
+		if(!is_dir('/var/lib/amavis')) mkdir('/var/lib/amavis', 0750, true);
+		if(!empty($amavis_user)) exec('chown '.$amavis_user.' /var/lib/amavis');
+		if(!empty($amavis_group)) exec('chgrp '.$amavis_group.' /var/lib/amavis');
+		if(!is_dir('/var/lib/amavis/dkim')) mkdir('/var/lib/amavis/dkim', 0750);
+		if(!empty($amavis_user)) exec('chown -R '.$amavis_user.' /var/lib/amavis/dkim');
+		if(!empty($amavis_group)) exec('chgrp -R '.$amavis_group.' /var/lib/amavis/dkim');
 
 
 	}
-- 
GitLab


From 470bb76e8cb96617c8dfbc026b3f49e68f8dca72 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 10 Apr 2019 19:08:24 +0200
Subject: [PATCH 015/571] Fix: dont use strict comparison to install server
 plugin

---
 server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
index bc88f4a198..f88cbe9c0b 100644
--- a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
+++ b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
@@ -17,7 +17,7 @@ class z_php_fpm_incron_reload_plugin {
 	function onInstall() {
 		global $conf;
 
-		return $conf['services']['web'] === true;
+		return $conf['services']['web'] == true;
 	}
 
 	function onLoad() {
-- 
GitLab


From 249241ab586b402bf2357ea530ce9ec695ccca12 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 15 Apr 2019 14:12:01 +0200
Subject: [PATCH 016/571] - using certificates command on certbot >= 0.30,
 fixes #5291

---
 server/lib/classes/letsencrypt.inc.php | 64 +++++++++++++++++++++++---
 1 file changed, 57 insertions(+), 7 deletions(-)

diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 3807149c1c..ea1e745a77 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -265,26 +265,34 @@ class letsencrypt {
 		unset($subdomains);
 		unset($aliasdomains);
 		
+		$letsencrypt_use_certcommand = false;
 		$letsencrypt_cmd = '';
+		$letsencrypt = false;
 		$success = false;
+		
+		$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
+		$letsencrypt = reset($letsencrypt);
+		if(!is_executable($letsencrypt)) {
+			$letsencrypt = false;
+		}
 		if(!empty($cli_domain_arg)) {
 			if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {
 				$app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
 				$app->log("Let's Encrypt SSL Cert domains: $cli_domain_arg", LOGLEVEL_DEBUG);
 			
-				$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
-				$letsencrypt = reset($letsencrypt);
-				if(is_executable($letsencrypt)) {
+				if($letsencrypt) {
 				    $letsencrypt_version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
                     if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $letsencrypt_version, $matches)) {
                         $letsencrypt_version = $matches[2];
                     }
-                    if ($letsencrypt_version >=0.22) {
+                    if (version_compare($letsencrypt_version, '0.22', '>=')) {
                         $acme_version = 'https://acme-v02.api.letsencrypt.org/directory';
                     } else {
                         $acme_version = 'https://acme-v01.api.letsencrypt.org/directory';
                     }
-					if ($letsencrypt_version >= 0.31) {
+					if (version_compare($letsencrypt_version, '0.30', '>=')) {
+						$app->log("LE version is " . $letsencrypt_version . ", so using certificates command", LOGLEVEL_DEBUG);
+						$letsencrypt_use_certcommand = true;
 						$webroot_map = array();
 						for($i = 0; $i < count($temp_domains); $i++) {
 							$webroot_map[$temp_domains[$i]] = '/usr/local/ispconfig/interface/acme';
@@ -302,8 +310,50 @@ class letsencrypt {
 				$success = true;
 			}
 		}
-		
-		$le_files = $this->get_letsencrypt_certificate_paths($temp_domains);
+		$le_files = array();
+		if($letsencrypt_use_certcommand === true && $letsencrypt) {
+			$letsencrypt_cmd = $letsencrypt . " certificates " . $cli_domain_arg;
+			$output = explode("\n", shell_exec($letsencrypt_cmd . " 2>/dev/null | grep -v '^\$'"));
+			$le_path = '';
+			$skip_to_next = true;
+			foreach($output as $outline) {
+				$outline = trim($outline);
+				$app->log("LE CERT OUTPUT: " . $outline, LOGLEVEL_DEBUG);
+				
+				if($skip_to_next === true && !preg_match('/^\s*Certificate Name/', $outline)) {
+					continue;
+				}
+				$skip_to_next = false;
+				
+				if(preg_match('/^\s*Expiry.*?VALID:\s+\D/', $outline)) {
+					$app->log("Found LE path is expired or invalid: " . $matches[1], LOGLEVEL_DEBUG);
+					$skip_to_next = true;
+					continue;
+				}
+				
+				if(preg_match('/^\s*Certificate Path:\s*(\/.*?)\s*$/', $outline, $matches)) {
+					$app->log("Found LE path: " . $matches[1], LOGLEVEL_DEBUG);
+					$le_path = dirname($matches[1]);
+					if(is_dir($le_path)) {
+						break;
+					} else {
+						$le_path = false;
+					}
+				}
+			}
+			
+			if($le_path) {
+				$le_files = array(
+					'privkey' => $le_path . '/privkey.pem',
+					'chain' => $le_path . '/chain.pem',
+					'cert' => $le_path . '/cert.pem',
+					'fullchain' => $le_path . '/fullchain.pem'
+				);
+			}
+		}
+		if(empty($le_files)) {
+			$le_files = $this->get_letsencrypt_certificate_paths($temp_domains);
+		}
 		unset($temp_domains);
 		
 		if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) {
-- 
GitLab


From 9490993f0712f22032cb102e8853dfbe1f8d4949 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 15 Apr 2019 15:02:14 +0200
Subject: [PATCH 017/571] Implements #5290 in stable branch: Nginx - Allow
 certbot acme challenge on auth_basic protected websites

---
 server/conf/nginx_vhost.conf.master | 1 +
 1 file changed, 1 insertion(+)

diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 63c9260354..d46da535ca 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -128,6 +128,7 @@ server {
 		location ^~ /.well-known/acme-challenge/ {
 			access_log off;
 			log_not_found off;
+			auth_basic off;
 			root /usr/local/ispconfig/interface/acme/;
 			autoindex off;
 			index index.html;
-- 
GitLab


From 5d1673ed91c4fd5bba49c11bc7eddad93b1be4ed Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 17 May 2019 17:44:17 +0200
Subject: [PATCH 018/571] Update rest.php to check if remote api is allowed.

---
 interface/web/remote/rest.php | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/interface/web/remote/rest.php b/interface/web/remote/rest.php
index d579150045..4f202c6eee 100644
--- a/interface/web/remote/rest.php
+++ b/interface/web/remote/rest.php
@@ -6,7 +6,11 @@ require_once '../../lib/config.inc.php';
 $conf['start_session'] = false;
 require_once '../../lib/app.inc.php';
 
-$app->load('rest_handler');
+$app->load('rest_handler,getconf');
+
+$security_config = $app->getconf->get_security_config('permissions');
+if($security_config['remote_api_allowed'] != 'yes') die('Remote API is disabled in security settings.');
+
 $rest_handler = new ISPConfigRESTHandler();
 $rest_handler->run();
 
-- 
GitLab


From dda2b4745ef216566bf6acd6cfad9dc07770fdfb Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 26 Jun 2019 15:36:57 +0200
Subject: [PATCH 019/571] Renewal of letsencrypt does not restart/reload nginx,
 fixes #5033

---
 server/cron.php                    |  5 ++++-
 server/lib/classes/modules.inc.php | 21 +++++++++++++++++++--
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/server/cron.php b/server/cron.php
index 6f74bd3570..cd8f08ef0a 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -69,9 +69,10 @@ $conf['server_id'] = intval($conf['server_id']);
 
 
 // Load required base-classes
-$app->uses('ini_parser,file,services,getconf,system,cron,functions');
+$app->uses('modules,ini_parser,file,services,getconf,system,cron,functions');
 $app->load('libdatetime,cronjob');
 
+$app->modules->loadModules('web');
 
 // read all cron jobs
 $path = SCRIPT_PATH . '/lib/classes/cron.d';
@@ -114,6 +115,8 @@ foreach($files as $f) {
 }
 unset($files);
 
+$app->services->processDelayedActions();
+
 // Remove lock
 @unlink($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock');
 $app->log('Remove Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock', LOGLEVEL_DEBUG);
diff --git a/server/lib/classes/modules.inc.php b/server/lib/classes/modules.inc.php
index aa95d473b2..3fd788d0a9 100644
--- a/server/lib/classes/modules.inc.php
+++ b/server/lib/classes/modules.inc.php
@@ -37,18 +37,32 @@ class modules {
 	/*
 	 This function is called to load the modules from the mods-enabled or the mods-core folder
 	*/
-	function loadModules($type) {
+	function loadModules($type = 'all') {
 		global $app, $conf;
 
 		$subPath = 'mods-enabled';
-		if ($type == 'core') $subPath = 'mods-core';
+		if ($type == 'core') {
+			$subPath = 'mods-core';
+		} elseif ($type == 'all') {
+			$type = '';
+		} elseif (!preg_match('/^\w+$/', $type)) {
+			$app->log('Invalid loadModules type ' . $type, LOGLEVEL_ERROR);
+			return false;
+		} else {
+			$subPath = 'mods-available';
+		}
 
+		$loaded = false;
 		$modules_dir = $conf['rootpath'].$conf['fs_div'].$subPath.$conf['fs_div'];
 		if (is_dir($modules_dir)) {
 			if ($dh = opendir($modules_dir)) {
 				while (($file = readdir($dh)) !== false) {
 					if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
 						$module_name = substr($file, 0, -8);
+						if($type && $type !== 'core' && $type != $module_name) {
+							continue;
+						}
+						$loaded = true;
 						include_once $modules_dir.$file;
 						if($this->debug) $app->log('Loading Module: '.$module_name, LOGLEVEL_DEBUG);
 						$app->loaded_modules[$module_name] = new $module_name;
@@ -60,6 +74,9 @@ class modules {
 			$app->log('Modules directory missing: '.$modules_dir, LOGLEVEL_ERROR);
 		}
 
+		if($type && $type !== 'core' && $loaded === false) {
+			$app->log('Module ' . $type . ' not found.', LOGLEVEL_ERROR);
+		}
 	}
 
 	/*
-- 
GitLab


From 9ceff3c13b9dbace5b4ee9acae2b76c8611fc603 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 26 Jun 2019 15:44:08 +0200
Subject: [PATCH 020/571] LE Renewal issue on systems that use the relative
 symlink option for websites, fixes #5326

---
 server/lib/classes/letsencrypt.inc.php | 24 ++++++------------------
 server/lib/classes/system.inc.php      |  2 +-
 2 files changed, 7 insertions(+), 19 deletions(-)

diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index ea1e745a77..583e1c25bb 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -388,12 +388,8 @@ class letsencrypt {
 				$app->system->unlink($key_file);
 			}
 
-			if ($web_config["website_symlinks_rel"] == 'y') {
-				$app->system->create_relative_link(escapeshellcmd($key_tmp_file), escapeshellcmd($key_file));
-			} else {
-				if(@is_link($key_file)) $app->system->unlink($key_file);
-				if(@file_exists($key_tmp_file)) exec("ln -s ".escapeshellcmd($key_tmp_file)." ".escapeshellcmd($key_file));
-			}
+			if(@is_link($key_file)) $app->system->unlink($key_file);
+			if(@file_exists($key_tmp_file)) exec("ln -s ".escapeshellcmd($key_tmp_file)." ".escapeshellcmd($key_file));
 
 			if(is_file($crt_file)) {
 				$app->system->copy($crt_file, $crt_file.'.old.'.$date);
@@ -401,12 +397,8 @@ class letsencrypt {
 				$app->system->unlink($crt_file);
 			}
 
-			if($web_config["website_symlinks_rel"] == 'y') {
-				$app->system->create_relative_link(escapeshellcmd($crt_tmp_file), escapeshellcmd($crt_file));
-			} else {
-				if(@is_link($crt_file)) $app->system->unlink($crt_file);
-				if(@file_exists($crt_tmp_file))exec("ln -s ".escapeshellcmd($crt_tmp_file)." ".escapeshellcmd($crt_file));
-			}
+			if(@is_link($crt_file)) $app->system->unlink($crt_file);
+			if(@file_exists($crt_tmp_file))exec("ln -s ".escapeshellcmd($crt_tmp_file)." ".escapeshellcmd($crt_file));
 
 			if(is_file($bundle_file)) {
 				$app->system->copy($bundle_file, $bundle_file.'.old.'.$date);
@@ -414,12 +406,8 @@ class letsencrypt {
 				$app->system->unlink($bundle_file);
 			}
 
-			if($web_config["website_symlinks_rel"] == 'y') {
-				$app->system->create_relative_link(escapeshellcmd($bundle_tmp_file), escapeshellcmd($bundle_file));
-			} else {
-				if(@is_link($bundle_file)) $app->system->unlink($bundle_file);
-				if(@file_exists($bundle_tmp_file)) exec("ln -s ".escapeshellcmd($bundle_tmp_file)." ".escapeshellcmd($bundle_file));
-			}
+			if(@is_link($bundle_file)) $app->system->unlink($bundle_file);
+			if(@file_exists($bundle_tmp_file)) exec("ln -s ".escapeshellcmd($bundle_tmp_file)." ".escapeshellcmd($bundle_file));
 			
 			return true;
 		} else {
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index f4d94743a1..5c277ada1a 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -918,7 +918,7 @@ class system{
 
 		// Add ($cnt_to-1) number of "../" elements to left side of $cfrom
 		for ($c = 0; $c < (count($a2)-1); $c++) { $cfrom = '../'.$cfrom; }
-		if(strstr($to,'/etc/letsencrypt/archive/')) $to = str_replace('/etc/letsencrypt/archive/','/etc/letsencrypt/live/',$to);
+		//if(strstr($to,'/etc/letsencrypt/archive/')) $to = str_replace('/etc/letsencrypt/archive/','/etc/letsencrypt/live/',$to);
 
 		return symlink($cfrom, $to);
 	}
-- 
GitLab


From eab22adbf98b61b3c4802b0ee72640f76784a721 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 26 Jun 2019 15:48:54 +0200
Subject: [PATCH 021/571] Addition to commit dda2b474 for #5033

---
 server/cron.php                                   | 2 --
 server/lib/classes/cron.d/900-letsencrypt.inc.php | 1 +
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/server/cron.php b/server/cron.php
index cd8f08ef0a..ba59ff4049 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -72,8 +72,6 @@ $conf['server_id'] = intval($conf['server_id']);
 $app->uses('modules,ini_parser,file,services,getconf,system,cron,functions');
 $app->load('libdatetime,cronjob');
 
-$app->modules->loadModules('web');
-
 // read all cron jobs
 $path = SCRIPT_PATH . '/lib/classes/cron.d';
 if(!is_dir($path)) die('Cron path missing!');
diff --git a/server/lib/classes/cron.d/900-letsencrypt.inc.php b/server/lib/classes/cron.d/900-letsencrypt.inc.php
index d03d4a184a..30a23fe973 100644
--- a/server/lib/classes/cron.d/900-letsencrypt.inc.php
+++ b/server/lib/classes/cron.d/900-letsencrypt.inc.php
@@ -44,6 +44,7 @@ class cronjob_letsencrypt extends cronjob {
 	public function onBeforeRun() {
 		global $app;
 
+		$app->modules->loadModules('web_module');
 		return parent::onBeforeRun();
 	}
 
-- 
GitLab


From 7ca2762dc01c8aeb2f0fef6bb404a5468714bf5b Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 26 Jun 2019 16:05:30 +0200
Subject: [PATCH 022/571] Syntax errors in PHP 5.3.3, fixes #5129

---
 interface/lib/app.inc.php                    | 3 ++-
 interface/web/dns/dns_caa_edit.php           | 3 ++-
 interface/web/mail/ajax_get_json.php         | 6 +++++-
 interface/web/sites/database_quota_stats.php | 3 ++-
 4 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index ccc80fd254..b02ae8526d 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -335,7 +335,8 @@ class app {
 	}
 	
 	private function get_cookie_domain() {
-		$proxy_panel_allowed = $this->getconf->get_security_config('permissions')['reverse_proxy_panel_allowed'];
+		$sec_config = $this->getconf->get_security_config('permissions');
+		$proxy_panel_allowed = $sec_config['reverse_proxy_panel_allowed'];
 		if ($proxy_panel_allowed == 'all') {
 			return '';
 		}
diff --git a/interface/web/dns/dns_caa_edit.php b/interface/web/dns/dns_caa_edit.php
index c3d8618414..0151600e48 100644
--- a/interface/web/dns/dns_caa_edit.php
+++ b/interface/web/dns/dns_caa_edit.php
@@ -165,7 +165,8 @@ class page_action extends tform_actions {
 
 		// Set name
 		if($this->dataRecord['additional'] != '') {
-			$temp = explode(',', $this->dataRecord['additional'])[0]; // if we have more hostnames the interface-plugin will be used
+			$temp = explode(',', $this->dataRecord['additional']);
+			$temp = $temp[0]; // if we have more hostnames the interface-plugin will be used
 			$temp = trim($temp,'.');
 			if(trim($temp != '')) $this->dataRecord['name'] = $temp.'.'.$this->dataRecord['name'];
 			unset($temp);
diff --git a/interface/web/mail/ajax_get_json.php b/interface/web/mail/ajax_get_json.php
index 2a1a756167..17fd4cf45a 100644
--- a/interface/web/mail/ajax_get_json.php
+++ b/interface/web/mail/ajax_get_json.php
@@ -40,7 +40,11 @@ $domain_id = $_GET['domain_id'];
 if($type == 'create_dkim' && $domain_id != ''){
 	$dkim_public = $_GET['dkim_public'];
 	$dkim_selector = $_GET['dkim_selector'];
-	$domain=@(is_numeric($domain_id))?$app->db->queryOneRecord("SELECT domain FROM domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), $domain_id)['domain']:$domain_id;
+	$domain = $domain_id;
+	if(is_numeric($domain_id)) {
+		$temp = $app->db->queryOneRecord("SELECT domain FROM domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), $domain_id);
+		$domain = $temp['domain'];
+	}
 	$rec = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ?", $domain);
 	$server_id = $rec['server_id'];
 	$maildomain = $rec['domain'];
diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php
index 148aa127ae..5f550cf8d1 100644
--- a/interface/web/sites/database_quota_stats.php
+++ b/interface/web/sites/database_quota_stats.php
@@ -83,7 +83,8 @@ class list_action extends listform_actions {
 		} else {
 			$web_database = $app->db->queryOneRecord("SELECT * FROM web_database WHERE database_id = ?", $rec[$this->idx_key]);
 			$rec['database'] = $rec['database_name'];
-			$rec['server_name'] = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $web_database['server_id'])['server_name'];
+			$temp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $web_database['server_id']);
+			$rec['server_name'] = $temp['server_name'];
 			$sys_group = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE groupid = ?", $web_database['sys_groupid']);
 			$client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", $sys_group['client_id']);
 			$rec['client'] = $client['username'];
-- 
GitLab


From 23ca8059e5407b7606b0b3e9df5a8c8d7cd915d8 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 26 Jun 2019 17:05:00 +0200
Subject: [PATCH 023/571] - added missing load for modules lib

---
 server/cron_debug.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/cron_debug.php b/server/cron_debug.php
index 615a56d743..2ab9289d26 100644
--- a/server/cron_debug.php
+++ b/server/cron_debug.php
@@ -39,7 +39,7 @@ ini_set('error_reporting', E_ALL & ~E_NOTICE);
 $conf['server_id'] = intval($conf['server_id']);
 
 // Load required base-classes
-$app->uses('ini_parser,file,services,getconf,system,cron,functions');
+$app->uses('modules,ini_parser,file,services,getconf,system,cron,functions');
 $app->load('libdatetime,cronjob');
 
 // Path settings
-- 
GitLab


From cb984ca1d806d32fa7b334347ca846f4ba70fd80 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 28 Jun 2019 16:03:48 +0200
Subject: [PATCH 024/571] Add support for Debian 10 (Buster) to OS detection
 code.

---
 install/dist/conf/debian100.conf.php     | 234 +++++++++++++++++++++++
 install/dist/conf/debiantesting.conf.php |  22 ++-
 install/lib/install.lib.php              |   9 +-
 server/lib/classes/monitor_tools.inc.php |  12 +-
 4 files changed, 266 insertions(+), 11 deletions(-)
 create mode 100644 install/dist/conf/debian100.conf.php

diff --git a/install/dist/conf/debian100.conf.php b/install/dist/conf/debian100.conf.php
new file mode 100644
index 0000000000..28d82b8079
--- /dev/null
+++ b/install/dist/conf/debian100.conf.php
@@ -0,0 +1,234 @@
+<?php
+
+/*
+Copyright (c) 2016, Till Brehm, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+//***  Debian 10 default settings
+
+//* Main
+$conf['language'] = 'en';
+$conf['distname'] = 'debian100';
+$conf['hostname'] = 'server1.domain.tld'; // Full hostname
+$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
+$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
+$conf['server_id'] = 1;
+$conf['init_scripts'] = '/etc/init.d';
+$conf['runlevel'] = '/etc';
+$conf['shells'] = '/etc/shells';
+$conf['pam'] = '/etc/pam.d';
+
+//* Services provided by this server, this selection will be overridden by the expert mode
+$conf['services']['mail'] = true;
+$conf['services']['web'] = true;
+$conf['services']['dns'] = true;
+$conf['services']['file'] = true;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = true;
+$conf['services']['proxy'] = false;
+$conf['services']['firewall'] = false;
+
+//* MySQL
+$conf['mysql']['installed'] = false; // will be detected automatically during installation
+$conf['mysql']['init_script'] = 'mysql';
+$conf['mysql']['host'] = 'localhost';
+$conf['mysql']['ip'] = '127.0.0.1';
+$conf['mysql']['port'] = '3306';
+$conf['mysql']['database'] = 'dbispconfig';
+$conf['mysql']['admin_user'] = 'root';
+$conf['mysql']['admin_password'] = '';
+$conf['mysql']['charset'] = 'utf8';
+$conf['mysql']['ispconfig_user'] = 'ispconfig';
+$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
+$conf['mysql']['master_slave_setup'] = 'n';
+$conf['mysql']['master_host'] = '';
+$conf['mysql']['master_database'] = 'dbispconfig';
+$conf['mysql']['master_admin_user'] = 'root';
+$conf['mysql']['master_admin_password'] = '';
+$conf['mysql']['master_ispconfig_user'] = '';
+$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
+
+//* Apache
+$conf['apache']['installed'] = false; // will be detected automatically during installation
+$conf['apache']['user'] = 'www-data';
+$conf['apache']['group'] = 'www-data';
+$conf['apache']['init_script'] = 'apache2';
+$conf['apache']['version'] = '2.4';
+$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
+$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
+$conf['apache']['vhost_port'] = '8080';
+$conf['apache']['php_ini_path_apache'] = '/etc/php/7.3/apache2/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.3/cgi/php.ini';
+
+//* Website base settings
+$conf['web']['website_basedir'] = '/var/www';
+$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
+$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
+
+//* Apps base settings
+$conf['web']['apps_vhost_ip'] = '_default_';
+$conf['web']['apps_vhost_port'] = '8081';
+$conf['web']['apps_vhost_servername'] = '';
+$conf['web']['apps_vhost_user'] = 'ispapps';
+$conf['web']['apps_vhost_group'] = 'ispapps';
+
+//* Fastcgi
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.3/cgi/';
+$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
+$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
+
+//* Postfix
+$conf['postfix']['installed'] = false; // will be detected automatically during installation
+$conf['postfix']['config_dir'] = '/etc/postfix';
+$conf['postfix']['init_script'] = 'postfix';
+$conf['postfix']['user'] = 'postfix';
+$conf['postfix']['group'] = 'postfix';
+$conf['postfix']['vmail_userid'] = '5000';
+$conf['postfix']['vmail_username'] = 'vmail';
+$conf['postfix']['vmail_groupid'] = '5000';
+$conf['postfix']['vmail_groupname'] = 'vmail';
+$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
+
+//* Mailman
+$conf['mailman']['installed'] = false; // will be detected automatically during installation
+$conf['mailman']['config_dir'] = '/etc/mailman';
+$conf['mailman']['init_script'] = 'mailman';
+
+//* mlmmj
+$conf['mlmmj']['installed'] = false; // will be detected automatically during installation
+$conf['mlmmj']['config_dir'] = '/etc/mlmmj';
+
+//* Getmail
+$conf['getmail']['installed'] = false; // will be detected automatically during installation
+$conf['getmail']['config_dir'] = '/etc/getmail';
+$conf['getmail']['program'] = '/usr/bin/getmail';
+
+//* Courier
+$conf['courier']['installed'] = false; // will be detected automatically during installation
+$conf['courier']['config_dir'] = '/etc/courier';
+$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
+$conf['courier']['courier-imap'] = 'courier-imap';
+$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
+$conf['courier']['courier-pop'] = 'courier-pop';
+$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
+
+//* Dovecot
+$conf['dovecot']['installed'] = false; // will be detected automatically during installation
+$conf['dovecot']['config_dir'] = '/etc/dovecot';
+$conf['dovecot']['init_script'] = 'dovecot';
+
+//* SASL
+$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
+$conf['saslauthd']['config'] = '/etc/default/saslauthd';
+$conf['saslauthd']['init_script'] = 'saslauthd';
+
+//* Amavisd
+$conf['amavis']['installed'] = false; // will be detected automatically during installation
+$conf['amavis']['config_dir'] = '/etc/amavis';
+$conf['amavis']['init_script'] = 'amavis';
+
+//* ClamAV
+$conf['clamav']['installed'] = false; // will be detected automatically during installation
+$conf['clamav']['init_script'] = 'clamav-daemon';
+
+//* Pureftpd
+$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
+$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
+$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
+
+//* MyDNS
+$conf['mydns']['installed'] = false; // will be detected automatically during installation
+$conf['mydns']['config_dir'] = '/etc';
+$conf['mydns']['init_script'] = 'mydns';
+
+//* PowerDNS
+$conf['powerdns']['installed'] = false; // will be detected automatically during installation
+$conf['powerdns']['database'] = 'powerdns';
+$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
+$conf['powerdns']['init_script'] = 'pdns';
+
+//* BIND DNS Server
+$conf['bind']['installed'] = false; // will be detected automatically during installation
+$conf['bind']['bind_user'] = 'root';
+$conf['bind']['bind_group'] = 'bind';
+$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
+$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
+$conf['bind']['init_script'] = 'bind9';
+
+//* Jailkit
+$conf['jailkit']['installed'] = false; // will be detected automatically during installation
+$conf['jailkit']['config_dir'] = '/etc/jailkit';
+$conf['jailkit']['jk_init'] = 'jk_init.ini';
+$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
+$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch';
+$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
+
+//* Squid
+$conf['squid']['installed'] = false; // will be detected automatically during installation
+$conf['squid']['config_dir'] = '/etc/squid';
+$conf['squid']['init_script'] = 'squid';
+
+//* Nginx
+$conf['nginx']['installed'] = false; // will be detected automatically during installation
+$conf['nginx']['user'] = 'www-data';
+$conf['nginx']['group'] = 'www-data';
+$conf['nginx']['config_dir'] = '/etc/nginx';
+$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
+$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
+$conf['nginx']['init_script'] = 'nginx';
+$conf['nginx']['vhost_port'] = '8080';
+$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
+$conf['nginx']['php_fpm_init_script'] = 'php7.3-fpm';
+$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.3/fpm/php.ini';
+$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.3/fpm/pool.d';
+$conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.3-fpm';
+
+//* OpenVZ
+$conf['openvz']['installed'] = false;
+
+//*Bastille-Firwall
+$conf['bastille']['installed'] = false;
+$conf['bastille']['config_dir'] = '/etc/Bastille';
+
+//* vlogger
+$conf['vlogger']['config_dir'] = '/etc';
+
+//* cron
+$conf['cron']['init_script'] = 'cron';
+$conf['cron']['crontab_dir'] = '/etc/cron.d';
+$conf['cron']['wget'] = '/usr/bin/wget';
+
+//* Metronome XMPP
+$conf['xmpp']['installed'] = false;
+$conf['xmpp']['init_script'] = 'metronome';
+
+
+?>
diff --git a/install/dist/conf/debiantesting.conf.php b/install/dist/conf/debiantesting.conf.php
index 92787bf428..5e5e32f474 100644
--- a/install/dist/conf/debiantesting.conf.php
+++ b/install/dist/conf/debiantesting.conf.php
@@ -28,11 +28,11 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
-//***  Ubuntu 16.04 default settings
+//***  Debian Testing default settings
 
 //* Main
 $conf['language'] = 'en';
-$conf['distname'] = 'ubuntu1604';
+$conf['distname'] = 'debian100';
 $conf['hostname'] = 'server1.domain.tld'; // Full hostname
 $conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
 $conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
@@ -83,8 +83,8 @@ $conf['apache']['version'] = '2.4';
 $conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
 $conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
 $conf['apache']['vhost_port'] = '8080';
-$conf['apache']['php_ini_path_apache'] = '/etc/php/7.0/apache2/php.ini';
-$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.0/cgi/php.ini';
+$conf['apache']['php_ini_path_apache'] = '/etc/php/7.3/apache2/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.3/cgi/php.ini';
 
 //* Website base settings
 $conf['web']['website_basedir'] = '/var/www';
@@ -99,7 +99,7 @@ $conf['web']['apps_vhost_user'] = 'ispapps';
 $conf['web']['apps_vhost_group'] = 'ispapps';
 
 //* Fastcgi
-$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.0/cgi/';
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.3/cgi/';
 $conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
 $conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
 
@@ -120,6 +120,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during
 $conf['mailman']['config_dir'] = '/etc/mailman';
 $conf['mailman']['init_script'] = 'mailman';
 
+//* mlmmj
+$conf['mlmmj']['installed'] = false; // will be detected automatically during installation
+$conf['mlmmj']['config_dir'] = '/etc/mlmmj';
+
 //* Getmail
 $conf['getmail']['installed'] = false; // will be detected automatically during installation
 $conf['getmail']['config_dir'] = '/etc/getmail';
@@ -201,11 +205,11 @@ $conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
 $conf['nginx']['init_script'] = 'nginx';
 $conf['nginx']['vhost_port'] = '8080';
 $conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
-$conf['nginx']['php_fpm_init_script'] = 'php7.0-fpm';
-$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.0/fpm/php.ini';
-$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.0/fpm/pool.d';
+$conf['nginx']['php_fpm_init_script'] = 'php7.3-fpm';
+$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.3/fpm/php.ini';
+$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.3/fpm/pool.d';
 $conf['nginx']['php_fpm_start_port'] = 9010;
-$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.0-fpm';
+$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.3-fpm';
 
 //* OpenVZ
 $conf['openvz']['installed'] = false;
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 933c30fe38..6b3a7cd623 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -227,6 +227,13 @@ function get_distname() {
 			$distid = 'debian60';
 			$distbaseid = 'debian';
 			swriteln("Operating System: Debian 9.0 (Stretch) or compatible\n");
+		} elseif(substr(trim(file_get_contents('/etc/debian_version')),0,2) == '10') {
+			$distname = 'Debian';
+			$distver = 'Buster';
+			$distconfid = 'debian100';
+			$distid = 'debian60';
+			$distbaseid = 'debian';
+			swriteln("Operating System: Debian 10.0 (Buster) or compatible\n");
 		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) {
 			$distname = 'Debian';
 			$distver = 'Testing';
@@ -238,7 +245,7 @@ function get_distname() {
 			$distname = 'Debian';
 			$distver = 'Unknown';
 			$distid = 'debian60';
-			$distconfid = 'debian90';
+			$distconfid = 'debian100';
 			$distbaseid = 'debian';
 			swriteln("Operating System: Debian or compatible, unknown version.\n");
 		}
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index c4a60702b2..a15514fd72 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -211,17 +211,27 @@ class monitor_tools {
 			$distconfid = 'debian90';
 			$distid = 'debian60';
 			$distbaseid = 'debian';
+		} elseif(substr(trim(file_get_contents('/etc/debian_version')),0,2) == '10') {
+			$distname = 'Debian';
+			$distver = 'Buster';
+			$distconfid = 'debian100';
+			$distid = 'debian60';
+			$distbaseid = 'debian';
+			swriteln("Operating System: Debian 10.0 (Buster) or compatible\n");
 		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) {
 			$distname = 'Debian';
 			$distver = 'Testing';
 			$distid = 'debian60';
 			$distconfid = 'debiantesting';
 			$distbaseid = 'debian';
+			swriteln("Operating System: Debian Testing\n");
 		} else {
 			$distname = 'Debian';
 			$distver = 'Unknown';
-			$distid = 'debian40';
+			$distid = 'debian60';
+			$distconfid = 'debian100';
 			$distbaseid = 'debian';
+			swriteln("Operating System: Debian or compatible, unknown version.\n");
 		}
 	}
 
-- 
GitLab


From 70c53657aa5ccf1eac53164a1ca941e2151382d4 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 12:01:43 +0200
Subject: [PATCH 025/571] Fixed #5313 Extend custom php.ini check regex

---
 interface/web/sites/web_vhost_domain_edit.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 8d43e21fad..3d6ecc6fb8 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -1301,7 +1301,7 @@ class page_action extends tform_actions {
 					// value inside ''
 					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*\'.*\'\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
 					// everything else
-					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s\|]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
 					$custom_php_ini_settings_are_valid = false;
 					break;
 				}
-- 
GitLab


From c6bf185c613df0f998c2858d0f0985feb1236edd Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 12:02:29 +0200
Subject: [PATCH 026/571] Added SSL SMTP port 465 to default ports in ISPConfig
 Firewall.

---
 interface/web/admin/form/firewall.tform.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/admin/form/firewall.tform.php b/interface/web/admin/form/firewall.tform.php
index ce7d2dbd09..75f190b3f0 100644
--- a/interface/web/admin/form/firewall.tform.php
+++ b/interface/web/admin/form/firewall.tform.php
@@ -79,7 +79,7 @@ $form["tabs"]['firewall'] = array (
 					'regex' => '/^[\s0-9\,\:]{0,255}$/',
 					'errmsg'=> 'tcp_ports_error_regex'),
 			),
-			'default' => '20,21,22,25,53,80,110,143,443,587,993,995,3306,8080,8081,10000',
+			'default' => '20,21,22,25,53,80,110,143,443,465,587,993,995,3306,8080,8081,10000',
 			'value'  => '',
 			'width'  => '30',
 			'maxlength' => '255'
-- 
GitLab


From b772b1b26c7fa3490997e67c271fba2c83bb1b38 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 12:26:58 +0200
Subject: [PATCH 027/571] Implemented #5303 database Backup including routines

---
 server/lib/classes/cron.d/500-backup.inc.php | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index fa57431116..77b355fe6e 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -225,6 +225,11 @@ class cronjob_backup extends cronjob {
 				if(is_array($records)) {
 
 					include '/usr/local/ispconfig/server/lib/mysql_clientdb.conf';
+					
+					//* Check mysqldump capabilities
+					exec('mysqldump --help',$tmp);
+					$mysqldump_routines = (strpos(implode($tmp),'--routines') !== false)?'--routines':'';
+					unset($tmp);
 
 					foreach($records as $rec) {
 
@@ -252,7 +257,7 @@ class cronjob_backup extends cronjob {
 							$db_name = $rec['database_name'];
 							$db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql';
 							//$command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
-							$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." -c --add-drop-table --create-options --quick --max_allowed_packet=512M --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
+							$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." -c --add-drop-table --create-options --quick --max_allowed_packet=512M ".$mysqldump_routines." --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
 							exec($command, $tmp_output, $retval);
 
 							//* Compress the backup with gzip / pigz
-- 
GitLab


From 8c08db9bf18f7fb2e126a06de63cda3bdc1e5ef7 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 12:31:09 +0200
Subject: [PATCH 028/571] Fixed #5293 If an email is submitted via SMTPUTF8 it
 will bounce

---
 install/tpl/amavisd_user_config.master | 1 -
 1 file changed, 1 deletion(-)

diff --git a/install/tpl/amavisd_user_config.master b/install/tpl/amavisd_user_config.master
index 8663f07498..2738eac3a9 100644
--- a/install/tpl/amavisd_user_config.master
+++ b/install/tpl/amavisd_user_config.master
@@ -83,7 +83,6 @@ $notify_method = 'smtp:127.0.0.1:*';
 $interface_policy{'10026'} = 'ORIGINATING';
 $policy_bank{'ORIGINATING'} = {
   originating => 1,
-  smtpd_discard_ehlo_keywords => ['8BITMIME'],
 };
 
 # IP-Addresses for internal networks => load policy MYNETS
-- 
GitLab


From 7a62b126634da6b1375ecff57d1ea34ef4590317 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 12:58:05 +0200
Subject: [PATCH 029/571] Fixed #5070 Firewall > Character not allowed in tcp
 port definition

---
 install/sql/incremental/upd_dev_collection.sql | 4 +++-
 install/sql/ispconfig3.sql                     | 4 ++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 279d3ce211..55e3b846d7 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -80,4 +80,6 @@ INSERT IGNORE INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_us
 
 ALTER TABLE `dns_soa` CHANGE `xfer` `xfer` TEXT NULL;
 ALTER TABLE `dns_soa` CHANGE `also_notify` `also_notify` TEXT NULL;
-ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;
\ No newline at end of file
+ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;
+ALTER TABLE `firewall` CHANGE `tcp_port` `tcp_port` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
+ALTER TABLE `firewall` CHANGE `udp_port` `udp_port` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 4cfaebb396..b547a93dfc 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -682,8 +682,8 @@ CREATE TABLE `firewall` (
   `sys_perm_group` varchar(5) default NULL,
   `sys_perm_other` varchar(5) default NULL,
   `server_id` int(11) unsigned NOT NULL default '0',
-  `tcp_port` varchar(255) default NULL,
-  `udp_port` varchar(255) default NULL,
+  `tcp_port` text,
+  `udp_port` text,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`firewall_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- 
GitLab


From f6150fe64813bd442bb09c69987ca38fcdaf9489 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 13:11:53 +0200
Subject: [PATCH 030/571] Fixed #4353 Layout Issues

---
 interface/lib/classes/listform_actions.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/classes/listform_actions.inc.php b/interface/lib/classes/listform_actions.inc.php
index a13c3fdb73..1b8426b894 100644
--- a/interface/lib/classes/listform_actions.inc.php
+++ b/interface/lib/classes/listform_actions.inc.php
@@ -264,7 +264,7 @@ class listform_actions {
 		foreach($limits as $key => $val){
 			$options .= '<option value="'.$key.'" '.(isset($_SESSION['search']['limit']) &&  $_SESSION['search']['limit'] == $key ? 'selected="selected"':'' ).(!isset($_SESSION['search']['limit']) && $key == '15' ? 'selected="selected"':'').'>'.$val.'</option>';
 		}
-		$app->tpl->setVar('search_limit', '<select name="search_limit" class="search_limit">'.$options.'</select>');
+		$app->tpl->setVar('search_limit', '<select name="search_limit" class="search_limit" style="width: 60px;">'.$options.'</select>');
 
 		$app->tpl->setVar('toolsarea_head_txt', $app->lng('toolsarea_head_txt'));
 		$app->tpl->setVar($app->listform->wordbook);
-- 
GitLab


From b019e483854d7d634fafac06353659b6ba673b2b Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 14:01:57 +0200
Subject: [PATCH 031/571] Fixed #4946 Problems with email starst not being
 written into the database.

---
 server/lib/classes/cron.d/100-mailbox_stats.inc.php | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/server/lib/classes/cron.d/100-mailbox_stats.inc.php b/server/lib/classes/cron.d/100-mailbox_stats.inc.php
index e5a0065a5b..51c3a45489 100644
--- a/server/lib/classes/cron.d/100-mailbox_stats.inc.php
+++ b/server/lib/classes/cron.d/100-mailbox_stats.inc.php
@@ -173,6 +173,10 @@ class cronjob_mailbox_stats extends cronjob {
 							continue;
 						}
 					}
+					
+					$this->mail_boxes = $mail_boxes;
+				    $this->mail_rewrites = $mail_rewrites;
+					
 					$this->add_mailbox_traffic($cur_line['from'], $cur_line['size'],$mail_boxes, $mail_rewrites);
 					//echo "1\n";
 					//print_r($this->mailbox_traffic);
@@ -221,6 +225,7 @@ class cronjob_mailbox_stats extends cronjob {
 			$tstamp = date('Y-m');
 			$sql = "SELECT mailuser_id,email FROM mail_user WHERE server_id = ?";
 			$records = $app->db->queryAllRecords($sql, $conf['server_id']);
+			$mailbox_traffic = $this->mailbox_traffic;
 			foreach($records as $rec) {
 				if(array_key_exists($rec['email'], $mailbox_traffic)) {
 					$sql = "SELECT * FROM mail_traffic WHERE month = ? AND mailuser_id = ?";
-- 
GitLab


From 373a9f2b9fd5b011ebfc4bf5b70f6af3f15e1eb3 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 14:50:37 +0200
Subject: [PATCH 032/571] implemented #5116 Cronjob on Jailkit Environment is
 not executed

---
 server/scripts/create_jailkit_user.sh | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/server/scripts/create_jailkit_user.sh b/server/scripts/create_jailkit_user.sh
index 5e1060be25..efefafe3ea 100755
--- a/server/scripts/create_jailkit_user.sh
+++ b/server/scripts/create_jailkit_user.sh
@@ -21,6 +21,12 @@ CHROOT_SHELL=$4
 CHROOT_P_USER=$5
 CHROOT_P_USER_HOMEDIR=$6
 
+### Check if USERHOMEDIR already exists ###
+if [ ! -d $CHROOT_HOMEDIR/.$CHROOT_USERHOMEDIR ]; then
+ mkdir -p $CHROOT_HOMEDIR/.$CHROOT_USERHOMEDIR
+ chown -R $CHROOT_USERNAME $CHROOT_HOMEDIR/.$CHROOT_USERHOMEDIR
+fi
+
 ### Reconfigure the chroot home directory for the user ###
 usermod --home=$CHROOT_HOMEDIR/.$CHROOT_USERHOMEDIR $CHROOT_USERNAME 2>/dev/null
 
-- 
GitLab


From f1374f877a27ed182b072009260b1d5b40f9da29 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 15:50:34 +0200
Subject: [PATCH 033/571] Fixed #5225 ISPConfig fails to create ispconfig user
 during initial installation with MySQL 8.0

---
 install/lib/installer_base.lib.php | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 2c99f1bd0b..1c32c64984 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -288,11 +288,15 @@ class installer_base {
 		$this->db->query("DROP USER ?@?", $conf['mysql']['ispconfig_user'], $from_host);
 		$this->db->query("DROP DATABASE IF EXISTS ?", $conf['mysql']['database']);
 
-		//* Create the ISPConfig database user in the local database
-		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON ?? TO ?@? IDENTIFIED BY ?';
-		if(!$this->db->query($query, $conf['mysql']['database'] . ".*", $conf['mysql']['ispconfig_user'], $from_host, $conf['mysql']['ispconfig_password'])) {
+		//* Create the ISPConfig database user and grant permissions in the local database
+		$query = 'CREATE USER ?@? IDENTIFIED BY ?';
+		if(!$this->db->query($query, $conf['mysql']['ispconfig_user'], $from_host, $conf['mysql']['ispconfig_password'])) {
 			$this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
 		}
+		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON ?? TO ?@?';
+		if(!$this->db->query($query, $conf['mysql']['database'] . ".*", $conf['mysql']['ispconfig_user'], $from_host)) {
+			$this->error('Unable to grant databse permissions to user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
+		}
 
 		//* Set the database name in the DB library
 		$this->db->setDBName($conf['mysql']['database']);
-- 
GitLab


From de0ecf8f0a55e090ce0b5a66817437959b7c5848 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 3 Jul 2019 16:48:36 +0200
Subject: [PATCH 034/571] Fixed #5248 ISPConfig user login database record not
 created on percona DB

---
 interface/web/client/client_edit.php   | 2 +-
 interface/web/client/reseller_edit.php | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/client/client_edit.php b/interface/web/client/client_edit.php
index 8577a1b32d..bbc7849f1f 100644
--- a/interface/web/client/client_edit.php
+++ b/interface/web/client/client_edit.php
@@ -266,7 +266,7 @@ class page_action extends tform_actions {
 		$app->functions->generate_ssh_key($this->id, $username);
 
 		// Create the controlpaneluser for the client
-		$sql = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
+		$sql = "INSERT INTO sys_user (`username`,`passwort`,`modules`,`startmodule`,`app_theme`,`typ`,`active`,`language`,`groups`,`default_group`,`client_id`)
 		VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 		$app->db->query($sql, $username, $password, $modules, $startmodule, $usertheme, $type, $active, $language, $groups, $groupid, $this->id);
 
diff --git a/interface/web/client/reseller_edit.php b/interface/web/client/reseller_edit.php
index 7a84be5253..a089558cab 100644
--- a/interface/web/client/reseller_edit.php
+++ b/interface/web/client/reseller_edit.php
@@ -222,7 +222,7 @@ class page_action extends tform_actions {
 		$password = crypt(stripslashes($password), $salt);
 
 		// Create the controlpaneluser for the reseller
-		$sql = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
+		$sql = "INSERT INTO sys_user (`username`,`passwort`,`modules`,`startmodule`,`app_theme`,`typ,active`,`language`,`groups`,`default_group`,`client_id`)
 		VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 		$app->db->query($sql, $username, $password, $modules, $startmodule, $usertheme, $type, $active, $language, $groups, $groupid, $this->id);
 
-- 
GitLab


From cc87da34d2434a0e5d167d07034f19fcabe7c78f Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Wed, 3 Jul 2019 17:01:12 +0200
Subject: [PATCH 035/571] Add a space after ***SPAM***

The spamassassin default also has a space, like in install/tpl/amavisd_user_config.master
---
 install/sql/ispconfig3.sql                        | 2 +-
 interface/web/mail/form/mail_spamfilter.tform.php | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index b547a93dfc..2417ef0d21 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2521,7 +2521,7 @@ INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_us
 INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM*** ', NULL, NULL);
 INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 
diff --git a/interface/web/mail/form/mail_spamfilter.tform.php b/interface/web/mail/form/mail_spamfilter.tform.php
index fb9a3c311b..d726a3eb74 100644
--- a/interface/web/mail/form/mail_spamfilter.tform.php
+++ b/interface/web/mail/form/mail_spamfilter.tform.php
@@ -114,7 +114,7 @@ $form["tabs"]['spamfilter'] = array (
 					1 => array( 'event' => 'SAVE',
 					'type' => 'STRIPNL')
 			),
-			'default' => '***SPAM***',
+			'default' => '***SPAM*** ',
 			'value'  => '',
 			'width'  => '30',
 			'maxlength' => '255'
-- 
GitLab


From 1a5608d1320160e55e665146cfba6d8119199e59 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 4 Jul 2019 18:07:18 +0200
Subject: [PATCH 036/571] Implemented #5330 Limit available PHP Handlers
 globally in ISPConfig UI

---
 install/tpl/system.ini.master                 |   1 +
 interface/lib/classes/tform_base.inc.php      | 123 ++++++++++--------
 .../web/admin/form/system_config.tform.php    |  10 ++
 .../web/admin/lib/lang/de_system_config.lng   |   1 +
 .../web/admin/lib/lang/en_system_config.lng   |   1 +
 .../web/admin/lib/lang/es_system_config.lng   |   1 +
 .../templates/server_config_web_edit.htm      |   2 +-
 .../templates/system_config_sites_edit.htm    |   6 +
 interface/web/client/form/client.tform.php    |   2 +-
 .../web/client/form/client_template.tform.php |   2 +-
 interface/web/client/form/reseller.tform.php  |   1 +
 .../web/sites/form/web_vhost_domain.tform.php |   2 +-
 12 files changed, 94 insertions(+), 58 deletions(-)

diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index 42a003b9c1..c916a62547 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -33,6 +33,7 @@ vhost_aliasdomains=n
 client_username_web_check_disabled=n
 backups_include_into_web_quota=n
 reseller_can_use_options=n
+web_php_options=no,fast-cgi,mod,php-fpm
 
 
 [tools]
diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php
index 36de1371ab..e6174d2da7 100644
--- a/interface/lib/classes/tform_base.inc.php
+++ b/interface/lib/classes/tform_base.inc.php
@@ -336,69 +336,84 @@ class tform_base {
 	}
 
 	//* If the parameter 'valuelimit' is set
-	function applyValueLimit($limit, $values) {
+	function applyValueLimit($limit, $values, $current_value = '') {
 
 		global $app;
+		
+		// we mas have multiple limits, therefore we explode by ; first
+		// Example: "system:sites:web_php_options;client:web_php_options"
+		$limits = explode(';',$limit);
+		
+		
+		foreach($limits as $limit) {
 
-		$limit_parts = explode(':', $limit);
+			$limit_parts = explode(':', $limit);
 
-		//* values are limited to a comma separated list
-		if($limit_parts[0] == 'list') {
-			$allowed = explode(',', $limit_parts[1]);
-		}
-
-		//* values are limited to a field in the client settings
-		if($limit_parts[0] == 'client') {
-			if($_SESSION["s"]["user"]["typ"] == 'admin') {
-				return $values;
-			} else {
-				$client_group_id = $_SESSION["s"]["user"]["default_group"];
-				$client = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
-				$allowed = explode(',', $client['lm']);
+			//* values are limited to a comma separated list
+			if($limit_parts[0] == 'list') {
+				$allowed = explode(',', $limit_parts[1]);
 			}
-		}
 
-		//* values are limited to a field in the reseller settings
-		if($limit_parts[0] == 'reseller') {
-			if($_SESSION["s"]["user"]["typ"] == 'admin') {
-				return $values;
-			} else {
-				//* Get the limits of the client that is currently logged in
-				$client_group_id = $_SESSION["s"]["user"]["default_group"];
-				$client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
-				//echo "SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
-				//* If the client belongs to a reseller, we will check against the reseller Limit too
-				if($client['parent_client_id'] != 0) {
-
-					//* first we need to know the groups of this reseller
-					$tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ?", $client['parent_client_id']);
-					$reseller_groups = $tmp["groups"];
-					$reseller_userid = $tmp["userid"];
-
-					// Get the limits of the reseller of the logged in client
-					$client_group_id = $_SESSION["s"]["user"]["default_group"];
-					$reseller = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM client WHERE client_id = ?", $client['parent_client_id']);
-					$allowed = explode(',', $reseller['lm']);
-				} else {
+			//* values are limited to a field in the client settings
+			if($limit_parts[0] == 'client') {
+				if($_SESSION["s"]["user"]["typ"] == 'admin') {
 					return $values;
+				} else {
+					$client_group_id = $_SESSION["s"]["user"]["default_group"];
+					$client = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+					$allowed = explode(',', $client['lm']);
 				}
-			} // end if admin
-		} // end if reseller
-
-		//* values are limited to a field in the system settings
-		if($limit_parts[0] == 'system') {
-			$app->uses('getconf');
-			$tmp_conf = $app->getconf->get_global_config($limit_parts[1]);
-			$tmp_key = $limit_parts[2];
-			$allowed = $tmp_conf[$tmp_key];
-		}
+			}
+
+			//* values are limited to a field in the reseller settings
+			if($limit_parts[0] == 'reseller') {
+				if($_SESSION["s"]["user"]["typ"] == 'admin') {
+					return $values;
+				} else {
+					//* Get the limits of the client that is currently logged in
+					$client_group_id = $_SESSION["s"]["user"]["default_group"];
+					$client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+					//echo "SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
+					//* If the client belongs to a reseller, we will check against the reseller Limit too
+					if($client['parent_client_id'] != 0) {
+
+						//* first we need to know the groups of this reseller
+						$tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ?", $client['parent_client_id']);
+						$reseller_groups = $tmp["groups"];
+						$reseller_userid = $tmp["userid"];
+
+						// Get the limits of the reseller of the logged in client
+						$client_group_id = $_SESSION["s"]["user"]["default_group"];
+						$reseller = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM client WHERE client_id = ?", $client['parent_client_id']);
+						$allowed = explode(',', $reseller['lm']);
+					} else {
+						return $values;
+					}
+				} // end if admin
+			} // end if reseller
+
+			//* values are limited to a field in the system settings
+			if($limit_parts[0] == 'system') {
+				$app->uses('getconf');
+				$tmp_conf = $app->getconf->get_global_config($limit_parts[1]);
+				$tmp_key = $limit_parts[2];
+				$allowed = $allowed = explode(',',$tmp_conf[$tmp_key]);
+			}
+			
+			// add the current value to the allowed array
+			$allowed[] = $current_value;
+
+			// remove all values that are not allowed
+			$values_new = array();
+			foreach($values as $key => $val) {
+				if(in_array($key, $allowed)) $values_new[$key] = $val;
+			}
+
+			$values = $values_new;
 
-		$values_new = array();
-		foreach($values as $key => $val) {
-			if(in_array($key, $allowed)) $values_new[$key] = $val;
 		}
 
-		return $values_new;
+		return $values;
 	}
 
 
@@ -464,7 +479,7 @@ class tform_base {
 
 					// If a limitation for the values is set
 					if(isset($field['valuelimit']) && is_array($field["value"])) {
-						$field["value"] = $this->applyValueLimit($field['valuelimit'], $field["value"]);
+						$field["value"] = $this->applyValueLimit($field['valuelimit'], $field["value"], $val);
 					}
 
 					switch ($field['formtype']) {
@@ -599,7 +614,7 @@ class tform_base {
 
 				// If a limitation for the values is set
 				if(isset($field['valuelimit']) && is_array($field["value"])) {
-					$field["value"] = $this->applyValueLimit($field['valuelimit'], $field["value"]);
+					$field["value"] = $this->applyValueLimit($field['valuelimit'], $field["value"], $field['default']);
 				}
 
 				switch ($field['formtype']) {
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index d718e4ef82..3fe7f0c7e3 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -200,6 +200,16 @@ $form["tabs"]['sites'] = array (
 			'value'  => '',
 			'name'  => 'default_dbserver'
 		),
+		'web_php_options' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOXARRAY',
+			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
+					'errmsg'=> 'web_php_options_notempty'),
+			),
+			'default' => '',
+			'separator' => ',',
+			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 0771322ef9..59a3e8d111 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -89,4 +89,5 @@ $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktiv';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
+$wb['web_php_options_txt'] = 'PHP Handler (Nur Apache)';
 ?>
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 29732e4169..ef34493c9d 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -92,4 +92,5 @@ $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Active';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index 21575571f0..6dc07dfd5b 100755
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -89,4 +89,5 @@ $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 8cc8dc4340..8231e45cb7 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -256,7 +256,7 @@
     <div id="collapsePHP" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPHP">
       <div class="panel-body">
 	  <!-- Begin content -->
-                <div class="form-group">
+				<div class="form-group">
                     <label for="php_default_name" class="col-sm-3 control-label">{tmpl_var name='php_default_name_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="php_default_name" id="php_default_name" value="{tmpl_var name='php_default_name'}" class="form-control" /></div></div>
 			    <div class="form-group apache">
diff --git a/interface/web/admin/templates/system_config_sites_edit.htm b/interface/web/admin/templates/system_config_sites_edit.htm
index 1c4c5c6f9a..a0f95e479a 100644
--- a/interface/web/admin/templates/system_config_sites_edit.htm
+++ b/interface/web/admin/templates/system_config_sites_edit.htm
@@ -63,6 +63,12 @@
                     {tmpl_var name='reseller_can_use_options'}
                 </div>
             </div>
+			<div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='web_php_options_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='web_php_options'}
+                    </div>
+                </div>
             <div class="form-group">
                 <label for="default_webserver" class="col-sm-3 control-label">{tmpl_var name='default_webserver_txt'}</label>
                 <div class="col-sm-9"><select name="default_webserver" id="default_webserver" class="form-control">
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 151c5dc959..07ca813bf5 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -1087,7 +1087,7 @@ $form["tabs"]['limits'] = array (
 			),
 			'default' => '',
 			'separator' => ',',
-			'valuelimit' => 'client:web_php_options',
+			'valuelimit' => 'system:sites:web_php_options',
 			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
 		),
 		'limit_cgi' => array (
diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php
index 5d9f81de0b..1da5cdafcd 100644
--- a/interface/web/client/form/client_template.tform.php
+++ b/interface/web/client/form/client_template.tform.php
@@ -495,7 +495,7 @@ $form["tabs"]['limits'] = array (
 			'formtype' => 'CHECKBOXARRAY',
 			'default' => '',
 			'separator' => ',',
-			'valuelimit' => 'client:web_php_options',
+			'valuelimit' => 'system:sites:web_php_options',
 			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
 		),
 		'limit_cgi' => array (
diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php
index 706219f76a..6231895f28 100644
--- a/interface/web/client/form/reseller.tform.php
+++ b/interface/web/client/form/reseller.tform.php
@@ -1080,6 +1080,7 @@ $form["tabs"]['limits'] = array (
 		'web_php_options' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOXARRAY',
+			'valuelimit' => 'system:sites:web_php_options',
 			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
 					'errmsg'=> 'web_php_options_notempty'),
 			),
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index e7698cbe87..e131a7cbaf 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -250,7 +250,7 @@ $form["tabs"]['domain'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => 'fast-cgi',
-			'valuelimit' => 'client:web_php_options',
+			'valuelimit' => 'system:sites:web_php_options;client:web_php_options',
 			'value'  => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
 			'searchable' => 2
 		),
-- 
GitLab


From 20bc613204d4973ab887010fb5202a599ae5b145 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 4 Jul 2019 18:55:04 +0200
Subject: [PATCH 037/571] Fixed #5163 Databases still exists on reseller delete

---
 interface/web/client/reseller_del.php | 43 ++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/interface/web/client/reseller_del.php b/interface/web/client/reseller_del.php
index 55872beabd..a77dc5659c 100644
--- a/interface/web/client/reseller_del.php
+++ b/interface/web/client/reseller_del.php
@@ -60,7 +60,48 @@ class page_action extends tform_actions {
 		$client_id = $app->functions->intval($this->dataRecord['client_id']);
 
 		$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE parent_client_id = ?", $client_id);
-		if($tmp["number"] > 0) $app->error($app->lng('error_has_clients'));
+		if($tmp["number"] > 0) {
+			$app->error($app->lng('error_has_clients'));
+		} else {
+			$parent_client_id = $app->functions->intval($this->dataRecord['parent_client_id']);
+			$parent_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE client_id = ?", $parent_client_id);
+			$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client_id);
+			
+			// Delete all records (mail, web, etc....) of this reseller.
+			$tables = 'cron,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_database_user,web_domain,web_folder,web_folder_user,domain,mail_mailinglist,spamfilter_wblist';
+			$tables_array = explode(',', $tables);
+			$client_group_id = $app->functions->intval($client_group['groupid']);
+			if($client_group_id > 1) {
+				foreach($tables_array as $table) {
+					if($table != '') {
+						//* find the primary ID of the table
+						$table_info = $app->db->tableInfo($table);
+						$index_field = '';
+						foreach($table_info as $tmp) {
+							if($tmp['option'] == 'primary') $index_field = $tmp['name'];
+						}
+						//* Delete the records
+						if($index_field != '') {
+							$records = $app->db->queryAllRecords("SELECT * FROM ?? WHERE sys_groupid = ? ORDER BY ?? DESC", $table, $client_group_id, $index_field);
+							if(is_array($records)) {
+								foreach($records as $rec) {
+									$app->db->datalogDelete($table, $index_field, $rec[$index_field]);
+									//* Delete traffic records that dont have a sys_groupid column
+									if($table == 'web_domain') {
+										$app->db->query("DELETE FROM web_traffic WHERE hostname = ?", $rec['domain']);
+									}
+									//* Delete mail_traffic records that dont have a sys_groupid
+									if($table == 'mail_user') {
+										$app->db->query("DELETE FROM mail_traffic WHERE mailuser_id = ?", $rec['mailuser_id']);
+									}
+								}
+							}
+						}
+
+					}
+				}
+			}
+		}
 
 	}
 
-- 
GitLab


From 568b977eadca233cd8d77aa7c17dc5a7af634b4e Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Fri, 5 Jul 2019 07:22:17 +0200
Subject: [PATCH 038/571] nginx server listen ipv6 and ipv4 and SSL (Fixes
 #5190)

---
 server/conf/nginx_vhost.conf.master           | 7 ++++++-
 server/plugins-available/nginx_plugin.inc.php | 1 +
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 63c9260354..c45ce0a98b 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -3,7 +3,9 @@ server {
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='http_port'>;
 </tmpl_if>
-		
+<tmpl_if name='ipv6_wildcard'>
+        listen [::]:<tmpl_var name='http_port'>;
+</tmpl_if>
 <tmpl_if name='ssl_enabled'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
@@ -11,6 +13,9 @@ server {
 		# ssl_prefer_server_ciphers on;
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+</tmpl_if>
+<tmpl_if name='ipv6_wildcard'>
+        listen [::]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 </tmpl_if>
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 189a6f88ea..30f9501505 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -991,6 +991,7 @@ class nginx_plugin {
 				}
 			}
 		}
+		if($data['new']['ip_address'] == '*' && $data['new']['ipv6_address'] == '') $tpl->setVar('ipv6_wildcard', 1);
 
 		// PHP-FPM
 		// Support for multiple PHP versions
-- 
GitLab


From d712ea46794aaf32f2c99fb97ac24a269ae042d6 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 5 Jul 2019 10:56:27 +0200
Subject: [PATCH 039/571] Fixed #5146 disabled reseller still may login Fixed
 typo in SQL query.

---
 interface/web/client/reseller_edit.php | 120 ++++++++++++++++++++++++-
 1 file changed, 119 insertions(+), 1 deletion(-)

diff --git a/interface/web/client/reseller_edit.php b/interface/web/client/reseller_edit.php
index a089558cab..59699ec163 100644
--- a/interface/web/client/reseller_edit.php
+++ b/interface/web/client/reseller_edit.php
@@ -222,7 +222,7 @@ class page_action extends tform_actions {
 		$password = crypt(stripslashes($password), $salt);
 
 		// Create the controlpaneluser for the reseller
-		$sql = "INSERT INTO sys_user (`username`,`passwort`,`modules`,`startmodule`,`app_theme`,`typ,active`,`language`,`groups`,`default_group`,`client_id`)
+		$sql = "INSERT INTO sys_user (`username`,`passwort`,`modules`,`startmodule`,`app_theme`,`typ`, `active`,`language`,`groups`,`default_group`,`client_id`)
 		VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 		$app->db->query($sql, $username, $password, $modules, $startmodule, $usertheme, $type, $active, $language, $groups, $groupid, $this->id);
 
@@ -368,6 +368,124 @@ class page_action extends tform_actions {
 			$app->uses('client_templates');
 			$app->client_templates->update_client_templates($this->id, $this->_template_additional);
 		}
+		
+		if(!isset($this->dataRecord['locked'])) $this->dataRecord['locked'] = 'n';
+		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["locked"] != $this->oldDataRecord['locked']) {
+			/** lock all the things like web, mail etc. - easy to extend */
+
+
+			// get tmp_data of client
+			$client_data = $app->db->queryOneRecord('SELECT `tmp_data` FROM `client` WHERE `client_id` = ?', $this->id);
+
+			if($client_data['tmp_data'] == '') $tmp_data = array();
+			else $tmp_data = unserialize($client_data['tmp_data']);
+
+			if(!is_array($tmp_data)) $tmp_data = array();
+
+			// database tables with their primary key columns
+			$to_disable = array('cron' => 'id',
+				'ftp_user' => 'ftp_user_id',
+				'mail_domain' => 'domain_id',
+				'mail_user' => 'mailuser_id',
+				'mail_user_smtp' => 'mailuser_id',
+				'mail_forwarding' => 'forwarding_id',
+				'mail_get' => 'mailget_id',
+				'openvz_vm' => 'vm_id',
+				'shell_user' => 'shell_user_id',
+				'webdav_user' => 'webdav_user_id',
+				'web_database' => 'database_id',
+				'web_domain' => 'domain_id',
+				'web_folder' => 'web_folder_id',
+				'web_folder_user' => 'web_folder_user_id'
+			);
+
+			$udata = $app->db->queryOneRecord('SELECT `userid` FROM `sys_user` WHERE `client_id` = ?', $this->id);
+			$gdata = $app->db->queryOneRecord('SELECT `groupid` FROM `sys_group` WHERE `client_id` = ?', $this->id);
+			$sys_groupid = $gdata['groupid'];
+			$sys_userid = $udata['userid'];
+
+			$entries = array();
+			if($this->dataRecord['locked'] == 'y') {
+				$prev_active = array();
+				$prev_sysuser = array();
+				foreach($to_disable as $current => $keycolumn) {
+					$active_col = 'active';
+					$reverse = false;
+					if($current == 'mail_user') {
+						$active_col = 'postfix';
+					} elseif($current == 'mail_user_smtp') {
+						$current = 'mail_user';
+						$active_col = 'disablesmtp';
+						$reverse = true;
+					}
+					
+					if(!isset($prev_active[$current])) $prev_active[$current] = array();
+					if(!isset($prev_sysuser[$current])) $prev_sysuser[$current] = array();
+
+					$entries = $app->db->queryAllRecords('SELECT ?? as `id`, `sys_userid`, ?? FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $active_col, $current, $sys_groupid);
+					foreach($entries as $item) {
+
+						if($item[$active_col] != 'y' && $reverse == false) $prev_active[$current][$item['id']][$active_col] = 'n';
+						elseif($item[$active_col] == 'y' && $reverse == true) $prev_active[$current][$item['id']][$active_col] = 'y';
+						if($item['sys_userid'] != $sys_userid) $prev_sysuser[$current][$item['id']] = $item['sys_userid'];
+						// we don't have to store these if y, as everything without previous state gets enabled later
+
+						$app->db->datalogUpdate($current, array($active_col => ($reverse == true ? 'y' : 'n'), 'sys_userid' => $_SESSION["s"]["user"]["userid"]), $keycolumn, $item['id']);
+					}
+				}
+
+				$tmp_data['prev_active'] = $prev_active;
+				$tmp_data['prev_sys_userid'] = $prev_sysuser;
+				$app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $this->id);
+				unset($prev_active);
+				unset($prev_sysuser);
+			} elseif($this->dataRecord['locked'] == 'n') {
+				foreach($to_disable as $current => $keycolumn) {
+					$active_col = 'active';
+					$reverse = false;
+					if($current == 'mail_user') {
+						$active_col = 'postfix';
+					} elseif($current == 'mail_user_smtp') {
+						$current = 'mail_user';
+						$active_col = 'disablesmtp';
+						$reverse = true;
+					}
+					
+					$entries = $app->db->queryAllRecords('SELECT ?? as `id` FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $current, $sys_groupid);
+					foreach($entries as $item) {
+						$set_active = ($reverse == true ? 'n' : 'y');
+						$set_inactive = ($reverse == true ? 'y' : 'n');
+						$set_sysuser = $sys_userid;
+						if(array_key_exists('prev_active', $tmp_data) == true
+							&& array_key_exists($current, $tmp_data['prev_active']) == true
+							&& array_key_exists($item['id'], $tmp_data['prev_active'][$current]) == true
+							&& $tmp_data['prev_active'][$current][$item['id']][$active_col] == $set_inactive) $set_active = $set_inactive;
+						if(array_key_exists('prev_sysuser', $tmp_data) == true
+							&& array_key_exists($current, $tmp_data['prev_sysuser']) == true
+							&& array_key_exists($item['id'], $tmp_data['prev_sysuser'][$current]) == true
+							&& $tmp_data['prev_sysuser'][$current][$item['id']] != $sys_userid) $set_sysuser = $tmp_data['prev_sysuser'][$current][$item['id']];
+
+						$app->db->datalogUpdate($current, array($active_col => $set_active, 'sys_userid' => $set_sysuser), $keycolumn, $item['id']);
+					}
+				}
+				if(array_key_exists('prev_active', $tmp_data)) unset($tmp_data['prev_active']);
+				$app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $this->id);
+			}
+			unset($tmp_data);
+			unset($entries);
+			unset($to_disable);
+		}
+		
+		if(!isset($this->dataRecord['canceled'])) $this->dataRecord['canceled'] = 'n';
+		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["canceled"] != $this->oldDataRecord['canceled']) {
+			if($this->dataRecord['canceled'] == 'y') {
+				$sql = "UPDATE sys_user SET active = '0' WHERE client_id = ?";
+				$app->db->query($sql, $this->id);
+			} elseif($this->dataRecord['canceled'] == 'n') {
+				$sql = "UPDATE sys_user SET active = '1' WHERE client_id = ?";
+				$app->db->query($sql, $this->id);
+			}
+		}
 
 		parent::onAfterUpdate();
 	}
-- 
GitLab


From b7ee5f0edfeb64382cd7580edffe9e760b58e27f Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 5 Jul 2019 12:15:57 +0200
Subject: [PATCH 040/571] Fixed #5331 Disallow 0 as website harddisk quota
 value

---
 interface/web/sites/lib/lang/de_web_vhost_domain.lng | 1 +
 interface/web/sites/lib/lang/en_web_vhost_domain.lng | 1 +
 interface/web/sites/web_vhost_domain_edit.php        | 5 +++++
 3 files changed, 7 insertions(+)

diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index 1b334bb298..d95b6d47e4 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Log-Dateien Aufbewahrungszeit';
 $wb['log_retention_error_regex'] = 'Aufbewahrungszeit in Tagen (Erlaubte Werte: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota kann nicht 0 sein.';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index 97d1c932ca..ae546e1c4d 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -157,4 +157,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 3d6ecc6fb8..86deb5b2a5 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -1065,6 +1065,11 @@ class page_action extends tform_actions {
 			}
 			
 			if($this->_vhostdomain_type == 'domain') {
+				//* ensure that quota value is not 0 when vhost type = domain
+				if(isset($_POST["hd_quota"]) && $_POST["hd_quota"] == 0) {
+					$app->tform->errorMessage .= $app->tform->lng("limit_web_quota_not_0_txt")."<br>";
+				}
+				
 				//* Check the website quota of the client
 				if(isset($_POST["hd_quota"]) && $client["limit_web_quota"] >= 0 && $_POST["hd_quota"] != $old_web_values["hd_quota"]) {
 					$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ? AND type = 'vhost' AND ".$app->tform->getAuthSQL('u'), $this->id);
-- 
GitLab


From 3d4127ad47daf52cc1a8e914638e75f36341fd59 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 5 Jul 2019 14:41:55 +0200
Subject: [PATCH 041/571] - fix problem with tls version on STARTTLS in mail
 class

---
 interface/lib/classes/ispcmail.inc.php | 8 +++++++-
 server/lib/classes/ispcmail.inc.php    | 8 +++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/ispcmail.inc.php b/interface/lib/classes/ispcmail.inc.php
index b818e1e44a..522fd1a71b 100644
--- a/interface/lib/classes/ispcmail.inc.php
+++ b/interface/lib/classes/ispcmail.inc.php
@@ -599,10 +599,16 @@ class ispcmail {
 			fputs($this->_smtp_conn, 'STARTTLS' . $this->_crlf);
 			fgets($this->_smtp_conn, 515);
 			
+			$crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
+
+			if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
+				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
+				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
+			}
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_host', false);
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_peer', false);
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'allow_self_signed', true);
-			stream_socket_enable_crypto($this->_smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
+			stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method);
 		}
 
 		//AUTH LOGIN
diff --git a/server/lib/classes/ispcmail.inc.php b/server/lib/classes/ispcmail.inc.php
index 305b39f35b..cc83c74137 100644
--- a/server/lib/classes/ispcmail.inc.php
+++ b/server/lib/classes/ispcmail.inc.php
@@ -598,7 +598,13 @@ class ispcmail {
 		if($this->smtp_crypt == 'tls') {
 			fputs($this->_smtp_conn, 'STARTTLS' . $this->_crlf);
 			fgets($this->_smtp_conn, 515);
-			stream_socket_enable_crypto($this->_smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
+			$crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
+
+			if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
+				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
+				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
+			}
+			stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method);
 		}
 
 		//AUTH LOGIN
-- 
GitLab


From c31703b89585c255153631cacbab4a935009fdfd Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 5 Jul 2019 16:23:29 +0200
Subject: [PATCH 042/571] Implements #5007 Remove SSL bundle files if present
 on an apache 2.4 server

---
 server/conf/vhost.conf.master                   | 8 ++++----
 server/plugins-available/apache2_plugin.inc.php | 5 +++--
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index a259c29906..ee7dcac076 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -75,15 +75,15 @@
 		# </IfModule>
 		SSLCertificateFile <tmpl_var name='ssl_crt_file'>
 		SSLCertificateKeyFile <tmpl_var name='ssl_key_file'>
-<tmpl_if name='has_bundle_cert'>
-		<tmpl_if name='apache_version' op='<' value='2.4.8' format='version'>
-		SSLCertificateChainFile <tmpl_var name='ssl_bundle_file'>
-		</tmpl_if>
 		<tmpl_if name='apache_version' op='>=' value='2.4' format='version'>
 		SSLUseStapling on
 		SSLStaplingResponderTimeout 5
 		SSLStaplingReturnResponderErrors off
 		</tmpl_if>
+<tmpl_if name='has_bundle_cert'>
+		<tmpl_if name='apache_version' op='<' value='2.4.8' format='version'>
+		SSLCertificateChainFile <tmpl_var name='ssl_bundle_file'>
+		</tmpl_if>
 </tmpl_if>
 </tmpl_if>
 		</IfModule>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 3aa851f649..6fa3101ed7 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1223,8 +1223,9 @@ class apache2_plugin {
 				$app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ? AND `server_id` = ?", $data['new']['ssl'], 'n', $data['new']['domain'], $conf['server_id']);
  			}
 		}
-
-		if(@is_file($bundle_file)) $vhost_data['has_bundle_cert'] = 1;
+		
+		// Use separate bundle file only for apache versions < 2.4.8
+		if(@is_file($bundle_file) && version_compare($app->system->getapacheversion(true), '2.4.8', '<')) $vhost_data['has_bundle_cert'] = 1;
 
 		// HTTP/2.0 ?
 		$vhost_data['enable_http2']  = 'n';
-- 
GitLab


From 3b0f4a4d8c30bc5c558b60147fbed0179d836ecf Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 5 Jul 2019 18:28:08 +0200
Subject: [PATCH 043/571] Added PHP-FPM Restart mode. See System > Interface
 config > Web > PHP-FPM reload mode. Fixes #4816

---
 install/tpl/server.ini.master                 |  1 +
 .../web/admin/form/server_config.tform.php    |  8 ++++++
 .../web/admin/lib/lang/de_server_config.lng   |  1 +
 .../web/admin/lib/lang/en_server_config.lng   |  1 +
 .../templates/server_config_web_edit.htm      |  6 +++++
 .../plugins-available/apache2_plugin.inc.php  | 27 ++++++++++++-------
 6 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 406881010e..6441609cab 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -116,6 +116,7 @@ overquota_db_notify_admin=y
 overquota_db_notify_client=y
 overquota_notify_onok=n
 logging=yes
+php_fpm_reload_mode=reload
 
 [dns]
 bind_user=root
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index e0cf897abd..1a6c8070cb 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -1376,6 +1376,14 @@ $form["tabs"]['web'] = array(
 				1 => 'y'
 			)
 		),
+		'php_fpm_reload_mode' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'reload',
+			'value' => array('reload' => 'Reload', 'restart' => 'Restart'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 73c6609a1a..108bf96de8 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
 $wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
 $wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload Modus';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 7ca9967922..ac0ee42b90 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -296,4 +296,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 8231e45cb7..eb285bbc07 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -299,6 +299,12 @@
                         {tmpl_var name='php_fpm_incron_reload'}
                     </div>
                 </div>
+				<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_reload_mode_txt'}</label>
+                <div class="col-sm-9"><select name="php_fpm_reload_mode" id="php_fpm_reload_mode" class="form-control">
+                        {tmpl_var name='php_fpm_reload_mode'}
+                    </select></div>
+            </div>
 	  <!-- End content -->
 	  </div>
 	</div>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 6fa3101ed7..7ecbb76109 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -3058,6 +3058,8 @@ class apache2_plugin {
 
 		$app->uses("getconf");
 		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
+		
+		$php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart';
 
 		if($data['new']['php'] != 'php-fpm'){
 			if(@is_file($pool_dir.$pool_name.'.conf')){
@@ -3066,9 +3068,9 @@ class apache2_plugin {
 			}
 			if($data['old']['php'] == 'php-fpm'){
 				if(!$default_php_fpm){
-					$app->services->restartService('php-fpm', 'reload:'.$custom_php_fpm_init_script);
+					$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$custom_php_fpm_init_script);
 				} else {
-					$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+					$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 				}
 			}
 			//if($reload == true) $app->services->restartService('php-fpm','reload');
@@ -3205,7 +3207,7 @@ class apache2_plugin {
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
 				$app->system->unlink($default_pool_dir.$pool_name.'.conf');
 				$app->log('Removed PHP-FPM config file: '.$default_pool_dir.$pool_name.'.conf', LOGLEVEL_DEBUG);
-				$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+				$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 			}
 		}
 		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $conf["server_id"]);
@@ -3217,7 +3219,7 @@ class apache2_plugin {
 					if ( @is_file($php_version['php_fpm_pool_dir'].$pool_name.'.conf') ) {
 						$app->system->unlink($php_version['php_fpm_pool_dir'].$pool_name.'.conf');
 						$app->log('Removed PHP-FPM config file: '.$php_version['php_fpm_pool_dir'].$pool_name.'.conf', LOGLEVEL_DEBUG);
-						$app->services->restartService('php-fpm', 'reload:'.$php_version['php_fpm_init_script']);
+						$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$php_version['php_fpm_init_script']);
 					}
 				}
 			}
@@ -3225,9 +3227,9 @@ class apache2_plugin {
 		// Reload current PHP-FPM after all others
 		sleep(1);
 		if(!$default_php_fpm){
-			$app->services->restartService('php-fpm', 'reload:'.$custom_php_fpm_init_script);
+			$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$custom_php_fpm_init_script);
 		} else {
-			$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+			$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 		}
 
 		//$reload = true;
@@ -3238,6 +3240,11 @@ class apache2_plugin {
 	//* Delete the PHP-FPM pool configuration file
 	private function php_fpm_pool_delete ($data, $web_config) {
 		global $app, $conf;
+		
+		$app->uses("getconf");
+		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
+		
+		$php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart';
 
 		if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){
 			$default_php_fpm = false;
@@ -3271,7 +3278,7 @@ class apache2_plugin {
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
 				$app->system->unlink($default_pool_dir.$pool_name.'.conf');
 				$app->log('Removed PHP-FPM config file: '.$default_pool_dir.$pool_name.'.conf', LOGLEVEL_DEBUG);
-				$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+				$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 			}
 		}
 		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $data['old']['server_id']);
@@ -3283,7 +3290,7 @@ class apache2_plugin {
 					if ( @is_file($php_version['php_fpm_pool_dir'].$pool_name.'.conf') ) {
 						$app->system->unlink($php_version['php_fpm_pool_dir'].$pool_name.'.conf');
 						$app->log('Removed PHP-FPM config file: '.$php_version['php_fpm_pool_dir'].$pool_name.'.conf', LOGLEVEL_DEBUG);
-						$app->services->restartService('php-fpm', 'reload:'.$php_version['php_fpm_init_script']);
+						$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$php_version['php_fpm_init_script']);
 					}
 				}
 			}
@@ -3292,9 +3299,9 @@ class apache2_plugin {
 		// Reload current PHP-FPM after all others
 		sleep(1);
 		if(!$default_php_fpm){
-			$app->services->restartService('php-fpm', 'reload:'.$custom_php_fpm_init_script);
+			$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$custom_php_fpm_init_script);
 		} else {
-			$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+			$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 		}
 	}
 
-- 
GitLab


From 9545334c5a54215d0c8c1aba8cee776a9a090d30 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 5 Jul 2019 18:35:55 +0200
Subject: [PATCH 044/571] Merged language files

---
 .../web/admin/lib/lang/ar_server_config.lng   |  1 +
 .../web/admin/lib/lang/ar_server_php_list.lng |  1 +
 .../web/admin/lib/lang/ar_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/bg_server_config.lng   |  1 +
 .../web/admin/lib/lang/bg_server_php_list.lng |  1 +
 .../web/admin/lib/lang/bg_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/br_server_config.lng   |  2 ++
 .../web/admin/lib/lang/br_server_php_list.lng |  1 +
 .../web/admin/lib/lang/br_system_config.lng   | 13 +++-------
 .../web/admin/lib/lang/ca_server_config.lng   |  1 +
 .../web/admin/lib/lang/ca_server_php_list.lng |  1 +
 .../web/admin/lib/lang/ca_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/cz_server_config.lng   |  3 ++-
 .../web/admin/lib/lang/cz_server_php_list.lng |  1 +
 .../web/admin/lib/lang/cz_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/de_system_config.lng   |  2 +-
 .../web/admin/lib/lang/dk_server_config.lng   |  1 +
 .../web/admin/lib/lang/dk_server_php_list.lng |  1 +
 .../web/admin/lib/lang/dk_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/el_server_config.lng   |  1 +
 .../web/admin/lib/lang/el_server_php_list.lng |  1 +
 .../web/admin/lib/lang/el_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/es_server_config.lng   |  1 +
 .../web/admin/lib/lang/es_server_php_list.lng |  1 +
 .../web/admin/lib/lang/es_system_config.lng   |  2 +-
 .../web/admin/lib/lang/fi_server_config.lng   |  1 +
 .../web/admin/lib/lang/fi_server_php_list.lng |  1 +
 .../web/admin/lib/lang/fi_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/fr_server_config.lng   |  1 +
 .../web/admin/lib/lang/fr_server_php_list.lng |  1 +
 .../web/admin/lib/lang/fr_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/hr_server_config.lng   |  1 +
 .../web/admin/lib/lang/hr_server_php_list.lng |  1 +
 .../web/admin/lib/lang/hr_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/hu_server_config.lng   |  1 +
 .../web/admin/lib/lang/hu_server_php_list.lng |  1 +
 .../web/admin/lib/lang/hu_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/id_server_config.lng   |  1 +
 .../web/admin/lib/lang/id_server_php_list.lng |  1 +
 .../web/admin/lib/lang/id_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/it_server_config.lng   |  1 +
 .../web/admin/lib/lang/it_server_php_list.lng |  1 +
 .../web/admin/lib/lang/it_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/ja_server_config.lng   |  1 +
 .../web/admin/lib/lang/ja_server_php_list.lng |  1 +
 .../web/admin/lib/lang/ja_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/nl_server_config.lng   |  1 +
 .../web/admin/lib/lang/nl_server_php_list.lng |  1 +
 .../web/admin/lib/lang/nl_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/pl_server_config.lng   |  1 +
 .../web/admin/lib/lang/pl_server_php_list.lng |  1 +
 .../web/admin/lib/lang/pl_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/pt_server_config.lng   |  1 +
 .../web/admin/lib/lang/pt_server_php_list.lng |  1 +
 .../web/admin/lib/lang/pt_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/ro_server_config.lng   |  1 +
 .../web/admin/lib/lang/ro_server_php_list.lng |  1 +
 .../web/admin/lib/lang/ro_system_config.lng   |  3 ++-
 interface/web/admin/lib/lang/ru_firewall.lng  |  4 +--
 .../web/admin/lib/lang/ru_server_config.lng   |  3 ++-
 .../web/admin/lib/lang/ru_server_php_list.lng |  1 +
 .../web/admin/lib/lang/ru_system_config.lng   | 15 +++--------
 interface/web/admin/lib/lang/ru_users.lng     |  2 +-
 .../web/admin/lib/lang/se_server_config.lng   |  1 +
 .../web/admin/lib/lang/se_server_php_list.lng |  1 +
 .../web/admin/lib/lang/se_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/sk_server_config.lng   |  1 +
 .../web/admin/lib/lang/sk_server_php_list.lng |  1 +
 .../web/admin/lib/lang/sk_system_config.lng   |  3 ++-
 .../web/admin/lib/lang/tr_server_config.lng   |  1 +
 .../web/admin/lib/lang/tr_server_php_list.lng |  1 +
 .../web/admin/lib/lang/tr_system_config.lng   |  3 ++-
 .../lib/lang/ar_client_template_list.lng      |  1 +
 .../lib/lang/bg_client_template_list.lng      |  1 +
 interface/web/client/lib/lang/br_client.lng   |  2 +-
 .../client/lib/lang/br_client_template.lng    |  2 +-
 .../lib/lang/br_client_template_list.lng      |  1 +
 .../lib/lang/ca_client_template_list.lng      |  1 +
 .../lib/lang/cz_client_template_list.lng      |  1 +
 .../lib/lang/de_client_template_list.lng      |  2 +-
 .../lib/lang/dk_client_template_list.lng      |  1 +
 .../lib/lang/el_client_template_list.lng      |  1 +
 .../lib/lang/es_client_template_list.lng      |  1 +
 .../lib/lang/fi_client_template_list.lng      |  1 +
 .../lib/lang/fr_client_template_list.lng      |  1 +
 .../lib/lang/hr_client_template_list.lng      |  1 +
 .../lib/lang/hu_client_template_list.lng      |  1 +
 .../lib/lang/id_client_template_list.lng      |  1 +
 .../lib/lang/it_client_template_list.lng      |  1 +
 .../lib/lang/ja_client_template_list.lng      |  1 +
 .../lib/lang/nl_client_template_list.lng      |  1 +
 .../lib/lang/pl_client_template_list.lng      |  1 +
 .../lib/lang/pt_client_template_list.lng      |  1 +
 .../lib/lang/ro_client_template_list.lng      |  1 +
 interface/web/client/lib/lang/ru_client.lng   |  4 +--
 .../lib/lang/ru_client_template_list.lng      |  1 +
 interface/web/client/lib/lang/ru_reseller.lng |  4 +--
 .../lib/lang/se_client_template_list.lng      |  1 +
 .../lib/lang/sk_client_template_list.lng      |  1 +
 .../lib/lang/tr_client_template_list.lng      |  1 +
 interface/web/dns/lib/lang/ar_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/bg_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/br_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/br_dns_dmarc.lng   | 10 +++----
 interface/web/dns/lib/lang/br_dns_tlsa.lng    |  4 +--
 interface/web/dns/lib/lang/ca_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/cz_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/de_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/dk_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/el_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/es_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/fi_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/fr_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/hr_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/hu_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/id_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/it_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/ja_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/nl_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/pl_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/pt_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/ro_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/ru_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/ru_dns_hinfo.lng   |  2 +-
 interface/web/dns/lib/lang/se_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/sk_dns_caa.lng     |  2 +-
 interface/web/dns/lib/lang/tr_dns_caa.lng     |  2 +-
 .../web/help/lib/lang/br_support_message.lng  |  2 +-
 interface/web/login/lib/lang/br_login_as.lng  |  2 +-
 interface/web/login/lib/lang/ru_login_as.lng  |  6 ++---
 interface/web/mail/lib/lang/br_mail_user.lng  |  4 +--
 interface/web/mail/lib/lang/ru_mail_get.lng   |  2 +-
 .../web/mail/lib/lang/ru_mail_user_filter.lng |  2 +-
 .../mailuser/lib/lang/ru_mail_user_filter.lng |  2 +-
 interface/web/monitor/lib/lang/ar.lng         |  1 +
 .../lib/lang/ar_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/ar_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/ar_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/bg.lng         |  1 +
 .../lib/lang/bg_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/bg_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/bg_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/br.lng         |  1 +
 .../lib/lang/br_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/br_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/br_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/ca.lng         |  1 +
 .../lib/lang/ca_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/ca_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/ca_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/cz.lng         |  1 +
 .../lib/lang/cz_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/cz_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/cz_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/dk.lng         |  1 +
 .../lib/lang/dk_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/dk_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/dk_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/el.lng         |  1 +
 .../lib/lang/el_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/el_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/el_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/es.lng         |  1 +
 .../lib/lang/es_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/es_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/es_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/fi.lng         |  1 +
 .../lib/lang/fi_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/fi_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/fi_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/fr.lng         |  1 +
 .../lib/lang/fr_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/fr_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/fr_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/hr.lng         |  1 +
 .../lib/lang/hr_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/hr_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/hr_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/hu.lng         |  1 +
 .../lib/lang/hu_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/hu_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/hu_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/id.lng         |  1 +
 .../lib/lang/id_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/id_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/id_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/it.lng         |  1 +
 .../lib/lang/it_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/it_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/it_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/ja.lng         |  1 +
 .../lib/lang/ja_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/ja_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/ja_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/nl.lng         |  1 +
 .../lib/lang/nl_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/nl_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/nl_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/pl.lng         |  1 +
 .../lib/lang/pl_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/pl_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/pl_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/pt.lng         |  1 +
 .../lib/lang/pt_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/pt_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/pt_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/ro.lng         |  1 +
 .../lib/lang/ro_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/ro_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/ro_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/ru.lng         |  1 +
 .../lib/lang/ru_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/ru_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/ru_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/se.lng         |  1 +
 .../lib/lang/se_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/se_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/se_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/sk.lng         |  1 +
 .../lib/lang/sk_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/sk_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/sk_dataloghistory_view.lng       | 26 +++++++++++++++++++
 interface/web/monitor/lib/lang/tr.lng         |  1 +
 .../lib/lang/tr_dataloghistory_list.lng       |  8 ++++++
 .../lib/lang/tr_dataloghistory_undo.lng       |  7 +++++
 .../lib/lang/tr_dataloghistory_view.lng       | 26 +++++++++++++++++++
 .../sites/lib/lang/ar_web_vhost_domain.lng    |  1 +
 interface/web/sites/lib/lang/bg_aps.lng       |  2 +-
 .../sites/lib/lang/bg_web_vhost_domain.lng    |  1 +
 interface/web/sites/lib/lang/br.lng           |  2 +-
 interface/web/sites/lib/lang/br_aps.lng       |  2 +-
 interface/web/sites/lib/lang/br_cron.lng      |  4 +--
 interface/web/sites/lib/lang/br_database.lng  |  2 +-
 .../web/sites/lib/lang/br_database_user.lng   |  2 +-
 interface/web/sites/lib/lang/br_ftp_user.lng  |  4 +--
 .../web/sites/lib/lang/br_shell_user.lng      |  4 +--
 .../web/sites/lib/lang/br_web_aliasdomain.lng |  4 +--
 .../web/sites/lib/lang/br_web_childdomain.lng |  6 ++---
 .../web/sites/lib/lang/br_web_domain.lng      |  2 +-
 .../web/sites/lib/lang/br_web_subdomain.lng   |  2 +-
 .../sites/lib/lang/br_web_vhost_domain.lng    |  5 ++--
 .../sites/lib/lang/br_web_vhost_subdomain.lng | 10 +++----
 .../web/sites/lib/lang/br_webdav_user.lng     |  4 +--
 interface/web/sites/lib/lang/ca_aps.lng       |  2 +-
 .../sites/lib/lang/ca_web_vhost_domain.lng    |  1 +
 interface/web/sites/lib/lang/cz_aps.lng       |  2 +-
 .../sites/lib/lang/cz_web_vhost_domain.lng    |  1 +
 interface/web/sites/lib/lang/de_aps.lng       |  2 +-
 .../sites/lib/lang/dk_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/el_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/es_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/fi_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/fr_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/hr_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/hu_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/id_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/it_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ja_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/nl_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/pl_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/pt_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ro_web_vhost_domain.lng    |  1 +
 interface/web/sites/lib/lang/ru.lng           |  2 +-
 interface/web/sites/lib/lang/ru_aps.lng       | 16 ++++++------
 interface/web/sites/lib/lang/ru_database.lng  |  2 +-
 .../web/sites/lib/lang/ru_database_user.lng   |  2 +-
 .../web/sites/lib/lang/ru_web_childdomain.lng |  2 +-
 .../web/sites/lib/lang/ru_web_subdomain.lng   |  2 +-
 .../sites/lib/lang/ru_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/se_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/sk_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/tr_web_vhost_domain.lng    |  1 +
 272 files changed, 1205 insertions(+), 140 deletions(-)
 create mode 100644 interface/web/monitor/lib/lang/ar_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/ar_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/ar_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/bg_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/bg_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/bg_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/br_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/br_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/br_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/ca_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/ca_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/ca_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/cz_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/cz_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/dk_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/dk_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/dk_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/el_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/el_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/el_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/es_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/es_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/es_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/fi_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/fi_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/fi_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/fr_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/fr_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/fr_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/hr_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/hr_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/hr_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/hu_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/hu_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/hu_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/id_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/id_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/id_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/it_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/it_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/it_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/ja_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/ja_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/ja_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/nl_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/nl_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/nl_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/pl_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/pl_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/pl_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/pt_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/pt_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/pt_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/ro_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/ro_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/ro_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/ru_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/ru_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/ru_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/se_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/se_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/se_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/sk_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/sk_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/sk_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/tr_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/tr_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/tr_dataloghistory_view.lng

diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 00e94f766b..55d3f8949c 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/ar_server_php_list.lng b/interface/web/admin/lib/lang/ar_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/ar_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ar_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index 6bebcf39ad..0a830014d8 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 7c6ae9f2dc..6b63770459 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_php_list.lng b/interface/web/admin/lib/lang/bg_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/bg_server_php_list.lng
+++ b/interface/web/admin/lib/lang/bg_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index 8c3444e9cb..130cb596aa 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 9175790eb3..088dac70be 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -294,4 +294,6 @@ $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_php_list.lng b/interface/web/admin/lib/lang/br_server_php_list.lng
index 31a2b13eb8..88f1e38d21 100644
--- a/interface/web/admin/lib/lang/br_server_php_list.lng
+++ b/interface/web/admin/lib/lang/br_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['add_new_record_txt'] = 'Adicionar nova versão do php';
 $wb['client_id_txt'] = 'Cliente';
 $wb['name_txt'] = 'Nome da versão do php';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index 8b5b6d0164..8688ca53aa 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'O número do gabarito do cliente
 $wb['customer_no_start_txt'] = 'Valor inicial do código do cliente';
 $wb['customer_no_counter_txt'] = 'Contador de código do cliente';
 $wb['session_timeout_txt'] = 'Duração da sessão (minutos)';
-$wb['session_allow_endless_txt'] = 'Habilitar \"Manter-me conectado\"';
+$wb['session_allow_endless_txt'] = 'Habilitar \\"Manter-me conectado\\"';
 $wb['min_password_length_txt'] = 'Comprimento mínimo da senha';
 $wb['min_password_strength_txt'] = 'Dificuldade mínima da senha';
 $wb['company_name_txt'] = 'Nome da empresa no título da página';
@@ -82,19 +82,12 @@ $wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA<E2><80><99>s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
 $wb['No'] = 'Não';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index dc44dd340c..815dbd30b5 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_server_php_list.lng b/interface/web/admin/lib/lang/ca_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/ca_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ca_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index ff46470f59..cc3c11c6c5 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -84,9 +84,10 @@ $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index e219a7b3e4..ebccd8fce0 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -143,7 +143,7 @@ $wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM adresář pro socket je prázdn
 $wb['try_rescue_txt'] = 'Povolit monitorování služeb a restartovat při selhání';
 $wb['do_not_try_rescue_mysql_txt'] = 'Zakázat MySQL monitorování';
 $wb['do_not_try_rescue_mail_txt'] = 'Zakázat E-mail monitorování';
-$wb['rescue_description_txt'] = '<b>Informace:</b> Pokud chcete např. vypnout MySQL službu zatrhněte políčko \"Zakázat MySQL monitorování\" změna se provede do 2-3 minut.<br>Pokud nepočkáte 2-3 minuty, monitorování nastartuje službu MySQL automaticky znovu !';
+$wb['rescue_description_txt'] = '<b>Informace:</b> Pokud chcete např. vypnout MySQL službu zatrhněte políčko \\"Zakázat MySQL monitorování\\" změna se provede do 2-3 minut.<br>Pokud nepočkáte 2-3 minuty, monitorování nastartuje službu MySQL automaticky znovu !';
 $wb['enable_sni_txt'] = 'Aktivovat SNI (Server Name Indication)';
 $wb['do_not_try_rescue_httpd_txt'] = 'Zakázat HTTPD monitorování';
 $wb['set_folder_permissions_on_update_txt'] = 'Nastavení oprávnění složky při aktualizaci';
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_php_list.lng b/interface/web/admin/lib/lang/cz_server_php_list.lng
index 655f9a92b2..f79d482190 100644
--- a/interface/web/admin/lib/lang/cz_server_php_list.lng
+++ b/interface/web/admin/lib/lang/cz_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Přidat verzi PHP';
 $wb['client_id_txt'] = 'Klient';
 $wb['name_txt'] = 'Verze PHP';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index 4f0468833f..a0abf26410 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -84,9 +84,10 @@ $wb['login_link_error_regex'] = 'Neplatný formát URL pro vlastní odkaz na př
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 59a3e8d111..76910e1db3 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -84,7 +84,7 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Wildcard verwenden';
-$wb['ca_critical_txt'] = 'Strikte Überprüfung'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strikte Überprüfung';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktiv';
 $wb['btn_save_txt'] = 'Speichern';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 47daacd86a..5bf2be008a 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_php_list.lng b/interface/web/admin/lib/lang/dk_server_php_list.lng
index 8dbcdd211f..43fb5fe211 100644
--- a/interface/web/admin/lib/lang/dk_server_php_list.lng
+++ b/interface/web/admin/lib/lang/dk_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Tilføj ny PHP version';
 $wb['client_id_txt'] = 'Kunde';
 $wb['name_txt'] = 'PHP Navn';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index 5e96639d2c..26b0fe7e78 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -84,9 +84,10 @@ $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 2755ade7c2..ae0efc9e31 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_php_list.lng b/interface/web/admin/lib/lang/el_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/el_server_php_list.lng
+++ b/interface/web/admin/lib/lang/el_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 0191eb85e7..640d6f00a9 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 042671e594..95eaf9e8a0 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_php_list.lng b/interface/web/admin/lib/lang/es_server_php_list.lng
index 2e6257cfac..111628b720 100755
--- a/interface/web/admin/lib/lang/es_server_php_list.lng
+++ b/interface/web/admin/lib/lang/es_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['client_id_txt'] = 'Cliente';
 $wb['list_head_txt'] = 'Versiones adicionales de PHP';
 $wb['name_txt'] = 'Versión de PHP';
 $wb['server_id_txt'] = 'Servidor';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index 6dc07dfd5b..043c52cfdd 100755
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -84,7 +84,7 @@ $wb['webmail_url_txt'] = 'URL de correo web';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 4d76c3f5eb..c1e43b276b 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_php_list.lng b/interface/web/admin/lib/lang/fi_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/fi_server_php_list.lng
+++ b/interface/web/admin/lib/lang/fi_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index 7fe364c972..c0972c49d8 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index d1e229e7ce..418f633670 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_php_list.lng b/interface/web/admin/lib/lang/fr_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/fr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/fr_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 0d9d27d14f..18f0dbbed4 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -84,9 +84,10 @@ $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index ebfe30a16d..78d9a57a5b 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_php_list.lng b/interface/web/admin/lib/lang/hr_server_php_list.lng
index 8fd3db7a05..9e9c0de986 100644
--- a/interface/web/admin/lib/lang/hr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/hr_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Klijent';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index ba926e3a71..a7735647b1 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index f491b4b2da..c2adb3efb2 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_php_list.lng b/interface/web/admin/lib/lang/hu_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/hu_server_php_list.lng
+++ b/interface/web/admin/lib/lang/hu_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index 9944f68b78..cee497fe19 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index f56204188a..36f3cd8535 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_php_list.lng b/interface/web/admin/lib/lang/id_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/id_server_php_list.lng
+++ b/interface/web/admin/lib/lang/id_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index 65c1768354..344185b84d 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 24b89ee8bd..766b7fb1ae 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_php_list.lng b/interface/web/admin/lib/lang/it_server_php_list.lng
index 36bfcbc40e..296de9d0a5 100644
--- a/interface/web/admin/lib/lang/it_server_php_list.lng
+++ b/interface/web/admin/lib/lang/it_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Aggiungi una nuova versione PHP';
 $wb['client_id_txt'] = 'Cliente';
 $wb['name_txt'] = 'Nome PHP';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index e3c4fcaae7..311b7c957c 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -84,9 +84,10 @@ $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 72cecbcccd..ccabb127e6 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_php_list.lng b/interface/web/admin/lib/lang/ja_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/ja_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ja_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index ce16ad15bb..aa5cc6a7a3 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 389a0ea877..187ea86ec1 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_php_list.lng b/interface/web/admin/lib/lang/nl_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/nl_server_php_list.lng
+++ b/interface/web/admin/lib/lang/nl_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index 20df45f2bc..44a58b7646 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index a05df05752..a50e27b33e 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_php_list.lng b/interface/web/admin/lib/lang/pl_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/pl_server_php_list.lng
+++ b/interface/web/admin/lib/lang/pl_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index 1c51b949a7..a809251ec1 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index ba5bd38248..96c16d3a2c 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_php_list.lng b/interface/web/admin/lib/lang/pt_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/pt_server_php_list.lng
+++ b/interface/web/admin/lib/lang/pt_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index 4a28e49a75..6fc26344c0 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 5a29d0eff0..239a87dc74 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_php_list.lng b/interface/web/admin/lib/lang/ro_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/ro_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ro_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index efbc6bf263..2a39a454e8 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_firewall.lng b/interface/web/admin/lib/lang/ru_firewall.lng
index c30f26f2e8..70beb30437 100644
--- a/interface/web/admin/lib/lang/ru_firewall.lng
+++ b/interface/web/admin/lib/lang/ru_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Перечислить порты TCP через з
 $wb['udp_port_help_txt'] = 'Перечислить порты UDP через запятую';
 $wb['active_txt'] = 'Активно';
 $wb['firewall_error_unique'] = 'Уже есть такая запись брандмауэра для этого сервера.';
-$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \":\" и \",\"';
-$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \":\" и \",\"';
+$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
+$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 7ed1fb88ab..02edb659de 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -152,7 +152,7 @@ $wb['php_fpm_socket_dir_error_empty'] = 'Каталог PHP-FPM сокета п
 $wb['try_rescue_txt'] = 'Включить мониторинг службы и перезапуск при сбое';
 $wb['do_not_try_rescue_mysql_txt'] = 'Отключить мониторинг MySQL';
 $wb['do_not_try_rescue_mail_txt'] = 'Отключить мониторинг Email';
-$wb['rescue_description_txt'] = '<b>Информация:</b> Если вы хотите выключить MySQL, вы должны установить флажок \"Отключить мониторинг MySQL\" и подождать 2-3 минуты.<br>Если вы не подождёте 2-3 минуты, мониторинг будет пытаться перезапустить MySQL!';
+$wb['rescue_description_txt'] = '<b>Информация:</b> Если вы хотите выключить MySQL, вы должны установить флажок \\"Отключить мониторинг MySQL\\" и подождать 2-3 минуты.<br>Если вы не подождёте 2-3 минуты, мониторинг будет пытаться перезапустить MySQL!';
 $wb['enable_sni_txt'] = 'Включить SNI';
 $wb['do_not_try_rescue_httpd_txt'] = 'Отключить мониторинг HTTPD';
 $wb['set_folder_permissions_on_update_txt'] = 'Установить разрешения для папки на обновления';
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_php_list.lng b/interface/web/admin/lib/lang/ru_server_php_list.lng
index bb4cc308e4..5c84917f15 100644
--- a/interface/web/admin/lib/lang/ru_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ru_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Сервер';
 $wb['add_new_record_txt'] = 'Добавить новую версию PHP';
 $wb['client_id_txt'] = 'ID Клиента';
 $wb['name_txt'] = 'Имя PHP';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index 301827893e..baed497b0e 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -14,7 +14,7 @@ $wb['mailboxlist_webmail_link_txt'] = 'Ссылка на веб-почту в с
 $wb['webmail_url_txt'] = 'URL веб-почты';
 $wb['phpmyadmin_url_txt'] = 'URL PHPMyAdmin';
 $wb['use_domain_module_txt'] = 'Использовать модуль домена, чтобы добавить новые домены';
-$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \"домен\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
+$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \\"домен\\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
 $wb['new_domain_txt'] = 'HTML текст, чтобы создать новый домен';
 $wb['webdavuser_prefix_txt'] = 'Префикс пользователя WebDAV';
 $wb['webdavuser_prefix_error_regex'] = 'Некорректный символ в префиксе пользователя WebDAV.';
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Шаблон номера Кли
 $wb['customer_no_start_txt'] = 'Начальное значение номера Клиента';
 $wb['customer_no_counter_txt'] = 'Счётчик номера Клиента';
 $wb['session_timeout_txt'] = 'Тайм-аут сессии (в минутах)';
-$wb['session_allow_endless_txt'] = 'Включить \"оставаться в системе\"';
+$wb['session_allow_endless_txt'] = 'Включить \\"оставаться в системе\\"';
 $wb['No'] = 'Нет';
 $wb['min_password_length_txt'] = 'Минимальная длина пароля';
 $wb['min_password_strength_txt'] = 'Минимальная стойкость пароля';
@@ -84,17 +84,10 @@ $wb['default_dbserver_txt'] = 'Сервер базы данных по умол
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA<E2><80><99>s do not recognize any other flag values as described in RFC 6844
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_users.lng b/interface/web/admin/lib/lang/ru_users.lng
index bd1b8034ff..63f081f917 100644
--- a/interface/web/admin/lib/lang/ru_users.lng
+++ b/interface/web/admin/lib/lang/ru_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Создать пароль';
 $wb['repeat_password_txt'] = 'Повторить пароль';
 $wb['password_mismatch_txt'] = 'Пароли не совпадают.';
 $wb['password_match_txt'] = 'Эти пароли совпадают.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['client_not_admin_err'] = 'Пользователь, который принадлежит к клиенту не может быть установлен тип: admin';
 $wb['lost_password_function_txt'] = 'Функция восстановления пароля доступна';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 196fe3ffd0..c949c052ba 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/se_server_php_list.lng b/interface/web/admin/lib/lang/se_server_php_list.lng
index f5762ad3a6..451236d1ca 100644
--- a/interface/web/admin/lib/lang/se_server_php_list.lng
+++ b/interface/web/admin/lib/lang/se_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Lägg till ny PHP-version';
 $wb['client_id_txt'] = 'Kund';
 $wb['name_txt'] = 'PHP-namn';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index c9ccca89e9..74ae16734f 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 9d4703c4b3..709f7b928a 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_php_list.lng b/interface/web/admin/lib/lang/sk_server_php_list.lng
index b402fd1ed1..62cbe61687 100644
--- a/interface/web/admin/lib/lang/sk_server_php_list.lng
+++ b/interface/web/admin/lib/lang/sk_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index fdeb1648c4..90418e87d5 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -84,9 +84,10 @@ $wb['default_dbserver_txt'] = 'Default Database Server';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index b6a742781d..7d16f21454 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -295,4 +295,5 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_php_list.lng b/interface/web/admin/lib/lang/tr_server_php_list.lng
index 3b1d39bdd2..dd3d6b730c 100644
--- a/interface/web/admin/lib/lang/tr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['add_new_record_txt'] = 'PHP Sürümü Ekle';
 $wb['client_id_txt'] = 'Müşteri';
 $wb['name_txt'] = 'PHP Adı';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index 18657743ec..c52893f6b4 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -84,9 +84,10 @@ $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict Check';
 $wb['ca_iodef_txt'] = 'iodef';
 $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/client/lib/lang/ar_client_template_list.lng b/interface/web/client/lib/lang/ar_client_template_list.lng
index 0840184a9b..9112afc626 100644
--- a/interface/web/client/lib/lang/ar_client_template_list.lng
+++ b/interface/web/client/lib/lang/ar_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Client-Templates';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Template name';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/bg_client_template_list.lng b/interface/web/client/lib/lang/bg_client_template_list.lng
index 0840184a9b..9112afc626 100644
--- a/interface/web/client/lib/lang/bg_client_template_list.lng
+++ b/interface/web/client/lib/lang/bg_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Client-Templates';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Template name';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng
index ad9282aa4c..992c1ea2ca 100644
--- a/interface/web/client/lib/lang/br_client.lng
+++ b/interface/web/client/lib/lang/br_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
 $wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo (ou em branco).';
 $wb['paypal_email_error_isemail'] = 'Por favor, insira um e-mail do PayPal válido.';
 $wb['paypal_email_txt'] = 'e-mail do PayPal';
-$wb['err_msg_master_tpl_set'] = 'Todos as configurações de limites personalizadas são ignoradas se qualquer gabarito mestre ou algum gabarito \"personalizado\" for selecionado.';
+$wb['err_msg_master_tpl_set'] = 'Todos as configurações de limites personalizadas são ignoradas se qualquer gabarito mestre ou algum gabarito \\"personalizado\\" for selecionado.';
 $wb['aps_limits_txt'] = 'Limites de apps instalados';
 $wb['limit_aps_txt'] = 'Limite de instâncias de apps';
 $wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng
index bc7124b16c..4b2ce6555b 100644
--- a/interface/web/client/lib/lang/br_client_template.lng
+++ b/interface/web/client/lib/lang/br_client_template.lng
@@ -76,7 +76,7 @@ $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
 $wb['force_suexec_txt'] = 'Forçar SuEXEC';
-$wb['limit_hterror_txt'] = 'Diretório \"Custom error docs\" disponível';
+$wb['limit_hterror_txt'] = 'Diretório \\"Custom error docs\\" disponível';
 $wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
 $wb['limit_ssl_txt'] = 'SSL disponível';
 $wb['web_limits_txt'] = 'Limites web';
diff --git a/interface/web/client/lib/lang/br_client_template_list.lng b/interface/web/client/lib/lang/br_client_template_list.lng
index 4621788016..db73df8efd 100644
--- a/interface/web/client/lib/lang/br_client_template_list.lng
+++ b/interface/web/client/lib/lang/br_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Gabarito de limites para clientes';
 $wb['template_type_txt'] = 'Tipo';
 $wb['template_name_txt'] = 'Nome do Gabarito';
 $wb['template_id_txt'] = 'ID do Gabarito';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ca_client_template_list.lng b/interface/web/client/lib/lang/ca_client_template_list.lng
index b5315018d2..b22a375f44 100644
--- a/interface/web/client/lib/lang/ca_client_template_list.lng
+++ b/interface/web/client/lib/lang/ca_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Modèles de clients';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Nom du modèle';
 $wb['template_id_txt'] = 'ID du modèle';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/cz_client_template_list.lng b/interface/web/client/lib/lang/cz_client_template_list.lng
index 3abbd09adc..28a5d3bf63 100644
--- a/interface/web/client/lib/lang/cz_client_template_list.lng
+++ b/interface/web/client/lib/lang/cz_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Klientské šablony';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Název šablony';
 $wb['template_id_txt'] = 'ID Å¡ablony';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/de_client_template_list.lng b/interface/web/client/lib/lang/de_client_template_list.lng
index cd5f339eea..adb3fecdcb 100644
--- a/interface/web/client/lib/lang/de_client_template_list.lng
+++ b/interface/web/client/lib/lang/de_client_template_list.lng
@@ -3,5 +3,5 @@ $wb['list_head_txt'] = 'Kundenvorlagen';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Vorlagenname';
 $wb['template_id_txt'] = 'Template ID';
-$wb['sys_groupid_txt'] = 'Reseller';        
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/dk_client_template_list.lng b/interface/web/client/lib/lang/dk_client_template_list.lng
index ca83656182..6be08eade8 100644
--- a/interface/web/client/lib/lang/dk_client_template_list.lng
+++ b/interface/web/client/lib/lang/dk_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Kunde og Forhandler Skabeloner';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Skabelon navn';
 $wb['template_id_txt'] = 'Skabelon ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/el_client_template_list.lng b/interface/web/client/lib/lang/el_client_template_list.lng
index 175c2bfb8f..8bb3412df9 100644
--- a/interface/web/client/lib/lang/el_client_template_list.lng
+++ b/interface/web/client/lib/lang/el_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Πρότυπα Πελάτη';
 $wb['template_type_txt'] = 'Τύπος';
 $wb['template_name_txt'] = 'Όνομα Προτύπου';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/es_client_template_list.lng b/interface/web/client/lib/lang/es_client_template_list.lng
index 4a8032c6fb..283a4ff17a 100755
--- a/interface/web/client/lib/lang/es_client_template_list.lng
+++ b/interface/web/client/lib/lang/es_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Plantillas de clientes';
 $wb['template_id_txt'] = 'ID de la plantilla';
 $wb['template_name_txt'] = 'Nombre de la plantilla';
 $wb['template_type_txt'] = 'Tipo';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/fi_client_template_list.lng b/interface/web/client/lib/lang/fi_client_template_list.lng
index b3f310f131..586f93e01c 100755
--- a/interface/web/client/lib/lang/fi_client_template_list.lng
+++ b/interface/web/client/lib/lang/fi_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Asiakasmallit';
 $wb['template_type_txt'] = 'Tyyppi';
 $wb['template_name_txt'] = 'Asiakasmallin nimi';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/fr_client_template_list.lng b/interface/web/client/lib/lang/fr_client_template_list.lng
index b5315018d2..b22a375f44 100644
--- a/interface/web/client/lib/lang/fr_client_template_list.lng
+++ b/interface/web/client/lib/lang/fr_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Modèles de clients';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Nom du modèle';
 $wb['template_id_txt'] = 'ID du modèle';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/hr_client_template_list.lng b/interface/web/client/lib/lang/hr_client_template_list.lng
index cdc2f0006a..fc817c9c25 100644
--- a/interface/web/client/lib/lang/hr_client_template_list.lng
+++ b/interface/web/client/lib/lang/hr_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Predlošci za klijente';
 $wb['template_type_txt'] = 'Vrsta';
 $wb['template_name_txt'] = 'Naziv predloška';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/hu_client_template_list.lng b/interface/web/client/lib/lang/hu_client_template_list.lng
index 316de63143..b04b3405ee 100644
--- a/interface/web/client/lib/lang/hu_client_template_list.lng
+++ b/interface/web/client/lib/lang/hu_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Ügyfél-Sablonok';
 $wb['template_type_txt'] = 'típus';
 $wb['template_name_txt'] = 'Sablon neve';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/id_client_template_list.lng b/interface/web/client/lib/lang/id_client_template_list.lng
index e0da97101a..dd0259544b 100644
--- a/interface/web/client/lib/lang/id_client_template_list.lng
+++ b/interface/web/client/lib/lang/id_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Template Klien';
 $wb['template_type_txt'] = 'Tipe';
 $wb['template_name_txt'] = 'Nama Template';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_template_list.lng b/interface/web/client/lib/lang/it_client_template_list.lng
index d78faf8778..43b1a5ca49 100644
--- a/interface/web/client/lib/lang/it_client_template_list.lng
+++ b/interface/web/client/lib/lang/it_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Modelli cliente';
 $wb['template_type_txt'] = 'Tipo';
 $wb['template_name_txt'] = 'Nome modello';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ja_client_template_list.lng b/interface/web/client/lib/lang/ja_client_template_list.lng
index 8adca01b14..3e67a0e009 100644
--- a/interface/web/client/lib/lang/ja_client_template_list.lng
+++ b/interface/web/client/lib/lang/ja_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'クライアントテンプレート';
 $wb['template_type_txt'] = '種別';
 $wb['template_name_txt'] = 'テンプレート名';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/nl_client_template_list.lng b/interface/web/client/lib/lang/nl_client_template_list.lng
index 8bbe7a5a0f..fa62e4b79f 100644
--- a/interface/web/client/lib/lang/nl_client_template_list.lng
+++ b/interface/web/client/lib/lang/nl_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Client-Templates';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Template naam';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/pl_client_template_list.lng b/interface/web/client/lib/lang/pl_client_template_list.lng
index d6bd952d0b..a7f7cf1638 100644
--- a/interface/web/client/lib/lang/pl_client_template_list.lng
+++ b/interface/web/client/lib/lang/pl_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Szablon klienta';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Nazwa szablonu';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/pt_client_template_list.lng b/interface/web/client/lib/lang/pt_client_template_list.lng
index d5f451111a..54b88241da 100644
--- a/interface/web/client/lib/lang/pt_client_template_list.lng
+++ b/interface/web/client/lib/lang/pt_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Templates de Cliente ';
 $wb['template_type_txt'] = 'Tipo';
 $wb['template_name_txt'] = 'Nome da template';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ro_client_template_list.lng b/interface/web/client/lib/lang/ro_client_template_list.lng
index 17fbf995b9..3f5764c50c 100644
--- a/interface/web/client/lib/lang/ro_client_template_list.lng
+++ b/interface/web/client/lib/lang/ro_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Template client';
 $wb['template_type_txt'] = 'Tp';
 $wb['template_name_txt'] = 'Nume Template';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng
index a37d4673a1..befd6b15bf 100644
--- a/interface/web/client/lib/lang/ru_client.lng
+++ b/interface/web/client/lib/lang/ru_client.lng
@@ -108,7 +108,7 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Принудительный шабл
 $wb['limit_openvz_vm_error_notint'] = 'Лимит виртуальных серверов должен быть числом.';
 $wb['web_php_options_notempty'] = 'Нет выбранных параметров PHP. Выберите по крайней мере один параметр PHP.';
 $wb['ssh_chroot_notempty'] = 'Не выбран параметр SSH-Chroot. Выберите по крайней мере один параметр SSH-Chroot.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['add_additional_template_txt'] = 'Добавить дополнительный шаблон';
 $wb['delete_additional_template_txt'] = 'Удалить дополнительный шаблон';
 $wb['limit_cgi_txt'] = 'CGI доступен';
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Некорректный почтовый адре
 $wb['customer_no_error_unique'] = 'Счётчик номера Клиента должен быть уникален (или отсутствует).';
 $wb['paypal_email_error_isemail'] = 'Пожалуйста, введите действующий адрес электронной почты PayPal.';
 $wb['paypal_email_txt'] = 'Адрес электронной почты PayPal';
-$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \"Custom\"!';
+$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \\"Custom\\"!';
 $wb['aps_limits_txt'] = 'Лимиты Установщика APS';
 $wb['limit_aps_txt'] = 'Макс. количество экземпляров APS';
 $wb['limit_aps_error_notint'] = 'Лимит экземпляров APS должен быть числом.';
diff --git a/interface/web/client/lib/lang/ru_client_template_list.lng b/interface/web/client/lib/lang/ru_client_template_list.lng
index 30d0dfed45..2981e21671 100644
--- a/interface/web/client/lib/lang/ru_client_template_list.lng
+++ b/interface/web/client/lib/lang/ru_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Шаблоны клиентов';
 $wb['template_type_txt'] = 'Тип';
 $wb['template_name_txt'] = 'Имя шаблона';
 $wb['template_id_txt'] = 'ID шаблона';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng
index 4a177cccc8..998a886990 100644
--- a/interface/web/client/lib/lang/ru_reseller.lng
+++ b/interface/web/client/lib/lang/ru_reseller.lng
@@ -108,7 +108,7 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Принудительный шабл
 $wb['limit_openvz_vm_error_notint'] = 'Лимит виртуальных серверов должен быть числом.';
 $wb['web_php_options_notempty'] = 'Нет выбранных параметров PHP. Выберите по крайней мере один параметр PHP.';
 $wb['ssh_chroot_notempty'] = 'Не выбран параметр SSH-Chroot. Выберите по крайней мере один параметр SSH-Chroot.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['add_additional_template_txt'] = 'Добавить дополнительный шаблон';
 $wb['delete_additional_template_txt'] = 'Удалить дополнительный шаблон';
 $wb['limit_cgi_txt'] = 'CGI доступен';
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Дата добавления';
 $wb['limit_domainmodule_error_notint'] = 'Лимит модулей домена должен быть числом.';
 $wb['limit_domainmodule_txt'] = 'Лимит модулей домена';
 $wb['client_limits_txt'] = 'Лимиты Клиента';
-$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \"Custom\"!';
+$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \\"Custom\\"!';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
 $wb['email_error_empty'] = 'Адрес эл. почты пустой';
diff --git a/interface/web/client/lib/lang/se_client_template_list.lng b/interface/web/client/lib/lang/se_client_template_list.lng
index b594337e7c..37ce6de45d 100644
--- a/interface/web/client/lib/lang/se_client_template_list.lng
+++ b/interface/web/client/lib/lang/se_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Kundmallar';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Mallnamn';
 $wb['template_id_txt'] = 'Mall-ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/sk_client_template_list.lng b/interface/web/client/lib/lang/sk_client_template_list.lng
index ac25b8f3a9..94637b1750 100644
--- a/interface/web/client/lib/lang/sk_client_template_list.lng
+++ b/interface/web/client/lib/lang/sk_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Klient-Šablóny';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Meno šablóny';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_template_list.lng b/interface/web/client/lib/lang/tr_client_template_list.lng
index 1663e6e2da..fbe35efc9e 100644
--- a/interface/web/client/lib/lang/tr_client_template_list.lng
+++ b/interface/web/client/lib/lang/tr_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Müşteri ve Bayi Kalıpları';
 $wb['template_type_txt'] = 'Tip';
 $wb['template_name_txt'] = 'Kalıp adı';
 $wb['template_id_txt'] = 'Kalıp kodu';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_caa.lng b/interface/web/dns/lib/lang/ar_dns_caa.lng
index 1fa7dcb7d5..973a97ceb6 100644
--- a/interface/web/dns/lib/lang/ar_dns_caa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/bg_dns_caa.lng b/interface/web/dns/lib/lang/bg_dns_caa.lng
index 1fa7dcb7d5..973a97ceb6 100644
--- a/interface/web/dns/lib/lang/bg_dns_caa.lng
+++ b/interface/web/dns/lib/lang/bg_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/br_dns_caa.lng b/interface/web/dns/lib/lang/br_dns_caa.lng
index 1fa7dcb7d5..973a97ceb6 100644
--- a/interface/web/dns/lib/lang/br_dns_caa.lng
+++ b/interface/web/dns/lib/lang/br_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/br_dns_dmarc.lng b/interface/web/dns/lib/lang/br_dns_dmarc.lng
index 5b7201075f..8bb35318f8 100644
--- a/interface/web/dns/lib/lang/br_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/br_dns_dmarc.lng
@@ -2,7 +2,7 @@
 $wb['data_txt'] = 'Registro DMARC';
 $wb['domain_txt'] = 'Domínio';
 $wb['dmarc_policy_txt'] = 'Política de recepção de e-mails';
-$wb['dmarc_policy_note_txt'] = 'Como os \"ISPs\" devem tratar as mensagens SPF ou DKIM com falha (DMARC).';
+$wb['dmarc_policy_note_txt'] = 'Como os \\"ISPs\\" devem tratar as mensagens SPF ou DKIM com falha (DMARC).';
 $wb['dmarc_policy_none_txt'] = 'não fazer nada';
 $wb['dmarc_policy_quarantine_txt'] = 'quarentena';
 $wb['dmarc_policy_reject_txt'] = 'rejeitar';
@@ -11,16 +11,16 @@ $wb['dmarc_rua_note_txt'] = 'Endereços de e-mail para receber relatórios do si
 $wb['dmarc_ruf_txt'] = 'Relatório forense de dados por endereço';
 $wb['dmarc_ruf_note_txt'] = 'Endereços de e-mail para receber amostras de mensagens com falha e controles DMARC do domínio (separados por espaço em branco)';
 $wb['dmarc_fo_txt'] = 'Opções de relatório forense';
-$wb['dmarc_fo0_txt'] = 'Gerar relatórios se todos os mecanismos de autenticação subjacentes deixarem de produzir um resultado DMARC \"pass\".';
+$wb['dmarc_fo0_txt'] = 'Gerar relatórios se todos os mecanismos de autenticação subjacentes deixarem de produzir um resultado DMARC \\"pass\\".';
 $wb['dmarc_fo1_txt'] = 'Gerar relatório se algum mecanismo falhar.';
 $wb['dmarc_fod_txt'] = 'Gerar relatório se assinatura DKIM falhar na verificação.';
 $wb['dmarc_fos_txt'] = 'Gerar relatório se o SPF falhar.';
 $wb['dmarc_adkim_txt'] = 'Parametrização do identificador DKIM';
-$wb['dmarc_adkim_note_txt'] = 'Modo \"strict\" exige combinação exata entre o DKIM do domínio e e-mails';
+$wb['dmarc_adkim_note_txt'] = 'Modo \\"strict\\" exige combinação exata entre o DKIM do domínio e e-mails';
 $wb['dmarc_adkim_r_txt'] = 'relaxed';
 $wb['dmarc_adkim_s_txt'] = 'strict';
 $wb['dmarc_aspf_txt'] = 'Parametrização do identificador SPF';
-$wb['dmarc_aspf_note_txt'] = 'Modo \"strict\" exige combinação exata entre o SPF do domínio e e-mails';
+$wb['dmarc_aspf_note_txt'] = 'Modo \\"strict\\" exige combinação exata entre o SPF do domínio e e-mails';
 $wb['dmarc_aspf_r_txt'] = 'relaxed';
 $wb['dmarc_aspf_s_txt'] = 'strict';
 $wb['dmarc_rf_txt'] = 'Formatação do relatório';
@@ -37,7 +37,7 @@ $wb['dmarc_sp_quarantine_txt'] = 'quarentena';
 $wb['dmarc_sp_reject_txt'] = 'rejeitar';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['dmarc_policy_error_txt'] = 'Somente a política \"nenhum\" é permitida para e-mails sem assinatura DKIM.';
+$wb['dmarc_policy_error_txt'] = 'Somente a política \\"nenhum\\" é permitida para e-mails sem assinatura DKIM.';
 $wb['dmarc_no_dkim_txt'] = 'Nenhum registro DKIM ativo.';
 $wb['dmarc_no_spf_txt'] = 'Nenhum registro SPF ativo.';
 $wb['dmarc_more_spf_txt'] = 'Mais de um registro SPF ativo.';
diff --git a/interface/web/dns/lib/lang/br_dns_tlsa.lng b/interface/web/dns/lib/lang/br_dns_tlsa.lng
index c78c6fd190..5e1bf2256e 100644
--- a/interface/web/dns/lib/lang/br_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/br_dns_tlsa.lng
@@ -9,8 +9,8 @@ $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
 $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
 $wb['name_error_empty'] = 'Descritor de serviço está em branco.';
-$wb['name_error_regex'] = 'Descritor de serviço é inválido. Formato correto: \"_&lt;port&gt;._(tcp|udp).&lt;hostname&gt;\".';
+$wb['name_error_regex'] = 'Descritor de serviço é inválido. Formato correto: \\"_&lt;port&gt;._(tcp|udp).&lt;hostname&gt;\\".';
 $wb['data_error_empty'] = 'Dados TLSA está em branco.';
-$wb['data_error_regex'] = 'Dados TLSA são inválidos. Formato correto: \"n n n HASH\".';
+$wb['data_error_regex'] = 'Dados TLSA são inválidos. Formato correto: \\"n n n HASH\\".';
 $wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_caa.lng b/interface/web/dns/lib/lang/ca_dns_caa.lng
index 1fa7dcb7d5..973a97ceb6 100644
--- a/interface/web/dns/lib/lang/ca_dns_caa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/cz_dns_caa.lng b/interface/web/dns/lib/lang/cz_dns_caa.lng
index 1fa7dcb7d5..973a97ceb6 100644
--- a/interface/web/dns/lib/lang/cz_dns_caa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/de_dns_caa.lng b/interface/web/dns/lib/lang/de_dns_caa.lng
index 88dbf6e47a..a711023684 100644
--- a/interface/web/dns/lib/lang/de_dns_caa.lng
+++ b/interface/web/dns/lib/lang/de_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(mit Komma getrennte Liste - leer für alle Namen
 $wb['ca_options_txt'] = 'zusätzliche Angaben';
 $wb['ca_options_note_txt'] = 'von der Zertifizierungsstelle vorgegeben (mit Komma getrennte Liste)';
 $wb['ca_wildcard_txt'] = 'Wildcard verwenden';
-$wb['ca_critical_txt'] = 'Strikte Überprüfung durch die Zertifizierungsstelle'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strikte Überprüfung durch die Zertifizierungsstelle';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktiv';
 $wb['select_txt'] = 'Zertifizierungstelle auswählen';
diff --git a/interface/web/dns/lib/lang/dk_dns_caa.lng b/interface/web/dns/lib/lang/dk_dns_caa.lng
index 1fa7dcb7d5..973a97ceb6 100644
--- a/interface/web/dns/lib/lang/dk_dns_caa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/el_dns_caa.lng b/interface/web/dns/lib/lang/el_dns_caa.lng
index 1fa7dcb7d5..973a97ceb6 100644
--- a/interface/web/dns/lib/lang/el_dns_caa.lng
+++ b/interface/web/dns/lib/lang/el_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/es_dns_caa.lng b/interface/web/dns/lib/lang/es_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/es_dns_caa.lng
+++ b/interface/web/dns/lib/lang/es_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/fi_dns_caa.lng b/interface/web/dns/lib/lang/fi_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/fi_dns_caa.lng
+++ b/interface/web/dns/lib/lang/fi_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/fr_dns_caa.lng b/interface/web/dns/lib/lang/fr_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/fr_dns_caa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/hr_dns_caa.lng b/interface/web/dns/lib/lang/hr_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/hr_dns_caa.lng
+++ b/interface/web/dns/lib/lang/hr_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/hu_dns_caa.lng b/interface/web/dns/lib/lang/hu_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/hu_dns_caa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/id_dns_caa.lng b/interface/web/dns/lib/lang/id_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/id_dns_caa.lng
+++ b/interface/web/dns/lib/lang/id_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/it_dns_caa.lng b/interface/web/dns/lib/lang/it_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/it_dns_caa.lng
+++ b/interface/web/dns/lib/lang/it_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/ja_dns_caa.lng b/interface/web/dns/lib/lang/ja_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/ja_dns_caa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/nl_dns_caa.lng b/interface/web/dns/lib/lang/nl_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/nl_dns_caa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/pl_dns_caa.lng b/interface/web/dns/lib/lang/pl_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/pl_dns_caa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/pt_dns_caa.lng b/interface/web/dns/lib/lang/pt_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/pt_dns_caa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/ro_dns_caa.lng b/interface/web/dns/lib/lang/ro_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/ro_dns_caa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/ru_dns_caa.lng b/interface/web/dns/lib/lang/ru_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/ru_dns_caa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/ru_dns_hinfo.lng b/interface/web/dns/lib/lang/ru_dns_hinfo.lng
index 830576fdf6..363ed0eef5 100644
--- a/interface/web/dns/lib/lang/ru_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/ru_dns_hinfo.lng
@@ -11,6 +11,6 @@ $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту за
 $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'Информация об узле отсутсвует';
-$wb['data_error_regex'] = 'Поле \"Информация о хосте\" имеет неправильный формат';
+$wb['data_error_regex'] = 'Поле \\"Информация о хосте\\" имеет неправильный формат';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_caa.lng b/interface/web/dns/lib/lang/se_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/se_dns_caa.lng
+++ b/interface/web/dns/lib/lang/se_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/sk_dns_caa.lng b/interface/web/dns/lib/lang/sk_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/sk_dns_caa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/dns/lib/lang/tr_dns_caa.lng b/interface/web/dns/lib/lang/tr_dns_caa.lng
index bf5b2ac8e1..82de234d6e 100644
--- a/interface/web/dns/lib/lang/tr_dns_caa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_caa.lng
@@ -6,7 +6,7 @@ $wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all host
 $wb['ca_options_txt'] = 'Additional Options';
 $wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
 $wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ca_critical_txt'] = 'Strict check';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['select_txt'] = 'Select Certifiction Authority';
diff --git a/interface/web/help/lib/lang/br_support_message.lng b/interface/web/help/lib/lang/br_support_message.lng
index 83097915bf..19ae309a1f 100644
--- a/interface/web/help/lib/lang/br_support_message.lng
+++ b/interface/web/help/lib/lang/br_support_message.lng
@@ -12,5 +12,5 @@ $wb['answer_to_support_request_txt'] = 'Você tem uma nova resposta para requisi
 $wb['answer_to_support_request_sent_txt'] = 'Sua resposta para requisição de suporte foi enviada. Por favor, não responda esse e-mail.';
 $wb['support_request_sent_txt'] = 'Sua requisição de suporte foi enviada. Por favor não responda este e-mail.';
 $wb['recipient_or_sender_email_address_not_valid_txt'] = 'A mensagem não foi enviada porque o e-mail do destinatário e/ou remetente não é válido.';
-$wb['subject_is_empty'] = 'Não é permitido o campo \"Assunto\" em branco.';
+$wb['subject_is_empty'] = 'Não é permitido o campo \\"Assunto\\" em branco.';
 ?>
diff --git a/interface/web/login/lib/lang/br_login_as.lng b/interface/web/login/lib/lang/br_login_as.lng
index 4c02c963c2..5d9fb269b9 100644
--- a/interface/web/login/lib/lang/br_login_as.lng
+++ b/interface/web/login/lib/lang/br_login_as.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['login_1_txt'] = 'Você deseja acessar como usuário';
-$wb['login_2_txt'] = 'Para retornar ao administrador, você pode \"voltar\" selecionando sair.';
+$wb['login_2_txt'] = 'Para retornar ao administrador, você pode \\"voltar\\" selecionando sair.';
 $wb['btn_yes_txt'] = 'Sim, acessar como cliente';
 $wb['btn_back_txt'] = 'Não, voltar a lista';
 $wb['udp_port_help_txt'] = 'Separado por vírgula';
diff --git a/interface/web/login/lib/lang/ru_login_as.lng b/interface/web/login/lib/lang/ru_login_as.lng
index 46a3eab288..63031d4d09 100644
--- a/interface/web/login/lib/lang/ru_login_as.lng
+++ b/interface/web/login/lib/lang/ru_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Вы хотите войти как пользователь';
-$wb['login_2_txt'] = 'Если вы это сделаете, вы можете \"вернуться\", нажав на \"выход\".';
+$wb['login_2_txt'] = 'Если вы это сделаете, вы можете \\"вернуться\\", нажав на \\"выход\\".';
 $wb['btn_yes_txt'] = 'Да, войти как Клиент';
 $wb['btn_back_txt'] = 'Нет, назад к списку';
 $wb['udp_port_help_txt'] = 'Перечислить через запятую';
 $wb['active_txt'] = 'Активно';
 $wb['firewall_error_unique'] = 'Уже есть такая запись бредмауэра для этого сервера.';
-$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \":\" и \",\"';
-$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \":\" и \",\"';
+$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
+$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
 $wb['login_as_or_logout_txt'] = 'Вы хотите заново войти как {UTYPE} или выйти?';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index a786566277..f91d40f625 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -35,7 +35,7 @@ $wb['name_txt'] = 'Nome real';
 $wb['name_optional_txt'] = '(Opcional)';
 $wb['autoresponder_active'] = 'Ativar autoresposta';
 $wb['cc_txt'] = 'Enviar cópia para';
-$wb['cc_error_isemail'] = 'O campo \"Enviar cópia para\" deve conter um endereço de e-mail válido';
+$wb['cc_error_isemail'] = 'O campo \\"Enviar cópia para\\" deve conter um endereço de e-mail válido';
 $wb['domain_txt'] = 'Domínio';
 $wb['now_txt'] = 'Agora';
 $wb['login_error_unique'] = 'O acesso já está em uso.';
@@ -48,7 +48,7 @@ $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['email_error_isascii'] = 'Por favor não use caracteres \"unicode\" para a senha. Esta ação poderá causar problemas com seu cliente de e-mail (mua).';
+$wb['email_error_isascii'] = 'Por favor não use caracteres \\"unicode\\" para a senha. Esta ação poderá causar problemas com seu cliente de e-mail (mua).';
 $wb['cc_note_txt'] = '(Múltiplos e-mails separados por vírgulas)';
 $wb['disablesmtp_txt'] = 'Desabilitar smtp (envio)';
 $wb['autoresponder_start_date_is_required'] = 'Data de início deve ser configurada quando \'autoresposta\' é habilitada.';
diff --git a/interface/web/mail/lib/lang/ru_mail_get.lng b/interface/web/mail/lib/lang/ru_mail_get.lng
index 0ce613cd05..b3f2f0b6bf 100644
--- a/interface/web/mail/lib/lang/ru_mail_get.lng
+++ b/interface/web/mail/lib/lang/ru_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Пустой пароль.';
 $wb['destination_error_isemail'] = 'Не выбран получатель или запись некорректна.';
 $wb['source_server_error_regex'] = 'Некорректное доменное имя для сервера POP3/IMAP.';
 $wb['source_read_all_txt'] = 'Получать все сообщения электронной почты (включая прочитанные письма)';
-$wb['error_delete_read_all_combination'] = 'Недопустимая комбинация параметров. Вы не можете использовать \"Удалить письма после получения\" = НЕТ вместе с \"Получить все письма\" = ДА';
+$wb['error_delete_read_all_combination'] = 'Недопустимая комбинация параметров. Вы не можете использовать \\"Удалить письма после получения\\" = НЕТ вместе с \\"Получить все письма\\" = ДА';
 $wb['source_delete_note_txt'] = 'Пожалуйста, прежде чем активировать этот параметр, убедитесь в том, что сборщик почты работает.';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_user_filter.lng b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
index ecc2d25b9d..c8306f9838 100644
--- a/interface/web/mail/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
@@ -6,7 +6,7 @@ $wb['active_txt'] = 'Активно';
 $wb['rulename_error_empty'] = 'Имя пустое.';
 $wb['searchterm_is_empty'] = 'Поле поиска пустое.';
 $wb['source_txt'] = 'Источник';
-$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \"a-z\", \"0-9\", \"-\", \".\", \"_\" и {пробел}';
+$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \\"a-z\\", \\"0-9\\", \\"-\\", \\".\\", \\"_\\" и {пробел}';
 $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.';
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
diff --git a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
index f10dd4ddb2..d834e4057a 100644
--- a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
@@ -6,7 +6,7 @@ $wb['active_txt'] = 'Активно';
 $wb['rulename_error_empty'] = 'Имя пустое.';
 $wb['searchterm_is_empty'] = 'Поле поиска пустое.';
 $wb['source_txt'] = 'Источник';
-$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \"a-z\", \"0-9\", \"-\", \".\", \"_\" и {пробел}';
+$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \\"a-z\\", \\"0-9\\", \\"-\\", \\".\\", \\"_\\" и {пробел}';
 $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.';
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
diff --git a/interface/web/monitor/lib/lang/ar.lng b/interface/web/monitor/lib/lang/ar.lng
index e00287a8e7..9d54ea1f5d 100644
--- a/interface/web/monitor/lib/lang/ar.lng
+++ b/interface/web/monitor/lib/lang/ar.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ar_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ar_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ar_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ar_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ar_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ar_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/bg.lng b/interface/web/monitor/lib/lang/bg.lng
index 0db4623d03..a8b7f491ac 100644
--- a/interface/web/monitor/lib/lang/bg.lng
+++ b/interface/web/monitor/lib/lang/bg.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng b/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/bg_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/bg_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/bg_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/bg_dataloghistory_view.lng b/interface/web/monitor/lib/lang/bg_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/bg_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/br.lng b/interface/web/monitor/lib/lang/br.lng
index 048fec64be..72325cc5b3 100644
--- a/interface/web/monitor/lib/lang/br.lng
+++ b/interface/web/monitor/lib/lang/br.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domínio';
 $wb['Show MongoDB-Log'] = 'Exibir logs do MongoDB';
 $wb['monitor_services_mongodb_txt'] = 'Servidor MongoDB:';
 $wb['monitor_title_mongodb_txt'] = 'Logs do MongoDB';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_list.lng b/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_view.lng b/interface/web/monitor/lib/lang/br_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/ca.lng b/interface/web/monitor/lib/lang/ca.lng
index 4575be2ff1..b57b255a74 100644
--- a/interface/web/monitor/lib/lang/ca.lng
+++ b/interface/web/monitor/lib/lang/ca.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ca_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ca_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ca_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ca_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ca_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ca_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/cz.lng b/interface/web/monitor/lib/lang/cz.lng
index dc3e3cb341..9e054aacf2 100644
--- a/interface/web/monitor/lib/lang/cz.lng
+++ b/interface/web/monitor/lib/lang/cz.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Klient';
 $wb['monitor_database_domain_txt'] = 'Doména';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/dk.lng b/interface/web/monitor/lib/lang/dk.lng
index dc43c1306f..4c7bfab1e7 100644
--- a/interface/web/monitor/lib/lang/dk.lng
+++ b/interface/web/monitor/lib/lang/dk.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng b/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/dk_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/dk_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/dk_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/dk_dataloghistory_view.lng b/interface/web/monitor/lib/lang/dk_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/dk_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/el.lng b/interface/web/monitor/lib/lang/el.lng
index 414642e2e3..245c80c666 100644
--- a/interface/web/monitor/lib/lang/el.lng
+++ b/interface/web/monitor/lib/lang/el.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/el_dataloghistory_list.lng b/interface/web/monitor/lib/lang/el_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/el_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/el_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/el_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/el_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/el_dataloghistory_view.lng b/interface/web/monitor/lib/lang/el_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/el_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/es.lng b/interface/web/monitor/lib/lang/es.lng
index 8cc87b4801..f4acb3c45c 100755
--- a/interface/web/monitor/lib/lang/es.lng
+++ b/interface/web/monitor/lib/lang/es.lng
@@ -161,4 +161,5 @@ $wb['System load 15 minutes'] = 'Carga del sistema hace 15 minutos';
 $wb['System load 5 minutes'] = 'Carga del sistema hace 5 minutos';
 $wb['System State (All Servers)'] = 'Estado de los sistemas';
 $wb['Users online'] = 'Usuarios en línea';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/es_dataloghistory_list.lng b/interface/web/monitor/lib/lang/es_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/es_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/es_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/es_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/es_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/es_dataloghistory_view.lng b/interface/web/monitor/lib/lang/es_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/es_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/fi.lng b/interface/web/monitor/lib/lang/fi.lng
index 44143f3d20..911aae9bd1 100755
--- a/interface/web/monitor/lib/lang/fi.lng
+++ b/interface/web/monitor/lib/lang/fi.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng b/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/fi_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/fi_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fi_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/fi_dataloghistory_view.lng b/interface/web/monitor/lib/lang/fi_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fi_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/fr.lng b/interface/web/monitor/lib/lang/fr.lng
index 9fb2ab5e8c..c08fe74948 100644
--- a/interface/web/monitor/lib/lang/fr.lng
+++ b/interface/web/monitor/lib/lang/fr.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/fr_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/fr_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fr_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/fr_dataloghistory_view.lng b/interface/web/monitor/lib/lang/fr_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fr_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/hr.lng b/interface/web/monitor/lib/lang/hr.lng
index d878568104..17899ff3f0 100644
--- a/interface/web/monitor/lib/lang/hr.lng
+++ b/interface/web/monitor/lib/lang/hr.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/hr_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/hr_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hr_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/hr_dataloghistory_view.lng b/interface/web/monitor/lib/lang/hr_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hr_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/hu.lng b/interface/web/monitor/lib/lang/hu.lng
index 85fda97908..9a5c41654f 100644
--- a/interface/web/monitor/lib/lang/hu.lng
+++ b/interface/web/monitor/lib/lang/hu.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng b/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/hu_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/hu_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hu_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/hu_dataloghistory_view.lng b/interface/web/monitor/lib/lang/hu_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hu_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/id.lng b/interface/web/monitor/lib/lang/id.lng
index d77f145649..4cdbf5d8ba 100644
--- a/interface/web/monitor/lib/lang/id.lng
+++ b/interface/web/monitor/lib/lang/id.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/id_dataloghistory_list.lng b/interface/web/monitor/lib/lang/id_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/id_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/id_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/id_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/id_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/id_dataloghistory_view.lng b/interface/web/monitor/lib/lang/id_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/id_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/it.lng b/interface/web/monitor/lib/lang/it.lng
index c7a6823683..e6feadf01f 100644
--- a/interface/web/monitor/lib/lang/it.lng
+++ b/interface/web/monitor/lib/lang/it.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_list.lng b/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_view.lng b/interface/web/monitor/lib/lang/it_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/ja.lng b/interface/web/monitor/lib/lang/ja.lng
index bc2c7d2b5c..cccd678cb7 100644
--- a/interface/web/monitor/lib/lang/ja.lng
+++ b/interface/web/monitor/lib/lang/ja.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ja_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ja_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ja_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ja_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ja_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ja_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/nl.lng b/interface/web/monitor/lib/lang/nl.lng
index 81caa02b70..a534b9afb3 100644
--- a/interface/web/monitor/lib/lang/nl.lng
+++ b/interface/web/monitor/lib/lang/nl.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng b/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/nl_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/nl_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/nl_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/nl_dataloghistory_view.lng b/interface/web/monitor/lib/lang/nl_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/nl_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/pl.lng b/interface/web/monitor/lib/lang/pl.lng
index 77d05e0569..a8e1b3e53c 100644
--- a/interface/web/monitor/lib/lang/pl.lng
+++ b/interface/web/monitor/lib/lang/pl.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng b/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/pl_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/pl_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pl_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/pl_dataloghistory_view.lng b/interface/web/monitor/lib/lang/pl_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pl_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/pt.lng b/interface/web/monitor/lib/lang/pt.lng
index 2218ede892..7930febda2 100644
--- a/interface/web/monitor/lib/lang/pt.lng
+++ b/interface/web/monitor/lib/lang/pt.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng b/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/pt_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/pt_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pt_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/pt_dataloghistory_view.lng b/interface/web/monitor/lib/lang/pt_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pt_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/ro.lng b/interface/web/monitor/lib/lang/ro.lng
index 7b06c4ba0c..96a2ce10e6 100644
--- a/interface/web/monitor/lib/lang/ro.lng
+++ b/interface/web/monitor/lib/lang/ro.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ro_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ro_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ro_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ro_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ro_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ro_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/ru.lng b/interface/web/monitor/lib/lang/ru.lng
index 49e9d4604d..823174b716 100644
--- a/interface/web/monitor/lib/lang/ru.lng
+++ b/interface/web/monitor/lib/lang/ru.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Домен';
 $wb['Show MongoDB-Log'] = 'Показать журнал MongoDB';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-сервер:';
 $wb['monitor_title_mongodb_txt'] = 'Журнал MongoDB';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ru_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ru_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ru_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ru_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ru_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ru_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/se.lng b/interface/web/monitor/lib/lang/se.lng
index 732805d2a6..78dd5ed1be 100644
--- a/interface/web/monitor/lib/lang/se.lng
+++ b/interface/web/monitor/lib/lang/se.lng
@@ -161,4 +161,5 @@ $wb['no_permissions_to_view_munin_txt'] = 'Du har inte behörighet att visa Muni
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/se_dataloghistory_list.lng b/interface/web/monitor/lib/lang/se_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/se_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/se_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/se_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/se_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/se_dataloghistory_view.lng b/interface/web/monitor/lib/lang/se_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/se_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/sk.lng b/interface/web/monitor/lib/lang/sk.lng
index 7697242386..36af834eaf 100644
--- a/interface/web/monitor/lib/lang/sk.lng
+++ b/interface/web/monitor/lib/lang/sk.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng b/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/sk_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/sk_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/sk_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/sk_dataloghistory_view.lng b/interface/web/monitor/lib/lang/sk_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/sk_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/tr.lng b/interface/web/monitor/lib/lang/tr.lng
index 00beedb1dc..005b4d97e2 100644
--- a/interface/web/monitor/lib/lang/tr.lng
+++ b/interface/web/monitor/lib/lang/tr.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_serverstate_updatesunknown_txt'] = 'System Update: ???';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng
new file mode 100644
index 0000000000..9f9afd6347
--- /dev/null
+++ b/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'Datalog History';
+$wb["tstamp_txt"] = 'Date';
+$wb["server_id_txt"] = 'Server';
+$wb["dbtable_txt"] = 'DB Table';
+$wb["action_txt"] = 'Action';
+$wb["status_txt"] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/tr_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/tr_dataloghistory_undo.lng
new file mode 100644
index 0000000000..0e040a3e77
--- /dev/null
+++ b/interface/web/monitor/lib/lang/tr_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/tr_dataloghistory_view.lng b/interface/web/monitor/lib/lang/tr_dataloghistory_view.lng
new file mode 100644
index 0000000000..df9ddd286f
--- /dev/null
+++ b/interface/web/monitor/lib/lang/tr_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index bfaf07f226..f208ab3f36 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_aps.lng b/interface/web/sites/lib/lang/bg_aps.lng
index 5313f2d910..6a5f981943 100644
--- a/interface/web/sites/lib/lang/bg_aps.lng
+++ b/interface/web/sites/lib/lang/bg_aps.lng
@@ -60,4 +60,4 @@ $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['password_strength_txt'] = 'Сила на паролата';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index 0c01cbfdac..a84d915230 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/br.lng b/interface/web/sites/lib/lang/br.lng
index 3fdd93585e..685ce6ed28 100644
--- a/interface/web/sites/lib/lang/br.lng
+++ b/interface/web/sites/lib/lang/br.lng
@@ -30,6 +30,6 @@ $wb['Available packages'] = 'Pacotes disponíveis';
 $wb['Installed packages'] = 'Pacotes instalados';
 $wb['Update Packagelist'] = 'Atualizar lista de pacotes';
 $wb['Subdomain (Vhost)'] = 'Subdomínio (vhost)';
-$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \"proxy\" exige uma url como caminho do redirecionamento.';
+$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \\"proxy\\" exige uma url como caminho do redirecionamento.';
 $wb['Domain'] = 'Domínio';
 ?>
diff --git a/interface/web/sites/lib/lang/br_aps.lng b/interface/web/sites/lib/lang/br_aps.lng
index 46cfabfb01..27e7434359 100644
--- a/interface/web/sites/lib/lang/br_aps.lng
+++ b/interface/web/sites/lib/lang/br_aps.lng
@@ -60,4 +60,4 @@ $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/sites/lib/lang/br_cron.lng b/interface/web/sites/lib/lang/br_cron.lng
index eab5b9f688..2bbadf6d1b 100644
--- a/interface/web/sites/lib/lang/br_cron.lng
+++ b/interface/web/sites/lib/lang/br_cron.lng
@@ -19,8 +19,8 @@ $wb['run_wday_error_format'] = 'Formato dos dias da semana é inválido.';
 $wb['command_error_format'] = 'Formato de comando é inválido. Somente endereços url http/https são permitidos.';
 $wb['unknown_fieldtype_error'] = 'Um tipo desconhecido de campo foi usado.';
 $wb['server_id_error_empty'] = 'O ID do servidor está em branco.';
-$wb['limit_cron_url_txt'] = 'Somente url do cron. Por favor, insira uma url iniciando com \"http://\" e um comando do cron.';
+$wb['limit_cron_url_txt'] = 'Somente url do cron. Por favor, insira uma url iniciando com \\"http://\\" e um comando do cron.';
 $wb['command_error_empty'] = 'Comando está em branco.';
-$wb['command_hint_txt'] = 'Você poderá usar, por exemplo: \"/var/www/clients/clientX/webY/meu_script.sh\" ou \"http://www.dominio.com.br/path/script.php\" e também a palavra reservada \"[web_root]\" substituído por \"/var/www/clients/clientX/webY/web\".';
+$wb['command_hint_txt'] = 'Você poderá usar, por exemplo: \\"/var/www/clients/clientX/webY/meu_script.sh\\" ou \\"http://www.dominio.com.br/path/script.php\\" e também a palavra reservada \\"[web_root]\\" substituído por \\"/var/www/clients/clientX/webY/web\\".';
 $wb['log_output_txt'] = 'Saída do Log';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database.lng b/interface/web/sites/lib/lang/br_database.lng
index 57b97693eb..ac916feef1 100644
--- a/interface/web/sites/lib/lang/br_database.lng
+++ b/interface/web/sites/lib/lang/br_database.lng
@@ -23,7 +23,7 @@ $wb['database_remote_error_ips'] = 'Pelo menos um dos endereços IP informados n
 $wb['database_name_error_len'] = 'Nome do banco de dados - {db} - é muito longo. 64 caracteres, incluindo o prefixo, é o limite permitido.';
 $wb['database_user_error_len'] = 'Nome do usuário do banco de dados \'{user}\' é muito longo. 16 caracteres, incluindo o prefixo, é o limite permitido.';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['database_site_error_empty'] = 'Selecione o \"site\" ao qual o banco de dados pertence.';
+$wb['database_site_error_empty'] = 'Selecione o \\"site\\" ao qual o banco de dados pertence.';
 $wb['select_site_txt'] = '- Selecionar site -';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
diff --git a/interface/web/sites/lib/lang/br_database_user.lng b/interface/web/sites/lib/lang/br_database_user.lng
index 518f0296e1..59b9fce627 100644
--- a/interface/web/sites/lib/lang/br_database_user.lng
+++ b/interface/web/sites/lib/lang/br_database_user.lng
@@ -6,7 +6,7 @@ $wb['client_txt'] = 'Cliente';
 $wb['active_txt'] = 'Ativo';
 $wb['database_user_error_empty'] = 'Usuário do banco de dados está em branco.';
 $wb['database_user_error_unique'] = 'Já existe um usuário do banco de dados com este nome no servidor. Para configurar um nome exclusivo, use como prefixo o domínio para o nome do usuário.';
-$wb['database_user_error_regex'] = 'Usuário do banco de dados inválido! O nome do usuário pode conter os seguintes caracteres: \'\"a-z\', \'A-Z\', \'0-9\' e o \'underscore\'. Tamanho: 2 - 64 caracteres.';
+$wb['database_user_error_regex'] = 'Usuário do banco de dados inválido! O nome do usuário pode conter os seguintes caracteres: \'\\"a-z\', \'A-Z\', \'0-9\' e o \'underscore\'. Tamanho: 2 - 64 caracteres.';
 $wb['database_user_error_len'] = 'O usuário do banco de dados - {user} - é muito longo. O limite do nome do usuário, incluindo o prefixo, são 16 caracteres.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
diff --git a/interface/web/sites/lib/lang/br_ftp_user.lng b/interface/web/sites/lib/lang/br_ftp_user.lng
index bb8d99ceb0..3df741ed9e 100644
--- a/interface/web/sites/lib/lang/br_ftp_user.lng
+++ b/interface/web/sites/lib/lang/br_ftp_user.lng
@@ -25,8 +25,8 @@ $wb['directory_error_empty'] = 'Diretório está em branco.';
 $wb['directory_error_notinweb'] = 'O diretório não está dentro do diretório web principal.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
 $wb['quota_size_error_regex'] = 'Cota: insira -1 para ilimitado ou um número > 0';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \"./\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \\"./\\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/br_shell_user.lng b/interface/web/sites/lib/lang/br_shell_user.lng
index c92bf5baa4..3cbc911ab3 100644
--- a/interface/web/sites/lib/lang/br_shell_user.lng
+++ b/interface/web/sites/lib/lang/br_shell_user.lng
@@ -20,8 +20,8 @@ $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
 $wb['puser_txt'] = 'Usuário web';
 $wb['pgroup_txt'] = 'Grupo web';
 $wb['ssh_rsa_txt'] = 'Chave pública SSH-RSA (para acessos baseados em chave)';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido  \"./\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido  \\"./\\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain.lng b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
index 9d4f1951d8..4acadb2c54 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
@@ -14,7 +14,7 @@ $wb['ssl_bundle_txt'] = 'Pacote';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
-$wb['web_folder_error_regex'] = 'Pasta inválida inserida. Por favor, não use barra \"/\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida inserida. Por favor, não use barra \\"/\\".';
 $wb['type_txt'] = 'Tipo';
 $wb['parent_domain_id_txt'] = 'Site pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
@@ -62,7 +62,7 @@ $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São cara
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['ruby_txt'] = 'Ruby';
diff --git a/interface/web/sites/lib/lang/br_web_childdomain.lng b/interface/web/sites/lib/lang/br_web_childdomain.lng
index 1c53d16584..ecff0c2ae8 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain.lng
@@ -36,18 +36,18 @@ $wb['domain_error_empty'] = 'Domínio está em branco.';
 $wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
 $wb['domain_error_regex'] = 'Nome de domínio é inválido.';
 $wb['host_txt'] = 'Nome do servidor';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['domain_error_wildcard'] = 'Curingas para subdomínios não são permitidos.';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento \"proxy\" exige uma url no caminho de redirecionamento.';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento \\"proxy\\" exige uma url no caminho de redirecionamento.';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
 $wb['backup_copies_txt'] = 'Limite de cópias do backup';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_domain_txt'] = 'Domínio do SSL';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não use uma barra - \"/\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não use uma barra - \\"/\\".';
 $wb['ipv6_address_txt'] = 'Endereço IPv6';
 $wb['errordocs_txt'] = 'Pasta personalizada Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
diff --git a/interface/web/sites/lib/lang/br_web_domain.lng b/interface/web/sites/lib/lang/br_web_domain.lng
index f0fdabb75f..662fdb407c 100644
--- a/interface/web/sites/lib/lang/br_web_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_domain.lng
@@ -55,7 +55,7 @@ $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São cara
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \\"a-z\\", \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
diff --git a/interface/web/sites/lib/lang/br_web_subdomain.lng b/interface/web/sites/lib/lang/br_web_subdomain.lng
index 8abb050438..0ccc574805 100644
--- a/interface/web/sites/lib/lang/br_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_subdomain.lng
@@ -36,7 +36,7 @@ $wb['domain_error_empty'] = 'Domínio está em branco.';
 $wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
 $wb['domain_error_regex'] = 'Nome do domínio é inválido.';
 $wb['host_txt'] = 'Host';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['domain_error_wildcard'] = 'Curingas de subdomínios não são permitidos.';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index 413863f1eb..4c72b1fd88 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -56,7 +56,7 @@ $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São cara
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
@@ -106,7 +106,7 @@ $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não insira barra - \"\\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não insira barra - \\"\\".';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com essas configurações.';
 $wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
 $wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Habilitar PageSpeed';
 $wb['log_retention_txt'] = 'Tempo de armazenamenro dos arquivos de log';
 $wb['log_retention_error_regex'] = 'Tempo de armazenamento, em dias (valores permitidos: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
index 8a0c3e6a1f..fa6ddad484 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
@@ -19,7 +19,7 @@ $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['host_txt'] = 'Hostname';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida. Por favor, não insira barra - \"/\".';
+$wb['web_folder_error_regex'] = 'Pasta informada é inválida. Por favor, não insira barra - \\"/\\".';
 $wb['type_txt'] = 'Tipo';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
 $wb['redirect_path_txt'] = 'Caminho para redirecionamento';
@@ -60,13 +60,13 @@ $wb['client_group_id_txt'] = 'Cliente';
 $wb['stats_password_txt'] = 'Senha para estatísticas web';
 $wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Cota de disco';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. Caracteres válidos são: \'0-9\' e \".,-_\".';
+$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. Caracteres válidos são: \'0-9\' e \\".,-_\\".';
 $wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. Caracteres válidos são: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['ruby_txt'] = 'Ruby';
@@ -121,9 +121,9 @@ $wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas Permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 $wb['variables_txt'] = 'Variáveis';
 $wb['backup_excludes_txt'] = 'Diretórios Excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: \"web/cache/*,web/backup\".)';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: \\"web/cache/*,web/backup\\".)';
 $wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos.';
-$wb['subdomain_error_empty'] = 'O campo \"Subdomínio\" está em branco ou contém caracteres inválidos.';
+$wb['subdomain_error_empty'] = 'O campo \\"Subdomínio\\" está em branco ou contém caracteres inválidos.';
 $wb['http_port_txt'] = 'Porta HTTP';
 $wb['https_port_txt'] = 'Porta HTTPS';
 $wb['http_port_error_regex'] = 'Porta HTTP inválida.';
diff --git a/interface/web/sites/lib/lang/br_webdav_user.lng b/interface/web/sites/lib/lang/br_webdav_user.lng
index b135d5e0fa..4347f8ae36 100644
--- a/interface/web/sites/lib/lang/br_webdav_user.lng
+++ b/interface/web/sites/lib/lang/br_webdav_user.lng
@@ -12,8 +12,8 @@ $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
 $wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
 $wb['directory_error_empty'] = 'Diretório está em branco.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \"./\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \\"./\\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/ca_aps.lng b/interface/web/sites/lib/lang/ca_aps.lng
index bbf799bb39..062d6ea589 100644
--- a/interface/web/sites/lib/lang/ca_aps.lng
+++ b/interface/web/sites/lib/lang/ca_aps.lng
@@ -60,4 +60,4 @@ $wb['repeat_password_txt'] = 'Vérification du mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
 $wb['password_strength_txt'] = 'Force du mot de passe';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index c9cdb68c9a..aae2f46339 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_aps.lng b/interface/web/sites/lib/lang/cz_aps.lng
index 36bc6816f4..adf6ccf58e 100644
--- a/interface/web/sites/lib/lang/cz_aps.lng
+++ b/interface/web/sites/lib/lang/cz_aps.lng
@@ -60,4 +60,4 @@ $wb['repeat_password_txt'] = 'Opakujte heslo';
 $wb['password_mismatch_txt'] = 'Hesla se neshodují.';
 $wb['password_match_txt'] = 'Hesla se shodují.';
 $wb['password_strength_txt'] = 'Bezpečnost hesla';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index 9f40aaec68..269b6b5862 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_aps.lng b/interface/web/sites/lib/lang/de_aps.lng
index bb986b5c44..6c9ff30eed 100644
--- a/interface/web/sites/lib/lang/de_aps.lng
+++ b/interface/web/sites/lib/lang/de_aps.lng
@@ -60,4 +60,4 @@ $wb['repeat_password_txt'] = 'Passwort wiederholen';
 $wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
 $wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 $wb['password_strength_txt'] = 'Passwortkomplexität';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index c9cdb68c9a..aae2f46339 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index 1d238b64e9..0ea2c2a796 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index 8421966c0e..f98c02db15 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index 1a4d753b56..c7c4a14432 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index ab34cdf35e..931c00a533 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index 0ef7e93851..7842d770b4 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index da4391a926..a40a4b62a5 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 6d16061cfe..617e7fe769 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index adb557f390..9fbca551a3 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index 9dd8cd7aff..0efd971187 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index 1301001bd1..dd007d549f 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index e6fd601125..8a426b0a1a 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index a33ac11fc1..170f2feb04 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index cb5fc4d82b..046c2c71a6 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/ru.lng b/interface/web/sites/lib/lang/ru.lng
index 6316c21d17..dbf2926043 100644
--- a/interface/web/sites/lib/lang/ru.lng
+++ b/interface/web/sites/lib/lang/ru.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Доступные пакеты';
 $wb['Installed packages'] = 'Установленные пакеты';
 $wb['Update Packagelist'] = 'Обновить список пакетов';
 $wb['Subdomain (Vhost)'] = 'Поддомен (Vhost)';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_aps.lng b/interface/web/sites/lib/lang/ru_aps.lng
index 3dd4ad0a8a..d2225358c1 100644
--- a/interface/web/sites/lib/lang/ru_aps.lng
+++ b/interface/web/sites/lib/lang/ru_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Вы  указали некорректную
 $wb['error_license_agreement'] = 'Для продолжения нужно принять лицензионное соглашение.';
 $wb['error_no_database_pw'] = 'Вы предоставили не правильный пароль базы данных.';
 $wb['error_short_database_pw'] = 'Пожалуйста, выберите более длинный пароль базы данных.';
-$wb['error_no_value_for'] = 'Поле \"%s\" не может быть пустым.';
-$wb['error_short_value_for'] = 'Поле \"%s\" требует более длинного входного значения.';
-$wb['error_long_value_for'] = 'Поле \"%s\"требует более короткого входного значения.';
-$wb['error_inv_value_for'] = 'Вы ввели неверное значение для поля \"%s\".';
-$wb['error_inv_email_for'] = 'Вы ввели некорректный адрес электронной почты для поля \"%s\".';
-$wb['error_inv_domain_for'] = 'Вы ввели некорректный домен для поля \"%s\".';
-$wb['error_inv_integer_for'] = 'Вы ввели некорректное число для поля \"%s\".';
-$wb['error_inv_float_for'] = 'Вы ввели некорректное число с плавающей точкой для поля \"%s\".';
+$wb['error_no_value_for'] = 'Поле \\"%s\\" не может быть пустым.';
+$wb['error_short_value_for'] = 'Поле \\"%s\\" требует более длинного входного значения.';
+$wb['error_long_value_for'] = 'Поле \\"%s\\"требует более короткого входного значения.';
+$wb['error_inv_value_for'] = 'Вы ввели неверное значение для поля \\"%s\\".';
+$wb['error_inv_email_for'] = 'Вы ввели некорректный адрес электронной почты для поля \\"%s\\".';
+$wb['error_inv_domain_for'] = 'Вы ввели некорректный домен для поля \\"%s\\".';
+$wb['error_inv_integer_for'] = 'Вы ввели некорректное число для поля \\"%s\\".';
+$wb['error_inv_float_for'] = 'Вы ввели некорректное число с плавающей точкой для поля \\"%s\\".';
 $wb['error_used_location'] = 'Путь установки уже содержит установочный пакет.';
 $wb['installation_task_txt'] = 'Запланирована установка';
 $wb['installation_error_txt'] = 'Ошибка установки';
diff --git a/interface/web/sites/lib/lang/ru_database.lng b/interface/web/sites/lib/lang/ru_database.lng
index b931b715f2..0f5eaf3180 100644
--- a/interface/web/sites/lib/lang/ru_database.lng
+++ b/interface/web/sites/lib/lang/ru_database.lng
@@ -13,7 +13,7 @@ $wb['database_name_error_unique'] = 'Имя базы данных уже сущ
 $wb['database_name_error_regex'] = 'Неверное имя базы данных. Имя базы данных может содержать только следующие символы: a-z, A-Z, 0-9 и нижний пробел _. Длина: 2 - 64 символа.';
 $wb['database_user_error_empty'] = 'Логин базы данных пустой';
 $wb['database_user_error_unique'] = 'Такой пользователь базы данных уже существует. Что бы получить уникальное имя, например, сложите название сайта и ваше имя.';
-$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \"_\". Длина: 2 - 16 символов.';
+$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \\"_\\". Длина: 2 - 16 символов.';
 $wb['limit_database_txt'] = 'Достигнуто максимальное количество БД.';
 $wb['database_name_change_txt'] = 'Имя базы данных не может быть изменено.';
 $wb['database_charset_change_txt'] = 'Кодировка базы данных не может быть изменена';
diff --git a/interface/web/sites/lib/lang/ru_database_user.lng b/interface/web/sites/lib/lang/ru_database_user.lng
index df927317ca..7de99a11dc 100644
--- a/interface/web/sites/lib/lang/ru_database_user.lng
+++ b/interface/web/sites/lib/lang/ru_database_user.lng
@@ -6,7 +6,7 @@ $wb['client_txt'] = 'Клиент';
 $wb['active_txt'] = 'Активно';
 $wb['database_user_error_empty'] = 'Логин базы данных пустой';
 $wb['database_user_error_unique'] = 'Такой пользователь базы данных уже существует. Что бы получить уникальное имя, например, сложите название сайта и ваше имя.';
-$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \"_\". Длина: 2 - 16 символов.';
+$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \\"_\\". Длина: 2 - 16 символов.';
 $wb['database_user_error_len'] = 'Логин для базы данных - {user} - cлишком длинный. Максимальная длина логина - 16 символов';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
diff --git a/interface/web/sites/lib/lang/ru_web_childdomain.lng b/interface/web/sites/lib/lang/ru_web_childdomain.lng
index 49905e77ea..af71669a47 100644
--- a/interface/web/sites/lib/lang/ru_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Нет флага';
 $wb['domain_error_wildcard'] = 'Wildcard поддомены не допускаются.';
 $wb['proxy_directives_txt'] = 'Директивы прокси';
 $wb['available_proxy_directive_snippets_txt'] = 'Доступные заготовки директив Proxy:';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 $wb['backup_interval_txt'] = 'Интервал резервного копирования';
 $wb['backup_copies_txt'] = 'Количество резервных копий';
 $wb['ssl_key_txt'] = 'SSL-ключ';
diff --git a/interface/web/sites/lib/lang/ru_web_subdomain.lng b/interface/web/sites/lib/lang/ru_web_subdomain.lng
index 46203a1815..376c789430 100644
--- a/interface/web/sites/lib/lang/ru_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Нет флага';
 $wb['domain_error_wildcard'] = 'Wildcard-поддомены не допускаются.';
 $wb['proxy_directives_txt'] = 'Директивы прокси';
 $wb['available_proxy_directive_snippets_txt'] = 'Доступные заготовки директив Proxy:';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 $wb['http_port_txt'] = 'Порт HTTP';
 $wb['https_port_txt'] = 'Порт HTTPS';
 $wb['http_port_error_regex'] = 'Некорректный порт HTTP.';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index b8a3b41759..e87af3b654 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Включить PageSpeed';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index 2a67966577..1a2572b950 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index 2d354ce9dc..17e60da6e6 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 8a04a244e6..2e9384fee4 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -152,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
-- 
GitLab


From de9ac2e8960471375dd1929150ee5d845ca78b36 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 5 Jul 2019 19:24:08 +0200
Subject: [PATCH 045/571] Fixed double quoting in language files.

---
 interface/lib/lang/ar.lng                        |  2 +-
 interface/lib/lang/bg.lng                        |  2 +-
 interface/lib/lang/ca.lng                        |  2 +-
 interface/lib/lang/cz.lng                        |  2 +-
 interface/lib/lang/de.lng                        |  2 +-
 interface/lib/lang/dk.lng                        |  2 +-
 interface/lib/lang/el.lng                        |  2 +-
 interface/lib/lang/es.lng                        |  2 +-
 interface/lib/lang/fi.lng                        |  2 +-
 interface/lib/lang/hr.lng                        |  2 +-
 interface/lib/lang/hu.lng                        |  2 +-
 interface/lib/lang/id.lng                        |  2 +-
 interface/lib/lang/it.lng                        |  2 +-
 interface/lib/lang/ja.lng                        |  2 +-
 interface/lib/lang/nl.lng                        |  2 +-
 interface/lib/lang/pl.lng                        |  2 +-
 interface/lib/lang/pt.lng                        |  2 +-
 interface/lib/lang/ro.lng                        |  2 +-
 interface/lib/lang/ru.lng                        |  2 +-
 interface/lib/lang/se.lng                        |  2 +-
 interface/lib/lang/sk.lng                        |  2 +-
 interface/lib/lang/tr.lng                        |  2 +-
 .../web/admin/lib/lang/ar_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ar_users.lng        |  2 +-
 .../web/admin/lib/lang/bg_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/bg_users.lng        |  2 +-
 .../web/admin/lib/lang/br_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ca_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/ca_server_config.lng      |  2 +-
 .../web/admin/lib/lang/ca_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ca_users.lng        |  2 +-
 .../web/admin/lib/lang/cz_remote_action.lng      |  4 ++--
 .../web/admin/lib/lang/cz_server_config.lng      |  2 +-
 interface/web/admin/lib/lang/dk_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/dk_server_config.lng      |  2 +-
 .../web/admin/lib/lang/dk_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/dk_users.lng        |  2 +-
 .../web/admin/lib/lang/el_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/el_users.lng        |  2 +-
 interface/web/admin/lib/lang/es_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/es_server_config.lng      |  2 +-
 .../web/admin/lib/lang/es_system_config.lng      |  4 ++--
 .../web/admin/lib/lang/fi_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/fi_users.lng        |  2 +-
 .../web/admin/lib/lang/fr_remote_action.lng      |  2 +-
 .../web/admin/lib/lang/fr_system_config.lng      |  2 +-
 .../web/admin/lib/lang/hr_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/hr_users.lng        |  2 +-
 interface/web/admin/lib/lang/hr_users_list.lng   |  2 +-
 .../web/admin/lib/lang/hu_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/hu_users.lng        |  2 +-
 .../web/admin/lib/lang/id_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/id_users.lng        |  2 +-
 .../web/admin/lib/lang/it_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/it_users.lng        |  2 +-
 .../web/admin/lib/lang/ja_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ja_users.lng        |  2 +-
 .../web/admin/lib/lang/nl_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/nl_users.lng        |  2 +-
 .../web/admin/lib/lang/pl_system_config.lng      |  2 +-
 .../web/admin/lib/lang/pt_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/pt_users.lng        |  2 +-
 .../web/admin/lib/lang/ro_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ro_users.lng        |  2 +-
 interface/web/admin/lib/lang/ru_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/ru_server_config.lng      |  2 +-
 .../web/admin/lib/lang/ru_system_config.lng      |  4 ++--
 interface/web/admin/lib/lang/ru_users.lng        |  2 +-
 .../web/admin/lib/lang/se_system_config.lng      |  2 +-
 .../web/admin/lib/lang/sk_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/sk_users.lng        |  2 +-
 interface/web/admin/lib/lang/tr_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/tr_remote_action.lng      |  4 ++--
 .../web/admin/lib/lang/tr_server_config.lng      |  2 +-
 .../web/admin/lib/lang/tr_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/tr_users.lng        |  2 +-
 interface/web/client/lib/lang/ar_client.lng      |  2 +-
 interface/web/client/lib/lang/ar_reseller.lng    |  2 +-
 interface/web/client/lib/lang/bg_client.lng      |  2 +-
 interface/web/client/lib/lang/bg_reseller.lng    |  2 +-
 interface/web/client/lib/lang/br_client.lng      |  2 +-
 .../web/client/lib/lang/br_client_template.lng   |  2 +-
 interface/web/client/lib/lang/br_reseller.lng    |  2 +-
 interface/web/client/lib/lang/ca_client.lng      |  2 +-
 interface/web/client/lib/lang/ca_reseller.lng    |  2 +-
 interface/web/client/lib/lang/cz_client.lng      |  2 +-
 interface/web/client/lib/lang/cz_reseller.lng    |  2 +-
 interface/web/client/lib/lang/de_reseller.lng    |  2 +-
 interface/web/client/lib/lang/dk_client.lng      |  2 +-
 interface/web/client/lib/lang/dk_reseller.lng    |  2 +-
 interface/web/client/lib/lang/el_client.lng      |  2 +-
 interface/web/client/lib/lang/el_reseller.lng    |  2 +-
 interface/web/client/lib/lang/es_client.lng      |  4 ++--
 .../web/client/lib/lang/es_client_template.lng   |  4 ++--
 interface/web/client/lib/lang/es_reseller.lng    |  4 ++--
 interface/web/client/lib/lang/fi_client.lng      |  2 +-
 interface/web/client/lib/lang/fi_reseller.lng    |  2 +-
 interface/web/client/lib/lang/fr_client.lng      |  2 +-
 interface/web/client/lib/lang/fr_reseller.lng    |  2 +-
 interface/web/client/lib/lang/hr_client.lng      |  2 +-
 interface/web/client/lib/lang/hr_reseller.lng    |  2 +-
 interface/web/client/lib/lang/hu_client.lng      |  2 +-
 interface/web/client/lib/lang/hu_reseller.lng    |  2 +-
 interface/web/client/lib/lang/id_client.lng      |  2 +-
 interface/web/client/lib/lang/id_reseller.lng    |  2 +-
 interface/web/client/lib/lang/it_client.lng      |  2 +-
 interface/web/client/lib/lang/it_reseller.lng    |  2 +-
 interface/web/client/lib/lang/ja_client.lng      |  2 +-
 interface/web/client/lib/lang/ja_reseller.lng    |  2 +-
 interface/web/client/lib/lang/nl_client.lng      |  2 +-
 interface/web/client/lib/lang/nl_reseller.lng    |  2 +-
 interface/web/client/lib/lang/pl_reseller.lng    |  2 +-
 interface/web/client/lib/lang/pt_client.lng      |  2 +-
 interface/web/client/lib/lang/pt_reseller.lng    |  2 +-
 interface/web/client/lib/lang/ro_client.lng      |  2 +-
 interface/web/client/lib/lang/ro_reseller.lng    |  2 +-
 interface/web/client/lib/lang/ru_client.lng      |  4 ++--
 interface/web/client/lib/lang/ru_reseller.lng    |  4 ++--
 interface/web/client/lib/lang/se_client.lng      |  2 +-
 interface/web/client/lib/lang/se_reseller.lng    |  2 +-
 interface/web/client/lib/lang/sk_client.lng      |  2 +-
 interface/web/client/lib/lang/sk_reseller.lng    |  2 +-
 interface/web/client/lib/lang/tr_client.lng      |  2 +-
 interface/web/client/lib/lang/tr_reseller.lng    |  2 +-
 .../web/dashboard/lib/lang/es_dashlet_limits.lng |  2 +-
 interface/web/dns/lib/lang/br_dns_dmarc.lng      | 10 +++++-----
 interface/web/dns/lib/lang/br_dns_tlsa.lng       |  4 ++--
 interface/web/dns/lib/lang/ru_dns_hinfo.lng      |  2 +-
 .../web/help/lib/lang/br_support_message.lng     |  2 +-
 interface/web/login/lib/lang/ar_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/bg_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/br_login_as.lng     |  2 +-
 interface/web/login/lib/lang/ca_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/dk_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/el_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/es_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/fi_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/hr_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/hu_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/id_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/it_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/ja_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/nl_login_as.lng     |  4 ++--
 interface/web/login/lib/lang/pt_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/ro_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/ru_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/se_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/sk_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/tr_login_as.lng     |  6 +++---
 interface/web/mail/lib/lang/ar_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/bg_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/br_mail_user.lng     |  4 ++--
 interface/web/mail/lib/lang/ca_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/cz_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/cz_mail_mailinglist.lng    |  2 +-
 interface/web/mail/lib/lang/dk_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/el_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/es.lng               |  2 +-
 .../mail/lib/lang/es_mail_domain_catchall.lng    |  4 ++--
 .../lib/lang/es_mail_domain_catchall_list.lng    |  4 ++--
 interface/web/mail/lib/lang/es_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/fi_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/fr_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/hr_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/hu_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/id_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/it_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/ja_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/nl_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/nl_mail_user.lng     |  4 ++--
 interface/web/mail/lib/lang/pt_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/ro_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/ru_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/ru_mail_user_filter.lng    |  2 +-
 interface/web/mail/lib/lang/se_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/sk_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/tr_mail_get.lng      |  2 +-
 .../mailuser/lib/lang/ru_mail_user_filter.lng    |  2 +-
 interface/web/monitor/lib/lang/es.lng            |  2 +-
 interface/web/sites/lib/lang/ar.lng              |  2 +-
 interface/web/sites/lib/lang/ar_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/ar_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ar_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/bg.lng              |  2 +-
 interface/web/sites/lib/lang/bg_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/bg_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/bg_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/br.lng              |  2 +-
 interface/web/sites/lib/lang/br_cron.lng         |  4 ++--
 interface/web/sites/lib/lang/br_database.lng     |  2 +-
 .../web/sites/lib/lang/br_database_user.lng      |  2 +-
 interface/web/sites/lib/lang/br_ftp_user.lng     |  4 ++--
 interface/web/sites/lib/lang/br_shell_user.lng   |  4 ++--
 .../web/sites/lib/lang/br_web_aliasdomain.lng    |  4 ++--
 .../web/sites/lib/lang/br_web_childdomain.lng    |  6 +++---
 interface/web/sites/lib/lang/br_web_domain.lng   |  6 +++---
 .../web/sites/lib/lang/br_web_subdomain.lng      |  2 +-
 .../web/sites/lib/lang/br_web_vhost_domain.lng   |  4 ++--
 .../sites/lib/lang/br_web_vhost_subdomain.lng    | 10 +++++-----
 interface/web/sites/lib/lang/br_webdav_user.lng  |  4 ++--
 interface/web/sites/lib/lang/ca.lng              |  2 +-
 interface/web/sites/lib/lang/ca_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/ca_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ca_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/cz.lng              |  2 +-
 interface/web/sites/lib/lang/cz_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/cz_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/cz_web_subdomain.lng      |  2 +-
 .../web/sites/lib/lang/de_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/de_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/dk.lng              |  2 +-
 interface/web/sites/lib/lang/dk_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/dk_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/dk_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/el.lng              |  2 +-
 interface/web/sites/lib/lang/el_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/el_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/el_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/es.lng              |  2 +-
 interface/web/sites/lib/lang/es_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/es_web_childdomain.lng    |  4 ++--
 .../web/sites/lib/lang/es_web_subdomain.lng      |  2 +-
 .../web/sites/lib/lang/es_web_vhost_domain.lng   |  2 +-
 interface/web/sites/lib/lang/fi.lng              |  2 +-
 interface/web/sites/lib/lang/fi_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/fi_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/fi_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/fr.lng              |  2 +-
 interface/web/sites/lib/lang/fr_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/fr_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/fr_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/hr.lng              |  2 +-
 interface/web/sites/lib/lang/hr_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/hr_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/hr_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/hu.lng              |  2 +-
 interface/web/sites/lib/lang/hu_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/hu_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/hu_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/id.lng              |  2 +-
 interface/web/sites/lib/lang/id_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/id_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/id_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/it.lng              |  2 +-
 interface/web/sites/lib/lang/it_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/it_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/it_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/ja.lng              |  2 +-
 interface/web/sites/lib/lang/ja_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/ja_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ja_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/nl.lng              |  2 +-
 interface/web/sites/lib/lang/nl_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/nl_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/nl_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/pl_aps.lng          | 16 ++++++++--------
 interface/web/sites/lib/lang/pt.lng              |  2 +-
 interface/web/sites/lib/lang/pt_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/pt_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/pt_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/ro.lng              |  2 +-
 interface/web/sites/lib/lang/ro_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/ro_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ro_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/ru.lng              |  2 +-
 interface/web/sites/lib/lang/ru_aps.lng          | 16 ++++++++--------
 interface/web/sites/lib/lang/ru_database.lng     |  2 +-
 .../web/sites/lib/lang/ru_database_user.lng      |  2 +-
 .../web/sites/lib/lang/ru_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ru_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/se.lng              |  2 +-
 interface/web/sites/lib/lang/se_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/se_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/se_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/sk.lng              |  2 +-
 interface/web/sites/lib/lang/sk_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/sk_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/sk_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/tr.lng              |  2 +-
 interface/web/sites/lib/lang/tr_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/tr_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/tr_web_subdomain.lng      |  2 +-
 interface/web/vm/lib/lang/dk_openvz_template.lng |  2 +-
 interface/web/vm/lib/lang/es_openvz_template.lng |  2 +-
 interface/web/vm/lib/lang/tr_openvz_template.lng |  2 +-
 285 files changed, 514 insertions(+), 514 deletions(-)

diff --git a/interface/lib/lang/ar.lng b/interface/lib/lang/ar.lng
index 25dd920831..c8ee365e4b 100644
--- a/interface/lib/lang/ar.lng
+++ b/interface/lib/lang/ar.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/bg.lng b/interface/lib/lang/bg.lng
index ff1e39fe34..eafc8334d4 100644
--- a/interface/lib/lang/bg.lng
+++ b/interface/lib/lang/bg.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/ca.lng b/interface/lib/lang/ca.lng
index c39cd0db27..03b9e65a0d 100644
--- a/interface/lib/lang/ca.lng
+++ b/interface/lib/lang/ca.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Moyen';
 $wb['strength_3'] = 'Bon';
 $wb['strength_4'] = 'Fort';
 $wb['strength_5'] = 'Très fort';
-$wb['weak_password_txt'] = 'Le mot de passe choisi ne rencontre pas les minimas requis : {chars} caractères minimums et une force de \\"{strength}\\".';
+$wb['weak_password_txt'] = 'Le mot de passe choisi ne rencontre pas les minimas requis : {chars} caractères minimums et une force de \"{strength}\".';
 $wb['weak_password_length_txt'] = 'Le mot de passe choisi ne rencontre pas les minimas requis : {chars} caractères minimums.';
 $wb['security_check1_txt'] = 'Vérifier les permissions de sécurité:';
 $wb['security_check2_txt'] = 'Echec';
diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng
index 6bd61dd6d9..6d95c1249f 100644
--- a/interface/lib/lang/cz.lng
+++ b/interface/lib/lang/cz.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Podprůměrná';
 $wb['strength_3'] = 'Dobrá';
 $wb['strength_4'] = 'Silná';
 $wb['strength_5'] = 'Velmi silná';
-$wb['weak_password_txt'] = 'Zvolené heslo neodpovídá požadavkům zásad pro tvorbu hesel. Heslo musí být alespoň {chars} znaků dlouhé a mající sílu \\"{strength}\\".';
+$wb['weak_password_txt'] = 'Zvolené heslo neodpovídá požadavkům zásad pro tvorbu hesel. Heslo musí být alespoň {chars} znaků dlouhé a mající sílu \"{strength}\".';
 $wb['weak_password_length_txt'] = 'Zvolené heslo neodpovídá požadavkům zásad pro tvorbu hesel. Heslo musí být alespoň {chars} znaků dlouhé.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng
index 61551ceeab..6f2e2d00ba 100644
--- a/interface/lib/lang/de.lng
+++ b/interface/lib/lang/de.lng
@@ -152,7 +152,7 @@ $wb['strength_2'] = 'Mittel';
 $wb['strength_3'] = 'Gut';
 $wb['strength_4'] = 'Stark';
 $wb['strength_5'] = 'Sehr stark';
-$wb['weak_password_txt'] = 'Das gewählte Passwort erfüllt die Sicherheitsanforderungen nicht. Es muss mindestens {chars} Zeichen lang sein und die Stärke \\"{strength}\\" besitzen.';
+$wb['weak_password_txt'] = 'Das gewählte Passwort erfüllt die Sicherheitsanforderungen nicht. Es muss mindestens {chars} Zeichen lang sein und die Stärke \"{strength}\" besitzen.';
 $wb['weak_password_length_txt'] = 'Das gewählte Passwort erfüllt die Sicherheitsanforderungen nicht. Es muss mindestens {chars} Zeichen lang sein.';
 $wb['security_check1_txt'] = 'Sicherheitsüberprüfung für:';
 $wb['security_check2_txt'] = 'fehlgeschlagen.';
diff --git a/interface/lib/lang/dk.lng b/interface/lib/lang/dk.lng
index 798d2ccd45..2f7aeb2790 100644
--- a/interface/lib/lang/dk.lng
+++ b/interface/lib/lang/dk.lng
@@ -146,7 +146,7 @@ $wb['strength_2'] = 'Nogenlunde';
 $wb['strength_3'] = 'God';
 $wb['strength_4'] = 'Stærk';
 $wb['strength_5'] = 'Meget Stærk';
-$wb['weak_password_txt'] = 'Den valgte adgangskode matcher ikke retningslinjerne for sikkerhedsindstillingerne. Det skal være mindst {chars} tegn i længden og have en styrke på \\"{strength}\\".';
+$wb['weak_password_txt'] = 'Den valgte adgangskode matcher ikke retningslinjerne for sikkerhedsindstillingerne. Det skal være mindst {chars} tegn i længden og have en styrke på \"{strength}\".';
 $wb['weak_password_length_txt'] = 'Den valgte adgangskode matcher ikke retningslinjerne for sikkerhedsindstillingerne. Det skal være mindst {chars} tegn i længden.';
 $wb['security_check1_txt'] = 'Check for sikkerheds tilladelse:';
 $wb['security_check2_txt'] = 'mislykkedes.';
diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng
index 382bf4a758..53cd56f175 100644
--- a/interface/lib/lang/el.lng
+++ b/interface/lib/lang/el.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/es.lng b/interface/lib/lang/es.lng
index 3b1bae0b46..8b9bc94ef8 100644
--- a/interface/lib/lang/es.lng
+++ b/interface/lib/lang/es.lng
@@ -146,7 +146,7 @@ $wb['strength_2'] = 'Aceptable';
 $wb['strength_3'] = 'Buena';
 $wb['strength_4'] = 'Fuerte';
 $wb['strength_5'] = 'Muy fuerte';
-$wb['weak_password_txt'] = 'La contraseña elegida no coincide con las directrices de seguridad. Debe contener al menos {chars} caracteres y tener una fortaleza \\"{strength}\\".';
+$wb['weak_password_txt'] = 'La contraseña elegida no coincide con las directrices de seguridad. Debe contener al menos {chars} caracteres y tener una fortaleza \"{strength}\".';
 $wb['weak_password_length_txt'] = 'La contraseña elegida no coincide con las directrices de seguridad. Debe contener al menos {chars} caracteres.';
 $wb['security_check1_txt'] = 'Verificar permisos de seguridad:';
 $wb['security_check2_txt'] = 'ha fallado.';
diff --git a/interface/lib/lang/fi.lng b/interface/lib/lang/fi.lng
index d4c23ca777..0439142c52 100755
--- a/interface/lib/lang/fi.lng
+++ b/interface/lib/lang/fi.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/hr.lng b/interface/lib/lang/hr.lng
index 310371be47..c6a1b74d81 100644
--- a/interface/lib/lang/hr.lng
+++ b/interface/lib/lang/hr.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Dobro';
 $wb['strength_3'] = 'Bolje';
 $wb['strength_4'] = 'Jako';
 $wb['strength_5'] = 'Odlično';
-$wb['weak_password_txt'] = 'Unešena šifra nije dobra. Mora biti dugačka barem {chars} znakova i jačine \\"{strength}\\".';
+$wb['weak_password_txt'] = 'Unešena šifra nije dobra. Mora biti dugačka barem {chars} znakova i jačine \"{strength}\".';
 $wb['weak_password_length_txt'] = 'Unešena šifra nije dobra. Mora biti dugačka barem {chars} znakova.';
 $wb['security_check1_txt'] = 'Provjerite sigurnosne dozvole:';
 $wb['security_check2_txt'] = 'greška.';
diff --git a/interface/lib/lang/hu.lng b/interface/lib/lang/hu.lng
index dd4cce79b3..1ef741d6a2 100644
--- a/interface/lib/lang/hu.lng
+++ b/interface/lib/lang/hu.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/id.lng b/interface/lib/lang/id.lng
index bd90fd5a1b..6483418b3e 100644
--- a/interface/lib/lang/id.lng
+++ b/interface/lib/lang/id.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/it.lng b/interface/lib/lang/it.lng
index 33d16c3d5f..332cd1ab9f 100644
--- a/interface/lib/lang/it.lng
+++ b/interface/lib/lang/it.lng
@@ -138,7 +138,7 @@ $wb['strength_2'] = 'Mediocre';
 $wb['strength_3'] = 'Buono';
 $wb['strength_4'] = 'Forte';
 $wb['strength_5'] = 'Molto forte';
-$wb['weak_password_txt'] = 'La password indicata non segue le impostazioni di sicurezza. Deve essere lunga almeno  {chars} caratteri ed avere un livello di sicurezza pari a \\"{strength}\\".';
+$wb['weak_password_txt'] = 'La password indicata non segue le impostazioni di sicurezza. Deve essere lunga almeno  {chars} caratteri ed avere un livello di sicurezza pari a \"{strength}\".';
 $wb['weak_password_length_txt'] = 'La password indicata non segue le impostazioni di sicurezza. Deve essere lunga almeno  {chars} caratteri.';
 $wb['security_check1_txt'] = 'Verifica permessi di sicurezza:';
 $wb['security_check2_txt'] = 'fallito.';
diff --git a/interface/lib/lang/ja.lng b/interface/lib/lang/ja.lng
index 2a56e77399..5f8b20add4 100644
--- a/interface/lib/lang/ja.lng
+++ b/interface/lib/lang/ja.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/nl.lng b/interface/lib/lang/nl.lng
index 888f9c0200..561e4cdb76 100644
--- a/interface/lib/lang/nl.lng
+++ b/interface/lib/lang/nl.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/pl.lng b/interface/lib/lang/pl.lng
index b5b62c816d..abbb98ee14 100644
--- a/interface/lib/lang/pl.lng
+++ b/interface/lib/lang/pl.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/pt.lng b/interface/lib/lang/pt.lng
index 7845520a5b..026aff80a8 100644
--- a/interface/lib/lang/pt.lng
+++ b/interface/lib/lang/pt.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/ro.lng b/interface/lib/lang/ro.lng
index 613f2377a1..bfbd725dab 100644
--- a/interface/lib/lang/ro.lng
+++ b/interface/lib/lang/ro.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/ru.lng b/interface/lib/lang/ru.lng
index e5e8ce6278..823ef44c79 100644
--- a/interface/lib/lang/ru.lng
+++ b/interface/lib/lang/ru.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Средний';
 $wb['strength_3'] = 'Хороший';
 $wb['strength_4'] = 'Стойкий';
 $wb['strength_5'] = 'Очень стойкий';
-$wb['weak_password_txt'] = 'Выбранный пароль не соответствует требованиям безопасности. Он должен быть как минимум {chars} символов в длину и стойкость \\"{strength}\\".';
+$wb['weak_password_txt'] = 'Выбранный пароль не соответствует требованиям безопасности. Он должен быть как минимум {chars} символов в длину и стойкость \"{strength}\".';
 $wb['weak_password_length_txt'] = 'Выбранный пароль не соответствует требованиям безопасности. Он должен быть как минимум {chars} символов в длину.';
 $wb['security_check1_txt'] = 'Проверка разрешений безопасности:';
 $wb['security_check2_txt'] = 'не удалось.';
diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng
index b6767144df..4f67c28024 100644
--- a/interface/lib/lang/se.lng
+++ b/interface/lib/lang/se.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Sådär';
 $wb['strength_3'] = 'Bra';
 $wb['strength_4'] = 'Starkt';
 $wb['strength_5'] = 'Väldigt starkt';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/sk.lng b/interface/lib/lang/sk.lng
index 6b4ef7676f..b647226e34 100644
--- a/interface/lib/lang/sk.lng
+++ b/interface/lib/lang/sk.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng
index 115bc890bb..551fae8d86 100644
--- a/interface/lib/lang/tr.lng
+++ b/interface/lib/lang/tr.lng
@@ -146,7 +146,7 @@ $wb['strength_2'] = 'Yeterli';
 $wb['strength_3'] = 'Ä°yi';
 $wb['strength_4'] = 'Güçlü';
 $wb['strength_5'] = 'Çok Güçlü';
-$wb['weak_password_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda ve \\"{strength}\\" güçlüğünde olmalı.';
+$wb['weak_password_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda ve \"{strength}\" güçlüğünde olmalı.';
 $wb['weak_password_length_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda olmalı.';
 $wb['security_check1_txt'] = 'Güvenlik iznini denetle:';
 $wb['security_check2_txt'] = 'başarısız.';
diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index 0a830014d8..b650929064 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/ar_users.lng b/interface/web/admin/lib/lang/ar_users.lng
index dcbc4f4727..9d9923b631 100644
--- a/interface/web/admin/lib/lang/ar_users.lng
+++ b/interface/web/admin/lib/lang/ar_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index 130cb596aa..15d5338704 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/bg_users.lng b/interface/web/admin/lib/lang/bg_users.lng
index e8dc631a59..e36d2d9d32 100644
--- a/interface/web/admin/lib/lang/bg_users.lng
+++ b/interface/web/admin/lib/lang/bg_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index 8688ca53aa..3d8ea38e14 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'O número do gabarito do cliente
 $wb['customer_no_start_txt'] = 'Valor inicial do código do cliente';
 $wb['customer_no_counter_txt'] = 'Contador de código do cliente';
 $wb['session_timeout_txt'] = 'Duração da sessão (minutos)';
-$wb['session_allow_endless_txt'] = 'Habilitar \\"Manter-me conectado\\"';
+$wb['session_allow_endless_txt'] = 'Habilitar \"Manter-me conectado\"';
 $wb['min_password_length_txt'] = 'Comprimento mínimo da senha';
 $wb['min_password_strength_txt'] = 'Dificuldade mínima da senha';
 $wb['company_name_txt'] = 'Nome da empresa no título da página';
diff --git a/interface/web/admin/lib/lang/ca_firewall.lng b/interface/web/admin/lib/lang/ca_firewall.lng
index 06a51c80cf..0e08215f7a 100644
--- a/interface/web/admin/lib/lang/ca_firewall.lng
+++ b/interface/web/admin/lib/lang/ca_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Separated by comma';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 815dbd30b5..42fb15c246 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -161,7 +161,7 @@ $wb['do_not_try_rescue_httpd_txt'] = 'Disable HTTPD monitoring';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['do_not_try_rescue_mysql_txt'] = 'Disable MySQL monitoring';
 $wb['do_not_try_rescue_mail_txt'] = 'Disable Email monitoring';
-$wb['rescue_description_txt'] = '<b>Information:</b> If you want to shut down mysql you have to select the \\"Disable MySQL monitor\\" checkbox and then wait 2-3 minutes.<br>If you do not wait 2-3 minutes, rescue will try to restart mysql!';
+$wb['rescue_description_txt'] = '<b>Information:</b> If you want to shut down mysql you have to select the \"Disable MySQL monitor\" checkbox and then wait 2-3 minutes.<br>If you do not wait 2-3 minutes, rescue will try to restart mysql!';
 $wb['enable_sni_txt'] = 'Enable SNI';
 $wb['set_folder_permissions_on_update_txt'] = 'Set folder permissions on update';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Add web users to -sshusers- group';
diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index cc3c11c6c5..326b3b2750 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/ca_users.lng b/interface/web/admin/lib/lang/ca_users.lng
index dcbc4f4727..9d9923b631 100644
--- a/interface/web/admin/lib/lang/ca_users.lng
+++ b/interface/web/admin/lib/lang/ca_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/cz_remote_action.lng b/interface/web/admin/lib/lang/cz_remote_action.lng
index e1908e2d04..68da1c065d 100644
--- a/interface/web/admin/lib/lang/cz_remote_action.lng
+++ b/interface/web/admin/lib/lang/cz_remote_action.lng
@@ -2,9 +2,9 @@
 $wb['select_server_txt'] = 'Zvolit server';
 $wb['btn_do_txt'] = 'Provést akci';
 $wb['do_osupdate_caption'] = 'Aktualizace operačního systému na vzdáleném serveru.';
-$wb['do_osupdate_desc'] = 'Tato akce provede \\"aptitude -y\\" aktualizaci na vybraném serveru.<br><br><strong>POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !</strong>';
+$wb['do_osupdate_desc'] = 'Tato akce provede \"aptitude -y\" aktualizaci na vybraném serveru.<br><br><strong>POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !</strong>';
 $wb['do_ispcupdate_caption'] = 'Provedení ISPConfig 3 - aktualizace na vzdáleném serveru';
-$wb['do_ispcupdate_desc'] = 'Tato akce provede \\"ISPConfig 3\\" aktualizaci na vašem vybraném serveru.<br><br><strong>POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !</strong>';
+$wb['do_ispcupdate_desc'] = 'Tato akce provede \"ISPConfig 3\" aktualizaci na vašem vybraném serveru.<br><br><strong>POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !</strong>';
 $wb['action_scheduled'] = 'Akce je naplánována na provedení';
 $wb['select_all_server'] = 'VÅ¡echny servery';
 $wb['ispconfig_update_title'] = 'ISPConfig pokyny k aktualizaci';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index ebccd8fce0..40af41289a 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -143,7 +143,7 @@ $wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM adresář pro socket je prázdn
 $wb['try_rescue_txt'] = 'Povolit monitorování služeb a restartovat při selhání';
 $wb['do_not_try_rescue_mysql_txt'] = 'Zakázat MySQL monitorování';
 $wb['do_not_try_rescue_mail_txt'] = 'Zakázat E-mail monitorování';
-$wb['rescue_description_txt'] = '<b>Informace:</b> Pokud chcete např. vypnout MySQL službu zatrhněte políčko \\"Zakázat MySQL monitorování\\" změna se provede do 2-3 minut.<br>Pokud nepočkáte 2-3 minuty, monitorování nastartuje službu MySQL automaticky znovu !';
+$wb['rescue_description_txt'] = '<b>Informace:</b> Pokud chcete např. vypnout MySQL službu zatrhněte políčko \"Zakázat MySQL monitorování\" změna se provede do 2-3 minut.<br>Pokud nepočkáte 2-3 minuty, monitorování nastartuje službu MySQL automaticky znovu !';
 $wb['enable_sni_txt'] = 'Aktivovat SNI (Server Name Indication)';
 $wb['do_not_try_rescue_httpd_txt'] = 'Zakázat HTTPD monitorování';
 $wb['set_folder_permissions_on_update_txt'] = 'Nastavení oprávnění složky při aktualizaci';
diff --git a/interface/web/admin/lib/lang/dk_firewall.lng b/interface/web/admin/lib/lang/dk_firewall.lng
index 96608b2830..9a20698384 100644
--- a/interface/web/admin/lib/lang/dk_firewall.lng
+++ b/interface/web/admin/lib/lang/dk_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Adskilt af komma';
 $wb['udp_port_help_txt'] = 'Adskilt af komma';
 $wb['active_txt'] = 'Aktiv';
 $wb['firewall_error_unique'] = 'Der er allerede en firewall post for denne server.';
-$wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i tcp port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
-$wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i udp port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i tcp port definition. Tilladt tegn er tal, \":\" og \",\".';
+$wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i udp port definition. Tilladt tegn er tal, \":\" og \",\".';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 5bf2be008a..a4e0a12d9f 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -152,7 +152,7 @@ $wb['try_rescue_txt'] = 'Aktiver overvågnings service og genstarte ved fejl';
 $wb['do_not_try_rescue_httpd_txt'] = 'Deaktiver HTTPD monitoring';
 $wb['do_not_try_rescue_mysql_txt'] = 'Deaktiver MySQL monitoring';
 $wb['do_not_try_rescue_mail_txt'] = 'Deaktiver E-mail monitoring';
-$wb['rescue_description_txt'] = '<b>Information:</b> Hvis du ønsker nedlukning af mysql skal du vælge \\"Deaktiver MySQL monitor\\" afkrydsningsfeltet og derefter vente 2-3 minutter.<br>Hvis du ikke vente 2-3 minutter, vil redning forsøge at genstarte mysql!';
+$wb['rescue_description_txt'] = '<b>Information:</b> Hvis du ønsker nedlukning af mysql skal du vælge \"Deaktiver MySQL monitor\" afkrydsningsfeltet og derefter vente 2-3 minutter.<br>Hvis du ikke vente 2-3 minutter, vil redning forsøge at genstarte mysql!';
 $wb['enable_sni_txt'] = 'Enable SNI';
 $wb['set_folder_permissions_on_update_txt'] = 'Indstil mappe tilladelser ved opdatering';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Tilføj web-brugere til -sshusers- gruppe';
diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index 26b0fe7e78..75e55f1eb0 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -64,7 +64,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Kunde Nr. skabelon indeholder ugy
 $wb['customer_no_start_txt'] = 'Kunde Nr. start værdi';
 $wb['customer_no_counter_txt'] = 'Kunde Nr. tæller';
 $wb['session_timeout_txt'] = 'Session timeout (minutter)';
-$wb['session_allow_endless_txt'] = 'Aktiver \\"forbliv logget ind\\"';
+$wb['session_allow_endless_txt'] = 'Aktiver \"forbliv logget ind\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum adgangskode længde';
 $wb['min_password_strength_txt'] = 'Minimum adgangskode styrke';
diff --git a/interface/web/admin/lib/lang/dk_users.lng b/interface/web/admin/lib/lang/dk_users.lng
index 2e86ab4ca9..a70cc1dbf1 100644
--- a/interface/web/admin/lib/lang/dk_users.lng
+++ b/interface/web/admin/lib/lang/dk_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generer Adgangskode';
 $wb['repeat_password_txt'] = 'Gentage Adgangskode';
 $wb['password_mismatch_txt'] = 'Adgangskoderne stemmer ikke overens.';
 $wb['password_match_txt'] = 'Adgangskoderne stemmer overens.';
-$wb['username_error_collision'] = 'Brugernavn må ikke være web eller web plus et tal.\\"';
+$wb['username_error_collision'] = 'Brugernavn må ikke være web eller web plus et tal.\"';
 $wb['client_not_admin_err'] = 'En bruger der hører til en klient kan ikke indstilles til typen: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 640d6f00a9..80ddaca144 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/el_users.lng b/interface/web/admin/lib/lang/el_users.lng
index f0307b95ec..e5ce7a8792 100644
--- a/interface/web/admin/lib/lang/el_users.lng
+++ b/interface/web/admin/lib/lang/el_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/es_firewall.lng b/interface/web/admin/lib/lang/es_firewall.lng
index 81cad3c0aa..db09b57844 100755
--- a/interface/web/admin/lib/lang/es_firewall.lng
+++ b/interface/web/admin/lib/lang/es_firewall.lng
@@ -4,8 +4,8 @@ $wb['firewall_error_unique'] = 'Ya existe un registro de cortafuegos para este s
 $wb['server_id_txt'] = 'Servidor';
 $wb['tcp_port_help_txt'] = 'Separados por coma';
 $wb['tcp_port_txt'] = 'Puertos TCP abiertos';
-$wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \":\" y \",\".';
 $wb['udp_port_help_txt'] = 'Separados por coma';
 $wb['udp_port_txt'] = 'Puertos UDP abiertos';
-$wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
+$wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \":\" y \",\".';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 95eaf9e8a0..01c9978ae1 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -228,7 +228,7 @@ $wb['reject_sender_login_mismatch_txt'] = 'Rechazar remitente e inicio de sesió
 $wb['relayhost_password_txt'] = 'Contraseña del servidor de retransmisión';
 $wb['relayhost_txt'] = 'Servidor de retransmisión';
 $wb['relayhost_user_txt'] = 'Usuario del servidor de retransmisión';
-$wb['rescue_description_txt'] = '<b>Información:</b> Si desea detener el servicio de MySQL debe seleccionar la casilla \\"Deshabilitar monitorización de MySQL\\" y luego esperar 2-3 minutos.<br>Si no espera 2-3 minutos, el rescatador intentará reiniciar el servicio';
+$wb['rescue_description_txt'] = '<b>Información:</b> Si desea detener el servicio de MySQL debe seleccionar la casilla \"Deshabilitar monitorización de MySQL\" y luego esperar 2-3 minutos.<br>Si no espera 2-3 minutos, el rescatador intentará reiniciar el servicio';
 $wb['security_level_txt'] = 'Nivel de seguridad';
 $wb['server_type_txt'] = 'Tipo de servidor';
 $wb['set_folder_permissions_on_update_txt'] = 'Establecer permisos de carpetas al actualizar';
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index 043c52cfdd..b927ab043f 100755
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -7,7 +7,7 @@ $wb['available_dashlets_note_txt'] = 'Componentes disponibles:';
 $wb['backups_include_into_web_quota_txt'] = 'Incluir archivos de copia de seguridad en la cuota web.';
 $wb['client_dashlets_left_txt'] = 'Componentes del cliente a la izquierda';
 $wb['client_dashlets_right_txt'] = 'Componentes del cliente a la derecha';
-$wb['client_username_web_check_disabled_txt'] = 'Desactivar la comprobación de la palabra \\"web\\" en los nombres de clientes.';
+$wb['client_username_web_check_disabled_txt'] = 'Desactivar la comprobación de la palabra \"web\" en los nombres de clientes.';
 $wb['company_name_txt'] = 'Nombre de la compañía para el título de la página';
 $wb['custom_login_link_txt'] = 'Enlace personalizado para la página de Inicio de Sesión';
 $wb['custom_login_text_txt'] = 'Texto personalizado para la página de Inicio de Sesión';
@@ -51,7 +51,7 @@ $wb['phpmyadmin_url_txt'] = 'Enlace a phpMyAdmin';
 $wb['reseller_can_use_options_txt'] = 'El revendedor puede utilizar la pestaña opciones para los sitios webs';
 $wb['reseller_dashlets_left_txt'] = 'Componentes de revendedores a la izquierda';
 $wb['reseller_dashlets_right_txt'] = 'Componentes de revendedores a la derecha';
-$wb['session_allow_endless_txt'] = 'Habilitar \\"mantenerme conectado\\"';
+$wb['session_allow_endless_txt'] = 'Habilitar \"mantenerme conectado\"';
 $wb['session_timeout_txt'] = 'Tiempo límite de sesión (minutos)';
 $wb['shelluser_prefix_error_regex'] = 'Carácter no permitido en el prefijo de usuario del shell.';
 $wb['shelluser_prefix_txt'] = 'Prefijo del usuario del Shell';
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index c0972c49d8..72e7aaa2e6 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/fi_users.lng b/interface/web/admin/lib/lang/fi_users.lng
index 199601f520..4fde01b87c 100755
--- a/interface/web/admin/lib/lang/fi_users.lng
+++ b/interface/web/admin/lib/lang/fi_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/fr_remote_action.lng b/interface/web/admin/lib/lang/fr_remote_action.lng
index bb3443b40a..0072271d69 100644
--- a/interface/web/admin/lib/lang/fr_remote_action.lng
+++ b/interface/web/admin/lib/lang/fr_remote_action.lng
@@ -8,5 +8,5 @@ $wb['do_ispcupdate_desc'] = 'Cette action met à jour ISPConfig3 sur le serveur
 $wb['action_scheduled'] = 'L’action est marquée pour exécution';
 $wb['select_all_server'] = 'Tout serveur';
 $wb['ispconfig_update_title'] = 'ISPConfig update instructions';
-$wb['ispconfig_update_text'] = 'Login as root user on the shell of your server and execute the command<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />to start the ISPConfig update.<br /><br /><a href=\\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\\" target=\\"_blank\\">Click here for detailed update instructions</a>';
+$wb['ispconfig_update_text'] = 'Login as root user on the shell of your server and execute the command<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />to start the ISPConfig update.<br /><br /><a href=\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\" target=\"_blank\">Click here for detailed update instructions</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 18f0dbbed4..df90e03011 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -64,7 +64,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index a7735647b1..a8b44528c6 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/hr_users.lng b/interface/web/admin/lib/lang/hr_users.lng
index 7be3f968f2..52f0bdff34 100644
--- a/interface/web/admin/lib/lang/hr_users.lng
+++ b/interface/web/admin/lib/lang/hr_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generiraj Å¡ifru';
 $wb['repeat_password_txt'] = 'Ponovi Å¡ifru';
 $wb['password_mismatch_txt'] = 'Šifre nisu identične.';
 $wb['password_match_txt'] = 'Šifre su identične.';
-$wb['username_error_collision'] = 'Korisničko ime ne može biti web ili web sa brojem.\\"';
+$wb['username_error_collision'] = 'Korisničko ime ne može biti web ili web sa brojem.\"';
 $wb['client_not_admin_err'] = 'Korisnik koji je u grupi klijenti ne može biti admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/hr_users_list.lng b/interface/web/admin/lib/lang/hr_users_list.lng
index c102e5f7f5..7725ce2b96 100644
--- a/interface/web/admin/lib/lang/hr_users_list.lng
+++ b/interface/web/admin/lib/lang/hr_users_list.lng
@@ -4,6 +4,6 @@ $wb['username_txt'] = 'Korisničko ime';
 $wb['client_id_txt'] = 'Client ID';
 $wb['active_txt'] = 'Active';
 $wb['add_new_record_txt'] = 'Dodaj klijenta';
-$wb['warning_txt'] = '<b>UPOZORENJE:</b> Ovdje nemojte mijenjati podatke klijenta. Koristite \\"Klijent\\" i \\"Preprodavač\\" postavke u Klijent modulu. Mijenjanjem postavki klijenata ili grupa može doći do gubitka podataka!';
+$wb['warning_txt'] = '<b>UPOZORENJE:</b> Ovdje nemojte mijenjati podatke klijenta. Koristite \"Klijent\" i \"Preprodavač\" postavke u Klijent modulu. Mijenjanjem postavki klijenata ili grupa može doći do gubitka podataka!';
 $wb['groups_txt'] = 'Groups';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index cee497fe19..e983379e3f 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/hu_users.lng b/interface/web/admin/lib/lang/hu_users.lng
index e2cf25fb79..05f3554dfd 100644
--- a/interface/web/admin/lib/lang/hu_users.lng
+++ b/interface/web/admin/lib/lang/hu_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index 344185b84d..41dd67fbac 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/id_users.lng b/interface/web/admin/lib/lang/id_users.lng
index f9e961192c..f5ae7efea5 100644
--- a/interface/web/admin/lib/lang/id_users.lng
+++ b/interface/web/admin/lib/lang/id_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index 311b7c957c..35e625bd2a 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -64,7 +64,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/it_users.lng b/interface/web/admin/lib/lang/it_users.lng
index 1bde73a67b..be1294cdbe 100644
--- a/interface/web/admin/lib/lang/it_users.lng
+++ b/interface/web/admin/lib/lang/it_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Genera Password';
 $wb['repeat_password_txt'] = 'Ripeti Password';
 $wb['password_mismatch_txt'] = 'Le password non coincidono.';
 $wb['password_match_txt'] = 'Le password coincidono.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index aa5cc6a7a3..494f90dd3e 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/ja_users.lng b/interface/web/admin/lib/lang/ja_users.lng
index 64f8339ffa..2e6ad9fb72 100644
--- a/interface/web/admin/lib/lang/ja_users.lng
+++ b/interface/web/admin/lib/lang/ja_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index 44a58b7646..89e3ff8e47 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/nl_users.lng b/interface/web/admin/lib/lang/nl_users.lng
index 1e6d4ef586..782bfc5f90 100644
--- a/interface/web/admin/lib/lang/nl_users.lng
+++ b/interface/web/admin/lib/lang/nl_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index a809251ec1..bbbbf95ec7 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index 6fc26344c0..a72ca0e954 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/pt_users.lng b/interface/web/admin/lib/lang/pt_users.lng
index 67cfe4f572..b53790e6fa 100644
--- a/interface/web/admin/lib/lang/pt_users.lng
+++ b/interface/web/admin/lib/lang/pt_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index 2a39a454e8..93ccf39477 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/ro_users.lng b/interface/web/admin/lib/lang/ro_users.lng
index dcbc4f4727..9d9923b631 100644
--- a/interface/web/admin/lib/lang/ro_users.lng
+++ b/interface/web/admin/lib/lang/ro_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/ru_firewall.lng b/interface/web/admin/lib/lang/ru_firewall.lng
index 70beb30437..c30f26f2e8 100644
--- a/interface/web/admin/lib/lang/ru_firewall.lng
+++ b/interface/web/admin/lib/lang/ru_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Перечислить порты TCP через з
 $wb['udp_port_help_txt'] = 'Перечислить порты UDP через запятую';
 $wb['active_txt'] = 'Активно';
 $wb['firewall_error_unique'] = 'Уже есть такая запись брандмауэра для этого сервера.';
-$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
-$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
+$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \":\" и \",\"';
+$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \":\" и \",\"';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 02edb659de..ca66b325bc 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -152,7 +152,7 @@ $wb['php_fpm_socket_dir_error_empty'] = 'Каталог PHP-FPM сокета п
 $wb['try_rescue_txt'] = 'Включить мониторинг службы и перезапуск при сбое';
 $wb['do_not_try_rescue_mysql_txt'] = 'Отключить мониторинг MySQL';
 $wb['do_not_try_rescue_mail_txt'] = 'Отключить мониторинг Email';
-$wb['rescue_description_txt'] = '<b>Информация:</b> Если вы хотите выключить MySQL, вы должны установить флажок \\"Отключить мониторинг MySQL\\" и подождать 2-3 минуты.<br>Если вы не подождёте 2-3 минуты, мониторинг будет пытаться перезапустить MySQL!';
+$wb['rescue_description_txt'] = '<b>Информация:</b> Если вы хотите выключить MySQL, вы должны установить флажок \"Отключить мониторинг MySQL\" и подождать 2-3 минуты.<br>Если вы не подождёте 2-3 минуты, мониторинг будет пытаться перезапустить MySQL!';
 $wb['enable_sni_txt'] = 'Включить SNI';
 $wb['do_not_try_rescue_httpd_txt'] = 'Отключить мониторинг HTTPD';
 $wb['set_folder_permissions_on_update_txt'] = 'Установить разрешения для папки на обновления';
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index baed497b0e..52324f3c77 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -14,7 +14,7 @@ $wb['mailboxlist_webmail_link_txt'] = 'Ссылка на веб-почту в с
 $wb['webmail_url_txt'] = 'URL веб-почты';
 $wb['phpmyadmin_url_txt'] = 'URL PHPMyAdmin';
 $wb['use_domain_module_txt'] = 'Использовать модуль домена, чтобы добавить новые домены';
-$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \\"домен\\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
+$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \"домен\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
 $wb['new_domain_txt'] = 'HTML текст, чтобы создать новый домен';
 $wb['webdavuser_prefix_txt'] = 'Префикс пользователя WebDAV';
 $wb['webdavuser_prefix_error_regex'] = 'Некорректный символ в префиксе пользователя WebDAV.';
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Шаблон номера Кли
 $wb['customer_no_start_txt'] = 'Начальное значение номера Клиента';
 $wb['customer_no_counter_txt'] = 'Счётчик номера Клиента';
 $wb['session_timeout_txt'] = 'Тайм-аут сессии (в минутах)';
-$wb['session_allow_endless_txt'] = 'Включить \\"оставаться в системе\\"';
+$wb['session_allow_endless_txt'] = 'Включить \"оставаться в системе\"';
 $wb['No'] = 'Нет';
 $wb['min_password_length_txt'] = 'Минимальная длина пароля';
 $wb['min_password_strength_txt'] = 'Минимальная стойкость пароля';
diff --git a/interface/web/admin/lib/lang/ru_users.lng b/interface/web/admin/lib/lang/ru_users.lng
index 63f081f917..bd1b8034ff 100644
--- a/interface/web/admin/lib/lang/ru_users.lng
+++ b/interface/web/admin/lib/lang/ru_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Создать пароль';
 $wb['repeat_password_txt'] = 'Повторить пароль';
 $wb['password_mismatch_txt'] = 'Пароли не совпадают.';
 $wb['password_match_txt'] = 'Эти пароли совпадают.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
 $wb['client_not_admin_err'] = 'Пользователь, который принадлежит к клиенту не может быть установлен тип: admin';
 $wb['lost_password_function_txt'] = 'Функция восстановления пароля доступна';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 74ae16734f..0c5643bf4f 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Kundnummermallen innehåller otil
 $wb['customer_no_start_txt'] = 'Kundnummer startvärde';
 $wb['customer_no_counter_txt'] = 'Kundnummer räknare';
 $wb['session_timeout_txt'] = 'Session timeout (minuter)';
-$wb['session_allow_endless_txt'] = 'Aktivera \\"håll mig inloggad\\"';
+$wb['session_allow_endless_txt'] = 'Aktivera \"håll mig inloggad\"';
 $wb['No'] = 'Nej';
 $wb['min_password_length_txt'] = 'Minsta lösenordslängd';
 $wb['min_password_strength_txt'] = 'Minsta lösenordsstyrka';
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index 90418e87d5..390458886c 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/sk_users.lng b/interface/web/admin/lib/lang/sk_users.lng
index d71952fa3e..60a0aa99ec 100644
--- a/interface/web/admin/lib/lang/sk_users.lng
+++ b/interface/web/admin/lib/lang/sk_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/tr_firewall.lng b/interface/web/admin/lib/lang/tr_firewall.lng
index a45998d4e1..8db312ff05 100644
--- a/interface/web/admin/lib/lang/tr_firewall.lng
+++ b/interface/web/admin/lib/lang/tr_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['active_txt'] = 'Etkin';
 $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
-$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
-$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \":\" ve \",\" karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \":\" ve \",\" karakterleri kullanılabilir.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_remote_action.lng b/interface/web/admin/lib/lang/tr_remote_action.lng
index c067f67e88..2f124714e1 100644
--- a/interface/web/admin/lib/lang/tr_remote_action.lng
+++ b/interface/web/admin/lib/lang/tr_remote_action.lng
@@ -2,11 +2,11 @@
 $wb['select_server_txt'] = 'Sunucu Seçin';
 $wb['btn_do_txt'] = 'İşlemi Başlatın';
 $wb['do_osupdate_caption'] = 'Uzak sunucudaki işletim sistemini güncelleyin';
-$wb['do_osupdate_desc'] = 'Bu işlem seçilmiş sunucuda \\"aptitude -y upgrade\\" komutunu yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SİZE AİTTİR!</strong>';
+$wb['do_osupdate_desc'] = 'Bu işlem seçilmiş sunucuda \"aptitude -y upgrade\" komutunu yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SİZE AİTTİR!</strong>';
 $wb['do_ispcupdate_caption'] = 'Uzak sunucudaki ISPConfig 3 - sürümünü güncelleyin';
 $wb['do_ispcupdate_desc'] = 'Bu işlem seçilmiş sunucuda ISPConfig3 güncellemesini yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SÜZE AİTTİR!</strong>';
 $wb['action_scheduled'] = 'İşlem yürütülmek üzere zamanlandı';
 $wb['select_all_server'] = 'Tüm Sunucularda';
 $wb['ispconfig_update_title'] = 'ISPConfig güncelleme yönergeleri';
-$wb['ispconfig_update_text'] = 'Sunucunuzda root kullanıcısı ile bir kabuk oturumu açın ve ISPConfig güncellemesini başlatmak için<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />komutunu yürütün.<br /><br /><a href=\\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\\" target=\\"_blank\\">Ayrıntılı güncelleme bilgilerine bakmak için buraya tıklayın</a>';
+$wb['ispconfig_update_text'] = 'Sunucunuzda root kullanıcısı ile bir kabuk oturumu açın ve ISPConfig güncellemesini başlatmak için<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />komutunu yürütün.<br /><br /><a href=\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\" target=\"_blank\">Ayrıntılı güncelleme bilgilerine bakmak için buraya tıklayın</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 7d16f21454..4abfd909bf 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -152,7 +152,7 @@ $wb['try_rescue_txt'] = 'Hizmetler izlensin ve sorun çıktığında yeniden ba
 $wb['do_not_try_rescue_httpd_txt'] = 'HTTPD izlenmesin';
 $wb['do_not_try_rescue_mysql_txt'] = 'MySQL izlenmesin';
 $wb['do_not_try_rescue_mail_txt'] = 'E-posta izlenmesin';
-$wb['rescue_description_txt'] = '<b>Uyarı:</b> mysql sunucusunu kapatmak istiyorsanız \\"MySQL izlenmesin\\" seçeneğini işaretleyip 2-3 dakika bekleyin.<br>2-3 dakika beklemezseniz, kurtarma işlemi mysql sunucusunu yeniden başlatmaya çalışır!';
+$wb['rescue_description_txt'] = '<b>Uyarı:</b> mysql sunucusunu kapatmak istiyorsanız \"MySQL izlenmesin\" seçeneğini işaretleyip 2-3 dakika bekleyin.<br>2-3 dakika beklemezseniz, kurtarma işlemi mysql sunucusunu yeniden başlatmaya çalışır!';
 $wb['enable_sni_txt'] = 'SNI Kullanılsın';
 $wb['set_folder_permissions_on_update_txt'] = 'Güncellenirken klasör izinleri ayarlansın';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Web kullanıcıları -sshusers- grubuna eklensin';
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index c52893f6b4..b4b213697f 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -64,7 +64,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Müşteri no kalıbında geçersi
 $wb['customer_no_start_txt'] = 'Müşteri No Başlangıç Değeri';
 $wb['customer_no_counter_txt'] = 'Müşteri No Sayacı';
 $wb['session_timeout_txt'] = 'Oturum Zaman Aşımı (dakika)';
-$wb['session_allow_endless_txt'] = '\\"Oturum açık kalsın\\" kullanılabilsin';
+$wb['session_allow_endless_txt'] = '\"Oturum açık kalsın\" kullanılabilsin';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'En Az Parola UzunluÄŸu';
 $wb['min_password_strength_txt'] = 'En Az Parola Güçlüğü';
diff --git a/interface/web/admin/lib/lang/tr_users.lng b/interface/web/admin/lib/lang/tr_users.lng
index 0029214773..b639bf9a1d 100644
--- a/interface/web/admin/lib/lang/tr_users.lng
+++ b/interface/web/admin/lib/lang/tr_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Parola OluÅŸtur';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['username_error_collision'] = 'Kullanıcı adı -web- ya da -web- sözcüğünü izleyen bir sayı ile başlayamaz.\\"';
+$wb['username_error_collision'] = 'Kullanıcı adı -web- ya da -web- sözcüğünü izleyen bir sayı ile başlayamaz.\"';
 $wb['client_not_admin_err'] = 'Bir müşteriye ait bir kullanıcının tipi admin olarak atanamaz';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/client/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng
index 71bc0fc1f7..4d2bcccef0 100644
--- a/interface/web/client/lib/lang/ar_client.lng
+++ b/interface/web/client/lib/lang/ar_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/ar_reseller.lng b/interface/web/client/lib/lang/ar_reseller.lng
index 68e8a950f3..553abe0aee 100644
--- a/interface/web/client/lib/lang/ar_reseller.lng
+++ b/interface/web/client/lib/lang/ar_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/bg_client.lng b/interface/web/client/lib/lang/bg_client.lng
index 36da0a0422..163f677043 100644
--- a/interface/web/client/lib/lang/bg_client.lng
+++ b/interface/web/client/lib/lang/bg_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/bg_reseller.lng b/interface/web/client/lib/lang/bg_reseller.lng
index 211b6daf93..7daa4cff22 100644
--- a/interface/web/client/lib/lang/bg_reseller.lng
+++ b/interface/web/client/lib/lang/bg_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng
index 992c1ea2ca..ad9282aa4c 100644
--- a/interface/web/client/lib/lang/br_client.lng
+++ b/interface/web/client/lib/lang/br_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
 $wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo (ou em branco).';
 $wb['paypal_email_error_isemail'] = 'Por favor, insira um e-mail do PayPal válido.';
 $wb['paypal_email_txt'] = 'e-mail do PayPal';
-$wb['err_msg_master_tpl_set'] = 'Todos as configurações de limites personalizadas são ignoradas se qualquer gabarito mestre ou algum gabarito \\"personalizado\\" for selecionado.';
+$wb['err_msg_master_tpl_set'] = 'Todos as configurações de limites personalizadas são ignoradas se qualquer gabarito mestre ou algum gabarito \"personalizado\" for selecionado.';
 $wb['aps_limits_txt'] = 'Limites de apps instalados';
 $wb['limit_aps_txt'] = 'Limite de instâncias de apps';
 $wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng
index 4b2ce6555b..bc7124b16c 100644
--- a/interface/web/client/lib/lang/br_client_template.lng
+++ b/interface/web/client/lib/lang/br_client_template.lng
@@ -76,7 +76,7 @@ $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
 $wb['force_suexec_txt'] = 'Forçar SuEXEC';
-$wb['limit_hterror_txt'] = 'Diretório \\"Custom error docs\\" disponível';
+$wb['limit_hterror_txt'] = 'Diretório \"Custom error docs\" disponível';
 $wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
 $wb['limit_ssl_txt'] = 'SSL disponível';
 $wb['web_limits_txt'] = 'Limites web';
diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng
index d90d3b15a2..524f875f73 100644
--- a/interface/web/client/lib/lang/br_reseller.lng
+++ b/interface/web/client/lib/lang/br_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Data do cadastro';
 $wb['limit_domainmodule_error_notint'] = 'Limite de módulos de domínio deve ser um número.';
 $wb['limit_domainmodule_txt'] = 'Limites de módulos de domínio';
 $wb['client_limits_txt'] = 'Limite de clientes';
-$wb['err_msg_master_tpl_set'] = 'Todas as configurações personalizadas de limites serão ignoradas se um gabarito mestre ou \\"personalizado\\" for selecionado.';
+$wb['err_msg_master_tpl_set'] = 'Todas as configurações personalizadas de limites serão ignoradas se um gabarito mestre ou \"personalizado\" for selecionado.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['email_error_empty'] = 'e-mail está em branco.';
diff --git a/interface/web/client/lib/lang/ca_client.lng b/interface/web/client/lib/lang/ca_client.lng
index bfa38a3401..7f460522ff 100644
--- a/interface/web/client/lib/lang/ca_client.lng
+++ b/interface/web/client/lib/lang/ca_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Saisissez une adresse courriel valide.';
 $wb['customer_no_error_unique'] = 'Le numéro client doit être unique (ou vide).';
 $wb['paypal_email_error_isemail'] = 'Saisissez un compte Paypal valide.';
 $wb['paypal_email_txt'] = 'Compte Paypal';
-$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \\"custom\\" est sélectionné.';
+$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \"custom\" est sélectionné.';
 $wb['aps_limits_txt'] = 'Nombre max d\'Installeur APS';
 $wb['limit_aps_txt'] = 'Nombre max d\'instances APS';
 $wb['limit_aps_error_notint'] = 'La limite d\'instances APS doit être un nombre';
diff --git a/interface/web/client/lib/lang/ca_reseller.lng b/interface/web/client/lib/lang/ca_reseller.lng
index f83d3aaff7..7125b01a74 100644
--- a/interface/web/client/lib/lang/ca_reseller.lng
+++ b/interface/web/client/lib/lang/ca_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Ajouté le';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['limit_backup_txt'] = 'Backupfunction available';
 $wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
diff --git a/interface/web/client/lib/lang/cz_client.lng b/interface/web/client/lib/lang/cz_client.lng
index 3351ac58e1..edd366830a 100644
--- a/interface/web/client/lib/lang/cz_client.lng
+++ b/interface/web/client/lib/lang/cz_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Zadejte prosím platnou e-mailovou adresu.';
 $wb['customer_no_error_unique'] = 'Zákaznické číslo musí být jedinečné (nebo prázdné).';
 $wb['paypal_email_error_isemail'] = 'Zadejte prosím platnou PayPal e-mail addresu.';
 $wb['paypal_email_txt'] = 'PayPal e-mail';
-$wb['err_msg_master_tpl_set'] = 'Nelze nastavit vlastní limity, pokud chtete nastavit vlatní limity musí být \\"hlavní šablona\\" nastavena na volbu \\"Custom\\".';
+$wb['err_msg_master_tpl_set'] = 'Nelze nastavit vlastní limity, pokud chtete nastavit vlatní limity musí být \"hlavní šablona\" nastavena na volbu \"Custom\".';
 $wb['aps_limits_txt'] = 'APS limity instalátoru';
 $wb['limit_aps_txt'] = 'Max. počet APS instalací';
 $wb['limit_aps_error_notint'] = 'Limit pro APS instalace musí být číslo.';
diff --git a/interface/web/client/lib/lang/cz_reseller.lng b/interface/web/client/lib/lang/cz_reseller.lng
index adfea62ac5..011b985311 100644
--- a/interface/web/client/lib/lang/cz_reseller.lng
+++ b/interface/web/client/lib/lang/cz_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Datum vytvoření účtu';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Klientské limity';
-$wb['err_msg_master_tpl_set'] = 'Nelze nastavit vlastní limity, pokud chtete nastavit vlatní limity musí být \\"hlavní šablona\\" nastavena na volbu \\"Custom\\".';
+$wb['err_msg_master_tpl_set'] = 'Nelze nastavit vlastní limity, pokud chtete nastavit vlatní limity musí být \"hlavní šablona\" nastavena na volbu \"Custom\".';
 $wb['contact_firstname_txt'] = 'Kontakt křestní jméno';
 $wb['limit_backup_txt'] = 'Funkce zálohování (volitelné)';
 $wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng
index e37ca395af..48460658c0 100644
--- a/interface/web/client/lib/lang/de_reseller.lng
+++ b/interface/web/client/lib/lang/de_reseller.lng
@@ -160,7 +160,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['invalid_vat_id'] = 'Die USt.-ID ist ungültig.';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
diff --git a/interface/web/client/lib/lang/dk_client.lng b/interface/web/client/lib/lang/dk_client.lng
index b944e03175..f0a8d1a7cd 100644
--- a/interface/web/client/lib/lang/dk_client.lng
+++ b/interface/web/client/lib/lang/dk_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Indtast en gyldig e-mail adresse.';
 $wb['customer_no_error_unique'] = 'Kunde nr. skal være unikke (eller tomt).';
 $wb['paypal_email_error_isemail'] = 'Indtast en gyldig PayPal e-mail adresse.';
 $wb['paypal_email_txt'] = 'PayPal E-mail';
-$wb['err_msg_master_tpl_set'] = 'Alle brugerdefinerede grænse indstillinger ignoreres, hvis nogen anden master skabelonen end \\"custom\\" er valgt.';
+$wb['err_msg_master_tpl_set'] = 'Alle brugerdefinerede grænse indstillinger ignoreres, hvis nogen anden master skabelonen end \"custom\" er valgt.';
 $wb['aps_limits_txt'] = 'APS Installer Begrænsninger';
 $wb['limit_aps_txt'] = 'Max. antal af APS forekomster';
 $wb['limit_aps_error_notint'] = 'APS forekomster grænse skal være et tal.';
diff --git a/interface/web/client/lib/lang/dk_reseller.lng b/interface/web/client/lib/lang/dk_reseller.lng
index b06301ccdd..93cd7c4032 100644
--- a/interface/web/client/lib/lang/dk_reseller.lng
+++ b/interface/web/client/lib/lang/dk_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Tilføjet d.';
 $wb['limit_domainmodule_error_notint'] = 'Domænemodul grænse skal være et tal.';
 $wb['limit_domainmodule_txt'] = 'Domænemodul Begrænsning';
 $wb['client_limits_txt'] = 'Kunde Begrænsninger';
-$wb['err_msg_master_tpl_set'] = 'Alle brugerdefinerede grænse indstillinger ignoreres, hvis nogen anden master skabelonen end \\"custom\\" er valgt.';
+$wb['err_msg_master_tpl_set'] = 'Alle brugerdefinerede grænse indstillinger ignoreres, hvis nogen anden master skabelonen end \"custom\" er valgt.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_database_user_txt'] = 'Max. Database users';
diff --git a/interface/web/client/lib/lang/el_client.lng b/interface/web/client/lib/lang/el_client.lng
index b85f653d4e..8c2d7d738e 100644
--- a/interface/web/client/lib/lang/el_client.lng
+++ b/interface/web/client/lib/lang/el_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/el_reseller.lng b/interface/web/client/lib/lang/el_reseller.lng
index b409c169e6..13a38caf9d 100644
--- a/interface/web/client/lib/lang/el_reseller.lng
+++ b/interface/web/client/lib/lang/el_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng
index 75125024fb..1935b168af 100755
--- a/interface/web/client/lib/lang/es_client.lng
+++ b/interface/web/client/lib/lang/es_client.lng
@@ -42,7 +42,7 @@ $wb['email_error_empty'] = 'El correo electrónico está vacío';
 $wb['email_error_isemail'] = 'Por favor ingrese una dirección de correo válida.';
 $wb['email_limits_txt'] = 'Límites de correo';
 $wb['email_txt'] = 'Correo';
-$wb['err_msg_master_tpl_set'] = 'Todas las opciones personalizadas de límites serán ignoradas si se utiliza otra plantilla maestra diferente a \\"personalizada\\".';
+$wb['err_msg_master_tpl_set'] = 'Todas las opciones personalizadas de límites serán ignoradas si se utiliza otra plantilla maestra diferente a \"personalizada\".';
 $wb['fax_txt'] = 'Fax';
 $wb['firstname_error_empty'] = 'El nombre está vacío.';
 $wb['firstname_txt'] = 'Nombre';
@@ -90,7 +90,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'El límite de alias de dominio de c
 $wb['limit_mailaliasdomain_txt'] = 'Cantidad máx. de alias de dominio';
 $wb['limit_mailbox_error_notint'] = 'El límite de buzones debe ser un número.';
 $wb['limit_mailbox_txt'] = 'Cantidad máx. de buzones';
-$wb['limit_mailcatchall_error_notint'] = 'El límite de correos \\"recoge-todo\\" debe ser un número.';
+$wb['limit_mailcatchall_error_notint'] = 'El límite de correos \"recoge-todo\" debe ser un número.';
 $wb['limit_mailcatchall_txt'] = 'Cantidad máx. de receptores de correos huérfanos';
 $wb['limit_maildomain_error_notint'] = 'El límite de dominio de correo debe ser un número.';
 $wb['limit_maildomain_txt'] = 'Cantidad máx. de dominios para correo';
diff --git a/interface/web/client/lib/lang/es_client_template.lng b/interface/web/client/lib/lang/es_client_template.lng
index 4fd6f650f3..6a51459600 100755
--- a/interface/web/client/lib/lang/es_client_template.lng
+++ b/interface/web/client/lib/lang/es_client_template.lng
@@ -46,8 +46,8 @@ $wb['limit_mailaliasdomain_error_notint'] = 'El límite de alias de dominio de c
 $wb['limit_mailaliasdomain_txt'] = 'Cantidad máx. de alias de dominio';
 $wb['limit_mailbox_error_notint'] = 'El límite de buzones debe ser un número.';
 $wb['limit_mailbox_txt'] = 'Cantidad máx. de buzones';
-$wb['limit_mailcatchall_error_notint'] = 'El límite de receptores de correo \\"recoge-todo\\" debe ser un número.';
-$wb['limit_mailcatchall_txt'] = 'Cantidad máx. de receptores de correo  \\"recoge-todo\\" ';
+$wb['limit_mailcatchall_error_notint'] = 'El límite de receptores de correo \"recoge-todo\" debe ser un número.';
+$wb['limit_mailcatchall_txt'] = 'Cantidad máx. de receptores de correo  \"recoge-todo\" ';
 $wb['limit_maildomain_error_notint'] = 'El límite de dominio de correo debe ser un número.';
 $wb['limit_maildomain_txt'] = 'Cantidad máx. de dominios para correo';
 $wb['limit_mailfetchmail_error_notint'] = 'El límite de recuperadores de correo debe ser un número.';
diff --git a/interface/web/client/lib/lang/es_reseller.lng b/interface/web/client/lib/lang/es_reseller.lng
index 5a94b9e803..a1de1fb7b9 100755
--- a/interface/web/client/lib/lang/es_reseller.lng
+++ b/interface/web/client/lib/lang/es_reseller.lng
@@ -46,7 +46,7 @@ $wb['email_error_empty'] = 'El correo electrónico está vacío';
 $wb['email_error_isemail'] = 'Por favor ingrese una dirección de correo válida.';
 $wb['email_limits_txt'] = 'Límites de correo';
 $wb['email_txt'] = 'Correo';
-$wb['err_msg_master_tpl_set'] = 'Todas las opciones personalizadas de límites serán ignoradas si se utiliza otra plantilla maestra diferente a \\"personalizada\\".';
+$wb['err_msg_master_tpl_set'] = 'Todas las opciones personalizadas de límites serán ignoradas si se utiliza otra plantilla maestra diferente a \"personalizada\".';
 $wb['fax_txt'] = 'Fax';
 $wb['firstname_error_empty'] = 'El nombre está vacío.';
 $wb['firstname_txt'] = 'Nombre';
@@ -97,7 +97,7 @@ $wb['limit_mailalias_txt'] = 'Cantidad máx. de alias de correo';
 $wb['limit_mailaliasdomain_txt'] = 'Cantidad máx. de alias de dominio';
 $wb['limit_mailbox_error_notint'] = 'El límite de buzones debe ser un número.';
 $wb['limit_mailbox_txt'] = 'Cantidad máx. de buzones';
-$wb['limit_mailcatchall_error_notint'] = 'El límite de correos \\"recoge-todo\\" debe ser un número.';
+$wb['limit_mailcatchall_error_notint'] = 'El límite de correos \"recoge-todo\" debe ser un número.';
 $wb['limit_mailcatchall_txt'] = 'Cantidad máx. de receptores de correos huérfanos';
 $wb['limit_maildomain_error_notint'] = 'El límite de dominio de correo debe ser un número.';
 $wb['limit_maildomain_txt'] = 'Cantidad máx. de dominios para correo';
diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng
index 6df30e7753..a90a3d7c2d 100755
--- a/interface/web/client/lib/lang/fi_client.lng
+++ b/interface/web/client/lib/lang/fi_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/fi_reseller.lng b/interface/web/client/lib/lang/fi_reseller.lng
index 58af2fdf0d..6aecc836e3 100644
--- a/interface/web/client/lib/lang/fi_reseller.lng
+++ b/interface/web/client/lib/lang/fi_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng
index 61612ccbe0..f13f0d4676 100644
--- a/interface/web/client/lib/lang/fr_client.lng
+++ b/interface/web/client/lib/lang/fr_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Saisissez une adresse e-mail valide.';
 $wb['customer_no_error_unique'] = 'Le numéro client doit être unique (ou vide).';
 $wb['paypal_email_error_isemail'] = 'Saisissez un compte Paypal valide.';
 $wb['paypal_email_txt'] = 'Compte Paypal';
-$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \\"custom\\" est sélectionné.';
+$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \"custom\" est sélectionné.';
 $wb['aps_limits_txt'] = 'Nombre max d’Installeur APS';
 $wb['limit_aps_txt'] = 'Nombre max d’instances APS';
 $wb['limit_aps_error_notint'] = 'La limite d’instances APS doit être un nombre';
diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng
index f30fcd48c6..591e12ac35 100644
--- a/interface/web/client/lib/lang/fr_reseller.lng
+++ b/interface/web/client/lib/lang/fr_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['limit_backup_txt'] = 'Backupfunction available';
 $wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
diff --git a/interface/web/client/lib/lang/hr_client.lng b/interface/web/client/lib/lang/hr_client.lng
index ec5b73d940..351ad4b8b4 100644
--- a/interface/web/client/lib/lang/hr_client.lng
+++ b/interface/web/client/lib/lang/hr_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Unesi ispravnu email adresu.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/hr_reseller.lng b/interface/web/client/lib/lang/hr_reseller.lng
index 9188b6861b..37e1e38356 100644
--- a/interface/web/client/lib/lang/hr_reseller.lng
+++ b/interface/web/client/lib/lang/hr_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Datum dodavanja';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domain module Limit';
 $wb['client_limits_txt'] = 'Limiti klijenata';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/hu_client.lng b/interface/web/client/lib/lang/hu_client.lng
index 10993601c0..8b9cc16081 100644
--- a/interface/web/client/lib/lang/hu_client.lng
+++ b/interface/web/client/lib/lang/hu_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/hu_reseller.lng b/interface/web/client/lib/lang/hu_reseller.lng
index dd9290885a..2b0c15e8f0 100644
--- a/interface/web/client/lib/lang/hu_reseller.lng
+++ b/interface/web/client/lib/lang/hu_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/id_client.lng b/interface/web/client/lib/lang/id_client.lng
index c84e6251f4..d25230ea3d 100644
--- a/interface/web/client/lib/lang/id_client.lng
+++ b/interface/web/client/lib/lang/id_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/id_reseller.lng b/interface/web/client/lib/lang/id_reseller.lng
index 821a35e3cd..af91d1bb4e 100644
--- a/interface/web/client/lib/lang/id_reseller.lng
+++ b/interface/web/client/lib/lang/id_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng
index 0f75d849d6..a361d0a887 100644
--- a/interface/web/client/lib/lang/it_client.lng
+++ b/interface/web/client/lib/lang/it_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/it_reseller.lng b/interface/web/client/lib/lang/it_reseller.lng
index 2cef293265..8fc49568af 100644
--- a/interface/web/client/lib/lang/it_reseller.lng
+++ b/interface/web/client/lib/lang/it_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['limit_backup_txt'] = 'Backupfunction available';
 $wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
diff --git a/interface/web/client/lib/lang/ja_client.lng b/interface/web/client/lib/lang/ja_client.lng
index 33aa6ab4e9..2526c02791 100644
--- a/interface/web/client/lib/lang/ja_client.lng
+++ b/interface/web/client/lib/lang/ja_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/ja_reseller.lng b/interface/web/client/lib/lang/ja_reseller.lng
index 7edf836f39..66200eccbe 100644
--- a/interface/web/client/lib/lang/ja_reseller.lng
+++ b/interface/web/client/lib/lang/ja_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng
index 188a37f4fd..8e0092f255 100644
--- a/interface/web/client/lib/lang/nl_client.lng
+++ b/interface/web/client/lib/lang/nl_client.lng
@@ -142,7 +142,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng
index 9953880bec..9cdb1856fe 100644
--- a/interface/web/client/lib/lang/nl_reseller.lng
+++ b/interface/web/client/lib/lang/nl_reseller.lng
@@ -160,7 +160,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/pl_reseller.lng b/interface/web/client/lib/lang/pl_reseller.lng
index 9b2cf58f75..69b30fe2a3 100644
--- a/interface/web/client/lib/lang/pl_reseller.lng
+++ b/interface/web/client/lib/lang/pl_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/pt_client.lng b/interface/web/client/lib/lang/pt_client.lng
index ae3e45b24d..b05e14dfe7 100644
--- a/interface/web/client/lib/lang/pt_client.lng
+++ b/interface/web/client/lib/lang/pt_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/pt_reseller.lng b/interface/web/client/lib/lang/pt_reseller.lng
index e021cd2511..ae3eddd8b0 100644
--- a/interface/web/client/lib/lang/pt_reseller.lng
+++ b/interface/web/client/lib/lang/pt_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/ro_client.lng b/interface/web/client/lib/lang/ro_client.lng
index 034c4d0e44..bc0ad4316e 100644
--- a/interface/web/client/lib/lang/ro_client.lng
+++ b/interface/web/client/lib/lang/ro_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/ro_reseller.lng b/interface/web/client/lib/lang/ro_reseller.lng
index 68e8a950f3..553abe0aee 100644
--- a/interface/web/client/lib/lang/ro_reseller.lng
+++ b/interface/web/client/lib/lang/ro_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng
index befd6b15bf..a37d4673a1 100644
--- a/interface/web/client/lib/lang/ru_client.lng
+++ b/interface/web/client/lib/lang/ru_client.lng
@@ -108,7 +108,7 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Принудительный шабл
 $wb['limit_openvz_vm_error_notint'] = 'Лимит виртуальных серверов должен быть числом.';
 $wb['web_php_options_notempty'] = 'Нет выбранных параметров PHP. Выберите по крайней мере один параметр PHP.';
 $wb['ssh_chroot_notempty'] = 'Не выбран параметр SSH-Chroot. Выберите по крайней мере один параметр SSH-Chroot.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
 $wb['add_additional_template_txt'] = 'Добавить дополнительный шаблон';
 $wb['delete_additional_template_txt'] = 'Удалить дополнительный шаблон';
 $wb['limit_cgi_txt'] = 'CGI доступен';
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Некорректный почтовый адре
 $wb['customer_no_error_unique'] = 'Счётчик номера Клиента должен быть уникален (или отсутствует).';
 $wb['paypal_email_error_isemail'] = 'Пожалуйста, введите действующий адрес электронной почты PayPal.';
 $wb['paypal_email_txt'] = 'Адрес электронной почты PayPal';
-$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \\"Custom\\"!';
+$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \"Custom\"!';
 $wb['aps_limits_txt'] = 'Лимиты Установщика APS';
 $wb['limit_aps_txt'] = 'Макс. количество экземпляров APS';
 $wb['limit_aps_error_notint'] = 'Лимит экземпляров APS должен быть числом.';
diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng
index 998a886990..4a177cccc8 100644
--- a/interface/web/client/lib/lang/ru_reseller.lng
+++ b/interface/web/client/lib/lang/ru_reseller.lng
@@ -108,7 +108,7 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Принудительный шабл
 $wb['limit_openvz_vm_error_notint'] = 'Лимит виртуальных серверов должен быть числом.';
 $wb['web_php_options_notempty'] = 'Нет выбранных параметров PHP. Выберите по крайней мере один параметр PHP.';
 $wb['ssh_chroot_notempty'] = 'Не выбран параметр SSH-Chroot. Выберите по крайней мере один параметр SSH-Chroot.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
 $wb['add_additional_template_txt'] = 'Добавить дополнительный шаблон';
 $wb['delete_additional_template_txt'] = 'Удалить дополнительный шаблон';
 $wb['limit_cgi_txt'] = 'CGI доступен';
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Дата добавления';
 $wb['limit_domainmodule_error_notint'] = 'Лимит модулей домена должен быть числом.';
 $wb['limit_domainmodule_txt'] = 'Лимит модулей домена';
 $wb['client_limits_txt'] = 'Лимиты Клиента';
-$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \\"Custom\\"!';
+$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \"Custom\"!';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
 $wb['email_error_empty'] = 'Адрес эл. почты пустой';
diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng
index 2884302c18..5232e95f55 100644
--- a/interface/web/client/lib/lang/se_client.lng
+++ b/interface/web/client/lib/lang/se_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Vänligen ange en giltig epostadress';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal epostadress';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng
index 68e8a950f3..553abe0aee 100644
--- a/interface/web/client/lib/lang/se_reseller.lng
+++ b/interface/web/client/lib/lang/se_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/sk_client.lng b/interface/web/client/lib/lang/sk_client.lng
index 3edec417cf..6fff6bf3f0 100644
--- a/interface/web/client/lib/lang/sk_client.lng
+++ b/interface/web/client/lib/lang/sk_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/sk_reseller.lng b/interface/web/client/lib/lang/sk_reseller.lng
index 4ae3ef5b97..34643c55b8 100644
--- a/interface/web/client/lib/lang/sk_reseller.lng
+++ b/interface/web/client/lib/lang/sk_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng
index 765d9f1980..359095534a 100644
--- a/interface/web/client/lib/lang/tr_client.lng
+++ b/interface/web/client/lib/lang/tr_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Lütfen geçerli bir e-posta adresi yazın.';
 $wb['customer_no_error_unique'] = 'Müşteri numarası eşsiz (ya da boş) olmalıdır.';
 $wb['paypal_email_error_isemail'] = 'Lütfen geçerli bir PayPal e-posta adresi yazın.';
 $wb['paypal_email_txt'] = 'PayPal E-posta Adresi';
-$wb['err_msg_master_tpl_set'] = '\\"Özel\\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
+$wb['err_msg_master_tpl_set'] = '\"Özel\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
 $wb['aps_limits_txt'] = 'APS Yükleyici Sınırları';
 $wb['limit_aps_txt'] = 'En Fazla APS Kopyası Sayısı';
 $wb['limit_aps_error_notint'] = 'APS kopya sayısı sınırı bir sayı olmalıdır.';
diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng
index 4906a894c0..5e2a37e268 100644
--- a/interface/web/client/lib/lang/tr_reseller.lng
+++ b/interface/web/client/lib/lang/tr_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'EklendiÄŸi Tarih';
 $wb['limit_domainmodule_error_notint'] = 'Alan adı modülü sınırı bir sayı olmalıdır.';
 $wb['limit_domainmodule_txt'] = 'Alan Adı Modülü Sınırı';
 $wb['client_limits_txt'] = 'Müşteri Sınırları';
-$wb['err_msg_master_tpl_set'] = '\\"Özel\\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
+$wb['err_msg_master_tpl_set'] = '\"Özel\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_database_user_txt'] = 'Max. Database users';
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
index da6cd6b513..0f819f2a9d 100755
--- a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
@@ -11,7 +11,7 @@ $wb['limit_ftp_user_txt'] = 'Cantidad de usuarios FTP';
 $wb['limit_mailalias_txt'] = 'Cantidad de alias de correos';
 $wb['limit_mailaliasdomain_txt'] = 'Cantidad de alias de dominios';
 $wb['limit_mailbox_txt'] = 'Cantidad de buzones';
-$wb['limit_mailcatchall_txt'] = 'Cantidad de cuentas de correo \\"recoge-todo\\"';
+$wb['limit_mailcatchall_txt'] = 'Cantidad de cuentas de correo \"recoge-todo\"';
 $wb['limit_maildomain_txt'] = 'Cantidad de dominios para correo';
 $wb['limit_mailfilter_txt'] = 'Cantidad de filtros de correo';
 $wb['limit_mailforward_txt'] = 'Cantidad de reenviadores de correos';
diff --git a/interface/web/dns/lib/lang/br_dns_dmarc.lng b/interface/web/dns/lib/lang/br_dns_dmarc.lng
index 8bb35318f8..5b7201075f 100644
--- a/interface/web/dns/lib/lang/br_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/br_dns_dmarc.lng
@@ -2,7 +2,7 @@
 $wb['data_txt'] = 'Registro DMARC';
 $wb['domain_txt'] = 'Domínio';
 $wb['dmarc_policy_txt'] = 'Política de recepção de e-mails';
-$wb['dmarc_policy_note_txt'] = 'Como os \\"ISPs\\" devem tratar as mensagens SPF ou DKIM com falha (DMARC).';
+$wb['dmarc_policy_note_txt'] = 'Como os \"ISPs\" devem tratar as mensagens SPF ou DKIM com falha (DMARC).';
 $wb['dmarc_policy_none_txt'] = 'não fazer nada';
 $wb['dmarc_policy_quarantine_txt'] = 'quarentena';
 $wb['dmarc_policy_reject_txt'] = 'rejeitar';
@@ -11,16 +11,16 @@ $wb['dmarc_rua_note_txt'] = 'Endereços de e-mail para receber relatórios do si
 $wb['dmarc_ruf_txt'] = 'Relatório forense de dados por endereço';
 $wb['dmarc_ruf_note_txt'] = 'Endereços de e-mail para receber amostras de mensagens com falha e controles DMARC do domínio (separados por espaço em branco)';
 $wb['dmarc_fo_txt'] = 'Opções de relatório forense';
-$wb['dmarc_fo0_txt'] = 'Gerar relatórios se todos os mecanismos de autenticação subjacentes deixarem de produzir um resultado DMARC \\"pass\\".';
+$wb['dmarc_fo0_txt'] = 'Gerar relatórios se todos os mecanismos de autenticação subjacentes deixarem de produzir um resultado DMARC \"pass\".';
 $wb['dmarc_fo1_txt'] = 'Gerar relatório se algum mecanismo falhar.';
 $wb['dmarc_fod_txt'] = 'Gerar relatório se assinatura DKIM falhar na verificação.';
 $wb['dmarc_fos_txt'] = 'Gerar relatório se o SPF falhar.';
 $wb['dmarc_adkim_txt'] = 'Parametrização do identificador DKIM';
-$wb['dmarc_adkim_note_txt'] = 'Modo \\"strict\\" exige combinação exata entre o DKIM do domínio e e-mails';
+$wb['dmarc_adkim_note_txt'] = 'Modo \"strict\" exige combinação exata entre o DKIM do domínio e e-mails';
 $wb['dmarc_adkim_r_txt'] = 'relaxed';
 $wb['dmarc_adkim_s_txt'] = 'strict';
 $wb['dmarc_aspf_txt'] = 'Parametrização do identificador SPF';
-$wb['dmarc_aspf_note_txt'] = 'Modo \\"strict\\" exige combinação exata entre o SPF do domínio e e-mails';
+$wb['dmarc_aspf_note_txt'] = 'Modo \"strict\" exige combinação exata entre o SPF do domínio e e-mails';
 $wb['dmarc_aspf_r_txt'] = 'relaxed';
 $wb['dmarc_aspf_s_txt'] = 'strict';
 $wb['dmarc_rf_txt'] = 'Formatação do relatório';
@@ -37,7 +37,7 @@ $wb['dmarc_sp_quarantine_txt'] = 'quarentena';
 $wb['dmarc_sp_reject_txt'] = 'rejeitar';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['dmarc_policy_error_txt'] = 'Somente a política \\"nenhum\\" é permitida para e-mails sem assinatura DKIM.';
+$wb['dmarc_policy_error_txt'] = 'Somente a política \"nenhum\" é permitida para e-mails sem assinatura DKIM.';
 $wb['dmarc_no_dkim_txt'] = 'Nenhum registro DKIM ativo.';
 $wb['dmarc_no_spf_txt'] = 'Nenhum registro SPF ativo.';
 $wb['dmarc_more_spf_txt'] = 'Mais de um registro SPF ativo.';
diff --git a/interface/web/dns/lib/lang/br_dns_tlsa.lng b/interface/web/dns/lib/lang/br_dns_tlsa.lng
index 5e1bf2256e..c78c6fd190 100644
--- a/interface/web/dns/lib/lang/br_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/br_dns_tlsa.lng
@@ -9,8 +9,8 @@ $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
 $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
 $wb['name_error_empty'] = 'Descritor de serviço está em branco.';
-$wb['name_error_regex'] = 'Descritor de serviço é inválido. Formato correto: \\"_&lt;port&gt;._(tcp|udp).&lt;hostname&gt;\\".';
+$wb['name_error_regex'] = 'Descritor de serviço é inválido. Formato correto: \"_&lt;port&gt;._(tcp|udp).&lt;hostname&gt;\".';
 $wb['data_error_empty'] = 'Dados TLSA está em branco.';
-$wb['data_error_regex'] = 'Dados TLSA são inválidos. Formato correto: \\"n n n HASH\\".';
+$wb['data_error_regex'] = 'Dados TLSA são inválidos. Formato correto: \"n n n HASH\".';
 $wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_hinfo.lng b/interface/web/dns/lib/lang/ru_dns_hinfo.lng
index 363ed0eef5..830576fdf6 100644
--- a/interface/web/dns/lib/lang/ru_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/ru_dns_hinfo.lng
@@ -11,6 +11,6 @@ $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту за
 $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'Информация об узле отсутсвует';
-$wb['data_error_regex'] = 'Поле \\"Информация о хосте\\" имеет неправильный формат';
+$wb['data_error_regex'] = 'Поле \"Информация о хосте\" имеет неправильный формат';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/help/lib/lang/br_support_message.lng b/interface/web/help/lib/lang/br_support_message.lng
index 19ae309a1f..83097915bf 100644
--- a/interface/web/help/lib/lang/br_support_message.lng
+++ b/interface/web/help/lib/lang/br_support_message.lng
@@ -12,5 +12,5 @@ $wb['answer_to_support_request_txt'] = 'Você tem uma nova resposta para requisi
 $wb['answer_to_support_request_sent_txt'] = 'Sua resposta para requisição de suporte foi enviada. Por favor, não responda esse e-mail.';
 $wb['support_request_sent_txt'] = 'Sua requisição de suporte foi enviada. Por favor não responda este e-mail.';
 $wb['recipient_or_sender_email_address_not_valid_txt'] = 'A mensagem não foi enviada porque o e-mail do destinatário e/ou remetente não é válido.';
-$wb['subject_is_empty'] = 'Não é permitido o campo \\"Assunto\\" em branco.';
+$wb['subject_is_empty'] = 'Não é permitido o campo \"Assunto\" em branco.';
 ?>
diff --git a/interface/web/login/lib/lang/ar_login_as.lng b/interface/web/login/lib/lang/ar_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/ar_login_as.lng
+++ b/interface/web/login/lib/lang/ar_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/bg_login_as.lng b/interface/web/login/lib/lang/bg_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/bg_login_as.lng
+++ b/interface/web/login/lib/lang/bg_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/br_login_as.lng b/interface/web/login/lib/lang/br_login_as.lng
index 5d9fb269b9..4c02c963c2 100644
--- a/interface/web/login/lib/lang/br_login_as.lng
+++ b/interface/web/login/lib/lang/br_login_as.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['login_1_txt'] = 'Você deseja acessar como usuário';
-$wb['login_2_txt'] = 'Para retornar ao administrador, você pode \\"voltar\\" selecionando sair.';
+$wb['login_2_txt'] = 'Para retornar ao administrador, você pode \"voltar\" selecionando sair.';
 $wb['btn_yes_txt'] = 'Sim, acessar como cliente';
 $wb['btn_back_txt'] = 'Não, voltar a lista';
 $wb['udp_port_help_txt'] = 'Separado por vírgula';
diff --git a/interface/web/login/lib/lang/ca_login_as.lng b/interface/web/login/lib/lang/ca_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/ca_login_as.lng
+++ b/interface/web/login/lib/lang/ca_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/dk_login_as.lng b/interface/web/login/lib/lang/dk_login_as.lng
index bebcf165a7..a75ea7262a 100644
--- a/interface/web/login/lib/lang/dk_login_as.lng
+++ b/interface/web/login/lib/lang/dk_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Vil du logge ind som bruger';
-$wb['login_2_txt'] = 'Hvis du gør det, kan du \\"Gå tilbage\\" ved at klikke på logout.';
+$wb['login_2_txt'] = 'Hvis du gør det, kan du \"Gå tilbage\" ved at klikke på logout.';
 $wb['btn_yes_txt'] = 'Ja, log ind som Kunde';
 $wb['btn_back_txt'] = 'Nej, tilbage til listen';
 $wb['udp_port_help_txt'] = 'Adskilt af komma';
 $wb['active_txt'] = 'Aktiv';
 $wb['firewall_error_unique'] = 'Der er allerede en firewall post for denne server.';
-$wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i TCP port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
-$wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i UDP port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i TCP port definition. Tilladt tegn er tal, \":\" og \",\".';
+$wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i UDP port definition. Tilladt tegn er tal, \":\" og \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/el_login_as.lng b/interface/web/login/lib/lang/el_login_as.lng
index 435d3e9a69..a6c2988017 100644
--- a/interface/web/login/lib/lang/el_login_as.lng
+++ b/interface/web/login/lib/lang/el_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Θέλετε να εισέλθετε ως χρήστης;';
-$wb['login_2_txt'] = 'Αν το κάνετε, μπορείτε να  \\"επιστρέψετε\\" κάνοντας αποσύνδεση.';
+$wb['login_2_txt'] = 'Αν το κάνετε, μπορείτε να  \"επιστρέψετε\" κάνοντας αποσύνδεση.';
 $wb['btn_yes_txt'] = 'Ναι, είσοδος ως Πελάτης';
 $wb['btn_back_txt'] = 'Όχι, επιστροφή στην λίστα';
 $wb['udp_port_help_txt'] = 'διαχωρισμός με κόμα';
 $wb['active_txt'] = 'Εν Ενεργεία';
 $wb['firewall_error_unique'] = 'Υπάρχει ήδη μια εγγραφή Firewall για αυτόν τον server.';
-$wb['tcp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας tcp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \\":\\" και οι \\",\\".';
-$wb['udp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας udp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \\":\\" και οι \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας tcp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \":\" και οι \",\".';
+$wb['udp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας udp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \":\" και οι \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/es_login_as.lng b/interface/web/login/lib/lang/es_login_as.lng
index b7f3e21f98..10a8554bcb 100755
--- a/interface/web/login/lib/lang/es_login_as.lng
+++ b/interface/web/login/lib/lang/es_login_as.lng
@@ -4,9 +4,9 @@ $wb['btn_back_txt'] = 'No, volver a la lista';
 $wb['btn_yes_txt'] = 'Sí, iniciar sesión como cliente';
 $wb['firewall_error_unique'] = 'Ya existe un registro de cortafuegos para este servidor.';
 $wb['login_1_txt'] = 'Desea iniciar sesión como usuario';
-$wb['login_2_txt'] = 'Si lo hace, puede \\"volver\\" haciendo clic en salir.';
-$wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
+$wb['login_2_txt'] = 'Si lo hace, puede \"volver\" haciendo clic en salir.';
+$wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \":\" y \",\".';
 $wb['udp_port_help_txt'] = 'Separado por comas';
-$wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
+$wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \":\" y \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/fi_login_as.lng b/interface/web/login/lib/lang/fi_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/fi_login_as.lng
+++ b/interface/web/login/lib/lang/fi_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/hr_login_as.lng b/interface/web/login/lib/lang/hr_login_as.lng
index bcd13040d3..a94f659705 100644
--- a/interface/web/login/lib/lang/hr_login_as.lng
+++ b/interface/web/login/lib/lang/hr_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Odvojeno zarezom';
 $wb['active_txt'] = 'Aktivno';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/hu_login_as.lng b/interface/web/login/lib/lang/hu_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/hu_login_as.lng
+++ b/interface/web/login/lib/lang/hu_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/id_login_as.lng b/interface/web/login/lib/lang/id_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/id_login_as.lng
+++ b/interface/web/login/lib/lang/id_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/it_login_as.lng b/interface/web/login/lib/lang/it_login_as.lng
index 3fa23da274..fab2f1b088 100644
--- a/interface/web/login/lib/lang/it_login_as.lng
+++ b/interface/web/login/lib/lang/it_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Desideri accedere come utente';
-$wb['login_2_txt'] = 'Se vuoi procedere puoi tornare indietro \\"go back\\" eseguendo il logout.';
+$wb['login_2_txt'] = 'Se vuoi procedere puoi tornare indietro \"go back\" eseguendo il logout.';
 $wb['btn_yes_txt'] = 'Si, login accedi come cliente';
 $wb['btn_back_txt'] = 'No, torna alla lista';
 $wb['udp_port_help_txt'] = 'Separato da virgola';
 $wb['active_txt'] = 'Attivo';
 $wb['firewall_error_unique'] = 'Esiste già un record firewall per questo server.';
-$wb['tcp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta tcp. Sono consentiti caratteri numerici, \\":\\" e \\",\\".';
-$wb['udp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta udp. ono consentiti caratteri numerici, \\":\\" e \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta tcp. Sono consentiti caratteri numerici, \":\" e \",\".';
+$wb['udp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta udp. ono consentiti caratteri numerici, \":\" e \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/ja_login_as.lng b/interface/web/login/lib/lang/ja_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/ja_login_as.lng
+++ b/interface/web/login/lib/lang/ja_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/nl_login_as.lng b/interface/web/login/lib/lang/nl_login_as.lng
index d4d2715e7a..3061782706 100644
--- a/interface/web/login/lib/lang/nl_login_as.lng
+++ b/interface/web/login/lib/lang/nl_login_as.lng
@@ -6,7 +6,7 @@ $wb['btn_back_txt'] = 'Nee, terug naar het overzicht';
 $wb['udp_port_help_txt'] = 'Gescheiden door komma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/pt_login_as.lng b/interface/web/login/lib/lang/pt_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/pt_login_as.lng
+++ b/interface/web/login/lib/lang/pt_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/ro_login_as.lng b/interface/web/login/lib/lang/ro_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/ro_login_as.lng
+++ b/interface/web/login/lib/lang/ro_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/ru_login_as.lng b/interface/web/login/lib/lang/ru_login_as.lng
index 63031d4d09..46a3eab288 100644
--- a/interface/web/login/lib/lang/ru_login_as.lng
+++ b/interface/web/login/lib/lang/ru_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Вы хотите войти как пользователь';
-$wb['login_2_txt'] = 'Если вы это сделаете, вы можете \\"вернуться\\", нажав на \\"выход\\".';
+$wb['login_2_txt'] = 'Если вы это сделаете, вы можете \"вернуться\", нажав на \"выход\".';
 $wb['btn_yes_txt'] = 'Да, войти как Клиент';
 $wb['btn_back_txt'] = 'Нет, назад к списку';
 $wb['udp_port_help_txt'] = 'Перечислить через запятую';
 $wb['active_txt'] = 'Активно';
 $wb['firewall_error_unique'] = 'Уже есть такая запись бредмауэра для этого сервера.';
-$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
-$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
+$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \":\" и \",\"';
+$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \":\" и \",\"';
 $wb['login_as_or_logout_txt'] = 'Вы хотите заново войти как {UTYPE} или выйти?';
 ?>
diff --git a/interface/web/login/lib/lang/se_login_as.lng b/interface/web/login/lib/lang/se_login_as.lng
index 17a82080dc..203832c7b7 100644
--- a/interface/web/login/lib/lang/se_login_as.lng
+++ b/interface/web/login/lib/lang/se_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Vill du loggga in som användare';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Ja, logga in som kund';
 $wb['btn_back_txt'] = 'Nej, tillbaka till listan';
 $wb['udp_port_help_txt'] = 'Avdelade med kommatecken';
 $wb['active_txt'] = 'Aktiv';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/sk_login_as.lng b/interface/web/login/lib/lang/sk_login_as.lng
index cf75b54b47..68cb3318e5 100644
--- a/interface/web/login/lib/lang/sk_login_as.lng
+++ b/interface/web/login/lib/lang/sk_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/tr_login_as.lng b/interface/web/login/lib/lang/tr_login_as.lng
index f7f12feeff..a000d44342 100644
--- a/interface/web/login/lib/lang/tr_login_as.lng
+++ b/interface/web/login/lib/lang/tr_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Bu kullanıcı olarak oturum açmak ister misiniz';
-$wb['login_2_txt'] = '\\"Geri dönmek\\" için oturumu kapat üzerine tıklayın.';
+$wb['login_2_txt'] = '\"Geri dönmek\" için oturumu kapat üzerine tıklayın.';
 $wb['btn_yes_txt'] = 'Evet, Müşteri olarak oturum aç';
 $wb['btn_back_txt'] = 'Hayır, listeye geri dön';
 $wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['active_txt'] = 'Etkin';
 $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
-$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
-$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \":\" ve \",\" karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \":\" ve \",\" karakterleri kullanılabilir.';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/mail/lib/lang/ar_mail_get.lng b/interface/web/mail/lib/lang/ar_mail_get.lng
index 8ae7712151..5d6a72fbfb 100644
--- a/interface/web/mail/lib/lang/ar_mail_get.lng
+++ b/interface/web/mail/lib/lang/ar_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Password is empty.';
 $wb['destination_error_isemail'] = 'No destination selected.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_get.lng b/interface/web/mail/lib/lang/bg_mail_get.lng
index e1b1935d32..305256d5c6 100644
--- a/interface/web/mail/lib/lang/bg_mail_get.lng
+++ b/interface/web/mail/lib/lang/bg_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Password is empty.';
 $wb['destination_error_isemail'] = 'No destination selected.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index f91d40f625..a786566277 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -35,7 +35,7 @@ $wb['name_txt'] = 'Nome real';
 $wb['name_optional_txt'] = '(Opcional)';
 $wb['autoresponder_active'] = 'Ativar autoresposta';
 $wb['cc_txt'] = 'Enviar cópia para';
-$wb['cc_error_isemail'] = 'O campo \\"Enviar cópia para\\" deve conter um endereço de e-mail válido';
+$wb['cc_error_isemail'] = 'O campo \"Enviar cópia para\" deve conter um endereço de e-mail válido';
 $wb['domain_txt'] = 'Domínio';
 $wb['now_txt'] = 'Agora';
 $wb['login_error_unique'] = 'O acesso já está em uso.';
@@ -48,7 +48,7 @@ $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['email_error_isascii'] = 'Por favor não use caracteres \\"unicode\\" para a senha. Esta ação poderá causar problemas com seu cliente de e-mail (mua).';
+$wb['email_error_isascii'] = 'Por favor não use caracteres \"unicode\" para a senha. Esta ação poderá causar problemas com seu cliente de e-mail (mua).';
 $wb['cc_note_txt'] = '(Múltiplos e-mails separados por vírgulas)';
 $wb['disablesmtp_txt'] = 'Desabilitar smtp (envio)';
 $wb['autoresponder_start_date_is_required'] = 'Data de início deve ser configurada quando \'autoresposta\' é habilitada.';
diff --git a/interface/web/mail/lib/lang/ca_mail_get.lng b/interface/web/mail/lib/lang/ca_mail_get.lng
index a13a1b03f6..9300a29049 100644
--- a/interface/web/mail/lib/lang/ca_mail_get.lng
+++ b/interface/web/mail/lib/lang/ca_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Le mot de passe est vide.';
 $wb['destination_error_isemail'] = 'Pas de destination sélectionnée.';
 $wb['source_server_error_regex'] = 'Le serveur POP3 / IMAP n\'est pas un nom de domaine valide.';
 $wb['source_read_all_txt'] = 'Récupérer tous les courriels (incl. les courriels lus)';
-$wb['error_delete_read_all_combination'] = 'Combinaison d\'options non autorisée. Vous ne pouvez pas utiliser \\"Supprimer les courriels après récupération\\" = non avec \\"Récupérer tous les courriels\\" = oui';
+$wb['error_delete_read_all_combination'] = 'Combinaison d\'options non autorisée. Vous ne pouvez pas utiliser \"Supprimer les courriels après récupération\" = non avec \"Récupérer tous les courriels\" = oui';
 $wb['source_delete_note_txt'] = 'Please check first if courriel retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_get.lng b/interface/web/mail/lib/lang/cz_mail_get.lng
index cdb39b09a1..3dfee1a5ef 100644
--- a/interface/web/mail/lib/lang/cz_mail_get.lng
+++ b/interface/web/mail/lib/lang/cz_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Heslo je prázdné.';
 $wb['destination_error_isemail'] = 'Nevybrán žádný cíl.';
 $wb['source_server_error_regex'] = 'POP3/IMAP server není validní doménový název.';
 $wb['source_read_all_txt'] = 'Načíst všechny e-maily (včetně již přečtené pošty)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Prosím, zkontrolujte nejprve, zda příjímání e-mailů funguje, než aktivujete tuto možnost.';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_mailinglist.lng b/interface/web/mail/lib/lang/cz_mail_mailinglist.lng
index e1f7dfbfa5..f534d6c8e9 100644
--- a/interface/web/mail/lib/lang/cz_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/cz_mail_mailinglist.lng
@@ -16,7 +16,7 @@ $wb['generate_password_txt'] = 'Generovat heslo';
 $wb['repeat_password_txt'] = 'Opakujte heslo';
 $wb['password_mismatch_txt'] = 'Hesla se neshodují.';
 $wb['password_match_txt'] = 'Hesla se shodují.';
-$wb['listname_error_unique'] = 'Na serveru je již shodný \\"název seznamu\\". Prosím, vyberte si jiný \\"název seznamu\\".';
+$wb['listname_error_unique'] = 'Na serveru je již shodný \"název seznamu\". Prosím, vyberte si jiný \"název seznamu\".';
 $wb['email_error_isemail'] = 'E-mailová adresa je neplatná.';
 $wb['mailinglist_txt'] = 'E-mailové konference';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_mail_get.lng b/interface/web/mail/lib/lang/dk_mail_get.lng
index 1fa44cb6ad..dc0b7455ac 100644
--- a/interface/web/mail/lib/lang/dk_mail_get.lng
+++ b/interface/web/mail/lib/lang/dk_mail_get.lng
@@ -15,5 +15,5 @@ $wb['source_username_error_isempty'] = 'Brugernavn er tom.';
 $wb['source_password_error_isempty'] = 'Adgangskode er tom.';
 $wb['destination_error_isemail'] = 'Ingen destination er valgt.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server er ikke et gyldigt domænenavn.';
-$wb['error_delete_read_all_combination'] = 'Ulovlig kombination af muligheder. Du kan ikke bruge \\"Slet e-mails efter hentning\\" = nej sammen med \\"Hent alle e-mails\\" = ja';
+$wb['error_delete_read_all_combination'] = 'Ulovlig kombination af muligheder. Du kan ikke bruge \"Slet e-mails efter hentning\" = nej sammen med \"Hent alle e-mails\" = ja';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_get.lng b/interface/web/mail/lib/lang/el_mail_get.lng
index 0ec9645c8f..cc2c261a5b 100644
--- a/interface/web/mail/lib/lang/el_mail_get.lng
+++ b/interface/web/mail/lib/lang/el_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Το Συνθηματικό δεν έχ
 $wb['destination_error_isemail'] = 'Δεν επιλέχθηκε προορισμός.';
 $wb['source_server_error_regex'] = 'Το όνομα του Pop3/Imap Server δεν είναι έγκυρο.';
 $wb['source_read_all_txt'] = 'Ανάκτηση όλων των emails (συμπερ. αναγνωσμένων mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/es.lng b/interface/web/mail/lib/lang/es.lng
index 797aeeeb60..787007a7fc 100755
--- a/interface/web/mail/lib/lang/es.lng
+++ b/interface/web/mail/lib/lang/es.lng
@@ -8,7 +8,7 @@ $wb['Domain'] = 'Dominio';
 $wb['Email Accounts'] = 'Cuentas de correo';
 $wb['Email Alias'] = 'Alias de correo';
 $wb['Email Blacklist'] = 'Lista negra de correo';
-$wb['Email Catchall'] = 'Correo \\"recoge-todo\\"';
+$wb['Email Catchall'] = 'Correo \"recoge-todo\"';
 $wb['Email filter'] = 'Filtro de correo';
 $wb['Email Forward'] = 'Reenvío de correo';
 $wb['Email Mailbox'] = 'Buzón de correo';
diff --git a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
index 48ead68ac1..ed6c9b5db4 100755
--- a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
@@ -3,9 +3,9 @@ $wb['active_txt'] = 'Habilitado';
 $wb['destination_error_isemail'] = 'El destinatario no es una dirección de correo válida.';
 $wb['destination_txt'] = 'Correo de destino';
 $wb['domain_error_regex'] = 'El nombre de dominio es inválido o contiene caracteres no permitidos.';
-$wb['domain_error_unique'] = 'Este dominio ya tiene un correo \\"recoge-todo\\".';
+$wb['domain_error_unique'] = 'Este dominio ya tiene un correo \"recoge-todo\".';
 $wb['domain_txt'] = 'Dominio';
-$wb['limit_mailcatchall_txt'] = 'Ha alcanzado el número máx. de correo \\"recoge-todo\\" para correo permitidos para su cuenta.';
+$wb['limit_mailcatchall_txt'] = 'Ha alcanzado el número máx. de correo \"recoge-todo\" para correo permitidos para su cuenta.';
 $wb['no_domain_perm'] = 'No tiene permisos para usar este dominio.';
 $wb['source_txt'] = 'Origen';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng
index 8288430a18..fc3fde1956 100755
--- a/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
-$wb['add_new_record_txt'] = 'Añadir correo \\"recoge-todo\\"';
+$wb['add_new_record_txt'] = 'Añadir correo \"recoge-todo\"';
 $wb['destination_txt'] = 'Dirección de correo de destino';
 $wb['domain_txt'] = 'Dominio';
-$wb['list_head_txt'] = 'Correo \\"recoge-todo\\"';
+$wb['list_head_txt'] = 'Correo \"recoge-todo\"';
 $wb['server_id_txt'] = 'Servidor';
 $wb['source_txt'] = 'Origen';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_get.lng b/interface/web/mail/lib/lang/es_mail_get.lng
index 81de60b038..47529e27c6 100755
--- a/interface/web/mail/lib/lang/es_mail_get.lng
+++ b/interface/web/mail/lib/lang/es_mail_get.lng
@@ -2,7 +2,7 @@
 $wb['active_txt'] = 'Habilitado';
 $wb['destination_error_isemail'] = 'No ha seleccionado un destinatario.';
 $wb['destination_txt'] = 'Destino';
-$wb['error_delete_read_all_combination'] = 'Combinación incorrecta de opciones. No puede usar \\"Borrar correos después de recuperarlos\\" = NO al mismo tiempo que \\"Recuperar todos los correos\\" = SI';
+$wb['error_delete_read_all_combination'] = 'Combinación incorrecta de opciones. No puede usar \"Borrar correos después de recuperarlos\" = NO al mismo tiempo que \"Recuperar todos los correos\" = SI';
 $wb['limit_fetchmail_txt'] = 'Ha alcanzado el número máx. de registros de recuperación de correo permitidos para su cuenta.';
 $wb['server_id_txt'] = 'Servidor';
 $wb['source_delete_note_txt'] = 'Por favor, verifique que funcione la recuperación de correos antes de activar esta opción.';
diff --git a/interface/web/mail/lib/lang/fi_mail_get.lng b/interface/web/mail/lib/lang/fi_mail_get.lng
index 063a37bf04..9eca1d8498 100755
--- a/interface/web/mail/lib/lang/fi_mail_get.lng
+++ b/interface/web/mail/lib/lang/fi_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Salasana-kenttä on tyhjä.';
 $wb['destination_error_isemail'] = 'Ei kohdetta valittuna.';
 $wb['source_server_error_regex'] = 'Pop3/Imap-palvelin ei ole kelvollinen osoite.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_get.lng b/interface/web/mail/lib/lang/fr_mail_get.lng
index 00f72f0c8b..118ab5ed32 100644
--- a/interface/web/mail/lib/lang/fr_mail_get.lng
+++ b/interface/web/mail/lib/lang/fr_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Le mot de passe est vide.';
 $wb['destination_error_isemail'] = 'Pas de destination sélectionnée.';
 $wb['source_server_error_regex'] = 'Le serveur POP3 / IMAP n’est pas un nom de domaine valide.';
 $wb['source_read_all_txt'] = 'Récupérer tous les emails (incl. les emails lus)';
-$wb['error_delete_read_all_combination'] = 'Combinaison d’options non autorisée. Vous ne pouvez pas utiliser \\"Supprimer les emails après récupération\\" = non avec \\"Récupérer tous les emails\\" = oui';
+$wb['error_delete_read_all_combination'] = 'Combinaison d’options non autorisée. Vous ne pouvez pas utiliser \"Supprimer les emails après récupération\" = non avec \"Récupérer tous les emails\" = oui';
 $wb['source_delete_note_txt'] = 'Please check first if e-mail retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_mail_get.lng b/interface/web/mail/lib/lang/hr_mail_get.lng
index 18c53a4d53..025bb136b0 100644
--- a/interface/web/mail/lib/lang/hr_mail_get.lng
+++ b/interface/web/mail/lib/lang/hr_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Password is empty.';
 $wb['destination_error_isemail'] = 'No destination selected.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_get.lng b/interface/web/mail/lib/lang/hu_mail_get.lng
index 59cb26dd6a..a02a1fe114 100644
--- a/interface/web/mail/lib/lang/hu_mail_get.lng
+++ b/interface/web/mail/lib/lang/hu_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Jelszó üres.';
 $wb['destination_error_isemail'] = 'Nem választott címzettet.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_get.lng b/interface/web/mail/lib/lang/id_mail_get.lng
index cec2466f28..7617cbc7df 100644
--- a/interface/web/mail/lib/lang/id_mail_get.lng
+++ b/interface/web/mail/lib/lang/id_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Kata Sandi kosong.';
 $wb['destination_error_isemail'] = 'Tidak ada tujuan yang dipilih.';
 $wb['source_server_error_regex'] = 'Server Pop3/Imap bukan merupakan nama domain yang valid.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_get.lng b/interface/web/mail/lib/lang/it_mail_get.lng
index 70770c22d4..3b443a7268 100644
--- a/interface/web/mail/lib/lang/it_mail_get.lng
+++ b/interface/web/mail/lib/lang/it_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Valore Password  vuoto.';
 $wb['destination_error_isemail'] = 'Nessuna destinazione selezionata.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server non è un nome dominio valido.';
 $wb['source_read_all_txt'] = 'Recupera tutte le email (incluso mail lette)';
-$wb['error_delete_read_all_combination'] = 'Combinazione di opzioni non conforme. Non puoi utilizzare \\"Elimina mail dopo averle scaricate \\" = NO assieme a  \\"Recupera tutte le email\\" = SI';
+$wb['error_delete_read_all_combination'] = 'Combinazione di opzioni non conforme. Non puoi utilizzare \"Elimina mail dopo averle scaricate \" = NO assieme a  \"Recupera tutte le email\" = SI';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_get.lng b/interface/web/mail/lib/lang/ja_mail_get.lng
index 3c5c9ec092..f1c45256bf 100644
--- a/interface/web/mail/lib/lang/ja_mail_get.lng
+++ b/interface/web/mail/lib/lang/ja_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'パスワードを指定してくださ
 $wb['destination_error_isemail'] = '宛先を選択してください。';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_get.lng b/interface/web/mail/lib/lang/nl_mail_get.lng
index 5cbeab14e7..6752b42cd8 100644
--- a/interface/web/mail/lib/lang/nl_mail_get.lng
+++ b/interface/web/mail/lib/lang/nl_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Wachtwoord is niet ingvuld.';
 $wb['destination_error_isemail'] = 'Geen bestemming geselecteerd.';
 $wb['source_server_error_regex'] = 'Pop3/Imap server is geen geldige domeinnaam.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 94dd018332..acc2da94e1 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -36,7 +36,7 @@ $wb['name_txt'] = 'Echte naam';
 $wb['name_optional_txt'] = '(Optioneel)';
 $wb['autoresponder_active'] = 'Inschakelen autoresponder';
 $wb['cc_txt'] = 'Stuur kopie naar';
-$wb['cc_error_isemail'] = 'Het \\"Stuur kopie naar\\" veld bevat geen geldig e-mail adres';
+$wb['cc_error_isemail'] = 'Het \"Stuur kopie naar\" veld bevat geen geldig e-mail adres';
 $wb['domain_txt'] = 'Domain';
 $wb['now_txt'] = 'Now';
 $wb['login_error_unique'] = 'Login is already taken.';
@@ -60,6 +60,6 @@ $wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 $wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
-$wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
+$wb['sender_cc_error_isemail'] = 'Het \"Stuur uitgaande kopie aan\" veld bevat geen geldig e-mail adres';
 $wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_get.lng b/interface/web/mail/lib/lang/pt_mail_get.lng
index 883279a2d5..f3ea6227fa 100644
--- a/interface/web/mail/lib/lang/pt_mail_get.lng
+++ b/interface/web/mail/lib/lang/pt_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Senha em branco.';
 $wb['destination_error_isemail'] = 'Destino não seleccionado.';
 $wb['source_server_error_regex'] = 'Servidor Pop3/Imap não é um nome de domínio válido.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_get.lng b/interface/web/mail/lib/lang/ro_mail_get.lng
index 5e0a590f70..16a0b6aeb7 100644
--- a/interface/web/mail/lib/lang/ro_mail_get.lng
+++ b/interface/web/mail/lib/lang/ro_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Password este necompletat';
 $wb['destination_error_isemail'] = 'Nici o destinatie nu e selectata';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_get.lng b/interface/web/mail/lib/lang/ru_mail_get.lng
index b3f2f0b6bf..0ce613cd05 100644
--- a/interface/web/mail/lib/lang/ru_mail_get.lng
+++ b/interface/web/mail/lib/lang/ru_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Пустой пароль.';
 $wb['destination_error_isemail'] = 'Не выбран получатель или запись некорректна.';
 $wb['source_server_error_regex'] = 'Некорректное доменное имя для сервера POP3/IMAP.';
 $wb['source_read_all_txt'] = 'Получать все сообщения электронной почты (включая прочитанные письма)';
-$wb['error_delete_read_all_combination'] = 'Недопустимая комбинация параметров. Вы не можете использовать \\"Удалить письма после получения\\" = НЕТ вместе с \\"Получить все письма\\" = ДА';
+$wb['error_delete_read_all_combination'] = 'Недопустимая комбинация параметров. Вы не можете использовать \"Удалить письма после получения\" = НЕТ вместе с \"Получить все письма\" = ДА';
 $wb['source_delete_note_txt'] = 'Пожалуйста, прежде чем активировать этот параметр, убедитесь в том, что сборщик почты работает.';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_user_filter.lng b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
index c8306f9838..ecc2d25b9d 100644
--- a/interface/web/mail/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
@@ -6,7 +6,7 @@ $wb['active_txt'] = 'Активно';
 $wb['rulename_error_empty'] = 'Имя пустое.';
 $wb['searchterm_is_empty'] = 'Поле поиска пустое.';
 $wb['source_txt'] = 'Источник';
-$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \\"a-z\\", \\"0-9\\", \\"-\\", \\".\\", \\"_\\" и {пробел}';
+$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \"a-z\", \"0-9\", \"-\", \".\", \"_\" и {пробел}';
 $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.';
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
diff --git a/interface/web/mail/lib/lang/se_mail_get.lng b/interface/web/mail/lib/lang/se_mail_get.lng
index 9ed9710055..db4440210e 100644
--- a/interface/web/mail/lib/lang/se_mail_get.lng
+++ b/interface/web/mail/lib/lang/se_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Lösenord är tomt.';
 $wb['destination_error_isemail'] = 'Ingen destination vald.';
 $wb['source_server_error_regex'] = 'POP3-/Imapserver är inte ett giltigt domännamn.';
 $wb['source_read_all_txt'] = 'Hämta all epost (även läst epost)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Vänligen kontrollera först om eposthämtning fungerar innan du aktiverar detta val..';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_get.lng b/interface/web/mail/lib/lang/sk_mail_get.lng
index e43899965d..8e180ca7a8 100644
--- a/interface/web/mail/lib/lang/sk_mail_get.lng
+++ b/interface/web/mail/lib/lang/sk_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Heslo je prázdne.';
 $wb['destination_error_isemail'] = 'Žiadny Cieľ nebol vybraný.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server nie je valídne doménové meno.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_get.lng b/interface/web/mail/lib/lang/tr_mail_get.lng
index b82b6c8c9a..3e29c26a71 100644
--- a/interface/web/mail/lib/lang/tr_mail_get.lng
+++ b/interface/web/mail/lib/lang/tr_mail_get.lng
@@ -15,5 +15,5 @@ $wb['source_username_error_isempty'] = 'Kullanıcı adı boş olamaz.';
 $wb['source_password_error_isempty'] = 'Parola boÅŸ olamaz.';
 $wb['destination_error_isemail'] = 'Hedef seçilmemiş.';
 $wb['source_server_error_regex'] = 'POP3/IMAP Sunucu alan adı geçersiz.';
-$wb['error_delete_read_all_combination'] = 'Seçenek kombinasyonu geçersiz. You can not use \\"E-postalar alındıktan sonra silinsin\\" = Hayır iken \\"Tüm e-postalar alınsın\\" = Evet olamaz';
+$wb['error_delete_read_all_combination'] = 'Seçenek kombinasyonu geçersiz. You can not use \"E-postalar alındıktan sonra silinsin\" = Hayır iken \"Tüm e-postalar alınsın\" = Evet olamaz';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
index d834e4057a..f10dd4ddb2 100644
--- a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
@@ -6,7 +6,7 @@ $wb['active_txt'] = 'Активно';
 $wb['rulename_error_empty'] = 'Имя пустое.';
 $wb['searchterm_is_empty'] = 'Поле поиска пустое.';
 $wb['source_txt'] = 'Источник';
-$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \\"a-z\\", \\"0-9\\", \\"-\\", \\".\\", \\"_\\" и {пробел}';
+$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \"a-z\", \"0-9\", \"-\", \".\", \"_\" и {пробел}';
 $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.';
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
diff --git a/interface/web/monitor/lib/lang/es.lng b/interface/web/monitor/lib/lang/es.lng
index f4acb3c45c..3a95c6e9c2 100755
--- a/interface/web/monitor/lib/lang/es.lng
+++ b/interface/web/monitor/lib/lang/es.lng
@@ -27,7 +27,7 @@ $wb['monitor_logs_mailerr_txt'] = 'Registros de errores de correo';
 $wb['monitor_logs_mailwarn_txt'] = 'Registros de advertencias de correo';
 $wb['monitor_logs_messages_txt'] = 'Registros de mensajes del sistema';
 $wb['monitor_norkhunter_txt'] = 'RKHunter no está instalado, por lo que no hay registros a mostrar';
-$wb['monitor_nosupportedraid1_txt'] = 'Por el momento, soportamos \\"mdadm\\" o \\"mpt-status\\" para supervisar el RAID.<br>No hemos podido encontrarlo en su servidor. </br> Por lo tanto no podemos monitorizar su RAID todavía.';
+$wb['monitor_nosupportedraid1_txt'] = 'Por el momento, soportamos \"mdadm\" o \"mpt-status\" para supervisar el RAID.<br>No hemos podido encontrarlo en su servidor. </br> Por lo tanto no podemos monitorizar su RAID todavía.';
 $wb['monitor_serverstate_beancountercritical_txt'] = 'Existen muchos errores en el Beancounter';
 $wb['monitor_serverstate_beancountererror_txt'] = 'Existen muchísimos errores en el Beancounter';
 $wb['monitor_serverstate_beancounterinfo_txt'] = 'Existen algún error en el Beancounter';
diff --git a/interface/web/sites/lib/lang/ar.lng b/interface/web/sites/lib/lang/ar.lng
index 6ca61afae0..bfd833292d 100644
--- a/interface/web/sites/lib/lang/ar.lng
+++ b/interface/web/sites/lib/lang/ar.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_aps.lng b/interface/web/sites/lib/lang/ar_aps.lng
index 881c146a4d..3ff130f57e 100644
--- a/interface/web/sites/lib/lang/ar_aps.lng
+++ b/interface/web/sites/lib/lang/ar_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/ar_web_childdomain.lng b/interface/web/sites/lib/lang/ar_web_childdomain.lng
index 636505f248..604a81b68f 100644
--- a/interface/web/sites/lib/lang/ar_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/ar_web_subdomain.lng b/interface/web/sites/lib/lang/ar_web_subdomain.lng
index c5fa1711bb..1295f36697 100644
--- a/interface/web/sites/lib/lang/ar_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/bg.lng b/interface/web/sites/lib/lang/bg.lng
index 0d28df2994..842b70ae02 100644
--- a/interface/web/sites/lib/lang/bg.lng
+++ b/interface/web/sites/lib/lang/bg.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_aps.lng b/interface/web/sites/lib/lang/bg_aps.lng
index 6a5f981943..612adcd429 100644
--- a/interface/web/sites/lib/lang/bg_aps.lng
+++ b/interface/web/sites/lib/lang/bg_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/bg_web_childdomain.lng b/interface/web/sites/lib/lang/bg_web_childdomain.lng
index c7549b76f7..7106438c34 100644
--- a/interface/web/sites/lib/lang/bg_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/bg_web_subdomain.lng b/interface/web/sites/lib/lang/bg_web_subdomain.lng
index 0df1e50594..f4218278d9 100644
--- a/interface/web/sites/lib/lang/bg_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/br.lng b/interface/web/sites/lib/lang/br.lng
index 685ce6ed28..3fdd93585e 100644
--- a/interface/web/sites/lib/lang/br.lng
+++ b/interface/web/sites/lib/lang/br.lng
@@ -30,6 +30,6 @@ $wb['Available packages'] = 'Pacotes disponíveis';
 $wb['Installed packages'] = 'Pacotes instalados';
 $wb['Update Packagelist'] = 'Atualizar lista de pacotes';
 $wb['Subdomain (Vhost)'] = 'Subdomínio (vhost)';
-$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \\"proxy\\" exige uma url como caminho do redirecionamento.';
+$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \"proxy\" exige uma url como caminho do redirecionamento.';
 $wb['Domain'] = 'Domínio';
 ?>
diff --git a/interface/web/sites/lib/lang/br_cron.lng b/interface/web/sites/lib/lang/br_cron.lng
index 2bbadf6d1b..eab5b9f688 100644
--- a/interface/web/sites/lib/lang/br_cron.lng
+++ b/interface/web/sites/lib/lang/br_cron.lng
@@ -19,8 +19,8 @@ $wb['run_wday_error_format'] = 'Formato dos dias da semana é inválido.';
 $wb['command_error_format'] = 'Formato de comando é inválido. Somente endereços url http/https são permitidos.';
 $wb['unknown_fieldtype_error'] = 'Um tipo desconhecido de campo foi usado.';
 $wb['server_id_error_empty'] = 'O ID do servidor está em branco.';
-$wb['limit_cron_url_txt'] = 'Somente url do cron. Por favor, insira uma url iniciando com \\"http://\\" e um comando do cron.';
+$wb['limit_cron_url_txt'] = 'Somente url do cron. Por favor, insira uma url iniciando com \"http://\" e um comando do cron.';
 $wb['command_error_empty'] = 'Comando está em branco.';
-$wb['command_hint_txt'] = 'Você poderá usar, por exemplo: \\"/var/www/clients/clientX/webY/meu_script.sh\\" ou \\"http://www.dominio.com.br/path/script.php\\" e também a palavra reservada \\"[web_root]\\" substituído por \\"/var/www/clients/clientX/webY/web\\".';
+$wb['command_hint_txt'] = 'Você poderá usar, por exemplo: \"/var/www/clients/clientX/webY/meu_script.sh\" ou \"http://www.dominio.com.br/path/script.php\" e também a palavra reservada \"[web_root]\" substituído por \"/var/www/clients/clientX/webY/web\".';
 $wb['log_output_txt'] = 'Saída do Log';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database.lng b/interface/web/sites/lib/lang/br_database.lng
index ac916feef1..57b97693eb 100644
--- a/interface/web/sites/lib/lang/br_database.lng
+++ b/interface/web/sites/lib/lang/br_database.lng
@@ -23,7 +23,7 @@ $wb['database_remote_error_ips'] = 'Pelo menos um dos endereços IP informados n
 $wb['database_name_error_len'] = 'Nome do banco de dados - {db} - é muito longo. 64 caracteres, incluindo o prefixo, é o limite permitido.';
 $wb['database_user_error_len'] = 'Nome do usuário do banco de dados \'{user}\' é muito longo. 16 caracteres, incluindo o prefixo, é o limite permitido.';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['database_site_error_empty'] = 'Selecione o \\"site\\" ao qual o banco de dados pertence.';
+$wb['database_site_error_empty'] = 'Selecione o \"site\" ao qual o banco de dados pertence.';
 $wb['select_site_txt'] = '- Selecionar site -';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
diff --git a/interface/web/sites/lib/lang/br_database_user.lng b/interface/web/sites/lib/lang/br_database_user.lng
index 59b9fce627..518f0296e1 100644
--- a/interface/web/sites/lib/lang/br_database_user.lng
+++ b/interface/web/sites/lib/lang/br_database_user.lng
@@ -6,7 +6,7 @@ $wb['client_txt'] = 'Cliente';
 $wb['active_txt'] = 'Ativo';
 $wb['database_user_error_empty'] = 'Usuário do banco de dados está em branco.';
 $wb['database_user_error_unique'] = 'Já existe um usuário do banco de dados com este nome no servidor. Para configurar um nome exclusivo, use como prefixo o domínio para o nome do usuário.';
-$wb['database_user_error_regex'] = 'Usuário do banco de dados inválido! O nome do usuário pode conter os seguintes caracteres: \'\\"a-z\', \'A-Z\', \'0-9\' e o \'underscore\'. Tamanho: 2 - 64 caracteres.';
+$wb['database_user_error_regex'] = 'Usuário do banco de dados inválido! O nome do usuário pode conter os seguintes caracteres: \'\"a-z\', \'A-Z\', \'0-9\' e o \'underscore\'. Tamanho: 2 - 64 caracteres.';
 $wb['database_user_error_len'] = 'O usuário do banco de dados - {user} - é muito longo. O limite do nome do usuário, incluindo o prefixo, são 16 caracteres.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
diff --git a/interface/web/sites/lib/lang/br_ftp_user.lng b/interface/web/sites/lib/lang/br_ftp_user.lng
index 3df741ed9e..bb8d99ceb0 100644
--- a/interface/web/sites/lib/lang/br_ftp_user.lng
+++ b/interface/web/sites/lib/lang/br_ftp_user.lng
@@ -25,8 +25,8 @@ $wb['directory_error_empty'] = 'Diretório está em branco.';
 $wb['directory_error_notinweb'] = 'O diretório não está dentro do diretório web principal.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
 $wb['quota_size_error_regex'] = 'Cota: insira -1 para ilimitado ou um número > 0';
-$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \\"./\\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \"./\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/br_shell_user.lng b/interface/web/sites/lib/lang/br_shell_user.lng
index 3cbc911ab3..c92bf5baa4 100644
--- a/interface/web/sites/lib/lang/br_shell_user.lng
+++ b/interface/web/sites/lib/lang/br_shell_user.lng
@@ -20,8 +20,8 @@ $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
 $wb['puser_txt'] = 'Usuário web';
 $wb['pgroup_txt'] = 'Grupo web';
 $wb['ssh_rsa_txt'] = 'Chave pública SSH-RSA (para acessos baseados em chave)';
-$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido  \\"./\\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido  \"./\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain.lng b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
index 4acadb2c54..9d4f1951d8 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
@@ -14,7 +14,7 @@ $wb['ssl_bundle_txt'] = 'Pacote';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
-$wb['web_folder_error_regex'] = 'Pasta inválida inserida. Por favor, não use barra \\"/\\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida inserida. Por favor, não use barra \"/\".';
 $wb['type_txt'] = 'Tipo';
 $wb['parent_domain_id_txt'] = 'Site pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
@@ -62,7 +62,7 @@ $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São cara
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['ruby_txt'] = 'Ruby';
diff --git a/interface/web/sites/lib/lang/br_web_childdomain.lng b/interface/web/sites/lib/lang/br_web_childdomain.lng
index ecff0c2ae8..1c53d16584 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain.lng
@@ -36,18 +36,18 @@ $wb['domain_error_empty'] = 'Domínio está em branco.';
 $wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
 $wb['domain_error_regex'] = 'Nome de domínio é inválido.';
 $wb['host_txt'] = 'Nome do servidor';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['domain_error_wildcard'] = 'Curingas para subdomínios não são permitidos.';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento \\"proxy\\" exige uma url no caminho de redirecionamento.';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento \"proxy\" exige uma url no caminho de redirecionamento.';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
 $wb['backup_copies_txt'] = 'Limite de cópias do backup';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_domain_txt'] = 'Domínio do SSL';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não use uma barra - \\"/\\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não use uma barra - \"/\".';
 $wb['ipv6_address_txt'] = 'Endereço IPv6';
 $wb['errordocs_txt'] = 'Pasta personalizada Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
diff --git a/interface/web/sites/lib/lang/br_web_domain.lng b/interface/web/sites/lib/lang/br_web_domain.lng
index 662fdb407c..4b2e77b654 100644
--- a/interface/web/sites/lib/lang/br_web_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_domain.lng
@@ -52,10 +52,10 @@ $wb['limit_web_quota_free_txt'] = 'Cota máxima de disco disponível';
 $wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \\"a-z\\", \'0-9\' e \'.,-_\'.';
+$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \"a-z\", \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
@@ -104,7 +104,7 @@ $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida! Por favor não insira barra \\"/\\".';
+$wb['web_folder_error_regex'] = 'Pasta informada é inválida! Por favor não insira barra \"/\".';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
 $wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php:';
 $wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache:';
diff --git a/interface/web/sites/lib/lang/br_web_subdomain.lng b/interface/web/sites/lib/lang/br_web_subdomain.lng
index 0ccc574805..8abb050438 100644
--- a/interface/web/sites/lib/lang/br_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_subdomain.lng
@@ -36,7 +36,7 @@ $wb['domain_error_empty'] = 'Domínio está em branco.';
 $wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
 $wb['domain_error_regex'] = 'Nome do domínio é inválido.';
 $wb['host_txt'] = 'Host';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['domain_error_wildcard'] = 'Curingas de subdomínios não são permitidos.';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index 4c72b1fd88..d30db9f189 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -56,7 +56,7 @@ $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São cara
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste\" ou \"http://www.dominio.com.br/teste/\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
@@ -106,7 +106,7 @@ $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não insira barra - \\"\\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não insira barra - \"\".';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com essas configurações.';
 $wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
 $wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
index fa6ddad484..8a0c3e6a1f 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
@@ -19,7 +19,7 @@ $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['host_txt'] = 'Hostname';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida. Por favor, não insira barra - \\"/\\".';
+$wb['web_folder_error_regex'] = 'Pasta informada é inválida. Por favor, não insira barra - \"/\".';
 $wb['type_txt'] = 'Tipo';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
 $wb['redirect_path_txt'] = 'Caminho para redirecionamento';
@@ -60,13 +60,13 @@ $wb['client_group_id_txt'] = 'Cliente';
 $wb['stats_password_txt'] = 'Senha para estatísticas web';
 $wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Cota de disco';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. Caracteres válidos são: \'0-9\' e \\".,-_\\".';
+$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. Caracteres válidos são: \'0-9\' e \".,-_\".';
 $wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. Caracteres válidos são: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['ruby_txt'] = 'Ruby';
@@ -121,9 +121,9 @@ $wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas Permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 $wb['variables_txt'] = 'Variáveis';
 $wb['backup_excludes_txt'] = 'Diretórios Excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: \\"web/cache/*,web/backup\\".)';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: \"web/cache/*,web/backup\".)';
 $wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos.';
-$wb['subdomain_error_empty'] = 'O campo \\"Subdomínio\\" está em branco ou contém caracteres inválidos.';
+$wb['subdomain_error_empty'] = 'O campo \"Subdomínio\" está em branco ou contém caracteres inválidos.';
 $wb['http_port_txt'] = 'Porta HTTP';
 $wb['https_port_txt'] = 'Porta HTTPS';
 $wb['http_port_error_regex'] = 'Porta HTTP inválida.';
diff --git a/interface/web/sites/lib/lang/br_webdav_user.lng b/interface/web/sites/lib/lang/br_webdav_user.lng
index 4347f8ae36..b135d5e0fa 100644
--- a/interface/web/sites/lib/lang/br_webdav_user.lng
+++ b/interface/web/sites/lib/lang/br_webdav_user.lng
@@ -12,8 +12,8 @@ $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
 $wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
 $wb['directory_error_empty'] = 'Diretório está em branco.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \\"./\\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \"./\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/ca.lng b/interface/web/sites/lib/lang/ca.lng
index 9acee9d061..c914ef002f 100644
--- a/interface/web/sites/lib/lang/ca.lng
+++ b/interface/web/sites/lib/lang/ca.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Packages disponibles';
 $wb['Installed packages'] = 'Packages installés';
 $wb['Update Packagelist'] = 'Mise à jour de la liste des packages';
 $wb['Subdomain (Vhost)'] = 'Sous-domaine (Vhost)';
-$wb['error_proxy_requires_url'] = 'Type de redirection \\"proxy\\" nécessite une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Type de redirection \"proxy\" nécessite une URL comme chemin de redirection.';
 ?>
diff --git a/interface/web/sites/lib/lang/ca_aps.lng b/interface/web/sites/lib/lang/ca_aps.lng
index 062d6ea589..7233c1f0dd 100644
--- a/interface/web/sites/lib/lang/ca_aps.lng
+++ b/interface/web/sites/lib/lang/ca_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Le dossier d\'installation choisi est invalide
 $wb['error_license_agreement'] = 'Avant de continuer, vous devez accepter les conditions d\'utilisation (licence).';
 $wb['error_no_database_pw'] = 'Vous n\'avez pas renseigné de mot de passe BDD valide.';
 $wb['error_short_database_pw'] = 'Veuillez saisir un mot de passe BDD plus long.';
-$wb['error_no_value_for'] = 'Le champ \\"%s\\" ne peut pas être vide.';
-$wb['error_short_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus longue.';
-$wb['error_long_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus courte.';
-$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \\"%s\\".';
-$wb['error_inv_email_for'] = 'L\'adresse courriel saisie pour le champ \\"%s\\" est invalide.';
-$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \\"%s\\" est invalide.';
-$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \\"%s\\" est invalide.';
-$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \\"%s\\" est invalide.';
+$wb['error_no_value_for'] = 'Le champ \"%s\" ne peut pas être vide.';
+$wb['error_short_value_for'] = 'Le champ \"%s\" nécessite une valeur plus longue.';
+$wb['error_long_value_for'] = 'Le champ \"%s\" nécessite une valeur plus courte.';
+$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \"%s\".';
+$wb['error_inv_email_for'] = 'L\'adresse courriel saisie pour le champ \"%s\" est invalide.';
+$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \"%s\" est invalide.';
+$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \"%s\" est invalide.';
+$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \"%s\" est invalide.';
 $wb['error_used_location'] = 'Le chemin de destination contient déjà un package d\'installation.';
 $wb['installation_task_txt'] = 'Installation prévue';
 $wb['installation_error_txt'] = 'Erreur d\'installation';
diff --git a/interface/web/sites/lib/lang/ca_web_childdomain.lng b/interface/web/sites/lib/lang/ca_web_childdomain.lng
index 762acfe244..1d838990e3 100644
--- a/interface/web/sites/lib/lang/ca_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_redirect_txt'] = 'No redirect';
 $wb['no_flag_txt'] = 'No flag';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/ca_web_subdomain.lng b/interface/web/sites/lib/lang/ca_web_subdomain.lng
index 13fd0d66ef..ec5980a91b 100644
--- a/interface/web/sites/lib/lang/ca_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Aucun flag';
 $wb['domain_error_wildcard'] = 'Les sous-domaines joker ne sont pas autorisés.';
 $wb['proxy_directives_txt'] = 'Directives pour les Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Directives pour les Proxy Snippets disponibles :';
-$wb['error_proxy_requires_url'] = 'Les redirections de type \\"proxy\\" nécessitent une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Les redirections de type \"proxy\" nécessitent une URL comme chemin de redirection.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/cz.lng b/interface/web/sites/lib/lang/cz.lng
index 4c16438e34..2e4276c817 100644
--- a/interface/web/sites/lib/lang/cz.lng
+++ b/interface/web/sites/lib/lang/cz.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Dostupné balíčky';
 $wb['Installed packages'] = 'Nainstalované balíčky';
 $wb['Update Packagelist'] = 'Aktualizace seznamu balíčků';
 $wb['Subdomain (Vhost)'] = 'Subdoména (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_aps.lng b/interface/web/sites/lib/lang/cz_aps.lng
index adf6ccf58e..bb8015951c 100644
--- a/interface/web/sites/lib/lang/cz_aps.lng
+++ b/interface/web/sites/lib/lang/cz_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Instalace plánované';
 $wb['installation_error_txt'] = 'Chyba instalace';
diff --git a/interface/web/sites/lib/lang/cz_web_childdomain.lng b/interface/web/sites/lib/lang/cz_web_childdomain.lng
index 5a22de61de..e39dfc12ee 100644
--- a/interface/web/sites/lib/lang/cz_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_childdomain.lng
@@ -49,7 +49,7 @@ $wb['no_flag_txt'] = 'Žádný příznak';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['ipv6_address_txt'] = 'IPv6 adresa';
 $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.';
 $wb['hd_quota_error_empty'] = 'Harddisk quota is 0 or empty.';
diff --git a/interface/web/sites/lib/lang/cz_web_subdomain.lng b/interface/web/sites/lib/lang/cz_web_subdomain.lng
index cd301db143..986f76acc8 100644
--- a/interface/web/sites/lib/lang/cz_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Žádný příznak';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/de_web_childdomain.lng b/interface/web/sites/lib/lang/de_web_childdomain.lng
index 05b1f1d51d..561e8de968 100644
--- a/interface/web/sites/lib/lang/de_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_redirect_txt'] = 'Kein Redirect';
 $wb['no_flag_txt'] = 'Kein Flag';
 $wb['proxy_directives_txt'] = 'Proxy-Direktiven';
 $wb['available_proxy_directive_snippets_txt'] = 'Verfügbare Proxy Direktiven Schnipsel:';
-$wb['error_proxy_requires_url'] = 'Weiterleitungstyp \\"proxy\\" erfordert eine URL als Weiterleitungspfad.';
+$wb['error_proxy_requires_url'] = 'Weiterleitungstyp \"proxy\" erfordert eine URL als Weiterleitungspfad.';
 $wb['backup_interval_txt'] = 'Backup-Intervall';
 $wb['backup_copies_txt'] = 'Anzahl der Backups';
 $wb['ssl_key_txt'] = 'SSL-Schlüssel';
diff --git a/interface/web/sites/lib/lang/de_web_subdomain.lng b/interface/web/sites/lib/lang/de_web_subdomain.lng
index 586c90adc3..a88918b09a 100644
--- a/interface/web/sites/lib/lang/de_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_redirect_txt'] = 'Kein Redirect';
 $wb['no_flag_txt'] = 'Kein Flag';
 $wb['proxy_directives_txt'] = 'Proxy-Direktiven';
 $wb['available_proxy_directive_snippets_txt'] = 'Verfügbare Proxy Direktiven Schnipsel:';
-$wb['error_proxy_requires_url'] = 'Weiterleitungstyp \\"proxy\\" erfordert eine URL als Weiterleitungspfad.';
+$wb['error_proxy_requires_url'] = 'Weiterleitungstyp \"proxy\" erfordert eine URL als Weiterleitungspfad.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/dk.lng b/interface/web/sites/lib/lang/dk.lng
index 39974fef5d..a99760a66e 100644
--- a/interface/web/sites/lib/lang/dk.lng
+++ b/interface/web/sites/lib/lang/dk.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Tilgængelig pakker';
 $wb['Installed packages'] = 'Installeret pakker';
 $wb['Update Packagelist'] = 'Opdater Pakkeliste';
 $wb['Subdomain (Vhost)'] = 'Sub-domæne (Vhost)';
-$wb['error_proxy_requires_url'] = 'Omdiriger Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Omdiriger Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/dk_aps.lng b/interface/web/sites/lib/lang/dk_aps.lng
index ca006e2eb2..c3f2983cfd 100644
--- a/interface/web/sites/lib/lang/dk_aps.lng
+++ b/interface/web/sites/lib/lang/dk_aps.lng
@@ -40,14 +40,14 @@ $wb['error_inv_main_location'] = 'Den oplyste installations mappe er ugyldig.';
 $wb['error_license_agreement'] = 'For at fortsætte skal du acceptere licensaftalen.';
 $wb['error_no_database_pw'] = 'Du har ikke oplyst en database adgangskode.';
 $wb['error_short_database_pw'] = 'Vælg en længer database adgangskode.';
-$wb['error_no_value_for'] = 'Feltet \\"%s\\" må ikke være tomt.';
-$wb['error_short_value_for'] = 'Feltet \\"%s\\" kræver en længere indtastnings værdi.';
-$wb['error_long_value_for'] = 'Feltet \\"%s\\" kræver en kortere indtastnings værdi.';
-$wb['error_inv_value_for'] = 'Du har indtastet en ugyldig værdi for feltet \\"%s\\".';
-$wb['error_inv_email_for'] = 'Du har indtastet en ugyldig mail adresse for feltet \\"%s\\".';
-$wb['error_inv_domain_for'] = 'Du har indtastet et ugyldigt domæne for feltet \\"%s\\".';
-$wb['error_inv_integer_for'] = 'Du har indtastet et ugyldigt tal for feltet \\"%s\\".';
-$wb['error_inv_float_for'] = 'Du har indtastet et ugyldigt floating point tal for feltet \\"%s\\".';
+$wb['error_no_value_for'] = 'Feltet \"%s\" må ikke være tomt.';
+$wb['error_short_value_for'] = 'Feltet \"%s\" kræver en længere indtastnings værdi.';
+$wb['error_long_value_for'] = 'Feltet \"%s\" kræver en kortere indtastnings værdi.';
+$wb['error_inv_value_for'] = 'Du har indtastet en ugyldig værdi for feltet \"%s\".';
+$wb['error_inv_email_for'] = 'Du har indtastet en ugyldig mail adresse for feltet \"%s\".';
+$wb['error_inv_domain_for'] = 'Du har indtastet et ugyldigt domæne for feltet \"%s\".';
+$wb['error_inv_integer_for'] = 'Du har indtastet et ugyldigt tal for feltet \"%s\".';
+$wb['error_inv_float_for'] = 'Du har indtastet et ugyldigt floating point tal for feltet \"%s\".';
 $wb['error_used_location'] = 'Installations stien indeholder allerede en pakke installation.';
 $wb['installation_task_txt'] = 'Installation planlagt';
 $wb['installation_error_txt'] = 'Installations fejl';
diff --git a/interface/web/sites/lib/lang/dk_web_childdomain.lng b/interface/web/sites/lib/lang/dk_web_childdomain.lng
index 762acfe244..1d838990e3 100644
--- a/interface/web/sites/lib/lang/dk_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_redirect_txt'] = 'No redirect';
 $wb['no_flag_txt'] = 'No flag';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/dk_web_subdomain.lng b/interface/web/sites/lib/lang/dk_web_subdomain.lng
index c14a347263..4fffd59365 100644
--- a/interface/web/sites/lib/lang/dk_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_redirect_txt'] = 'Ingen redirect';
 $wb['no_flag_txt'] = 'Ingen flag';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Tilgængelig Proxy Direktiv Kodestykker:';
-$wb['error_proxy_requires_url'] = 'Omdiriger Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Omdiriger Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/el.lng b/interface/web/sites/lib/lang/el.lng
index 2d726140fd..19bfc27349 100644
--- a/interface/web/sites/lib/lang/el.lng
+++ b/interface/web/sites/lib/lang/el.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/el_aps.lng b/interface/web/sites/lib/lang/el_aps.lng
index 0209737f61..73cb49f106 100644
--- a/interface/web/sites/lib/lang/el_aps.lng
+++ b/interface/web/sites/lib/lang/el_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/el_web_childdomain.lng b/interface/web/sites/lib/lang/el_web_childdomain.lng
index 3c5cb7a936..a1cead28e3 100644
--- a/interface/web/sites/lib/lang/el_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_childdomain.lng
@@ -45,7 +45,7 @@ $wb['no_flag_txt'] = 'Χωρίς Σημαία';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains δεν επιτρέπονται.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Διαθέσιμα Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Ο τύπος ανακατεύθυνσης \\"proxy\\" απαιτεί ένα URL ως μονοπάτι ανακατεύθυνσης.';
+$wb['error_proxy_requires_url'] = 'Ο τύπος ανακατεύθυνσης \"proxy\" απαιτεί ένα URL ως μονοπάτι ανακατεύθυνσης.';
 $wb['ssl_domain_txt'] = 'SSL Domain';
 $wb['web_folder_error_regex'] = 'Εισάγατε μη έγκυρο φάκελο. Μην εισάγετε την κάθετο.';
 $wb['ipv6_address_txt'] = 'Διεύθυνση IPv6';
diff --git a/interface/web/sites/lib/lang/el_web_subdomain.lng b/interface/web/sites/lib/lang/el_web_subdomain.lng
index 606137bc82..b3f8e1312f 100644
--- a/interface/web/sites/lib/lang/el_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Χωρίς Σημαία';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/es.lng b/interface/web/sites/lib/lang/es.lng
index 7d128081f6..78cfa3a609 100755
--- a/interface/web/sites/lib/lang/es.lng
+++ b/interface/web/sites/lib/lang/es.lng
@@ -8,7 +8,7 @@ $wb['Cron'] = 'Trabajos programados';
 $wb['Database User'] = 'Usuarios de bases de datos';
 $wb['Database'] = 'Bases de datos';
 $wb['Domain'] = 'Dominio';
-$wb['error_proxy_requires_url'] = 'La redirección del tipo \\"proxy\\" requiere de una URL como ruta de redirección.';
+$wb['error_proxy_requires_url'] = 'La redirección del tipo \"proxy\" requiere de una URL como ruta de redirección.';
 $wb['Folder users'] = 'Usuarios de carpetas protegidas';
 $wb['Folder'] = 'Carpetas protegidas';
 $wb['FTP'] = 'FTP';
diff --git a/interface/web/sites/lib/lang/es_aps.lng b/interface/web/sites/lib/lang/es_aps.lng
index 3780b32edd..afecc225fc 100755
--- a/interface/web/sites/lib/lang/es_aps.lng
+++ b/interface/web/sites/lib/lang/es_aps.lng
@@ -12,20 +12,20 @@ $wb['config_script_txt'] = 'Archivo de configuración';
 $wb['database_txt'] = 'Base de datos';
 $wb['description_txt'] = 'Descripción';
 $wb['details_txt'] = 'Detalles';
-$wb['error_inv_domain_for'] = 'Ha ingresado un dominio inválido en el campo \\"%s\\".';
-$wb['error_inv_email_for'] = 'Ha ingresado una dirección de correo inválida en el campo \\"%s\\".';
-$wb['error_inv_float_for'] = 'Ha introducido un número de punto flotante no válido para el campo \\"%s\\".';
-$wb['error_inv_integer_for'] = 'Ha ingresado un número inválido en el campo \\"%s\\".';
+$wb['error_inv_domain_for'] = 'Ha ingresado un dominio inválido en el campo \"%s\".';
+$wb['error_inv_email_for'] = 'Ha ingresado una dirección de correo inválida en el campo \"%s\".';
+$wb['error_inv_float_for'] = 'Ha introducido un número de punto flotante no válido para el campo \"%s\".';
+$wb['error_inv_integer_for'] = 'Ha ingresado un número inválido en el campo \"%s\".';
 $wb['error_inv_main_location'] = 'La ubicación de la carpeta de instalación proporcionada es inválida.';
-$wb['error_inv_value_for'] = 'Ha ingresado un valor inválido en el campo \\"%s\\".';
+$wb['error_inv_value_for'] = 'Ha ingresado un valor inválido en el campo \"%s\".';
 $wb['error_license_agreement'] = 'Para poder continuar debe aceptar el acuerdo de licencia.';
-$wb['error_long_value_for'] = 'El campo \\"%s\\" requiere una entrada más corta.';
+$wb['error_long_value_for'] = 'El campo \"%s\" requiere una entrada más corta.';
 $wb['error_main_domain'] = 'El dominio de la ruta de la instalación es inválido.';
 $wb['error_no_database_pw'] = 'No ha proporcionado una contraseña válida para la base de datos.';
 $wb['error_no_main_location'] = 'Ha proporcionado una ruta de instalación inválida.';
-$wb['error_no_value_for'] = 'El campo \\"%s\\" no puede estar vacío.';
+$wb['error_no_value_for'] = 'El campo \"%s\" no puede estar vacío.';
 $wb['error_short_database_pw'] = 'Por favor seleccione un contraseña más larga para la base de datos.';
-$wb['error_short_value_for'] = 'El campo \\"%s\\" requiere una entrada más larga.';
+$wb['error_short_value_for'] = 'El campo \"%s\" requiere una entrada más larga.';
 $wb['error_used_location'] = 'La ruta de instalación ya contiene un paquete instalado.';
 $wb['homepage_txt'] = 'Página de inicio';
 $wb['install_language_txt'] = 'Idioma de la interfaz';
diff --git a/interface/web/sites/lib/lang/es_web_childdomain.lng b/interface/web/sites/lib/lang/es_web_childdomain.lng
index 25843a0e21..839110669f 100644
--- a/interface/web/sites/lib/lang/es_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Sin flag';
 $wb['domain_error_wildcard'] = 'No se permiten subdominios comodín.';
 $wb['proxy_directives_txt'] = 'Directivas de Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Fragmentos de directivas de proxy disponibles:';
-$wb['error_proxy_requires_url'] = 'Tipo de redirección \\"proxy\\" necesita una URL como ruta de redirección.';
+$wb['error_proxy_requires_url'] = 'Tipo de redirección \"proxy\" necesita una URL como ruta de redirección.';
 $wb['backup_interval_txt'] = 'Intervalo de copia de seguridad';
 $wb['backup_copies_txt'] = 'Número de copias de seguridad';
 $wb['ssl_key_txt'] = 'Clave SSL';
@@ -104,7 +104,7 @@ $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout debe ser un valor entero positivo.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests debe ser un valor entero >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor ten en cuenta que debes tener una versión de PHP >= 5.3.9 para poder usar el gestor de procesos \\"ondemand\\". Si seleccionas \\"ondemand\\" para una versión de PHP anterior, ¡PHP dejará de funcionar!';
+$wb['pm_ondemand_hint_txt'] = 'Por favor ten en cuenta que debes tener una versión de PHP >= 5.3.9 para poder usar el gestor de procesos \"ondemand\". Si seleccionas \"ondemand\" para una versión de PHP anterior, ¡PHP dejará de funcionar!';
 $wb['generate_password_txt'] = 'Generar contraseña';
 $wb['repeat_password_txt'] = 'Repetir contraseña';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
diff --git a/interface/web/sites/lib/lang/es_web_subdomain.lng b/interface/web/sites/lib/lang/es_web_subdomain.lng
index 2221a749c2..8bae76742c 100644
--- a/interface/web/sites/lib/lang/es_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index f98c02db15..4a2b17cab7 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -102,7 +102,7 @@ $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout debe ser un valor entero positivo.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests debe ser un valor entero >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor ten en cuenta que debes tener una versión de PHP >= 5.3.9 para poder usar el gestor de procesos \\"ondemand\\". Si seleccionas \\"ondemand\\" para una versión de PHP anterior, ¡PHP dejará de funcionar!';
+$wb['pm_ondemand_hint_txt'] = 'Por favor ten en cuenta que debes tener una versión de PHP >= 5.3.9 para poder usar el gestor de procesos \"ondemand\". Si seleccionas \"ondemand\" para una versión de PHP anterior, ¡PHP dejará de funcionar!';
 $wb['generate_password_txt'] = 'Generar contraseña';
 $wb['repeat_password_txt'] = 'Repetir contraseña';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
diff --git a/interface/web/sites/lib/lang/fi.lng b/interface/web/sites/lib/lang/fi.lng
index ebf94bc190..5adab57775 100755
--- a/interface/web/sites/lib/lang/fi.lng
+++ b/interface/web/sites/lib/lang/fi.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_aps.lng b/interface/web/sites/lib/lang/fi_aps.lng
index d78701f272..cc8dc83588 100644
--- a/interface/web/sites/lib/lang/fi_aps.lng
+++ b/interface/web/sites/lib/lang/fi_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/fi_web_childdomain.lng b/interface/web/sites/lib/lang/fi_web_childdomain.lng
index 5105ba3f2e..98c41088a1 100755
--- a/interface/web/sites/lib/lang/fi_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/fi_web_subdomain.lng b/interface/web/sites/lib/lang/fi_web_subdomain.lng
index 7fe7103905..7500fb7a61 100644
--- a/interface/web/sites/lib/lang/fi_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/fr.lng b/interface/web/sites/lib/lang/fr.lng
index 9acee9d061..c914ef002f 100644
--- a/interface/web/sites/lib/lang/fr.lng
+++ b/interface/web/sites/lib/lang/fr.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Packages disponibles';
 $wb['Installed packages'] = 'Packages installés';
 $wb['Update Packagelist'] = 'Mise à jour de la liste des packages';
 $wb['Subdomain (Vhost)'] = 'Sous-domaine (Vhost)';
-$wb['error_proxy_requires_url'] = 'Type de redirection \\"proxy\\" nécessite une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Type de redirection \"proxy\" nécessite une URL comme chemin de redirection.';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_aps.lng b/interface/web/sites/lib/lang/fr_aps.lng
index 6beef9939f..0f067e78bc 100644
--- a/interface/web/sites/lib/lang/fr_aps.lng
+++ b/interface/web/sites/lib/lang/fr_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Le dossier d’installation choisi est invalid
 $wb['error_license_agreement'] = 'Avant de continuer, vous devez accepter les conditions d’utilisation (licence).';
 $wb['error_no_database_pw'] = 'Vous n’avez pas renseigné de mot de passe BDD valide.';
 $wb['error_short_database_pw'] = 'Veuillez saisir un mot de passe BDD plus long.';
-$wb['error_no_value_for'] = 'Le champ \\"%s\\" ne peut pas être vide.';
-$wb['error_short_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus longue.';
-$wb['error_long_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus courte.';
-$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \\"%s\\".';
-$wb['error_inv_email_for'] = 'L’adresse e-mail saisie pour le champ \\"%s\\" est invalide.';
-$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \\"%s\\" est invalide.';
-$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \\"%s\\" est invalide.';
-$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \\"%s\\" est invalide.';
+$wb['error_no_value_for'] = 'Le champ \"%s\" ne peut pas être vide.';
+$wb['error_short_value_for'] = 'Le champ \"%s\" nécessite une valeur plus longue.';
+$wb['error_long_value_for'] = 'Le champ \"%s\" nécessite une valeur plus courte.';
+$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \"%s\".';
+$wb['error_inv_email_for'] = 'L’adresse e-mail saisie pour le champ \"%s\" est invalide.';
+$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \"%s\" est invalide.';
+$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \"%s\" est invalide.';
+$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \"%s\" est invalide.';
 $wb['error_used_location'] = 'Le chemin de destination contient déjà un package d’installation.';
 $wb['installation_task_txt'] = 'Installation prévue';
 $wb['installation_error_txt'] = 'Erreur d’installation';
diff --git a/interface/web/sites/lib/lang/fr_web_childdomain.lng b/interface/web/sites/lib/lang/fr_web_childdomain.lng
index 1be206e122..f33ca58f09 100644
--- a/interface/web/sites/lib/lang/fr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Aucun flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/fr_web_subdomain.lng b/interface/web/sites/lib/lang/fr_web_subdomain.lng
index 957dfbfed6..6dfc914a0a 100644
--- a/interface/web/sites/lib/lang/fr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Aucun flag';
 $wb['domain_error_wildcard'] = 'Les sous-domaines joker ne sont pas autorisés.';
 $wb['proxy_directives_txt'] = 'Directives pour les Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Directives pour les Proxy Snippets disponibles :';
-$wb['error_proxy_requires_url'] = 'Les redirections de type \\"proxy\\" nécessitent une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Les redirections de type \"proxy\" nécessitent une URL comme chemin de redirection.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/hr.lng b/interface/web/sites/lib/lang/hr.lng
index b6af1225ac..4c53c89843 100644
--- a/interface/web/sites/lib/lang/hr.lng
+++ b/interface/web/sites/lib/lang/hr.lng
@@ -30,6 +30,6 @@ $wb['Available packages'] = 'Dostupni paketi';
 $wb['Installed packages'] = 'Instalirani paketi';
 $wb['Update Packagelist'] = 'Osvježi listu paketa';
 $wb['Subdomain (Vhost)'] = 'Poddomena (Vhost)';
-$wb['error_proxy_requires_url'] = '\\"proxy\\" redirekcija zahtijeva URL za redirekcijsku putanju.';
+$wb['error_proxy_requires_url'] = '\"proxy\" redirekcija zahtijeva URL za redirekcijsku putanju.';
 $wb['Domain'] = 'Domain';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_aps.lng b/interface/web/sites/lib/lang/hr_aps.lng
index 79d31cf7fa..6169342e71 100644
--- a/interface/web/sites/lib/lang/hr_aps.lng
+++ b/interface/web/sites/lib/lang/hr_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Instalacija u postupku';
 $wb['installation_error_txt'] = 'Instalacijska greška';
diff --git a/interface/web/sites/lib/lang/hr_web_childdomain.lng b/interface/web/sites/lib/lang/hr_web_childdomain.lng
index 99df0d2fdf..f0e69f24f8 100644
--- a/interface/web/sites/lib/lang/hr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Bez markiranja';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/hr_web_subdomain.lng b/interface/web/sites/lib/lang/hr_web_subdomain.lng
index 76d7f39571..18fe4630a4 100644
--- a/interface/web/sites/lib/lang/hr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Bez markiranja';
 $wb['domain_error_wildcard'] = 'Wildcard poddomene nisu dozvoljene.';
 $wb['proxy_directives_txt'] = 'Proxy direktive';
 $wb['available_proxy_directive_snippets_txt'] = 'Dostupne proxy direktive:';
-$wb['error_proxy_requires_url'] = 'Vrsta redirekcije \\"proxy\\" zahtjeva URL kao redirekcijsku putanju.';
+$wb['error_proxy_requires_url'] = 'Vrsta redirekcije \"proxy\" zahtjeva URL kao redirekcijsku putanju.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/hu.lng b/interface/web/sites/lib/lang/hu.lng
index 2c156a4775..1a3e31d3f9 100644
--- a/interface/web/sites/lib/lang/hu.lng
+++ b/interface/web/sites/lib/lang/hu.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_aps.lng b/interface/web/sites/lib/lang/hu_aps.lng
index 88708732df..9330a1fb45 100644
--- a/interface/web/sites/lib/lang/hu_aps.lng
+++ b/interface/web/sites/lib/lang/hu_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/hu_web_childdomain.lng b/interface/web/sites/lib/lang/hu_web_childdomain.lng
index 5ac19c3bbc..aa554d4bc4 100644
--- a/interface/web/sites/lib/lang/hu_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['redirect_error_regex'] = 'Invalid redirect path. Valid redirects are for ex
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/hu_web_subdomain.lng b/interface/web/sites/lib/lang/hu_web_subdomain.lng
index 84874b22c5..79c9ecc700 100644
--- a/interface/web/sites/lib/lang/hu_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['redirect_error_regex'] = 'Invalid redirect path. Valid redirects are for ex
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/id.lng b/interface/web/sites/lib/lang/id.lng
index c8510df6cb..4fdae1813f 100644
--- a/interface/web/sites/lib/lang/id.lng
+++ b/interface/web/sites/lib/lang/id.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/id_aps.lng b/interface/web/sites/lib/lang/id_aps.lng
index b8c9af2152..6f6d0bced2 100644
--- a/interface/web/sites/lib/lang/id_aps.lng
+++ b/interface/web/sites/lib/lang/id_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/id_web_childdomain.lng b/interface/web/sites/lib/lang/id_web_childdomain.lng
index d5fd9711a4..2b97dc223a 100644
--- a/interface/web/sites/lib/lang/id_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/id_web_subdomain.lng b/interface/web/sites/lib/lang/id_web_subdomain.lng
index c2d007e693..7f51be8e44 100644
--- a/interface/web/sites/lib/lang/id_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/it.lng b/interface/web/sites/lib/lang/it.lng
index 77473bd0f8..2237545be9 100644
--- a/interface/web/sites/lib/lang/it.lng
+++ b/interface/web/sites/lib/lang/it.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Pacchetti disponibili';
 $wb['Installed packages'] = 'Pacchetti  Installati';
 $wb['Update Packagelist'] = 'Aggiorna Elenco Pacchetti';
 $wb['Subdomain (Vhost)'] = 'Sottodominio (Vhost)';
-$wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \\"proxy\\" richiede una URL come percorso del reinderizzamento.';
+$wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \"proxy\" richiede una URL come percorso del reinderizzamento.';
 ?>
diff --git a/interface/web/sites/lib/lang/it_aps.lng b/interface/web/sites/lib/lang/it_aps.lng
index 0a6365f98f..ade7808616 100644
--- a/interface/web/sites/lib/lang/it_aps.lng
+++ b/interface/web/sites/lib/lang/it_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'La cartella di installazione fornita non è va
 $wb['error_license_agreement'] = 'Per poter proseguire è necessario che prendi visione ed accetti l accordi di licenza.';
 $wb['error_no_database_pw'] = 'La password fornita non è valida.';
 $wb['error_short_database_pw'] = 'Per favore scegli una password di database più lunga.';
-$wb['error_no_value_for'] = 'Il campo \\"%s\\" non può essere vuoto.';
-$wb['error_short_value_for'] = 'Il campo \\"%s\\" richiede un valore immesso più lungo.';
-$wb['error_long_value_for'] = 'Il campo \\"%s\\" richiede un valore immesso più corto.';
-$wb['error_inv_value_for'] = 'Hai inserito un valore non valido per il campo \\"%s\\".';
-$wb['error_inv_email_for'] = 'Hai inserito un indirizzo email non valido per il campo \\"%s\\".';
-$wb['error_inv_domain_for'] = 'Hai inserito un dominio non valido per il campo \\"%s\\".';
-$wb['error_inv_integer_for'] = 'Hai inserito un numero non valido per il campo  \\"%s\\".';
-$wb['error_inv_float_for'] = 'Hai inserito un numero di floating point non valido per il campo \\"%s\\".';
+$wb['error_no_value_for'] = 'Il campo \"%s\" non può essere vuoto.';
+$wb['error_short_value_for'] = 'Il campo \"%s\" richiede un valore immesso più lungo.';
+$wb['error_long_value_for'] = 'Il campo \"%s\" richiede un valore immesso più corto.';
+$wb['error_inv_value_for'] = 'Hai inserito un valore non valido per il campo \"%s\".';
+$wb['error_inv_email_for'] = 'Hai inserito un indirizzo email non valido per il campo \"%s\".';
+$wb['error_inv_domain_for'] = 'Hai inserito un dominio non valido per il campo \"%s\".';
+$wb['error_inv_integer_for'] = 'Hai inserito un numero non valido per il campo  \"%s\".';
+$wb['error_inv_float_for'] = 'Hai inserito un numero di floating point non valido per il campo \"%s\".';
 $wb['error_used_location'] = 'L installazione della patch  contiene già un pacchetto di installazione.';
 $wb['installation_task_txt'] = 'Installazione pianificata';
 $wb['installation_error_txt'] = 'Errore di installazione';
diff --git a/interface/web/sites/lib/lang/it_web_childdomain.lng b/interface/web/sites/lib/lang/it_web_childdomain.lng
index 3a214e298e..edd32aa6db 100644
--- a/interface/web/sites/lib/lang/it_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/it_web_subdomain.lng b/interface/web/sites/lib/lang/it_web_subdomain.lng
index 956b5c3be0..0019304914 100644
--- a/interface/web/sites/lib/lang/it_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Non sono ammessi caratteri jolly per i sottodomini.';
 $wb['proxy_directives_txt'] = 'Direttive Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Snippets Direttive Proxy disponibili:';
-$wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \\"proxy\\" richiede una URL come percorso di reinderizzamento.';
+$wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \"proxy\" richiede una URL come percorso di reinderizzamento.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/ja.lng b/interface/web/sites/lib/lang/ja.lng
index 920064bc5e..470ec2baec 100644
--- a/interface/web/sites/lib/lang/ja.lng
+++ b/interface/web/sites/lib/lang/ja.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_aps.lng b/interface/web/sites/lib/lang/ja_aps.lng
index dc6b22edf7..91f8ad102c 100644
--- a/interface/web/sites/lib/lang/ja_aps.lng
+++ b/interface/web/sites/lib/lang/ja_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/ja_web_childdomain.lng b/interface/web/sites/lib/lang/ja_web_childdomain.lng
index d59d7bbda5..fe885c8c3e 100644
--- a/interface/web/sites/lib/lang/ja_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/ja_web_subdomain.lng b/interface/web/sites/lib/lang/ja_web_subdomain.lng
index 5eb45907ea..f77c98444e 100644
--- a/interface/web/sites/lib/lang/ja_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/nl.lng b/interface/web/sites/lib/lang/nl.lng
index 8e07a1844a..89a4caa109 100644
--- a/interface/web/sites/lib/lang/nl.lng
+++ b/interface/web/sites/lib/lang/nl.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Beschikbare pakketten';
 $wb['Installed packages'] = 'Geïnstalleerde pakketten';
 $wb['Update Packagelist'] = 'Pakkettenlijst bijwerken';
 $wb['Subdomain (Vhost)'] = 'Subdomein (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_aps.lng b/interface/web/sites/lib/lang/nl_aps.lng
index c0adacee99..dfd852dcd0 100644
--- a/interface/web/sites/lib/lang/nl_aps.lng
+++ b/interface/web/sites/lib/lang/nl_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/nl_web_childdomain.lng b/interface/web/sites/lib/lang/nl_web_childdomain.lng
index e99616ce11..4c5b3dc2ad 100644
--- a/interface/web/sites/lib/lang/nl_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/nl_web_subdomain.lng b/interface/web/sites/lib/lang/nl_web_subdomain.lng
index 2f4412afba..c644d8113d 100644
--- a/interface/web/sites/lib/lang/nl_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Geen flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomeinen zijn niet toegestaan.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port niet correct.';
diff --git a/interface/web/sites/lib/lang/pl_aps.lng b/interface/web/sites/lib/lang/pl_aps.lng
index c17bbca532..398c74e4c0 100644
--- a/interface/web/sites/lib/lang/pl_aps.lng
+++ b/interface/web/sites/lib/lang/pl_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Instalacja w podanym folderze jest niemożliwa
 $wb['error_license_agreement'] = 'Aby kontynuować musisz zaakceptować umowę licencyjną.';
 $wb['error_no_database_pw'] = 'Nie podałeś prawidłowego hasła do bazy danych.';
 $wb['error_short_database_pw'] = 'Wybierz dłuższe hasło do bazy.';
-$wb['error_no_value_for'] = 'Pole \\"%s\\" nie może być puste';
-$wb['error_short_value_for'] = 'Pole \\"%s\\" wymaga dłuższej wartości';
-$wb['error_long_value_for'] = 'Pole  \\"%s\\" wymaga krótszej wartości';
-$wb['error_inv_value_for'] = 'Wprowadziłeś nieprawidłową wartość w polu \\"%s\\"';
-$wb['error_inv_email_for'] = 'Wprowadziłeś nieprawidłowy adres email w polu \\"%s\\"';
-$wb['error_inv_domain_for'] = 'Wprowadziłeś nieprawidłową domenę w polu \\"%s\\"';
-$wb['error_inv_integer_for'] = 'Wprowadziłeś nieprawidłową liczbę w polu \\"%s\\"';
-$wb['error_inv_float_for'] = 'Wprowadziłeś nieprawidłową liczbę w polu \\"%s\\"';
+$wb['error_no_value_for'] = 'Pole \"%s\" nie może być puste';
+$wb['error_short_value_for'] = 'Pole \"%s\" wymaga dłuższej wartości';
+$wb['error_long_value_for'] = 'Pole  \"%s\" wymaga krótszej wartości';
+$wb['error_inv_value_for'] = 'Wprowadziłeś nieprawidłową wartość w polu \"%s\"';
+$wb['error_inv_email_for'] = 'Wprowadziłeś nieprawidłowy adres email w polu \"%s\"';
+$wb['error_inv_domain_for'] = 'Wprowadziłeś nieprawidłową domenę w polu \"%s\"';
+$wb['error_inv_integer_for'] = 'Wprowadziłeś nieprawidłową liczbę w polu \"%s\"';
+$wb['error_inv_float_for'] = 'Wprowadziłeś nieprawidłową liczbę w polu \"%s\"';
 $wb['error_used_location'] = 'Ścieżka instalacji zawiera już zainstalowany pakiet.';
 $wb['installation_task_txt'] = 'Instalacja planowana';
 $wb['installation_error_txt'] = 'BÅ‚Ä…d instalacji';
diff --git a/interface/web/sites/lib/lang/pt.lng b/interface/web/sites/lib/lang/pt.lng
index c1fca015b8..6cd9798fa1 100644
--- a/interface/web/sites/lib/lang/pt.lng
+++ b/interface/web/sites/lib/lang/pt.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_aps.lng b/interface/web/sites/lib/lang/pt_aps.lng
index c17ef00914..33c4e87266 100644
--- a/interface/web/sites/lib/lang/pt_aps.lng
+++ b/interface/web/sites/lib/lang/pt_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/pt_web_childdomain.lng b/interface/web/sites/lib/lang/pt_web_childdomain.lng
index 4cbc032c19..688af77bd2 100644
--- a/interface/web/sites/lib/lang/pt_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/pt_web_subdomain.lng b/interface/web/sites/lib/lang/pt_web_subdomain.lng
index 8a4f1440fd..8f2fd70e46 100644
--- a/interface/web/sites/lib/lang/pt_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/ro.lng b/interface/web/sites/lib/lang/ro.lng
index f674e91b80..418585ea55 100644
--- a/interface/web/sites/lib/lang/ro.lng
+++ b/interface/web/sites/lib/lang/ro.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_aps.lng b/interface/web/sites/lib/lang/ro_aps.lng
index 881c146a4d..3ff130f57e 100644
--- a/interface/web/sites/lib/lang/ro_aps.lng
+++ b/interface/web/sites/lib/lang/ro_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/ro_web_childdomain.lng b/interface/web/sites/lib/lang/ro_web_childdomain.lng
index 30f83e7283..5f56786510 100644
--- a/interface/web/sites/lib/lang/ro_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/ro_web_subdomain.lng b/interface/web/sites/lib/lang/ro_web_subdomain.lng
index f36685be8a..436acc4cf9 100644
--- a/interface/web/sites/lib/lang/ro_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/ru.lng b/interface/web/sites/lib/lang/ru.lng
index dbf2926043..6316c21d17 100644
--- a/interface/web/sites/lib/lang/ru.lng
+++ b/interface/web/sites/lib/lang/ru.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Доступные пакеты';
 $wb['Installed packages'] = 'Установленные пакеты';
 $wb['Update Packagelist'] = 'Обновить список пакетов';
 $wb['Subdomain (Vhost)'] = 'Поддомен (Vhost)';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_aps.lng b/interface/web/sites/lib/lang/ru_aps.lng
index d2225358c1..3dd4ad0a8a 100644
--- a/interface/web/sites/lib/lang/ru_aps.lng
+++ b/interface/web/sites/lib/lang/ru_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Вы  указали некорректную
 $wb['error_license_agreement'] = 'Для продолжения нужно принять лицензионное соглашение.';
 $wb['error_no_database_pw'] = 'Вы предоставили не правильный пароль базы данных.';
 $wb['error_short_database_pw'] = 'Пожалуйста, выберите более длинный пароль базы данных.';
-$wb['error_no_value_for'] = 'Поле \\"%s\\" не может быть пустым.';
-$wb['error_short_value_for'] = 'Поле \\"%s\\" требует более длинного входного значения.';
-$wb['error_long_value_for'] = 'Поле \\"%s\\"требует более короткого входного значения.';
-$wb['error_inv_value_for'] = 'Вы ввели неверное значение для поля \\"%s\\".';
-$wb['error_inv_email_for'] = 'Вы ввели некорректный адрес электронной почты для поля \\"%s\\".';
-$wb['error_inv_domain_for'] = 'Вы ввели некорректный домен для поля \\"%s\\".';
-$wb['error_inv_integer_for'] = 'Вы ввели некорректное число для поля \\"%s\\".';
-$wb['error_inv_float_for'] = 'Вы ввели некорректное число с плавающей точкой для поля \\"%s\\".';
+$wb['error_no_value_for'] = 'Поле \"%s\" не может быть пустым.';
+$wb['error_short_value_for'] = 'Поле \"%s\" требует более длинного входного значения.';
+$wb['error_long_value_for'] = 'Поле \"%s\"требует более короткого входного значения.';
+$wb['error_inv_value_for'] = 'Вы ввели неверное значение для поля \"%s\".';
+$wb['error_inv_email_for'] = 'Вы ввели некорректный адрес электронной почты для поля \"%s\".';
+$wb['error_inv_domain_for'] = 'Вы ввели некорректный домен для поля \"%s\".';
+$wb['error_inv_integer_for'] = 'Вы ввели некорректное число для поля \"%s\".';
+$wb['error_inv_float_for'] = 'Вы ввели некорректное число с плавающей точкой для поля \"%s\".';
 $wb['error_used_location'] = 'Путь установки уже содержит установочный пакет.';
 $wb['installation_task_txt'] = 'Запланирована установка';
 $wb['installation_error_txt'] = 'Ошибка установки';
diff --git a/interface/web/sites/lib/lang/ru_database.lng b/interface/web/sites/lib/lang/ru_database.lng
index 0f5eaf3180..b931b715f2 100644
--- a/interface/web/sites/lib/lang/ru_database.lng
+++ b/interface/web/sites/lib/lang/ru_database.lng
@@ -13,7 +13,7 @@ $wb['database_name_error_unique'] = 'Имя базы данных уже сущ
 $wb['database_name_error_regex'] = 'Неверное имя базы данных. Имя базы данных может содержать только следующие символы: a-z, A-Z, 0-9 и нижний пробел _. Длина: 2 - 64 символа.';
 $wb['database_user_error_empty'] = 'Логин базы данных пустой';
 $wb['database_user_error_unique'] = 'Такой пользователь базы данных уже существует. Что бы получить уникальное имя, например, сложите название сайта и ваше имя.';
-$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \\"_\\". Длина: 2 - 16 символов.';
+$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \"_\". Длина: 2 - 16 символов.';
 $wb['limit_database_txt'] = 'Достигнуто максимальное количество БД.';
 $wb['database_name_change_txt'] = 'Имя базы данных не может быть изменено.';
 $wb['database_charset_change_txt'] = 'Кодировка базы данных не может быть изменена';
diff --git a/interface/web/sites/lib/lang/ru_database_user.lng b/interface/web/sites/lib/lang/ru_database_user.lng
index 7de99a11dc..df927317ca 100644
--- a/interface/web/sites/lib/lang/ru_database_user.lng
+++ b/interface/web/sites/lib/lang/ru_database_user.lng
@@ -6,7 +6,7 @@ $wb['client_txt'] = 'Клиент';
 $wb['active_txt'] = 'Активно';
 $wb['database_user_error_empty'] = 'Логин базы данных пустой';
 $wb['database_user_error_unique'] = 'Такой пользователь базы данных уже существует. Что бы получить уникальное имя, например, сложите название сайта и ваше имя.';
-$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \\"_\\". Длина: 2 - 16 символов.';
+$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \"_\". Длина: 2 - 16 символов.';
 $wb['database_user_error_len'] = 'Логин для базы данных - {user} - cлишком длинный. Максимальная длина логина - 16 символов';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
diff --git a/interface/web/sites/lib/lang/ru_web_childdomain.lng b/interface/web/sites/lib/lang/ru_web_childdomain.lng
index af71669a47..49905e77ea 100644
--- a/interface/web/sites/lib/lang/ru_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Нет флага';
 $wb['domain_error_wildcard'] = 'Wildcard поддомены не допускаются.';
 $wb['proxy_directives_txt'] = 'Директивы прокси';
 $wb['available_proxy_directive_snippets_txt'] = 'Доступные заготовки директив Proxy:';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
 $wb['backup_interval_txt'] = 'Интервал резервного копирования';
 $wb['backup_copies_txt'] = 'Количество резервных копий';
 $wb['ssl_key_txt'] = 'SSL-ключ';
diff --git a/interface/web/sites/lib/lang/ru_web_subdomain.lng b/interface/web/sites/lib/lang/ru_web_subdomain.lng
index 376c789430..46203a1815 100644
--- a/interface/web/sites/lib/lang/ru_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Нет флага';
 $wb['domain_error_wildcard'] = 'Wildcard-поддомены не допускаются.';
 $wb['proxy_directives_txt'] = 'Директивы прокси';
 $wb['available_proxy_directive_snippets_txt'] = 'Доступные заготовки директив Proxy:';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
 $wb['http_port_txt'] = 'Порт HTTP';
 $wb['https_port_txt'] = 'Порт HTTPS';
 $wb['http_port_error_regex'] = 'Некорректный порт HTTP.';
diff --git a/interface/web/sites/lib/lang/se.lng b/interface/web/sites/lib/lang/se.lng
index 6b44cdcf7c..a63670545c 100644
--- a/interface/web/sites/lib/lang/se.lng
+++ b/interface/web/sites/lib/lang/se.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Tillgängliga paket';
 $wb['Installed packages'] = 'Installerade paket';
 $wb['Update Packagelist'] = 'Uppdatera paketlista';
 $wb['Subdomain (Vhost)'] = 'Underdomän (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/se_aps.lng b/interface/web/sites/lib/lang/se_aps.lng
index 3b32095d62..f399880dea 100644
--- a/interface/web/sites/lib/lang/se_aps.lng
+++ b/interface/web/sites/lib/lang/se_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Installation planerad';
 $wb['installation_error_txt'] = 'Installationsfel';
diff --git a/interface/web/sites/lib/lang/se_web_childdomain.lng b/interface/web/sites/lib/lang/se_web_childdomain.lng
index eff6791c65..52fba020aa 100644
--- a/interface/web/sites/lib/lang/se_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/se_web_subdomain.lng b/interface/web/sites/lib/lang/se_web_subdomain.lng
index ec784641e8..a2d73c012d 100644
--- a/interface/web/sites/lib/lang/se_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Ingan flagga';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/sk.lng b/interface/web/sites/lib/lang/sk.lng
index fabf52fda0..401ad2c65d 100644
--- a/interface/web/sites/lib/lang/sk.lng
+++ b/interface/web/sites/lib/lang/sk.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_aps.lng b/interface/web/sites/lib/lang/sk_aps.lng
index d6e6c7f4ca..2b3dc9a0ff 100644
--- a/interface/web/sites/lib/lang/sk_aps.lng
+++ b/interface/web/sites/lib/lang/sk_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/sk_web_childdomain.lng b/interface/web/sites/lib/lang/sk_web_childdomain.lng
index e0d26667bc..c91bee49ac 100644
--- a/interface/web/sites/lib/lang/sk_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/sk_web_subdomain.lng b/interface/web/sites/lib/lang/sk_web_subdomain.lng
index f6bcffd901..d44bb27bd6 100644
--- a/interface/web/sites/lib/lang/sk_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/tr.lng b/interface/web/sites/lib/lang/tr.lng
index d0570f6c12..4f8620c34a 100644
--- a/interface/web/sites/lib/lang/tr.lng
+++ b/interface/web/sites/lib/lang/tr.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Kullanılabilecek Paketler';
 $wb['Installed packages'] = 'Yüklü Paketler';
 $wb['Update Packagelist'] = 'Güncelleme Paketi Listesi';
 $wb['Subdomain (Vhost)'] = 'Alt alan adı (SSunucu)';
-$wb['error_proxy_requires_url'] = '\\"Vekil Sunucu\\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
+$wb['error_proxy_requires_url'] = '\"Vekil Sunucu\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_aps.lng b/interface/web/sites/lib/lang/tr_aps.lng
index 1c6ccd49a6..f0eea59cba 100644
--- a/interface/web/sites/lib/lang/tr_aps.lng
+++ b/interface/web/sites/lib/lang/tr_aps.lng
@@ -40,14 +40,14 @@ $wb['error_inv_main_location'] = 'Yazdığınız yükleme konumunu klasörü ge
 $wb['error_license_agreement'] = 'Devam etmek için lisans anlaşmasını onaylamalısınız.';
 $wb['error_no_database_pw'] = 'Yazdığınız veritabanı parolası geçersiz.';
 $wb['error_short_database_pw'] = 'Lütfen daha uzun bir veritabanı parolası yazın.';
-$wb['error_no_value_for'] = '\\"%s\\" alanı boş olamaz.';
-$wb['error_short_value_for'] = '\\"%s\\" alanına daha uzun bir değer yazılmalıdır.';
-$wb['error_long_value_for'] = '\\"%s\\" alanına daha kısa bir değer yazılmalıdır.';
-$wb['error_inv_value_for'] = '\\"%s\\" alanına yazılan değer geçersiz.';
-$wb['error_inv_email_for'] = '\\"%s\\" alanına yazılan e-posta adresi geçersiz.';
-$wb['error_inv_domain_for'] = '\\"%s\\" alanına yazılan alan adı geçersiz.';
-$wb['error_inv_integer_for'] = '\\"%s\\" alanına yazılan sayı geçersiz.';
-$wb['error_inv_float_for'] = '\\"%s\\" alanına yazılan küsuratlı sayı geçersiz.';
+$wb['error_no_value_for'] = '\"%s\" alanı boş olamaz.';
+$wb['error_short_value_for'] = '\"%s\" alanına daha uzun bir değer yazılmalıdır.';
+$wb['error_long_value_for'] = '\"%s\" alanına daha kısa bir değer yazılmalıdır.';
+$wb['error_inv_value_for'] = '\"%s\" alanına yazılan değer geçersiz.';
+$wb['error_inv_email_for'] = '\"%s\" alanına yazılan e-posta adresi geçersiz.';
+$wb['error_inv_domain_for'] = '\"%s\" alanına yazılan alan adı geçersiz.';
+$wb['error_inv_integer_for'] = '\"%s\" alanına yazılan sayı geçersiz.';
+$wb['error_inv_float_for'] = '\"%s\" alanına yazılan küsuratlı sayı geçersiz.';
 $wb['error_used_location'] = 'Yükleme yoluna daha önce yüklenmiş bir paket var.';
 $wb['installation_task_txt'] = 'Yükleme planlandı';
 $wb['installation_error_txt'] = 'Yükleme hatası';
diff --git a/interface/web/sites/lib/lang/tr_web_childdomain.lng b/interface/web/sites/lib/lang/tr_web_childdomain.lng
index e11c6a92b5..5d68e809b3 100644
--- a/interface/web/sites/lib/lang/tr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/tr_web_subdomain.lng b/interface/web/sites/lib/lang/tr_web_subdomain.lng
index 188b257589..c6e28bc6fa 100644
--- a/interface/web/sites/lib/lang/tr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
 $wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
-$wb['error_proxy_requires_url'] = '\\"Vekil Sunucu\\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
+$wb['error_proxy_requires_url'] = '\"Vekil Sunucu\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/vm/lib/lang/dk_openvz_template.lng b/interface/web/vm/lib/lang/dk_openvz_template.lng
index 9de4a6fd92..7016f41a67 100644
--- a/interface/web/vm/lib/lang/dk_openvz_template.lng
+++ b/interface/web/vm/lib/lang/dk_openvz_template.lng
@@ -44,7 +44,7 @@ $wb['tcpsndbuf_desc_txt'] = 'Total størrelse af TCP send buffere.';
 $wb['tcprcvbuf_desc_txt'] = 'Total størrelse af TCP modtage buffere.';
 $wb['othersockbuf_desc_txt'] = 'Total størrelse af UNIX-domæne sokel buffere, UDP og andre datagram protokoller send buffere.';
 $wb['dgramrcvbuf_desc_txt'] = 'Modtage buffere af UDP og andre datagram protokoller.';
-$wb['oomguarpages_desc_txt'] = 'Den garanterede mængde hukommelse for det tilfælde hukommelsen er \\"over-booked\\" (out-of-memory kill guarantee), i sider.';
+$wb['oomguarpages_desc_txt'] = 'Den garanterede mængde hukommelse for det tilfælde hukommelsen er \"over-booked\" (out-of-memory kill guarantee), i sider.';
 $wb['privvmpages_desc_txt'] = 'Hukommelses grænse tildeling, i sider.';
 $wb['lockedpages_desc_txt'] = 'Proces-sider uden tiladelse til at blive byttet ud (pages locked by mlock(2)).';
 $wb['shmpages_desc_txt'] = 'Total størrelse af delt hukommelse (IPC, delt anonyme afbildninger og tmpfs objekter), i sider.';
diff --git a/interface/web/vm/lib/lang/es_openvz_template.lng b/interface/web/vm/lib/lang/es_openvz_template.lng
index 1abd562ed5..1868240d3e 100644
--- a/interface/web/vm/lib/lang/es_openvz_template.lng
+++ b/interface/web/vm/lib/lang/es_openvz_template.lng
@@ -44,7 +44,7 @@ $wb['tcpsndbuf_desc_txt'] = 'Tamaño total de los buffers de envío TCP.';
 $wb['tcprcvbuf_desc_txt'] = 'Tamaño total de los buffers de recepción TCP.';
 $wb['othersockbuf_desc_txt'] = 'Tamaño total de buffers de socket UNIX-domain, UDP y otros protocolos de envío para buffers de datagramas.';
 $wb['dgramrcvbuf_desc_txt'] = 'Recibir buffers de UDP y otros protocolos de datagrama.';
-$wb['oomguarpages_desc_txt'] = 'La cantidad de memoria garantizada en caso de que la memoria \\"over-booked\\" (garantizado para out-of-memory kill), en las páginas.';
+$wb['oomguarpages_desc_txt'] = 'La cantidad de memoria garantizada en caso de que la memoria \"over-booked\" (garantizado para out-of-memory kill), en las páginas.';
 $wb['privvmpages_desc_txt'] = 'Límite de asignación de memoria en las páginas.';
 $wb['lockedpages_desc_txt'] = 'Páginas de procesos sin permisos para sacar del swap (páginas bloqueadas por mlock(2)).';
 $wb['shmpages_desc_txt'] = 'Tamaño total de memoria compatida (IPC, asignaciones anónimas compartidas y objetos tmpfs), en las páginas.';
diff --git a/interface/web/vm/lib/lang/tr_openvz_template.lng b/interface/web/vm/lib/lang/tr_openvz_template.lng
index fb1452e885..2621212862 100644
--- a/interface/web/vm/lib/lang/tr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_template.lng
@@ -44,7 +44,7 @@ $wb['tcpsndbuf_desc_txt'] = 'TCP gönderme arabelleğinin toplam boyutu.';
 $wb['tcprcvbuf_desc_txt'] = 'TCP alma arabelleÄŸinin toplam boyutu.';
 $wb['othersockbuf_desc_txt'] = 'UNIX alan adı soket arabelleğinin toplam boyutu, UDP ve diğer datagram iletişim kuralları gönderme ara bellekleri.';
 $wb['dgramrcvbuf_desc_txt'] = 'UDP ve diğer datagram iletişim kuralları alma ara bellekleri.';
-$wb['oomguarpages_desc_txt'] = 'Bellek sayfası cinsinden, bellek taşması durumlarında garanti edilen bellek miktarı\\" (bellek bitti boşaltma garantisi).';
+$wb['oomguarpages_desc_txt'] = 'Bellek sayfası cinsinden, bellek taşması durumlarında garanti edilen bellek miktarı\" (bellek bitti boşaltma garantisi).';
 $wb['privvmpages_desc_txt'] = 'Bellek sayfası cinsinden ayrılacak bellek sınırı.';
 $wb['lockedpages_desc_txt'] = 'İşlem sayfaları takasına izin verilmez (mlock(2) ile kilitlenmiş sayfalar).';
 $wb['shmpages_desc_txt'] = 'Bellek sayfası cinsinden, paylaşılan belleğin toplam boyutu (IPC, paylaşılan anonim haritalama ve tmpfs nesneleri).';
-- 
GitLab


From ffc60c2a940bf9bf63c418c7f5ae12b4ebef4da0 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 5 Jul 2019 19:36:38 +0200
Subject: [PATCH 046/571] Created upd_0087.sql file from upd_dev_collection.sql

---
 install/sql/incremental/upd_0087.sql          | 85 +++++++++++++++++++
 .../sql/incremental/upd_dev_collection.sql    | 85 -------------------
 2 files changed, 85 insertions(+), 85 deletions(-)
 create mode 100644 install/sql/incremental/upd_0087.sql

diff --git a/install/sql/incremental/upd_0087.sql b/install/sql/incremental/upd_0087.sql
new file mode 100644
index 0000000000..55e3b846d7
--- /dev/null
+++ b/install/sql/incremental/upd_0087.sql
@@ -0,0 +1,85 @@
+ALTER TABLE `sys_datalog` ADD `session_id` varchar(64) NOT NULL DEFAULT '' AFTER `error`;
+ALTER TABLE `sys_user` CHANGE `sys_userid` `sys_userid` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Created by userid';
+ALTER TABLE `sys_user` CHANGE `sys_groupid` `sys_groupid` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Created by groupid';
+ALTER TABLE `web_domain` ADD COLUMN `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n' AFTER `php_fpm_use_socket`;
+
+CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `active` enum('N','Y') NOT NULL DEFAULT 'N',
+  `ca_name` varchar(255) NOT NULL DEFAULT '',
+  `ca_issue` varchar(255) NOT NULL DEFAULT '',
+  `ca_wildcard` enum('Y','N') NOT NULL DEFAULT 'N',
+  `ca_iodef` text NOT NULL,
+  `ca_critical` tinyint(1) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY (`ca_issue`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`);
+
+UPDATE `dns_ssl_ca` SET `ca_issue` = 'comodo.com' WHERE `ca_issue` = 'comodoca.com';
+DELETE FROM `dns_ssl_ca` WHERE `ca_issue` = 'geotrust.com';
+DELETE FROM `dns_ssl_ca` WHERE `ca_issue` = 'thawte.com';
+UPDATE `dns_ssl_ca` SET `ca_name` = 'Symantec / Thawte / GeoTrust' WHERE `ca_issue` = 'symantec.com';
+
+ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CAA','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
+ALTER TABLE `dns_rr` CHANGE `data` `data` TEXT NOT NULL;
+INSERT IGNORE INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `active`, `ca_name`, `ca_issue`, `ca_wildcard`, `ca_iodef`, `ca_critical`) VALUES
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'AC Camerfirma', 'camerfirma.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'ACCV', 'accv.es', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Actalis', 'actalis.it', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Amazon', 'amazon.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Asseco', 'certum.pl', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Buypass', 'buypass.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CA Disig', 'disig.sk', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CATCert', 'aoc.cat', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certinomis', 'www.certinomis.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certizen', 'hongkongpost.gov.hk', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodoca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'e-tugra', 'e-tugra.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'EDICOM', 'edicomgroup.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Firmaprofesional', 'firmaprofesional.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'FNMT', 'fnmt.es', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GlobalSign', 'globalsign.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GoDaddy', 'godaddy.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Google Trust Services', 'pki.goog', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GRCA', 'gca.nat.gov.tw', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'HARICA', 'harica.gr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'IdenTrust', 'identrust.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Kamu SM', 'kamusm.gov.tr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Microsec e-Szigno', 'e-szigno.hu', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'NetLock', 'netlock.hu', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PKIoverheid', 'www.pkioverheid.nl', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PROCERT', 'procert.net.ve', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'QuoVadis', 'quovadisglobal.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SECOM', 'secomtrust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sertifitseerimiskeskuse', 'sk.ee', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'StartCom', 'startcomca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SwissSign', 'swisssign.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec / Thawte / GeoTrust', 'symantec.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'T-Systems', 'telesec.de', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Telia', 'telia.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Trustwave', 'trustwave.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Web.com', 'web.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0);
+
+ALTER TABLE `dns_soa` CHANGE `xfer` `xfer` TEXT NULL;
+ALTER TABLE `dns_soa` CHANGE `also_notify` `also_notify` TEXT NULL;
+ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;
+ALTER TABLE `firewall` CHANGE `tcp_port` `tcp_port` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
+ALTER TABLE `firewall` CHANGE `udp_port` `udp_port` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 55e3b846d7..e69de29bb2 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -1,85 +0,0 @@
-ALTER TABLE `sys_datalog` ADD `session_id` varchar(64) NOT NULL DEFAULT '' AFTER `error`;
-ALTER TABLE `sys_user` CHANGE `sys_userid` `sys_userid` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Created by userid';
-ALTER TABLE `sys_user` CHANGE `sys_groupid` `sys_groupid` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Created by groupid';
-ALTER TABLE `web_domain` ADD COLUMN `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n' AFTER `php_fpm_use_socket`;
-
-CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
-  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `active` enum('N','Y') NOT NULL DEFAULT 'N',
-  `ca_name` varchar(255) NOT NULL DEFAULT '',
-  `ca_issue` varchar(255) NOT NULL DEFAULT '',
-  `ca_wildcard` enum('Y','N') NOT NULL DEFAULT 'N',
-  `ca_iodef` text NOT NULL,
-  `ca_critical` tinyint(1) NOT NULL DEFAULT '0',
-  PRIMARY KEY (`id`),
-  UNIQUE KEY (`ca_issue`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
-ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`);
-
-UPDATE `dns_ssl_ca` SET `ca_issue` = 'comodo.com' WHERE `ca_issue` = 'comodoca.com';
-DELETE FROM `dns_ssl_ca` WHERE `ca_issue` = 'geotrust.com';
-DELETE FROM `dns_ssl_ca` WHERE `ca_issue` = 'thawte.com';
-UPDATE `dns_ssl_ca` SET `ca_name` = 'Symantec / Thawte / GeoTrust' WHERE `ca_issue` = 'symantec.com';
-
-ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CAA','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
-ALTER TABLE `dns_rr` CHANGE `data` `data` TEXT NOT NULL;
-INSERT IGNORE INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `active`, `ca_name`, `ca_issue`, `ca_wildcard`, `ca_iodef`, `ca_critical`) VALUES
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'AC Camerfirma', 'camerfirma.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'ACCV', 'accv.es', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Actalis', 'actalis.it', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Amazon', 'amazon.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Asseco', 'certum.pl', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Buypass', 'buypass.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CA Disig', 'disig.sk', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CATCert', 'aoc.cat', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certinomis', 'www.certinomis.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certizen', 'hongkongpost.gov.hk', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodoca.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'e-tugra', 'e-tugra.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'EDICOM', 'edicomgroup.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Firmaprofesional', 'firmaprofesional.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'FNMT', 'fnmt.es', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GlobalSign', 'globalsign.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GoDaddy', 'godaddy.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Google Trust Services', 'pki.goog', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GRCA', 'gca.nat.gov.tw', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'HARICA', 'harica.gr', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'IdenTrust', 'identrust.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Kamu SM', 'kamusm.gov.tr', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Microsec e-Szigno', 'e-szigno.hu', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'NetLock', 'netlock.hu', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PKIoverheid', 'www.pkioverheid.nl', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PROCERT', 'procert.net.ve', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'QuoVadis', 'quovadisglobal.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SECOM', 'secomtrust.net', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sertifitseerimiskeskuse', 'sk.ee', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'StartCom', 'startcomca.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SwissSign', 'swisssign.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec / Thawte / GeoTrust', 'symantec.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'T-Systems', 'telesec.de', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Telia', 'telia.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Trustwave', 'trustwave.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Web.com', 'web.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0);
-
-ALTER TABLE `dns_soa` CHANGE `xfer` `xfer` TEXT NULL;
-ALTER TABLE `dns_soa` CHANGE `also_notify` `also_notify` TEXT NULL;
-ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;
-ALTER TABLE `firewall` CHANGE `tcp_port` `tcp_port` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
-ALTER TABLE `firewall` CHANGE `udp_port` `udp_port` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
\ No newline at end of file
-- 
GitLab


From 7ee3e451be6231c8228a664876ed625a20964e92 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 8 Jul 2019 12:47:55 +0200
Subject: [PATCH 047/571] Changed config for Ubuntu unknown from 1604 to 1804

---
 install/lib/install.lib.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 6b3a7cd623..1e49e025ca 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -186,7 +186,7 @@ function get_distname() {
 				break;
 			default:
 				$relname = "UNKNOWN";
-				$distconfid = 'ubuntu1604';
+				$distconfid = 'ubuntu1804';
 			}
 			$distver = $ver.$lts." ".$relname;
 			swriteln("Operating System: ".$distname.' '.$distver."\n");
-- 
GitLab


From c8b6f257f95ee4221a6dff038fb7cb3fde0966ba Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 8 Jul 2019 13:19:05 +0200
Subject: [PATCH 048/571] Fixed installer warning: postconf: warning: unmatched
 request: "maildrop.unix"

---
 install/lib/installer_base.lib.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 1c32c64984..8d0456ef5b 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1050,7 +1050,7 @@ class installer_base {
 		$regex = "/^maildrop   unix.*pipe flags=DRhu user=vmail argv=\\/usr\\/bin\\/maildrop -d ".$cf['vmail_username']." \\$\{extension} \\$\{recipient} \\$\{user} \\$\{nexthop} \\$\{sender}/";
 		$configfile = $config_dir.'/master.cf';
 		if($this->get_postfix_service('maildrop', 'unix')) {
-			exec ("postconf -M maildrop.unix &> /dev/null", $out, $ret);
+			exec ("postconf -M maildrop.unix 2> /dev/null", $out, $ret);
 			$change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true;
 		} else {
 			$change_maildrop_flags = @(preg_match($regex, $configfile))?false:true;
-- 
GitLab


From 7b5d94518aa4f0e61876e1ca324e6e7b9339b90d Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 8 Jul 2019 17:17:44 +0200
Subject: [PATCH 049/571] - added rspamd functionality

---
 install/dist/conf/centos70.conf.php           |    5 +
 install/dist/conf/centos72.conf.php           |    5 +
 install/dist/conf/debian40.conf.php           |    5 +
 install/dist/conf/debian60.conf.php           |    5 +
 install/dist/conf/debian90.conf.php           |    5 +
 install/dist/conf/debiantesting.conf.php      |    5 +
 install/dist/conf/debiantesting.conf.php.orig |  234 ++
 install/dist/conf/fedora9.conf.php            |    5 +
 install/dist/conf/gentoo.conf.php             |    5 +
 install/dist/conf/opensuse112.conf.php        |    5 +
 install/dist/conf/ubuntu1604.conf.php         |    5 +
 install/dist/conf/ubuntu1710.conf.php         |    5 +
 install/dist/conf/ubuntu1804.conf.php         |    7 +-
 install/dist/lib/debian60.lib.php             |    1 -
 install/dist/lib/fedora.lib.php               |    1 -
 install/install.php                           |   24 +-
 install/lib/classes/tpl.inc.php               |  141 -
 install/lib/installer_base.lib.php            |  166 +
 install/lib/installer_base.lib.php.orig       | 2962 +++++++++++++++++
 .../sql/incremental/upd_dev_collection.sql    |   32 +
 .../incremental/upd_dev_collection.sql.orig   |    0
 .../incremental/upd_dev_collection.sql.rej    |   40 +
 install/sql/ispconfig3.sql                    |   19 +-
 install/sql/ispconfig3.sql.orig               | 2570 ++++++++++++++
 install/sql/ispconfig3.sql.rej                |   23 +
 install/tpl/rspamd_antivirus.conf.master      |   30 +
 .../tpl/rspamd_classifier-bayes.conf.master   |    3 +
 install/tpl/rspamd_dkim_signing.conf.master   |    2 +
 install/tpl/rspamd_greylist.conf.master       |    1 +
 install/tpl/rspamd_groups.conf.master         |    4 +
 install/tpl/rspamd_milter_headers.conf.master |    2 +
 install/tpl/rspamd_mx_check.conf.master       |    9 +
 install/tpl/rspamd_neural.conf.master         |   31 +
 install/tpl/rspamd_neural_group.conf.master   |   18 +
 install/tpl/rspamd_options.inc.master         |    5 +
 install/tpl/rspamd_override_rbl.conf.master   |   53 +
 install/tpl/rspamd_override_surbl.conf.master |  108 +
 install/tpl/rspamd_redis.conf.master          |    1 +
 .../tpl/rspamd_symbols_antivirus.conf.master  |   15 +
 install/tpl/rspamd_users.conf.master          |   43 +
 install/tpl/rspamd_users.inc.conf.master      |    1 +
 install/tpl/rspamd_wblist.inc.conf.master     |   18 +
 .../tpl/rspamd_worker-controller.inc.master   |    1 +
 install/tpl/server.ini.master                 |    2 +
 install/update.php                            |    7 +
 interface/lib/lang/de.lng                     |    3 +-
 .../web/admin/form/server_config.tform.php    |   31 +-
 .../admin/form/server_config.tform.php.orig   | 1956 +++++++++++
 .../web/admin/lib/lang/de_server_config.lng   |    5 +-
 .../admin/lib/lang/de_server_config.lng.orig  |  299 ++
 .../admin/lib/lang/de_server_config.lng.rej   |   11 +
 .../web/admin/lib/lang/en_server_config.lng   |    5 +-
 .../admin/lib/lang/en_server_config.lng.orig  |  300 ++
 .../admin/lib/lang/en_server_config.lng.rej   |   11 +
 interface/web/admin/server_config_edit.php    |   71 +
 .../templates/server_config_mail_edit.htm     |   34 +
 .../web/mail/form/spamfilter_policy.tform.php |   36 +
 .../form/spamfilter_policy.tform.php.orig     |  496 +++
 .../mail/lib/lang/de_spamfilter_policy.lng    |    8 +-
 interface/web/mail/lib/lang/en.lng            |    3 +-
 .../mail/lib/lang/en_spamfilter_policy.lng    |    9 +-
 interface/web/mail/mail_domain_edit.php       |    9 +-
 interface/web/mail/mail_user_edit.php         |    4 +-
 interface/web/mail/spamfilter_policy_edit.php |   72 +-
 interface/web/mail/spamfilter_policy_list.php |   29 +-
 .../mail/templates/spamfilter_policy_edit.htm |    3 +-
 .../mail/templates/spamfilter_policy_list.htm |   10 +-
 .../templates/spamfilter_taglevel_edit.htm    |   31 +-
 server/conf/apache_apps.vhost.master          |   10 +
 server/conf/autoresponder.master              |    2 +-
 server/conf/nginx_apps.vhost.master           |   25 +
 server/conf/rspamd_users.inc.conf.master      |   41 +
 .../conf/rspamd_worker-controller.inc.master  |    8 +
 server/conf/sieve_filter.master               |    6 +-
 server/conf/sieve_filter_1.2.master           |    6 +-
 server/mods-available/mail_module.inc.php     |   37 +-
 .../apps_vhost_plugin.inc.php                 |   22 +-
 .../mail_plugin_dkim.inc.php                  |    3 +
 .../postfix_server_plugin.inc.php             |   62 +-
 .../plugins-available/rspamd_plugin.inc.php   |  255 ++
 80 files changed, 10326 insertions(+), 216 deletions(-)
 create mode 100644 install/dist/conf/debiantesting.conf.php.orig
 create mode 100644 install/lib/installer_base.lib.php.orig
 create mode 100644 install/sql/incremental/upd_dev_collection.sql.orig
 create mode 100644 install/sql/incremental/upd_dev_collection.sql.rej
 create mode 100644 install/sql/ispconfig3.sql.orig
 create mode 100644 install/sql/ispconfig3.sql.rej
 create mode 100644 install/tpl/rspamd_antivirus.conf.master
 create mode 100644 install/tpl/rspamd_classifier-bayes.conf.master
 create mode 100644 install/tpl/rspamd_dkim_signing.conf.master
 create mode 100644 install/tpl/rspamd_greylist.conf.master
 create mode 100644 install/tpl/rspamd_groups.conf.master
 create mode 100644 install/tpl/rspamd_milter_headers.conf.master
 create mode 100644 install/tpl/rspamd_mx_check.conf.master
 create mode 100644 install/tpl/rspamd_neural.conf.master
 create mode 100644 install/tpl/rspamd_neural_group.conf.master
 create mode 100644 install/tpl/rspamd_options.inc.master
 create mode 100644 install/tpl/rspamd_override_rbl.conf.master
 create mode 100644 install/tpl/rspamd_override_surbl.conf.master
 create mode 100644 install/tpl/rspamd_redis.conf.master
 create mode 100644 install/tpl/rspamd_symbols_antivirus.conf.master
 create mode 100644 install/tpl/rspamd_users.conf.master
 create mode 120000 install/tpl/rspamd_users.inc.conf.master
 create mode 100644 install/tpl/rspamd_wblist.inc.conf.master
 create mode 120000 install/tpl/rspamd_worker-controller.inc.master
 create mode 100644 interface/web/admin/form/server_config.tform.php.orig
 create mode 100644 interface/web/admin/lib/lang/de_server_config.lng.orig
 create mode 100644 interface/web/admin/lib/lang/de_server_config.lng.rej
 create mode 100644 interface/web/admin/lib/lang/en_server_config.lng.orig
 create mode 100644 interface/web/admin/lib/lang/en_server_config.lng.rej
 create mode 100644 interface/web/mail/form/spamfilter_policy.tform.php.orig
 create mode 100644 server/conf/rspamd_users.inc.conf.master
 create mode 100644 server/conf/rspamd_worker-controller.inc.master
 create mode 100644 server/plugins-available/rspamd_plugin.inc.php

diff --git a/install/dist/conf/centos70.conf.php b/install/dist/conf/centos70.conf.php
index a40e88ed70..0465e5618a 100644
--- a/install/dist/conf/centos70.conf.php
+++ b/install/dist/conf/centos70.conf.php
@@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavisd';
 $conf['amavis']['init_script'] = 'amavisd';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd@amavisd';
diff --git a/install/dist/conf/centos72.conf.php b/install/dist/conf/centos72.conf.php
index e7ab6030b7..221cc5d7c4 100644
--- a/install/dist/conf/centos72.conf.php
+++ b/install/dist/conf/centos72.conf.php
@@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavisd';
 $conf['amavis']['init_script'] = 'amavisd';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd@amavisd';
diff --git a/install/dist/conf/debian40.conf.php b/install/dist/conf/debian40.conf.php
index 613c828d14..c04a54e998 100644
--- a/install/dist/conf/debian40.conf.php
+++ b/install/dist/conf/debian40.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/debian60.conf.php b/install/dist/conf/debian60.conf.php
index 2c26dcb9cb..e7c8f59845 100644
--- a/install/dist/conf/debian60.conf.php
+++ b/install/dist/conf/debian60.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/debian90.conf.php b/install/dist/conf/debian90.conf.php
index cdaf7aa9a0..13fd230654 100644
--- a/install/dist/conf/debian90.conf.php
+++ b/install/dist/conf/debian90.conf.php
@@ -153,6 +153,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/debiantesting.conf.php b/install/dist/conf/debiantesting.conf.php
index 5e5e32f474..6ea9112dff 100644
--- a/install/dist/conf/debiantesting.conf.php
+++ b/install/dist/conf/debiantesting.conf.php
@@ -153,6 +153,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/debiantesting.conf.php.orig b/install/dist/conf/debiantesting.conf.php.orig
new file mode 100644
index 0000000000..5e5e32f474
--- /dev/null
+++ b/install/dist/conf/debiantesting.conf.php.orig
@@ -0,0 +1,234 @@
+<?php
+
+/*
+Copyright (c) 2016, Till Brehm, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+//***  Debian Testing default settings
+
+//* Main
+$conf['language'] = 'en';
+$conf['distname'] = 'debian100';
+$conf['hostname'] = 'server1.domain.tld'; // Full hostname
+$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
+$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
+$conf['server_id'] = 1;
+$conf['init_scripts'] = '/etc/init.d';
+$conf['runlevel'] = '/etc';
+$conf['shells'] = '/etc/shells';
+$conf['pam'] = '/etc/pam.d';
+
+//* Services provided by this server, this selection will be overridden by the expert mode
+$conf['services']['mail'] = true;
+$conf['services']['web'] = true;
+$conf['services']['dns'] = true;
+$conf['services']['file'] = true;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = true;
+$conf['services']['proxy'] = false;
+$conf['services']['firewall'] = false;
+
+//* MySQL
+$conf['mysql']['installed'] = false; // will be detected automatically during installation
+$conf['mysql']['init_script'] = 'mysql';
+$conf['mysql']['host'] = 'localhost';
+$conf['mysql']['ip'] = '127.0.0.1';
+$conf['mysql']['port'] = '3306';
+$conf['mysql']['database'] = 'dbispconfig';
+$conf['mysql']['admin_user'] = 'root';
+$conf['mysql']['admin_password'] = '';
+$conf['mysql']['charset'] = 'utf8';
+$conf['mysql']['ispconfig_user'] = 'ispconfig';
+$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
+$conf['mysql']['master_slave_setup'] = 'n';
+$conf['mysql']['master_host'] = '';
+$conf['mysql']['master_database'] = 'dbispconfig';
+$conf['mysql']['master_admin_user'] = 'root';
+$conf['mysql']['master_admin_password'] = '';
+$conf['mysql']['master_ispconfig_user'] = '';
+$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
+
+//* Apache
+$conf['apache']['installed'] = false; // will be detected automatically during installation
+$conf['apache']['user'] = 'www-data';
+$conf['apache']['group'] = 'www-data';
+$conf['apache']['init_script'] = 'apache2';
+$conf['apache']['version'] = '2.4';
+$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
+$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
+$conf['apache']['vhost_port'] = '8080';
+$conf['apache']['php_ini_path_apache'] = '/etc/php/7.3/apache2/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.3/cgi/php.ini';
+
+//* Website base settings
+$conf['web']['website_basedir'] = '/var/www';
+$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
+$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
+
+//* Apps base settings
+$conf['web']['apps_vhost_ip'] = '_default_';
+$conf['web']['apps_vhost_port'] = '8081';
+$conf['web']['apps_vhost_servername'] = '';
+$conf['web']['apps_vhost_user'] = 'ispapps';
+$conf['web']['apps_vhost_group'] = 'ispapps';
+
+//* Fastcgi
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.3/cgi/';
+$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
+$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
+
+//* Postfix
+$conf['postfix']['installed'] = false; // will be detected automatically during installation
+$conf['postfix']['config_dir'] = '/etc/postfix';
+$conf['postfix']['init_script'] = 'postfix';
+$conf['postfix']['user'] = 'postfix';
+$conf['postfix']['group'] = 'postfix';
+$conf['postfix']['vmail_userid'] = '5000';
+$conf['postfix']['vmail_username'] = 'vmail';
+$conf['postfix']['vmail_groupid'] = '5000';
+$conf['postfix']['vmail_groupname'] = 'vmail';
+$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
+
+//* Mailman
+$conf['mailman']['installed'] = false; // will be detected automatically during installation
+$conf['mailman']['config_dir'] = '/etc/mailman';
+$conf['mailman']['init_script'] = 'mailman';
+
+//* mlmmj
+$conf['mlmmj']['installed'] = false; // will be detected automatically during installation
+$conf['mlmmj']['config_dir'] = '/etc/mlmmj';
+
+//* Getmail
+$conf['getmail']['installed'] = false; // will be detected automatically during installation
+$conf['getmail']['config_dir'] = '/etc/getmail';
+$conf['getmail']['program'] = '/usr/bin/getmail';
+
+//* Courier
+$conf['courier']['installed'] = false; // will be detected automatically during installation
+$conf['courier']['config_dir'] = '/etc/courier';
+$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
+$conf['courier']['courier-imap'] = 'courier-imap';
+$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
+$conf['courier']['courier-pop'] = 'courier-pop';
+$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
+
+//* Dovecot
+$conf['dovecot']['installed'] = false; // will be detected automatically during installation
+$conf['dovecot']['config_dir'] = '/etc/dovecot';
+$conf['dovecot']['init_script'] = 'dovecot';
+
+//* SASL
+$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
+$conf['saslauthd']['config'] = '/etc/default/saslauthd';
+$conf['saslauthd']['init_script'] = 'saslauthd';
+
+//* Amavisd
+$conf['amavis']['installed'] = false; // will be detected automatically during installation
+$conf['amavis']['config_dir'] = '/etc/amavis';
+$conf['amavis']['init_script'] = 'amavis';
+
+//* ClamAV
+$conf['clamav']['installed'] = false; // will be detected automatically during installation
+$conf['clamav']['init_script'] = 'clamav-daemon';
+
+//* Pureftpd
+$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
+$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
+$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
+
+//* MyDNS
+$conf['mydns']['installed'] = false; // will be detected automatically during installation
+$conf['mydns']['config_dir'] = '/etc';
+$conf['mydns']['init_script'] = 'mydns';
+
+//* PowerDNS
+$conf['powerdns']['installed'] = false; // will be detected automatically during installation
+$conf['powerdns']['database'] = 'powerdns';
+$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
+$conf['powerdns']['init_script'] = 'pdns';
+
+//* BIND DNS Server
+$conf['bind']['installed'] = false; // will be detected automatically during installation
+$conf['bind']['bind_user'] = 'root';
+$conf['bind']['bind_group'] = 'bind';
+$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
+$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
+$conf['bind']['init_script'] = 'bind9';
+
+//* Jailkit
+$conf['jailkit']['installed'] = false; // will be detected automatically during installation
+$conf['jailkit']['config_dir'] = '/etc/jailkit';
+$conf['jailkit']['jk_init'] = 'jk_init.ini';
+$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
+$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch';
+$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
+
+//* Squid
+$conf['squid']['installed'] = false; // will be detected automatically during installation
+$conf['squid']['config_dir'] = '/etc/squid';
+$conf['squid']['init_script'] = 'squid';
+
+//* Nginx
+$conf['nginx']['installed'] = false; // will be detected automatically during installation
+$conf['nginx']['user'] = 'www-data';
+$conf['nginx']['group'] = 'www-data';
+$conf['nginx']['config_dir'] = '/etc/nginx';
+$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
+$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
+$conf['nginx']['init_script'] = 'nginx';
+$conf['nginx']['vhost_port'] = '8080';
+$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
+$conf['nginx']['php_fpm_init_script'] = 'php7.3-fpm';
+$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.3/fpm/php.ini';
+$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.3/fpm/pool.d';
+$conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.3-fpm';
+
+//* OpenVZ
+$conf['openvz']['installed'] = false;
+
+//*Bastille-Firwall
+$conf['bastille']['installed'] = false;
+$conf['bastille']['config_dir'] = '/etc/Bastille';
+
+//* vlogger
+$conf['vlogger']['config_dir'] = '/etc';
+
+//* cron
+$conf['cron']['init_script'] = 'cron';
+$conf['cron']['crontab_dir'] = '/etc/cron.d';
+$conf['cron']['wget'] = '/usr/bin/wget';
+
+//* Metronome XMPP
+$conf['xmpp']['installed'] = false;
+$conf['xmpp']['init_script'] = 'metronome';
+
+
+?>
diff --git a/install/dist/conf/fedora9.conf.php b/install/dist/conf/fedora9.conf.php
index 80539a7859..19c9a4f625 100644
--- a/install/dist/conf/fedora9.conf.php
+++ b/install/dist/conf/fedora9.conf.php
@@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavisd';
 $conf['amavis']['init_script'] = 'amavisd';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd.amavisd';
diff --git a/install/dist/conf/gentoo.conf.php b/install/dist/conf/gentoo.conf.php
index 2955cfa71d..24c7d0633e 100644
--- a/install/dist/conf/gentoo.conf.php
+++ b/install/dist/conf/gentoo.conf.php
@@ -162,6 +162,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_file'] = '/etc/amavisd.conf';
 $conf['amavis']['init_script'] = 'amavisd';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd';
diff --git a/install/dist/conf/opensuse112.conf.php b/install/dist/conf/opensuse112.conf.php
index fa0504652e..378320a144 100644
--- a/install/dist/conf/opensuse112.conf.php
+++ b/install/dist/conf/opensuse112.conf.php
@@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd';
diff --git a/install/dist/conf/ubuntu1604.conf.php b/install/dist/conf/ubuntu1604.conf.php
index 9ac56de3f8..0d3fe23bad 100644
--- a/install/dist/conf/ubuntu1604.conf.php
+++ b/install/dist/conf/ubuntu1604.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/ubuntu1710.conf.php b/install/dist/conf/ubuntu1710.conf.php
index 0c87005910..0730f8f2d5 100644
--- a/install/dist/conf/ubuntu1710.conf.php
+++ b/install/dist/conf/ubuntu1710.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/ubuntu1804.conf.php b/install/dist/conf/ubuntu1804.conf.php
index 15cdb1c5eb..2a09f787db 100644
--- a/install/dist/conf/ubuntu1804.conf.php
+++ b/install/dist/conf/ubuntu1804.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
@@ -227,4 +232,4 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
-?>
\ No newline at end of file
+?>
diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index 0cd7116568..af8899f8cb 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -68,7 +68,6 @@ class installer extends installer_base {
 		}
 
 		//* Reconfigure postfix to use dovecot authentication
-		// Adding the amavisd commands to the postfix configuration
 		$postconf_commands = array (
 			'dovecot_destination_recipient_limit = 1',
 			'virtual_transport = '.$virtual_transport,
diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 889bd4288d..5bb8fc0d25 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -401,7 +401,6 @@ class installer_dist extends installer_base {
 		}
 
 		//* Reconfigure postfix to use dovecot authentication
-		// Adding the amavisd commands to the postfix configuration
 		$postconf_commands = array (
 			'dovecot_destination_recipient_limit = 1',
 			'virtual_transport = '.$virtual_transport,
diff --git a/install/install.php b/install/install.php
index a324669867..9dff3facf2 100644
--- a/install/install.php
+++ b/install/install.php
@@ -385,7 +385,14 @@ if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Mail
 			$inst->configure_amavis();
 		}
 
-		//* Configure Getmail
+		//* Configure Rspamd
+		$force = @($conf['rspamd']['installed']) ? true : $inst->force_configure_app('Rspamd', ($install_mode == 'expert'));
+		if($force) {
+			swriteln('Configuring Rspamd');
+			$inst->configure_rspamd();
+		}
+
+//* Configure Getmail
 		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', ($install_mode == 'expert'));
 		if($force) {
 			swriteln('Configuring Getmail');
@@ -538,20 +545,6 @@ $install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] ==
 if($install_mode == 'standard' || strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') {
 	swriteln('Installing ISPConfig');
 
-	//** We want to check if the server is a module or cgi based php enabled server
-	//** TODO: Don't always ask for this somehow ?
-	/*
-	$fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no');
-
-	if($fast_cgi == 'yes') {
-		$alias = $inst->free_query('Script Alias', '/php/');
-		$path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin');
-		$conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path);
-	} else {
-		$conf['apache']['vhost_cgi_alias'] = "";
-	}
-	*/
-
 	//** Customise the port ISPConfig runs on
 	$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
 	$temp_admin_password = str_shuffle(bin2hex(openssl_random_pseudo_bytes(4)));
@@ -602,6 +595,7 @@ if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') s
 if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
 if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
 if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
+if($conf['rspamd']['installed'] == true && $conf['rspamd']['init_script'] != '') system($inst->getinitcommand($conf['rspamd']['init_script'], 'restart'));
 if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
 if($conf['courier']['installed'] == true){
 	if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
diff --git a/install/lib/classes/tpl.inc.php b/install/lib/classes/tpl.inc.php
index 73ff19230b..5bd8ded1f8 100644
--- a/install/lib/classes/tpl.inc.php
+++ b/install/lib/classes/tpl.inc.php
@@ -357,147 +357,6 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-		/**
-		 * [** EXPERIMENTAL **]
-		 * Function to create a loop from a Db result resource link.
-		 * @param string $loopname to commit loop. If not set, will use last loopname set using newLoop()
-		 * @param string $result link to a Db result resource
-		 * @param string $db_type, type of db that the result resource belongs to.
-		 * @return boolean true/false
-		 * @access public
-		 */
-		public function setDbLoop($loopname, $result, $db_type = 'MYSQL')
-		{
-			/*
-			$db_type = strtoupper($db_type);
-            if (!in_array($db_type, $this->allowed_loop_dbs)) {
-                vlibTemplateError::raiseError('VT_WARNING_INVALID_LOOP_DB', WARNING, $db_type);
-                return false;
-            }
-
-            $loop_arr = array();
-            // TODO: Are all these necessary as were onyl using mysql and possible postgres ? - pedro
-            switch ($db_type) {
-
-                case 'MYSQL':
-                    if (get_resource_type($result) != 'mysql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = mysql_fetch_assoc($result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'POSTGRESQL':
-                    if (get_resource_type($result) != 'pgsql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-
-                    $nr = (function_exists('pg_num_rows')) ? pg_num_rows($result) : pg_numrows($result);
-
-                    for ($i=0; $i < $nr; $i++) {
-                        $loop_arr[] = pg_fetch_array($result, $i, PGSQL_ASSOC);
-                    }
-                    break;
-
-                case 'INFORMIX':
-                    if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = ifx_fetch_row($result, 'NEXT')) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'INTERBASE':
-                    if (get_resource_type($result) != 'interbase result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = ibase_fetch_row($result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'INGRES':
-                    if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = ingres_fetch_array(INGRES_ASSOC, $result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'MSSQL':
-                    if (get_resource_type($result) != 'mssql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = mssql_fetch_array($result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'MSQL':
-                    if (get_resource_type($result) != 'msql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = msql_fetch_array($result, MSQL_ASSOC)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'OCI8':
-                    if (get_resource_type($result) != 'oci8 statement') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while(OCIFetchInto($result, &$r, OCI_ASSOC+OCI_RETURN_LOBS)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'ORACLE':
-                    if (get_resource_type($result) != 'oracle Cursor') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while(ora_fetch_into($result, &$r, ORA_FETCHINTO_ASSOC)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'OVRIMOS':
-                    if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while(ovrimos_fetch_into($result, &$r, 'NEXT')) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'SYBASE':
-                    if (get_resource_type($result) != 'sybase-db result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-
-                    while($r = sybase_fetch_array($result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-            }
-            $this->setLoop($loopname, $loop_arr);
-            return true;
-			*/
-		}
-
 		/**
 		 * Sets the name for the curent loop in the 3 step loop process.
 		 * @param string $name string to define loop name
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 8d0456ef5b..7221dd7dec 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -163,6 +163,7 @@ class installer_base {
 		if(is_installed('dovecot')) $conf['dovecot']['installed'] = true;
 		if(is_installed('saslauthd')) $conf['saslauthd']['installed'] = true;
 		if(is_installed('amavisd-new') || is_installed('amavisd')) $conf['amavis']['installed'] = true;
+		if(is_installed('rspamd')) $conf['rspamd']['installed'] = true;
 		if(is_installed('clamdscan')) $conf['clamav']['installed'] = true;
 		if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true;
 		if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true;
@@ -1426,6 +1427,171 @@ class installer_base {
 
 	}
 
+	public function configure_rspamd() {
+		global $conf;
+		
+		//* These postconf commands will be executed on installation and update
+		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
+		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
+		unset($server_ini_rec);
+		
+		$mail_config = $server_ini_array['mail'];
+		if($mail_config['content_filter'] === 'rspamd') {
+			exec("postconf -X 'receive_override_options'");
+			exec("postconf -X 'content_filter'");
+
+			exec("postconf -e 'smtpd_milters = inet:localhost:11332'");
+			exec("postconf -e 'non_smtpd_milters = inet:localhost:11332'");
+			exec("postconf -e 'milter_protocol = 6'");
+			exec("postconf -e 'milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}'");
+			exec("postconf -e 'milter_default_action = accept'");
+
+			exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
+
+			$new_options = array();
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+			foreach ($options as $value) {
+				if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
+					$new_options[] = $value;
+				}
+			}
+			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+		}
+
+		if(!is_dir('/etc/rspamd/local.d/')){
+			mkdir('/etc/rspamd/local.d/', 0755, true);
+		}
+
+		if(!is_dir('/etc/rspamd/override.d/')){
+			mkdir('/etc/rspamd/override.d/', 0755, true);
+		}
+
+		$tpl = new tpl();
+		$tpl->newTemplate('rspamd_users.conf.master');
+
+		$whitelist_ips = array();
+		$ips = $this->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']);
+		if(is_array($ips) && !empty($ips)){
+			foreach($ips as $ip){
+				$whitelist_ips[] = array('ip' => $ip['ip_address']);
+			}
+		}
+		$tpl->setLoop('whitelist_ips', $whitelist_ips);
+		wf('/etc/rspamd/local.d/users.conf', $tpl->grab());
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_groups.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_groups.conf.master /etc/rspamd/local.d/groups.conf');
+		} else {
+			exec('cp tpl/rspamd_groups.conf.master /etc/rspamd/local.d/groups.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_antivirus.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_antivirus.conf.master /etc/rspamd/local.d/antivirus.conf');
+		} else {
+			exec('cp tpl/rspamd_antivirus.conf.master /etc/rspamd/local.d/antivirus.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_classifier-bayes.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_classifier-bayes.conf.master /etc/rspamd/local.d/classifier-bayes.conf');
+		} else {
+			exec('cp tpl/rspamd_classifier-bayes.conf.master /etc/rspamd/local.d/classifier-bayes.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_greylist.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_greylist.conf.master /etc/rspamd/local.d/greylist.conf');
+		} else {
+			exec('cp tpl/rspamd_greylist.conf.master /etc/rspamd/local.d/greylist.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_symbols_antivirus.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_symbols_antivirus.conf.master /etc/rspamd/local.d/antivirus_group.conf');
+		} else {
+			exec('cp tpl/rspamd_symbols_antivirus.conf.master /etc/rspamd/local.d/antivirus_group.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_rbl.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_rbl.conf.master /etc/rspamd/override.d/rbl_group.conf');
+		} else {
+			exec('cp tpl/rspamd_override_rbl.conf.master /etc/rspamd/override.d/rbl_group.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_surbl.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_surbl.conf.master /etc/rspamd/override.d/surbl_group.conf');
+		} else {
+			exec('cp tpl/rspamd_override_surbl.conf.master /etc/rspamd/override.d/surbl_group.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_mx_check.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_mx_check.conf.master /etc/rspamd/local.d/mx_check.conf');
+		} else {
+			exec('cp tpl/rspamd_mx_check.conf.master /etc/rspamd/local.d/mx_check.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_redis.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_redis.conf.master /etc/rspamd/local.d/redis.conf');
+		} else {
+			exec('cp tpl/rspamd_redis.conf.master /etc/rspamd/local.d/redis.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_milter_headers.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_milter_headers.conf.master /etc/rspamd/local.d/milter_headers.conf');
+		} else {
+			exec('cp tpl/rspamd_milter_headers.conf.master /etc/rspamd/local.d/milter_headers.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_options.inc.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_options.inc.master /etc/rspamd/local.d/options.inc');
+		} else {
+			exec('cp tpl/rspamd_options.inc.master /etc/rspamd/local.d/options.inc');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural.conf.master /etc/rspamd/local.d/neural.conf');
+		} else {
+			exec('cp tpl/rspamd_neural.conf.master /etc/rspamd/local.d/neural.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural_group.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural_group.conf.master /etc/rspamd/local.d/neural_group.conf');
+		} else {
+			exec('cp tpl/rspamd_neural_group.conf.master /etc/rspamd/local.d/neural_group.conf');
+		}
+
+		exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/override.d/*');
+
+		$tpl = new tpl();
+		$tpl->newTemplate('rspamd_dkim_signing.conf.master');
+		$tpl->setVar('dkim_path', $mail_config['dkim_path']);
+		wf('/etc/rspamd/local.d/dkim_signing.conf', $tpl->grab());
+
+		$command = 'usermod -a -G amavis _rspamd';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+			
+		if(strpos(rf('/etc/rspamd/rspamd.conf'), '.include "$LOCAL_CONFDIR/local.d/users.conf"') === false){
+			af('/etc/rspamd/rspamd.conf', '.include "$LOCAL_CONFDIR/local.d/users.conf"');
+		}
+		
+		if(!isset($mail_config['rspamd_password']) || !$mail_config['rspamd_password']) {
+			$mail_config['rspamd_password'] = str_shuffle(bin2hex(openssl_random_pseudo_bytes(12)));
+			
+			$server_ini_array['mail']['rspamd_password'] = $mail_config['rspamd_password'];
+		}
+
+		$server_ini_array['mail']['rspamd_available'] = 'y';
+		$server_ini_string = array_to_ini($server_ini_array);
+		if($this->dbmaster != $this->db) {
+			$this->dbmaster->query('UPDATE `server` SET `config` = ? WHERE `server_id` = ?', $server_ini_string, $conf['server_id']);
+		}
+		$this->db->query('UPDATE `server` SET `config` = ? WHERE `server_id` = ?', $server_ini_string, $conf['server_id']);
+		unset($server_ini_array);
+		unset($server_ini_string);
+		
+		$tpl = new tpl();
+		$tpl->newTemplate('rspamd_worker-controller.inc.master');
+		$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
+		wf('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());		
+	}
+
 	public function configure_spamassassin() {
 		global $conf;
 
diff --git a/install/lib/installer_base.lib.php.orig b/install/lib/installer_base.lib.php.orig
new file mode 100644
index 0000000000..8d0456ef5b
--- /dev/null
+++ b/install/lib/installer_base.lib.php.orig
@@ -0,0 +1,2962 @@
+<?php
+
+/*
+Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class installer_base {
+
+	var $wb = array();
+	var $language = 'en';
+	var $db;
+	public $conf;
+	public $install_ispconfig_interface = true;
+	public $is_update = false; // true if it is an update, falsi if it is a new install
+	public $min_php = '5.3.3'; // minimal php-version for update / install
+	protected $mailman_group = 'list';
+
+
+	public function __construct() {
+		global $conf; //TODO: maybe $conf  should be passed to constructor
+		//$this->conf = $conf;
+	}
+
+	//: TODO  Implement the translation function and language files for the installer.
+	public function lng($text) {
+		return $text;
+	}
+
+	public function error($msg) {
+		die('ERROR: '.$msg."\n");
+	}
+
+	public function warning($msg) {
+		echo 'WARNING: '.$msg."\n";
+	}
+
+	public function simple_query($query, $answers, $default, $name = '') {
+		global $autoinstall, $autoupdate;
+		$finished = false;
+		do {
+			if($name != '' && $autoinstall[$name] != '') {
+				if($autoinstall[$name] == 'default') {
+					$input = $default;
+				} else {
+					$input = $autoinstall[$name];
+				}
+			} elseif($name != '' && $autoupdate[$name] != '') {
+				if($autoupdate[$name] == 'default') {
+					$input = $default;
+				} else {
+					$input = $autoupdate[$name];
+				}
+			} else {
+				$answers_str = implode(',', $answers);
+				swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
+				$input = sread();
+			}
+
+			//* Stop the installation
+			if($input == 'quit') {
+				swriteln($this->lng("Installation terminated by user.\n"));
+				die();
+			}
+
+			//* Select the default
+			if($input == '') {
+				$answer = $default;
+				$finished = true;
+			}
+
+			//* Set answer id valid
+			if(in_array($input, $answers)) {
+				$answer = $input;
+				$finished = true;
+			}
+
+		} while ($finished == false);
+		swriteln();
+		return $answer;
+	}
+
+	public function free_query($query, $default, $name = '') {
+		global $autoinstall, $autoupdate;
+		if($name != '' && $autoinstall[$name] != '') {
+			if($autoinstall[$name] == 'default') {
+				$input = $default;
+			} else {
+				$input = $autoinstall[$name];
+			}
+		} elseif($name != '' && $autoupdate[$name] != '') {
+			if($autoupdate[$name] == 'default') {
+				$input = $default;
+			} else {
+				$input = $autoupdate[$name];
+			}
+		} else {
+			swrite($this->lng($query).' ['.$default.']: ');
+			$input = sread();
+		}
+
+		//* Stop the installation
+		if($input == 'quit') {
+			swriteln($this->lng("Installation terminated by user.\n"));
+			die();
+		}
+
+		$answer =  ($input == '') ? $default : $input;
+		swriteln();
+		return $answer;
+	}
+
+	/*
+	// TODO: this function is not used atmo I think - pedro
+	function request_language(){
+
+		swriteln(lng('Enter your language'));
+		swriteln(lng('de, en'));
+
+	}
+	*/
+
+	//** Detect PHP-Version
+	public function get_php_version() {
+		if(version_compare(PHP_VERSION, $this->min_php, '<')) return false;
+		else return true;
+	}
+
+	//** Detect installed applications
+	public function find_installed_apps() {
+		global $conf;
+
+		if(is_installed('mysql') || is_installed('mysqld')) $conf['mysql']['installed'] = true;
+		if(is_installed('postfix')) $conf['postfix']['installed'] = true;
+		if(is_installed('postgrey')) $conf['postgrey']['installed'] = true;
+		if(is_installed('mailman') || is_installed('mmsitepass')) $conf['mailman']['installed'] = true;
+		if(is_installed('apache') || is_installed('apache2') || is_installed('httpd') || is_installed('httpd2')) $conf['apache']['installed'] = true;
+		if(is_installed('getmail')) $conf['getmail']['installed'] = true;
+		if(is_installed('courierlogger')) $conf['courier']['installed'] = true;
+		if(is_installed('dovecot')) $conf['dovecot']['installed'] = true;
+		if(is_installed('saslauthd')) $conf['saslauthd']['installed'] = true;
+		if(is_installed('amavisd-new') || is_installed('amavisd')) $conf['amavis']['installed'] = true;
+		if(is_installed('clamdscan')) $conf['clamav']['installed'] = true;
+		if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true;
+		if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true;
+		if(is_installed('jk_chrootsh')) $conf['jailkit']['installed'] = true;
+		if(is_installed('pdns_server') || is_installed('pdns_control')) $conf['powerdns']['installed'] = true;
+		if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true;
+		if(is_installed('squid')) $conf['squid']['installed'] = true;
+		if(is_installed('nginx')) $conf['nginx']['installed'] = true;
+		if(is_installed('iptables') && is_installed('ufw')) {
+			$conf['ufw']['installed'] = true;
+		} elseif(is_installed('iptables')) {
+			$conf['firewall']['installed'] = true;
+		}
+		if(is_installed('fail2ban-server')) $conf['fail2ban']['installed'] = true;
+		if(is_installed('vzctl')) $conf['openvz']['installed'] = true;
+		if(is_installed('metronome') && is_installed('metronomectl')) $conf['xmpp']['installed'] = true;
+		if(is_installed('spamassassin')) $conf['spamassassin']['installed'] = true;
+		// if(is_installed('vlogger')) $conf['vlogger']['installed'] = true;
+		// ISPConfig ships with vlogger, so it is always installed.
+		$conf['vlogger']['installed'] = true;
+		if(is_installed('cron') || is_installed('anacron')) $conf['cron']['installed'] = true;
+
+		if (($conf['apache']['installed'] && is_file($conf['apache']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")) || ($conf['nginx']['installed'] && is_file($conf['nginx']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost"))) $this->ispconfig_interface_installed = true;
+	}
+
+    public function force_configure_app($service, $enable_force=true) {
+		$force = false;
+		if(AUTOINSTALL == true) return false;
+		if($enable_force == true) {
+			swriteln("[WARN] autodetect for $service failed");
+		} else {
+			swriteln("[INFO] service $service not detected");
+		}
+		if($enable_force) {
+	        if(strtolower($this->simple_query("Force configure $service", array('y', 'n'), 'n') ) == 'y') {
+	            $force = true;
+			} else swriteln("Skipping $service\n");
+		}
+		return $force;
+    }
+
+	public function reconfigure_app($service, $reconfigure_services_answer) {
+		$reconfigure = false;
+		if ($reconfigure_services_answer != 'selected') {
+			$reconfigure = true;
+		} else {
+			if(strtolower($this->simple_query("Reconfigure $service", array('y', 'n'), 'y') ) == 'y') {
+				$reconfigure = true;
+			} else {
+				swriteln("Skip reconfigure $service\n");
+			}
+		}
+		return $reconfigure;
+	}
+
+	/** Create the database for ISPConfig */
+
+
+	public function configure_database() {
+		global $conf;
+
+		//* check sql-mode
+		/*$check_sql_mode = $this->db->queryOneRecord("SELECT @@sql_mode");
+
+		if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') {
+			echo "Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION. Add\n\n";
+			echo "    sql-mode=\"NO_ENGINE_SUBSTITUTION\"\n\n";
+			echo"to the mysqld-section in your mysql-config on this server and restart mysqld afterwards\n";
+			die();
+		}*/
+
+		$unwanted_sql_plugins = array('validate_password');		
+		$sql_plugins = $this->db->queryAllRecords("SELECT plugin_name FROM information_schema.plugins WHERE plugin_status='ACTIVE' AND plugin_name IN ?", $unwanted_sql_plugins);
+		if(is_array($sql_plugins) && !empty($sql_plugins)) {
+			foreach ($sql_plugins as $plugin) echo "Login in to MySQL and disable $plugin[plugin_name] with:\n\n    UNINSTALL PLUGIN $plugin[plugin_name];";
+			die();
+		}
+
+		//** Create the database
+		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['mysql']['database'], $conf['mysql']['charset'])) {
+			$this->error('Unable to create MySQL database: '.$conf['mysql']['database'].'.');
+		}
+
+		//* Set the database name in the DB library
+		$this->db->setDBName($conf['mysql']['database']);
+
+		//* Load the database dump into the database, if database contains no tables
+		$db_tables = $this->db->getTables();
+		if(count($db_tables) > 0) {
+			$this->error('Stopped: Database already contains some tables.');
+		} else {
+			if($conf['mysql']['admin_password'] == '') {
+				caselog("mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -P ".escapeshellarg($conf['mysql']['port'])." ".escapeshellarg($conf['mysql']['database'])." < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null",
+					__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
+			} else {
+				caselog("mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." -P ".escapeshellarg($conf['mysql']['port'])." ".escapeshellarg($conf['mysql']['database'])." < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null",
+					__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
+			}
+			$db_tables = $this->db->getTables();
+			if(count($db_tables) == 0) {
+				$this->error('Unable to load SQL-Dump into database table.');
+			}
+
+			//* Load system.ini into the sys_ini table
+			$system_ini = rf('tpl/system.ini.master');
+			$this->db->query("UPDATE sys_ini SET config = ? WHERE sysini_id = 1", $system_ini);
+
+		}
+	}
+
+	//** Create the server record in the database
+	public function add_database_server_record() {
+
+		global $conf;
+
+		if($conf['mysql']['host'] == 'localhost') {
+			$from_host = 'localhost';
+		} else {
+			$from_host = $conf['hostname'];
+		}
+
+		// Delete ISPConfig user in the local database, in case that it exists
+		$this->db->query("DROP USER ?@?", $conf['mysql']['ispconfig_user'], $from_host);
+		$this->db->query("DROP DATABASE IF EXISTS ?", $conf['mysql']['database']);
+
+		//* Create the ISPConfig database user and grant permissions in the local database
+		$query = 'CREATE USER ?@? IDENTIFIED BY ?';
+		if(!$this->db->query($query, $conf['mysql']['ispconfig_user'], $from_host, $conf['mysql']['ispconfig_password'])) {
+			$this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
+		}
+		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON ?? TO ?@?';
+		if(!$this->db->query($query, $conf['mysql']['database'] . ".*", $conf['mysql']['ispconfig_user'], $from_host)) {
+			$this->error('Unable to grant databse permissions to user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
+		}
+
+		//* Set the database name in the DB library
+		$this->db->setDBName($conf['mysql']['database']);
+
+		$tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));
+
+		//* Update further distribution specific parameters for server config here
+		//* HINT: Every line added here has to be added in update.lib.php too!!
+		$tpl_ini_array['web']['vhost_conf_dir'] = $conf['apache']['vhost_conf_dir'];
+		$tpl_ini_array['web']['vhost_conf_enabled_dir'] = $conf['apache']['vhost_conf_enabled_dir'];
+		$tpl_ini_array['jailkit']['jailkit_chroot_app_programs'] = $conf['jailkit']['jailkit_chroot_app_programs'];
+		$tpl_ini_array['fastcgi']['fastcgi_phpini_path'] = $conf['fastcgi']['fastcgi_phpini_path'];
+		$tpl_ini_array['fastcgi']['fastcgi_starter_path'] = $conf['fastcgi']['fastcgi_starter_path'];
+		$tpl_ini_array['fastcgi']['fastcgi_bin'] = $conf['fastcgi']['fastcgi_bin'];
+		$tpl_ini_array['server']['hostname'] = $conf['hostname'];
+		$tpl_ini_array['server']['ip_address'] = @gethostbyname($conf['hostname']);
+		$tpl_ini_array['server']['firewall'] = ($conf['ufw']['installed'] == true)?'ufw':'bastille';
+		$tpl_ini_array['web']['website_basedir'] = $conf['web']['website_basedir'];
+		$tpl_ini_array['web']['website_path'] = $conf['web']['website_path'];
+		$tpl_ini_array['web']['website_symlinks'] = $conf['web']['website_symlinks'];
+		$tpl_ini_array['cron']['crontab_dir'] = $conf['cron']['crontab_dir'];
+		$tpl_ini_array['web']['security_level'] = 20;
+		$tpl_ini_array['web']['user'] = $conf['apache']['user'];
+		$tpl_ini_array['web']['group'] = $conf['apache']['group'];
+		$tpl_ini_array['web']['php_ini_path_apache'] = $conf['apache']['php_ini_path_apache'];
+		$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
+		$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
+		$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
+		$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
+		$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
+		$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
+		$tpl_ini_array['dns']['named_conf_path'] = $conf['bind']['named_conf_path'];
+		$tpl_ini_array['dns']['named_conf_local_path'] = $conf['bind']['named_conf_local_path'];
+
+		$tpl_ini_array['web']['nginx_vhost_conf_dir'] = $conf['nginx']['vhost_conf_dir'];
+		$tpl_ini_array['web']['nginx_vhost_conf_enabled_dir'] = $conf['nginx']['vhost_conf_enabled_dir'];
+		$tpl_ini_array['web']['nginx_user'] = $conf['nginx']['user'];
+		$tpl_ini_array['web']['nginx_group'] = $conf['nginx']['group'];
+		$tpl_ini_array['web']['nginx_cgi_socket'] = $conf['nginx']['cgi_socket'];
+		$tpl_ini_array['web']['php_fpm_init_script'] = $conf['nginx']['php_fpm_init_script'];
+		$tpl_ini_array['web']['php_fpm_ini_path'] = $conf['nginx']['php_fpm_ini_path'];
+		$tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir'];
+		$tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port'];
+		$tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir'];
+
+		if ($conf['nginx']['installed'] == true) {
+			$tpl_ini_array['web']['server_type'] = 'nginx';
+			$tpl_ini_array['global']['webserver'] = 'nginx';
+		}
+
+		if (array_key_exists('awstats', $conf)) {
+			foreach ($conf['awstats'] as $aw_sett => $aw_value) {
+				$tpl_ini_array['web']['awstats_'.$aw_sett] = $aw_value;
+			}
+		}
+
+		$server_ini_content = array_to_ini($tpl_ini_array);
+		
+		$mail_server_enabled = ($conf['services']['mail'])?1:0;
+		$web_server_enabled = ($conf['services']['web'])?1:0;
+		$dns_server_enabled = ($conf['services']['dns'])?1:0;
+		$file_server_enabled = ($conf['services']['file'])?1:0;
+		$db_server_enabled = ($conf['services']['db'])?1:0;
+		$vserver_server_enabled = ($conf['openvz']['installed'])?1:0;
+		$proxy_server_enabled = (isset($conf['services']['proxy']) && $conf['services']['proxy'])?1:0;
+		$firewall_server_enabled = (isset($conf['services']['firewall']) && $conf['services']['firewall'])?1:0;
+
+		//** Get the database version number based on the patchfiles
+		$found = true;
+		$current_db_version = 1;
+		while($found == true) {
+			$next_db_version = intval($current_db_version + 1);
+			$patch_filename = realpath(dirname(__FILE__).'/../').'/sql/incremental/upd_'.str_pad($next_db_version, 4, '0', STR_PAD_LEFT).'.sql';
+			if(is_file($patch_filename)) {
+				$current_db_version = $next_db_version;
+			} else {
+				$found = false;
+			}
+		}
+		$current_db_version = intval($current_db_version);
+
+
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+
+			//* Insert the server record in master DB
+			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`,`firewall_server`,`proxy_server`) VALUES (1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
+			$this->dbmaster->query($sql, $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
+			$conf['server_id'] = $this->dbmaster->insertID();
+			$conf['server_id'] = $conf['server_id'];
+
+			//* Insert the same record in the local DB
+			$sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`,`firewall_server`,`proxy_server`) VALUES (?,1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
+			$this->db->query($sql, $conf['server_id'], $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
+
+			//* username for the ispconfig user
+			$conf['mysql']['master_ispconfig_user'] = 'ispcsrv'.$conf['server_id'];
+
+			$this->grant_master_database_rights();
+
+		} else {
+			//* Insert the server, if its not a mster / slave setup
+			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`,`firewall_server`,`proxy_server`) VALUES (1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
+			$this->db->query($sql, $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
+			$conf['server_id'] = $this->db->insertID();
+			$conf['server_id'] = $conf['server_id'];
+		}
+
+
+	}
+	
+	public function detect_ips(){
+		global $conf;
+
+		exec("ip addr show | awk '/global/ { print $2 }' | cut -d '/' -f 1", $output, $retval);
+		
+		if($retval == 0){
+			if(is_array($output) && !empty($output)){
+				foreach($output as $line){
+					$line = trim($line);
+					$ip_type = '';
+					if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+						$ip_type = 'IPv4';
+					}
+					if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+						$ip_type = 'IPv6';
+					}
+					if($ip_type == '') continue;
+					if($this->db->dbHost != $this->dbmaster->dbHost){
+						$this->dbmaster->query('INSERT INTO server_ip (
+							sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
+							sys_perm_other, server_id, client_id, ip_type, ip_address,
+							virtualhost, virtualhost_port
+						) VALUES (
+							1,
+							1,
+							"riud",
+							"riud",
+							"",
+							?,
+							0,
+							?,
+							?,
+							"y",
+							"80,443"
+						)', $conf['server_id'], $ip_type, $line);
+						$server_ip_id = $this->dbmaster->insertID();
+						$this->db->query('INSERT INTO server_ip (
+							server_php_id, sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
+							sys_perm_other, server_id, client_id, ip_type, ip_address,
+							virtualhost, virtualhost_port
+						) VALUES (
+							?,
+							1,
+							1,
+							"riud",
+							"riud",
+							"",
+							?,
+							0,
+							?,
+							?,
+							"y",
+							"80,443"
+						)', $server_ip_id, $conf['server_id'], $ip_type, $line);
+					} else {
+						$this->db->query('INSERT INTO server_ip (
+							sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
+							sys_perm_other, server_id, client_id, ip_type, ip_address,
+							virtualhost, virtualhost_port
+						) VALUES (
+							1,
+							1,
+							"riud",
+							"riud",
+							"",
+							?,
+							0,
+							?,
+							?,
+							"y",
+							"80,443"
+						)', $conf['server_id'], $ip_type, $line);
+					}
+				}
+			}
+		}
+	}
+
+	public function grant_master_database_rights($verbose = false) {
+		global $conf;
+
+		/*
+		 * The following code is a little bit tricky:
+		 * * If we HAVE a master-slave - Setup then the client has to grant the rights for himself
+		 *   at the master.
+		 * * If we DO NOT have a master-slave - Setup then we have two possibilities
+		 *   1) it is a single server
+		 *   2) it is the MASTER of n clients
+		*/
+		$hosts = array();
+
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+			/*
+			 * it is a master-slave - Setup so the slave has to grant its rights in the master
+			 * database
+			 */
+
+			//* insert the ispconfig user in the remote server
+			$from_host = $conf['hostname'];
+			$from_ip = gethostbyname($conf['hostname']);
+
+			$hosts[$from_host]['user'] = $conf['mysql']['master_ispconfig_user'];
+			$hosts[$from_host]['db'] = $conf['mysql']['master_database'];
+			$hosts[$from_host]['pwd'] = $conf['mysql']['master_ispconfig_password'];
+
+			$hosts[$from_ip]['user'] = $conf['mysql']['master_ispconfig_user'];
+			$hosts[$from_ip]['db'] = $conf['mysql']['master_database'];
+			$hosts[$from_ip]['pwd'] = $conf['mysql']['master_ispconfig_password'];
+		} else{
+			/*
+			 * it is NOT a master-slave - Setup so we have to find out all clients and their
+			 * host
+			 */
+			$query = "SELECT Host, User FROM mysql.user WHERE User like 'ispcsrv%' ORDER BY User, Host";
+			$data = $this->dbmaster->queryAllRecords($query);
+			if($data === false) {
+				$this->error('Unable to get the user rights: '.$value['db'].' Error: '.$this->dbmaster->errorMessage);
+			}
+			foreach ($data as $item){
+				$hosts[$item['Host']]['user'] = $item['User'];
+				$hosts[$item['Host']]['db'] = $conf['mysql']['master_database'];
+				$hosts[$item['Host']]['pwd'] = ''; // the user already exists, so we need no pwd!
+			}
+		}
+
+		if(count($hosts) > 0) {
+			foreach($hosts as $host => $value) {
+				/*
+			 * If a pwd exists, this means, we have to add the new user (and his pwd).
+			 * if not, the user already exists and we do not need the pwd
+			 */
+				if ($value['pwd'] != ''){
+					$query = "CREATE USER ?@? IDENTIFIED BY ?";
+					if ($verbose){
+						echo "\n\n" . $query ."\n";
+					}
+					$this->dbmaster->query($query, $value['user'], $host, $value['pwd']); // ignore the error
+				}
+
+				/*
+			 *  Try to delete all rights of the user in case that it exists.
+			 *  In Case that it will not exist, do nothing (ignore the error!)
+			 */
+				$query = "REVOKE ALL PRIVILEGES, GRANT OPTION FROM ?@?";
+				if ($verbose){
+					echo "\n\n" . $query ."\n";
+				}
+				$this->dbmaster->query($query, $value['user'], $host); // ignore the error
+
+				//* Create the ISPConfig database user in the remote database
+				$query = "GRANT SELECT ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.server', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, INSERT ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.sys_log', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, UPDATE(`status`, `error`) ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.sys_datalog', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, UPDATE(`status`) ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.software_update_inst', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, UPDATE(`updated`) ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.server', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, UPDATE (`ssl`, `ssl_letsencrypt`, `ssl_request`, `ssl_cert`, `ssl_action`, `ssl_key`) ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.web_domain', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.sys_group', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, UPDATE (`action_state`, `response`) ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.sys_remoteaction', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, INSERT , DELETE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.monitor_data', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.mail_traffic', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.web_traffic', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, UPDATE, DELETE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.aps_instances', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+				
+				$query = "GRANT SELECT, DELETE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.aps_instances_settings', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, INSERT, DELETE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.web_backup', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+				$query = "GRANT SELECT, INSERT, DELETE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.mail_backup', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+				
+				$query = "GRANT SELECT, UPDATE(`dnssec_initialized`, `dnssec_info`, `dnssec_last_signed`) ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.dns_soa', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+				
+				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.ftp_traffic', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
+			}
+
+		}
+
+	}
+
+	//** writes postfix configuration files
+	public function process_postfix_config($configfile) {
+		global $conf;
+
+		$config_dir = $conf['postfix']['config_dir'].'/';
+		$full_file_name = $config_dir.$configfile;
+		//* Backup exiting file
+		if(is_file($full_file_name)) {
+			copy($full_file_name, $config_dir.$configfile.'~');
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		wf($full_file_name, $content);
+	}
+
+	public function configure_jailkit() {
+		global $conf;
+
+		$cf = $conf['jailkit'];
+		$config_dir = $cf['config_dir'];
+		$jk_init = $cf['jk_init'];
+		$jk_chrootsh = $cf['jk_chrootsh'];
+
+		if (is_dir($config_dir)) {
+			if(is_file($config_dir.'/'.$jk_init)) copy($config_dir.'/'.$jk_init, $config_dir.'/'.$jk_init.'~');
+			if(is_file($config_dir.'/'.$jk_chrootsh.'.master')) copy($config_dir.'/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh.'~');
+
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_init.'.master')) {
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_init.'.master', $config_dir.'/'.$jk_init);
+			} else {
+				copy('tpl/'.$jk_init.'.master', $config_dir.'/'.$jk_init);
+			}
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_chrootsh.'.master')) {
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh);
+			} else {
+				copy('tpl/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh);
+			}
+		}
+
+		//* help jailkit fo find its ini files
+		if(!is_link('/usr/jk_socketd.ini')) exec('ln -s /etc/jailkit/jk_socketd.ini /usr/jk_socketd.ini');
+		if(!is_link('/usr/jk_init.ini')) exec('ln -s /etc/jailkit/jk_init.ini /usr/jk_init.ini');
+
+	}
+
+	public function configure_mailman($status = 'insert') {
+		global $conf;
+
+		$config_dir = $conf['mailman']['config_dir'].'/';
+		$full_file_name = $config_dir.'mm_cfg.py';
+		//* Backup exiting file
+		if(is_file($full_file_name)) {
+			copy($full_file_name, $config_dir.'mm_cfg.py~');
+		}
+
+		// load files
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mm_cfg.py.master', 'tpl/mm_cfg.py.master');
+		$old_file = rf($full_file_name);
+
+		$old_options = array();
+		$lines = explode("\n", $old_file);
+		foreach ($lines as $line)
+		{
+			if (trim($line) != '' && substr($line, 0, 1) != '#')
+			{
+				@list($key, $value) = @explode("=", $line);
+				if (isset($value) && $value !== '')
+				{
+					$key = rtrim($key);
+					$old_options[$key] = trim($value);
+				}
+			}
+		}
+
+		$virtual_domains = '';
+		if($status == 'update')
+		{
+			// create virtual_domains list
+			$domainAll = $this->db->queryAllRecords("SELECT domain FROM mail_mailinglist GROUP BY domain");
+
+			if(is_array($domainAll)) {
+				foreach($domainAll as $domain)
+				{
+					if ($domainAll[0]['domain'] == $domain['domain'])
+						$virtual_domains .= "'".$domain['domain']."'";
+					else
+						$virtual_domains .= ", '".$domain['domain']."'";
+				}
+			}
+		}
+		else
+			$virtual_domains = "' '";
+
+		$content = str_replace('{hostname}', $conf['hostname'], $content);
+		if(!isset($old_options['DEFAULT_SERVER_LANGUAGE']) || $old_options['DEFAULT_SERVER_LANGUAGE'] == '') $old_options['DEFAULT_SERVER_LANGUAGE'] = "'en'";
+		$content = str_replace('{default_language}', $old_options['DEFAULT_SERVER_LANGUAGE'], $content);
+		$content = str_replace('{virtual_domains}', $virtual_domains, $content);
+
+		wf($full_file_name, $content);
+
+		//* Write virtual_to_transport.sh script
+		$config_dir = $conf['mailman']['config_dir'].'/';
+		$full_file_name = $config_dir.'virtual_to_transport.sh';
+
+		//* Backup exiting virtual_to_transport.sh script
+		if(is_file($full_file_name)) {
+			copy($full_file_name, $config_dir.'virtual_to_transport.sh~');
+		}
+
+		if(is_dir('/etc/mailman')) {
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/mailman-virtual_to_transport.sh')) {
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/mailman-virtual_to_transport.sh', $full_file_name);
+			} else {
+				copy('tpl/mailman-virtual_to_transport.sh', $full_file_name);
+			}
+			chgrp($full_file_name, $this->mailman_group);
+			chmod($full_file_name, 0755);
+		}
+
+		//* Create aliasaes
+		if($status == 'install') exec('/usr/lib/mailman/bin/genaliases 2>/dev/null');
+
+		if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman');
+		exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
+	}
+
+	public function get_postfix_service($service, $type) {
+		global $conf;
+
+		exec("postconf -M 2> /dev/null", $out, $ret);
+
+		if ($ret === 0) { //* with postfix >= 2.9 we can detect configured services with postconf
+			unset($out);
+			exec ("postconf -M $service/$type 2> /dev/null", $out, $ret); //* Postfix >= 2.11
+			if (!isset($out[0])) { //* try Postfix 2.9
+				exec ("postconf -M $service.$type 2> /dev/null", $out, $ret);
+			}
+			$postfix_service = @($out[0]=='')?false:true;
+        } else { //* fallback - Postfix < 2.9
+			$content = rf($conf['postfix']['config_dir'].'/master.cf');
+			$regex = "/^((?!#)".$service.".*".$type.".*)$/m"; 
+			$postfix_service = @(preg_match($regex, $content))?true:false;
+		}
+
+		return $postfix_service;
+	}
+
+	public function configure_postfix($options = '') {
+		global $conf,$autoinstall;
+		$cf = $conf['postfix'];
+		$config_dir = $cf['config_dir'];
+
+		if(!is_dir($config_dir)) {
+			$this->error("The postfix configuration directory '$config_dir' does not exist.");
+		}
+
+		//* mysql-virtual_domains.cf
+		$this->process_postfix_config('mysql-virtual_domains.cf');
+
+		//* mysql-virtual_forwardings.cf
+		$this->process_postfix_config('mysql-virtual_forwardings.cf');
+
+		//* mysql-virtual_mailboxes.cf
+		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
+
+		//* mysql-virtual_email2email.cf
+		$this->process_postfix_config('mysql-virtual_email2email.cf');
+
+		//* mysql-virtual_transports.cf
+		$this->process_postfix_config('mysql-virtual_transports.cf');
+
+		//* mysql-virtual_recipient.cf
+		$this->process_postfix_config('mysql-virtual_recipient.cf');
+
+		//* mysql-virtual_sender.cf
+		$this->process_postfix_config('mysql-virtual_sender.cf');
+
+		//* mysql-virtual_sender_login_maps.cf
+		$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
+
+		//* mysql-virtual_client.cf
+		$this->process_postfix_config('mysql-virtual_client.cf');
+
+		//* mysql-virtual_relaydomains.cf
+		$this->process_postfix_config('mysql-virtual_relaydomains.cf');
+
+		//* mysql-virtual_relayrecipientmaps.cf
+		$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
+		
+		//* mysql-virtual_outgoing_bcc.cf
+		$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
+
+		//* mysql-virtual_policy_greylist.cf
+		$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
+
+		//* mysql-virtual_gids.cf.master
+		$this->process_postfix_config('mysql-virtual_gids.cf');
+
+		//* mysql-virtual_uids.cf
+		$this->process_postfix_config('mysql-virtual_uids.cf');
+
+		//* postfix-dkim
+		$filename='tag_as_originating.re';
+		$full_file_name=$config_dir.'/'.$filename;
+		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
+		wf($full_file_name, $content);
+
+		$filename='tag_as_foreign.re';
+		$full_file_name=$config_dir.'/'.$filename;
+		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
+		wf($full_file_name, $content);
+
+		//* Changing mode and group of the new created config files.
+		caselog('chmod u=rw,g=r,o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
+			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
+		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
+			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
+
+		//* Creating virtual mail user and group
+		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
+		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
+		if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* These postconf commands will be executed on installation and update
+		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
+		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
+		unset($server_ini_rec);
+
+		//* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update
+		$rbl_list = '';
+		if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') {
+			$rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list']));
+			foreach ($rbl_hosts as $key => $value) {
+				$rbl_list .= ", reject_rbl_client ". $value;
+			}
+		}
+		unset($rbl_hosts);
+
+		//* If Postgrey is installed, configure it
+		$greylisting = '';
+		if($conf['postgrey']['installed'] == true) {
+			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
+		}
+		
+		$reject_sender_login_mismatch = '';
+		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
+			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+		}
+		unset($server_ini_array);
+		
+		$tmp = str_replace('.','\.',$conf['hostname']);
+
+		$postconf_placeholders = array('{config_dir}' => $config_dir,
+			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
+			'{vmail_userid}' => $cf['vmail_userid'],
+			'{vmail_groupid}' => $cf['vmail_groupid'],
+			'{rbl_list}' => $rbl_list,
+			'{greylisting}' => $greylisting,
+			'{reject_slm}' => $reject_sender_login_mismatch,
+			'{myhostname}' => $tmp,
+		);
+
+		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_postfix.conf.master', 'tpl/debian_postfix.conf.master');
+		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
+		$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
+
+		//* These postconf commands will be executed on installation only
+		if($this->is_update == false) {
+			$postconf_commands = array_merge($postconf_commands, array(
+					'myhostname = '.$conf['hostname'],
+					'mydestination = '.$conf['hostname'].', localhost, localhost.localdomain',
+					'mynetworks = 127.0.0.0/8 [::1]/128'
+				));
+		}
+
+		//* Create the header and body check files
+		touch($config_dir.'/header_checks');
+		touch($config_dir.'/mime_header_checks');
+		touch($config_dir.'/nested_header_checks');
+		touch($config_dir.'/body_checks');
+
+		//* Create the mailman files
+		if(!is_dir('/var/lib/mailman/data')) exec('mkdir -p /var/lib/mailman/data');
+		if(!is_file('/var/lib/mailman/data/aliases')) touch('/var/lib/mailman/data/aliases');
+		exec('postalias /var/lib/mailman/data/aliases');
+		if(!is_file('/var/lib/mailman/data/virtual-mailman')) touch('/var/lib/mailman/data/virtual-mailman');
+		exec('postmap /var/lib/mailman/data/virtual-mailman');
+		if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman');
+		exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
+
+		//* Create auxillary postfix conf files
+		$configfile = 'helo_access';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+			chmod($config_dir.'/'.$configfile.'~', 0400);
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = strtr($content, $postconf_placeholders);
+		# todo: look up this server's ip addrs and loop through each
+		# todo: look up domains hosted on this server and loop through each
+		wf($config_dir.'/'.$configfile, $content);
+
+		$configfile = 'blacklist_helo';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+			chmod($config_dir.'/'.$configfile.'~', 0400);
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = strtr($content, $postconf_placeholders);
+		wf($config_dir.'/'.$configfile, $content);
+
+		//* Make a backup copy of the main.cf file
+		copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
+
+		//* Executing the postconf commands
+		foreach($postconf_commands as $cmd) {
+			$command = "postconf -e '$cmd'";
+			caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
+		}
+
+		if(!stristr($options, 'dont-create-certs')) {
+			//* Create the SSL certificate
+			if(AUTOINSTALL){
+				$command = 'cd '.$config_dir.'; '
+					."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+			} else {
+				$command = 'cd '.$config_dir.'; '
+					.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+			}
+			exec($command);
+
+			$command = 'chmod o= '.$config_dir.'/smtpd.key';
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
+		}
+
+		//** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
+		$command = 'chmod 755  /var/run/courier/authdaemon/';
+		if(is_file('/var/run/courier/authdaemon/')) caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
+
+		//* Check maildrop service in posfix master.cf
+		$regex = "/^maildrop   unix.*pipe flags=DRhu user=vmail argv=\\/usr\\/bin\\/maildrop -d ".$cf['vmail_username']." \\$\{extension} \\$\{recipient} \\$\{user} \\$\{nexthop} \\$\{sender}/";
+		$configfile = $config_dir.'/master.cf';
+		if($this->get_postfix_service('maildrop', 'unix')) {
+			exec ("postconf -M maildrop.unix 2> /dev/null", $out, $ret);
+			$change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true;
+		} else {
+			$change_maildrop_flags = @(preg_match($regex, $configfile))?false:true;
+		}
+		if ($change_maildrop_flags) {
+			//* Change maildrop service in posfix master.cf
+			if(is_file($config_dir.'/master.cf')) {
+				copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+			}
+			if(is_file($config_dir.'/master.cf~')) {
+				chmod($config_dir.'/master.cf~', 0400);
+ 			}
+			$configfile = $config_dir.'/master.cf';
+			$content = rf($configfile);
+			$content =	str_replace('flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
+						'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
+						$content);
+			wf($configfile, $content);
+		}
+
+		//* Writing the Maildrop mailfilter file
+		$configfile = 'mailfilter';
+		if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)) {
+			copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~');
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content);
+		wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content);
+
+		//* Create the directory for the custom mailfilters
+		if(!is_dir($cf['vmail_mailbox_base'].'/mailfilters')) {
+			$command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters';
+			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		//* Chmod and chown the .mailfilter file
+		$command = 'chown '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
+		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = 'chmod 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
+		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+	}
+	
+	public function configure_saslauthd() {
+		global $conf;
+
+		//* Get saslsauthd version
+		exec('saslauthd -v 2>&1', $out);
+		$parts = explode(' ', $out[0]);
+		$saslversion = $parts[1];
+		unset($parts);
+		unset($out);
+
+		if(version_compare($saslversion , '2.1.23', '<=')) {
+			//* Configfile for saslauthd versions up to 2.1.23
+			$configfile = 'sasl_smtpd.conf';
+		} else {
+			//* Configfile for saslauthd versions 2.1.24 and newer
+			$configfile = 'sasl_smtpd2.conf';
+		}
+
+		if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf')) copy($conf['postfix']['config_dir'].'/sasl/smtpd.conf', $conf['postfix']['config_dir'].'/sasl/smtpd.conf~');
+		if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf~')) chmod($conf['postfix']['config_dir'].'/sasl/smtpd.conf~', 0400);
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
+		wf($conf['postfix']['config_dir'].'/sasl/smtpd.conf', $content);
+
+		// TODO: Chmod and chown on the config file
+
+
+		// Recursively create the spool directory
+		if(!@is_dir('/var/spool/postfix/var/run/saslauthd')) mkdir('/var/spool/postfix/var/run/saslauthd', 0755, true);
+
+		// Edit the file /etc/default/saslauthd
+		$configfile = $conf['saslauthd']['config'];
+		if(is_file($configfile)) copy($configfile, $configfile.'~');
+		if(is_file($configfile.'~')) chmod($configfile.'~', 0400);
+		$content = rf($configfile);
+		$content = str_replace('START=no', 'START=yes', $content);
+		// Debian
+		$content = str_replace('OPTIONS="-c"', 'OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"', $content);
+		// Ubuntu
+		$content = str_replace('OPTIONS="-c -m /var/run/saslauthd"', 'OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"', $content);
+		wf($configfile, $content);
+
+		// Edit the file /etc/init.d/saslauthd
+		$configfile = $conf['init_scripts'].'/'.$conf['saslauthd']['init_script'];
+		$content = rf($configfile);
+		$content = str_replace('PIDFILE=$RUN_DIR/saslauthd.pid', 'PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"', $content);
+		wf($configfile, $content);
+
+		// add the postfix user to the sasl group (at least necessary for Ubuntu 8.04 and most likely Debian Lenny as well.
+		exec('adduser postfix sasl');
+
+
+	}
+
+	public function configure_pam() {
+		global $conf;
+		$pam = $conf['pam'];
+		//* configure pam for SMTP authentication agains the ispconfig database
+		$configfile = 'pamd_smtp';
+		if(is_file($pam.'/smtp'))    copy($pam.'/smtp', $pam.'/smtp~');
+		if(is_file($pam.'/smtp~'))   chmod($pam.'/smtp~', 0400);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
+		wf($pam.'/smtp', $content);
+		// On some OSes smtp is world readable which allows for reading database information.  Removing world readable rights should have no effect.
+		if(is_file($pam.'/smtp'))    exec("chmod o= $pam/smtp");
+		chmod($pam.'/smtp', 0660);
+		chown($pam.'/smtp', 'daemon');
+		chgrp($pam.'/smtp', 'daemon');
+
+	}
+
+	public function configure_courier() {
+		global $conf;
+		$config_dir = $conf['courier']['config_dir'];
+		//* authmysqlrc
+		$configfile = 'authmysqlrc';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+		chmod($config_dir.'/'.$configfile.'~', 0400);
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+		wf($config_dir.'/'.$configfile, $content);
+
+		chmod($config_dir.'/'.$configfile, 0660);
+		chown($config_dir.'/'.$configfile, 'daemon');
+		chgrp($config_dir.'/'.$configfile, 'daemon');
+
+		//* authdaemonrc
+		$configfile = $config_dir.'/authdaemonrc';
+		if(is_file($configfile)) {
+			copy($configfile, $configfile.'~');
+		}
+		if(is_file($configfile.'~')) {
+			chmod($configfile.'~', 0400);
+		}
+		$content = rf($configfile);
+		$content = str_replace('authmodulelist="authpam"', 'authmodulelist="authmysql"', $content);
+		wf($configfile, $content);
+	}
+
+	public function configure_dovecot() {
+		global $conf;
+		
+		$virtual_transport = 'dovecot';
+
+		$configure_lmtp = false;
+		
+		// check if virtual_transport must be changed
+		if ($this->is_update) {
+			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
+			$ini_array = ini_to_array(stripslashes($tmp['config']));
+			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
+			
+			if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
+				$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+				$configure_lmtp = true;
+			}
+		}
+
+		$config_dir = $conf['postfix']['config_dir'];
+
+		//* Configure master.cf and add a line for deliver
+		if(!$this->get_postfix_service('dovecot', 'unix')) {
+ 			//* backup
+			if(is_file($config_dir.'/master.cf')){
+				copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
+			}
+			if(is_file($config_dir.'/master.cf~')){
+				chmod($config_dir.'/master.cf~2', 0400);
+			}
+			//* Configure master.cf and add a line for deliver
+			$content = rf($conf["postfix"]["config_dir"].'/master.cf');
+			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
+			af($config_dir.'/master.cf', $deliver_content);
+			unset($content);
+			unset($deliver_content);
+		}
+
+		//* Reconfigure postfix to use dovecot authentication
+		// Adding the amavisd commands to the postfix configuration
+		$postconf_commands = array (
+			'dovecot_destination_recipient_limit = 1',
+			'virtual_transport = '.$virtual_transport,
+			'smtpd_sasl_type = dovecot',
+			'smtpd_sasl_path = private/auth'
+		);
+
+		// Make a backup copy of the main.cf file
+		copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~3');
+
+		// Executing the postconf commands
+		foreach($postconf_commands as $cmd) {
+			$command = "postconf -e '$cmd'";
+			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		//* backup dovecot.conf
+		$config_dir = $conf['dovecot']['config_dir'];
+		$configfile = 'dovecot.conf';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+
+		//* Get the dovecot version
+		exec('dovecot --version', $tmp);
+		$dovecot_version = $tmp[0];
+		unset($tmp);
+
+		//* Copy dovecot configuration file
+		if(version_compare($dovecot_version,1, '<=')) {	//* Dovecot 1.x
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master')) {
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master', $config_dir.'/'.$configfile);
+			} else {
+				copy('tpl/debian_dovecot.conf.master', $config_dir.'/'.$configfile);
+			}
+		} else {	//* Dovecot 2.x
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot2.conf.master')) {
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot2.conf.master', $config_dir.'/'.$configfile);
+			} else {
+				copy('tpl/debian_dovecot2.conf.master', $config_dir.'/'.$configfile);
+			}
+			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
+			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = webmaster@localhost', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
+			if(version_compare($dovecot_version, 2.1, '<')) {
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+			}
+			if(version_compare($dovecot_version,2.2) >= 0) {
+				// Dovecot > 2.2 does not recognize !SSLv2 anymore on Debian 9
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('!SSLv2','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+			}
+		}
+
+		//* dovecot-lmtpd
+		if($configure_lmtp) {
+			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
+		}
+
+		//* dovecot-sql.conf
+		$configfile = 'dovecot-sql.conf';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+		if(is_file($config_dir.'/'.$configfile.'~')) chmod($config_dir.'/'.$configfile.'~', 0400);
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot-sql.conf.master', 'tpl/debian_dovecot-sql.conf.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		# enable iterate_query for dovecot2
+		if(version_compare($dovecot_version,2, '>=')) {
+			$content = str_replace('# iterate_query', 'iterate_query', $content);
+		}
+		wf($config_dir.'/'.$configfile, $content);
+
+		chmod($config_dir.'/'.$configfile, 0600);
+		chown($config_dir.'/'.$configfile, 'root');
+		chgrp($config_dir.'/'.$configfile, 'root');
+		
+		// Dovecot shall ignore mounts in website directory
+		if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null");
+
+	}
+
+	public function configure_amavis() {
+		global $conf;
+
+		// amavisd user config file
+		$configfile = 'amavisd_user_config';
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) copy($conf['amavis']['config_dir'].'/conf.d/50-user', $conf['amavis']['config_dir'].'/50-user~');
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
+		wf($conf['amavis']['config_dir'].'/conf.d/50-user', $content);
+		chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
+
+		// TODO: chmod and chown on the config file
+
+
+		// Adding the amavisd commands to the postfix configuration
+		// Add array for no error in foreach and maybe future options
+		$postconf_commands = array ();
+
+		// Check for amavisd -> pure webserver with postfix for mailing without antispam
+		if ($conf['amavis']['installed']) {
+			$postconf_commands[] = 'content_filter = amavis:[127.0.0.1]:10024';
+			$postconf_commands[] = 'receive_override_options = no_address_mappings';
+		}
+
+		// Make a backup copy of the main.cf file
+		copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~2');
+
+		// Executing the postconf commands
+		foreach($postconf_commands as $cmd) {
+			$command = "postconf -e '$cmd'";
+			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		$config_dir = $conf['postfix']['config_dir'];
+
+		// Adding amavis-services to the master.cf file if the service does not already exists
+		$add_amavis = !$this->get_postfix_service('amavis','unix');
+		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
+		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
+		//*TODO: check templates against existing postfix-services to make sure we use the template
+
+		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
+			//* backup master.cf
+			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+			// adjust amavis-config
+			if($add_amavis) {
+				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
+				af($config_dir.'/master.cf', $content);
+				unset($content);
+			}
+			if ($add_amavis_10025) {
+				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
+				af($config_dir.'/master.cf', $content);
+				unset($content);
+			}
+			if ($add_amavis_10027) {
+				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
+				af($config_dir.'/master.cf', $content);
+				unset($content);
+    		}
+		}
+
+		// Add the clamav user to the amavis group
+		exec('adduser clamav amavis');
+		// get shell-group for amavis
+		$amavis_group=exec('grep -o "^amavis:\|^vscan:" /etc/group');
+		if(!empty($amavis_group)) {
+			$amavis_group=rtrim($amavis_group, ":");
+		}
+		// get shell-user for amavis
+		$amavis_user=exec('grep -o "^amavis:\|^vscan:" /etc/passwd');
+		if(!empty($amavis_user)) {
+			$amavis_user=rtrim($amavis_user, ":");
+		}
+
+		// Create the director for DKIM-Keys
+		if(!is_dir('/var/lib/amavis')) mkdir('/var/lib/amavis', 0750, true);
+		if(!empty($amavis_user)) exec('chown '.$amavis_user.' /var/lib/amavis');
+		if(!empty($amavis_group)) exec('chgrp '.$amavis_group.' /var/lib/amavis');
+		if(!is_dir('/var/lib/amavis/dkim')) mkdir('/var/lib/amavis/dkim', 0750);
+		if(!empty($amavis_user)) exec('chown -R '.$amavis_user.' /var/lib/amavis/dkim');
+		if(!empty($amavis_group)) exec('chgrp -R '.$amavis_group.' /var/lib/amavis/dkim');
+
+	}
+
+	public function configure_spamassassin() {
+		global $conf;
+
+		//* Enable spamasasssin on debian and ubuntu
+		$configfile = '/etc/default/spamassassin';
+		if(is_file($configfile)) {
+			copy($configfile, $configfile.'~');
+		}
+		$content = rf($configfile);
+		$content = str_replace('ENABLED=0', 'ENABLED=1', $content);
+		wf($configfile, $content);
+	}
+
+	public function configure_getmail() {
+		global $conf;
+
+		$config_dir = $conf['getmail']['config_dir'];
+
+		if(!@is_dir($config_dir)) mkdir(escapeshellcmd($config_dir), 0700, true);
+
+		$command = 'useradd -d '.$config_dir.' getmail';
+		if(!is_user('getmail')) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = "chown -R getmail $config_dir";
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = "chmod -R 700 $config_dir";
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+	}
+
+
+	public function configure_pureftpd() {
+		global $conf;
+
+		$config_dir = $conf['pureftpd']['config_dir'];
+
+		//* configure pure-ftpd for MySQL authentication against the ispconfig database
+		$configfile = 'db/mysql.conf';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+		if(is_file($config_dir.'/'.$configfile.'~')) {
+			chmod($config_dir.'/'.$configfile.'~', 0400);
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/pureftpd_mysql.conf.master', 'tpl/pureftpd_mysql.conf.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		wf($config_dir.'/'.$configfile, $content);
+		chmod($config_dir.'/'.$configfile, 0600);
+		chown($config_dir.'/'.$configfile, 'root');
+		chgrp($config_dir.'/'.$configfile, 'root');
+		// **enable chrooting
+		//exec('mkdir -p '.$config_dir.'/conf/ChrootEveryone');
+		exec('echo "yes" > '.$config_dir.'/conf/ChrootEveryone');
+		exec('echo "yes" > '.$config_dir.'/conf/BrokenClientsCompatibility');
+		exec('echo "yes" > '.$config_dir.'/conf/DisplayDotFiles');
+
+		if(is_file('/etc/default/pure-ftpd-common')) {
+			replaceLine('/etc/default/pure-ftpd-common', 'STANDALONE_OR_INETD=inetd', 'STANDALONE_OR_INETD=standalone', 1, 0);
+			replaceLine('/etc/default/pure-ftpd-common', 'VIRTUALCHROOT=false', 'VIRTUALCHROOT=true', 1, 0);
+		}
+
+		if(is_file('/etc/inetd.conf')) {
+			replaceLine('/etc/inetd.conf', '/usr/sbin/pure-ftpd-wrapper', '#ftp     stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper', 0, 0);
+			exec($this->getinitcommand('openbsd-inetd', 'restart'));
+			//if(is_file($conf['init_scripts'].'/'.'openbsd-inetd')) exec($conf['init_scripts'].'/'.'openbsd-inetd restart');
+		}
+
+		if(!is_file('/etc/pure-ftpd/conf/DontResolve')) exec('echo "yes" > /etc/pure-ftpd/conf/DontResolve');
+	}
+
+	public function configure_mydns() {
+		global $conf;
+
+		// configure pam for SMTP authentication agains the ispconfig database
+		$configfile = 'mydns.conf';
+		if(is_file($conf['mydns']['config_dir'].'/'.$configfile)) copy($conf['mydns']['config_dir'].'/'.$configfile, $conf['mydns']['config_dir'].'/'.$configfile.'~');
+		if(is_file($conf['mydns']['config_dir'].'/'.$configfile.'~')) chmod($conf['mydns']['config_dir'].'/'.$configfile.'~', 0400);
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		wf($conf['mydns']['config_dir'].'/'.$configfile, $content);
+		chmod($conf['mydns']['config_dir'].'/'.$configfile, 0600);
+		chown($conf['mydns']['config_dir'].'/'.$configfile, 'root');
+		chgrp($conf['mydns']['config_dir'].'/'.$configfile, 'root');
+
+	}
+
+	public function configure_powerdns() {
+		global $conf;
+
+		//* Create the database
+		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['powerdns']['database'], $conf['mysql']['charset'])) {
+			$this->error('Unable to create MySQL database: '.$conf['powerdns']['database'].'.');
+		}
+
+		//* Create the ISPConfig database user in the local database
+		$query = "GRANT ALL ON ?? TO ?@'localhost'";
+		if(!$this->db->query($query, $conf['powerdns']['database'] . '.*', $conf['mysql']['ispconfig_user'])) {
+			$this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage);
+		}
+
+		//* load the powerdns databse dump
+		if($conf['mysql']['admin_password'] == '') {
+			caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null",
+				__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql');
+		} else {
+			caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null",
+				__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql');
+		}
+
+		//* Create the powerdns config file
+		$configfile = 'pdns.local';
+		if(is_file($conf['powerdns']['config_dir'].'/'.$configfile)) copy($conf['powerdns']['config_dir'].'/'.$configfile, $conf['powerdns']['config_dir'].'/'.$configfile.'~');
+		if(is_file($conf['powerdns']['config_dir'].'/'.$configfile.'~')) chmod($conf['powerdns']['config_dir'].'/'.$configfile.'~', 0400);
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{powerdns_database}', $conf['powerdns']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+		wf($conf['powerdns']['config_dir'].'/'.$configfile, $content);
+		chmod($conf['powerdns']['config_dir'].'/'.$configfile, 0600);
+		chown($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
+		chgrp($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
+
+
+	}
+	
+	//** writes bind configuration files
+	public function process_bind_file($configfile, $target='/', $absolute=false) {
+		global $conf;
+
+		if ($absolute) $full_file_name = $target.$configfile;
+		else $full_file_name = $conf['ispconfig_install_dir'].$target.$configfile;
+		
+		//* Backup exiting file
+		if(is_file($full_file_name)) {
+			copy($full_file_name, $config_dir.$configfile.'~');
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_ispconfig_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
+		$content = str_replace('{ispconfig_install_dir}', $conf['ispconfig_install_dir'], $content);
+		$content = str_replace('{dnssec_conffile}', $conf['ispconfig_install_dir'].'/server/scripts/dnssec-config.sh', $content);
+		wf($full_file_name, $content);
+	}
+
+	public function configure_bind() {
+		global $conf;
+
+		//* Check if the zonefile directory has a slash at the end
+		$content=$conf['bind']['bind_zonefiles_dir'];
+		if(substr($content, -1, 1) != '/') {
+			$content .= '/';
+		}
+
+		//* Create the slave subdirectory
+		$content .= 'slave';
+		if(!@is_dir($content)) mkdir($content, 02770, true);
+
+		//* Chown the slave subdirectory to $conf['bind']['bind_user']
+		chown($content, $conf['bind']['bind_user']);
+		chgrp($content, $conf['bind']['bind_group']);
+		chmod($content, 02770);
+		
+		//* Install scripts for dnssec implementation
+		$this->process_bind_file('named.conf.options', '/etc/bind/', true); //TODO replace hardcoded path
+	}
+
+
+    public function configure_xmpp($options = '') {
+        global $conf;
+
+        if($conf['xmpp']['installed'] == false) return;
+        //* Create the logging directory for xmpp server
+        if(!@is_dir('/var/log/metronome')) mkdir('/var/log/metronome', 0755, true);
+        chown('/var/log/metronome', 'metronome');
+        if(!@is_dir('/var/run/metronome')) mkdir('/var/run/metronome', 0755, true);
+        chown('/var/run/metronome', 'metronome');
+        if(!@is_dir('/var/lib/metronome')) mkdir('/var/lib/metronome', 0755, true);
+        chown('/var/lib/metronome', 'metronome');
+        if(!@is_dir('/etc/metronome/hosts')) mkdir('/etc/metronome/hosts', 0755, true);
+        if(!@is_dir('/etc/metronome/status')) mkdir('/etc/metronome/status', 0755, true);
+        unlink('/etc/metronome/metronome.cfg.lua');
+
+        $row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $conf["server_id"]);
+        $server_name = $row["server_name"];
+
+        $tpl = new tpl('metronome_conf_main.master');
+        wf('/etc/metronome/metronome.cfg.lua', $tpl->grab());
+        unset($tpl);
+
+        $tpl = new tpl('metronome_conf_global.master');
+        $tpl->setVar('xmpp_admins','');
+        wf('/etc/metronome/global.cfg.lua', $tpl->grab());
+        unset($tpl);
+
+        // Copy isp libs
+        if(!@is_dir('/usr/lib/metronome/isp-modules')) mkdir('/usr/lib/metronome/isp-modules', 0755, true);
+        caselog('cp -rf apps/metronome_libs/* /usr/lib/metronome/isp-modules/', __FILE__, __LINE__);
+        caselog('chmod 755 /usr/lib/metronome/isp-modules/mod_auth_external/authenticate_isp.sh', __FILE__, __LINE__);
+        // Process db config
+        $full_file_name = '/usr/lib/metronome/isp-modules/mod_auth_external/db_conf.inc.php';
+        $content = rf($full_file_name);
+        $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+        $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+        $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+        $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
+        $content = str_replace('{server_id}', $conf['server_id'], $content);
+        wf($full_file_name, $content);
+
+        if(!stristr($options, 'dont-create-certs')){
+            // Create SSL Certificate for localhost
+            // Ensure no line is left blank
+			echo "writing new private key to 'localhost.key'\n-----\n";
+			$ssl_country = $this->free_query('Country Name (2 letter code)', 'AU','ssl_cert_country');
+            $ssl_locality = $this->free_query('Locality Name (eg, city)', 'City Name','ssl_cert_locality');
+            $ssl_organisation = $this->free_query('Organization Name (eg, company)', 'Internet Widgits Pty Ltd','ssl_cert_organisation');
+            $ssl_organisation_unit = $this->free_query('Organizational Unit Name (eg, section)', 'Infrastructure','ssl_cert_organisation_unit');
+            $ssl_domain = $this->free_query('Common Name (e.g. server FQDN or YOUR name)', $conf['hostname'],'ssl_cert_common_name');
+            $ssl_email = $this->free_query('Email Address', 'hostmaster@'.$conf['hostname'],'ssl_cert_email');
+
+            $tpl = new tpl('metronome_conf_ssl.master');
+            $tpl->setVar('ssl_country',$ssl_country);
+            $tpl->setVar('ssl_locality',$ssl_locality);
+            $tpl->setVar('ssl_organisation',$ssl_organisation);
+            $tpl->setVar('ssl_organisation_unit',$ssl_organisation_unit);
+            $tpl->setVar('domain',$ssl_domain);
+            $tpl->setVar('ssl_email',$ssl_email);
+            wf('/etc/metronome/certs/localhost.cnf', $tpl->grab());
+            unset($tpl);
+            // Generate new key, csr and cert
+            exec("(cd /etc/metronome/certs && make localhost.key)");
+            exec("(cd /etc/metronome/certs && make localhost.csr)");
+            exec("(cd /etc/metronome/certs && make localhost.cert)");
+            exec('chmod 0400 /etc/metronome/certs/localhost.key');
+            exec('chown metronome /etc/metronome/certs/localhost.key');
+
+			echo "IMPORTANT:\n";
+			echo "Localhost Key, Csr and a self-signed Cert have been saved to /etc/metronome/certs\n";
+			echo "In order to work with all clients, the server must have a trusted certificate, so use the Csr\n";
+			echo "to get a trusted certificate from your CA or replace Key and Cert with already signed files for\n";
+			echo "your domain. Clients like Pidgin dont allow to use untrusted self-signed certificates.\n";
+			echo "\n";
+
+        }else{
+            /*
+			echo "-----\n";
+            echo "Metronome XMPP SSL server certificate is not renewed. Run the following command manual as root to recreate it:\n";
+            echo "# (cd /etc/metronome/certs && make localhost.key && make localhost.csr && make localhost.cert && chmod 0400 localhost.key && chown metronome localhost.key)\n";
+            echo "-----\n";
+			*/
+        }
+
+        // Copy init script
+        caselog('cp -f apps/metronome-init /etc/init.d/metronome', __FILE__, __LINE__);
+        caselog('chmod u+x /etc/init.d/metronome', __FILE__, __LINE__);
+        caselog('update-rc.d metronome defaults', __FILE__, __LINE__);
+
+        exec($this->getinitcommand($conf['xmpp']['init_script'], 'restart'));
+    }
+
+
+	public function configure_apache() {
+		global $conf;
+
+		if($conf['apache']['installed'] == false) return;
+		//* Create the logging directory for the vhost logfiles
+		if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
+
+		if(is_file('/etc/suphp/suphp.conf')) {
+			replaceLine('/etc/suphp/suphp.conf', 'php="php:/usr/bin', 'x-httpd-suphp="php:/usr/bin/php-cgi"', 0);
+			//replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0);
+			replaceLine('/etc/suphp/suphp.conf', 'umask=00', 'umask=0022', 0);
+		}
+
+		if(is_file('/etc/apache2/sites-enabled/000-default')) {
+			replaceLine('/etc/apache2/sites-available/000-default', 'NameVirtualHost *', 'NameVirtualHost *:80', 1, 0);
+			replaceLine('/etc/apache2/sites-available/000-default', '<VirtualHost *>', '<VirtualHost *:80>', 1, 0);
+		}
+
+		if(is_file('/etc/apache2/ports.conf')) {
+			// add a line "Listen 443" to ports conf if line does not exist
+			replaceLine('/etc/apache2/ports.conf', 'Listen 443', 'Listen 443', 1);
+			
+			// Comment out the namevirtualhost lines, as they were added by ispconfig in ispconfig.conf file again
+			replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:80', '# NameVirtualHost *:80', 1);
+			replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:443', '# NameVirtualHost *:443', 1);
+		}
+		
+		if(is_file('/etc/apache2/mods-available/fcgid.conf')) {
+			// add or modify the parameters for fcgid.conf
+			replaceLine('/etc/apache2/mods-available/fcgid.conf','MaxRequestLen','MaxRequestLen 15728640',1);
+		}
+
+		if(is_file('/etc/apache2/apache.conf')) {
+			if(hasLine('/etc/apache2/apache.conf', 'Include sites-enabled/', 1) == false) {
+				if(hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.conf', 1) == false && hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/', 1) == false) {
+					replaceLine('/etc/apache2/apache.conf', 'Include sites-enabled/', 'Include sites-enabled/', 1, 1);
+				} elseif(hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.vhost', 1) == false) {
+					replaceLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.vhost', 'IncludeOptional sites-enabled/', 1, 1);
+				}
+			}
+		}
+		
+		if(is_file('/etc/apache2/apache2.conf')) {
+			if(hasLine('/etc/apache2/apache2.conf', 'Include sites-enabled/', 1) == false && hasLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/', 1) == false) {
+				if(hasLine('/etc/apache2/apache2.conf', 'Include sites-enabled/*.conf', 1) == true) {
+					replaceLine('/etc/apache2/apache2.conf', 'Include sites-enabled/*.conf', 'Include sites-enabled/', 1, 1);
+				} elseif(hasLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/*.conf', 1) == true) {
+					replaceLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/*.conf', 'IncludeOptional sites-enabled/', 1, 1);
+				}
+			}
+		}
+
+		//* Copy the ISPConfig configuration include
+		$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
+		$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
+
+		$tpl = new tpl('apache_ispconfig.conf.master');
+		$tpl->setVar('apache_version',getapacheversion());
+		
+		if($this->is_update == true) {
+			$tpl->setVar('logging',get_logging_state());
+		} else {
+			$tpl->setVar('logging','yes');
+		}
+		
+		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
+		$ip_addresses = array();
+		
+		if(is_array($records) && count($records) > 0) {
+			foreach($records as $rec) {
+				if($rec['ip_type'] == 'IPv6') {
+					$ip_address = '['.$rec['ip_address'].']';
+				} else {
+					$ip_address = $rec['ip_address'];
+				}
+				$ports = explode(',', $rec['virtualhost_port']);
+				if(is_array($ports)) {
+					foreach($ports as $port) {
+						$port = intval($port);
+						if($port > 0 && $port < 65536 && $ip_address != '') {
+							$ip_addresses[] = array('ip_address' => $ip_address, 'port' => $port);
+						}
+					}
+				}
+			}
+		}
+		
+		if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses);
+		
+		wf($vhost_conf_dir.'/ispconfig.conf', $tpl->grab());
+		unset($tpl);
+
+		if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.conf')) {
+			symlink($vhost_conf_dir.'/ispconfig.conf', $vhost_conf_enabled_dir.'/000-ispconfig.conf');
+		}
+
+		//* make sure that webalizer finds its config file when it is directly in /etc
+		if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
+			mkdir('/etc/webalizer');
+			symlink('/etc/webalizer.conf', '/etc/webalizer/webalizer.conf');
+		}
+
+		if(is_file('/etc/webalizer/webalizer.conf')) {
+			// Change webalizer mode to incremental
+			replaceLine('/etc/webalizer/webalizer.conf', '#IncrementalName', 'IncrementalName webalizer.current', 0, 0);
+			replaceLine('/etc/webalizer/webalizer.conf', '#Incremental', 'Incremental     yes', 0, 0);
+			replaceLine('/etc/webalizer/webalizer.conf', '#HistoryName', 'HistoryName     webalizer.hist', 0, 0);
+		}
+
+		// Check the awsatst script
+		if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
+		if(!file_exists('/usr/share/awstats/tools/awstats_buildstaticpages.pl') && file_exists('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl')) symlink('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl', '/usr/share/awstats/tools/awstats_buildstaticpages.pl');
+		if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local', 'LogFormat=4', 'LogFormat=1', 0, 1);
+
+		//* add a sshusers group
+		$command = 'groupadd sshusers';
+		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+	}
+
+	public function configure_nginx(){
+		global $conf;
+
+		if($conf['nginx']['installed'] == false) return;
+		//* Create the logging directory for the vhost logfiles
+		if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
+
+		//* make sure that webalizer finds its config file when it is directly in /etc
+		if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
+			mkdir('/etc/webalizer');
+			symlink('/etc/webalizer.conf', '/etc/webalizer/webalizer.conf');
+		}
+
+		if(is_file('/etc/webalizer/webalizer.conf')) {
+			// Change webalizer mode to incremental
+			replaceLine('/etc/webalizer/webalizer.conf', '#IncrementalName', 'IncrementalName webalizer.current', 0, 0);
+			replaceLine('/etc/webalizer/webalizer.conf', '#Incremental', 'Incremental     yes', 0, 0);
+			replaceLine('/etc/webalizer/webalizer.conf', '#HistoryName', 'HistoryName     webalizer.hist', 0, 0);
+		}
+
+		// Check the awsatst script
+		if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
+		if(!file_exists('/usr/share/awstats/tools/awstats_buildstaticpages.pl') && file_exists('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl')) symlink('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl', '/usr/share/awstats/tools/awstats_buildstaticpages.pl');
+		if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local', 'LogFormat=4', 'LogFormat=1', 0, 1);
+
+		//* add a sshusers group
+		$command = 'groupadd sshusers';
+		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		
+		// add anonymized log option to nginxx.conf file
+		$nginx_conf_file = $conf['nginx']['config_dir'].'/nginx.conf';
+		if(is_file($nginx_conf_file)) {
+			$tmp = file_get_contents($nginx_conf_file);
+			if(!stristr($tmp, 'log_format anonymized')) {
+				copy($nginx_conf_file,$nginx_conf_file.'~');
+				replaceLine($nginx_conf_file, 'http {', "http {\n\n".file_get_contents('tpl/nginx_anonlog.master'), 0, 0);
+			}
+		}
+		
+	}
+
+	public function configure_fail2ban() {
+		// To Do
+	}
+
+	public function configure_squid()
+	{
+		global $conf;
+		$row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $conf["server_id"]);
+		$ip_address = gethostbyname($row["server_name"]);
+		$server_name = $row["server_name"];
+
+		$configfile = 'squid.conf';
+		if(is_file($conf["squid"]["config_dir"].'/'.$configfile)) copy($conf["squid"]["config_dir"].'/'.$configfile, $conf["squid"]["config_dir"].'/'.$configfile.'~');
+		if(is_file($conf["squid"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["squid"]["config_dir"].'/'.$configfile.'~');
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/".$configfile.".master");
+		$content = str_replace('{server_name}', $server_name, $content);
+		$content = str_replace('{ip_address}', $ip_address, $content);
+		$content = str_replace('{config_dir}', $conf['squid']['config_dir'], $content);
+		wf($conf["squid"]["config_dir"].'/'.$configfile, $content);
+		exec('chmod 600 '.$conf["squid"]["config_dir"].'/'.$configfile);
+		exec('chown root:root '.$conf["squid"]["config_dir"].'/'.$configfile);
+	}
+
+	public function configure_ufw_firewall()
+	{
+		if($this->is_update == false) {
+			$configfile = 'ufw.conf';
+			if(is_file('/etc/ufw/ufw.conf')) copy('/etc/ufw/ufw.conf', '/etc/ufw/ufw.conf~');
+			$content = rf("tpl/".$configfile.".master");
+			wf('/etc/ufw/ufw.conf', $content);
+			exec('chmod 600 /etc/ufw/ufw.conf');
+			exec('chown root:root /etc/ufw/ufw.conf');
+		}
+	}
+
+	public function configure_bastille_firewall() {
+		global $conf;
+
+		$dist_init_scripts = $conf['init_scripts'];
+
+		if(is_dir('/etc/Bastille.backup')) caselog('rm -rf /etc/Bastille.backup', __FILE__, __LINE__);
+		if(is_dir('/etc/Bastille')) caselog('mv -f /etc/Bastille /etc/Bastille.backup', __FILE__, __LINE__);
+		@mkdir('/etc/Bastille', 0700);
+		if(is_dir('/etc/Bastille.backup/firewall.d')) caselog('cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/', __FILE__, __LINE__);
+		if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/bastille-firewall.cfg.master')) {
+			caselog('cp -f ' . $conf['ispconfig_install_dir'].'/server/conf-custom/install/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
+		} else {
+			caselog('cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
+		}
+		caselog('chmod 644 /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
+		$content = rf('/etc/Bastille/bastille-firewall.cfg');
+		$content = str_replace('{DNS_SERVERS}', '', $content);
+
+		$tcp_public_services = '';
+		$udp_public_services = '';
+
+		$row = $this->db->queryOneRecord('SELECT * FROM ?? WHERE server_id = ?', $conf["mysql"]["database"] . '.firewall', $conf['server_id']);
+
+		if(trim($row['tcp_port']) != '' || trim($row['udp_port']) != '') {
+			$tcp_public_services = trim(str_replace(',', ' ', $row['tcp_port']));
+			$udp_public_services = trim(str_replace(',', ' ', $row['udp_port']));
+		} else {
+			$tcp_public_services = '21 22 25 53 80 110 143 443 3306 8080 10000';
+			$udp_public_services = '53';
+		}
+
+		if(!stristr($tcp_public_services, $conf['apache']['vhost_port'])) {
+			$tcp_public_services .= ' '.intval($conf['apache']['vhost_port']);
+			if($row['tcp_port'] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ? WHERE server_id = ?", ',' . intval($conf['apache']['vhost_port']), $conf['server_id']);
+		}
+
+		$content = str_replace('{TCP_PUBLIC_SERVICES}', $tcp_public_services, $content);
+		$content = str_replace('{UDP_PUBLIC_SERVICES}', $udp_public_services, $content);
+
+		wf('/etc/Bastille/bastille-firewall.cfg', $content);
+
+		if(is_file($dist_init_scripts.'/bastille-firewall')) caselog('mv -f '.$dist_init_scripts.'/bastille-firewall '.$dist_init_scripts.'/bastille-firewall.backup', __FILE__, __LINE__);
+		caselog('cp -f apps/bastille-firewall '.$dist_init_scripts, __FILE__, __LINE__);
+		caselog('chmod 700 '.$dist_init_scripts.'/bastille-firewall', __FILE__, __LINE__);
+
+		if(is_file('/sbin/bastille-ipchains')) caselog('mv -f /sbin/bastille-ipchains /sbin/bastille-ipchains.backup', __FILE__, __LINE__);
+		caselog('cp -f apps/bastille-ipchains /sbin', __FILE__, __LINE__);
+		caselog('chmod 700 /sbin/bastille-ipchains', __FILE__, __LINE__);
+
+		if(is_file('/sbin/bastille-netfilter')) caselog('mv -f /sbin/bastille-netfilter /sbin/bastille-netfilter.backup', __FILE__, __LINE__);
+		caselog('cp -f apps/bastille-netfilter /sbin', __FILE__, __LINE__);
+		caselog('chmod 700 /sbin/bastille-netfilter', __FILE__, __LINE__);
+
+		if(!@is_dir('/var/lock/subsys')) caselog('mkdir /var/lock/subsys', __FILE__, __LINE__);
+
+		exec('which ipchains &> /dev/null', $ipchains_location, $ret_val);
+		if(!is_file('/sbin/ipchains') && !is_link('/sbin/ipchains') && $ret_val == 0) phpcaselog(@symlink(shell_exec('which ipchains'), '/sbin/ipchains'), 'create symlink', __FILE__, __LINE__);
+		unset($ipchains_location);
+		exec('which iptables &> /dev/null', $iptables_location, $ret_val);
+		if(!is_file('/sbin/iptables') && !is_link('/sbin/iptables') && $ret_val == 0) phpcaselog(@symlink(trim(shell_exec('which iptables')), '/sbin/iptables'), 'create symlink', __FILE__, __LINE__);
+		unset($iptables_location);
+
+	}
+
+	public function configure_vlogger() {
+		global $conf;
+
+		//** Configure vlogger to use traffic logging to mysql (master) db
+		$configfile = 'vlogger-dbi.conf';
+		if(is_file($conf['vlogger']['config_dir'].'/'.$configfile)) copy($conf['vlogger']['config_dir'].'/'.$configfile, $conf['vlogger']['config_dir'].'/'.$configfile.'~');
+		if(is_file($conf['vlogger']['config_dir'].'/'.$configfile.'~')) chmod($conf['vlogger']['config_dir'].'/'.$configfile.'~', 0400);
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+			$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
+			$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
+			$content = str_replace('{mysql_server_database}', $conf['mysql']['master_database'], $content);
+			$content = str_replace('{mysql_server_ip}', $conf['mysql']['master_host'], $content);
+		} else {
+			$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+			$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+			$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+			$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
+		}
+		wf($conf['vlogger']['config_dir'].'/'.$configfile, $content);
+		chmod($conf['vlogger']['config_dir'].'/'.$configfile, 0600);
+		chown($conf['vlogger']['config_dir'].'/'.$configfile, 'root');
+		chgrp($conf['vlogger']['config_dir'].'/'.$configfile, 'root');
+
+	}
+
+	public function configure_apps_vhost() {
+		global $conf;
+
+		//* Create the ispconfig apps vhost user and group
+		if($conf['apache']['installed'] == true){
+			$apps_vhost_user = escapeshellcmd($conf['web']['apps_vhost_user']);
+			$apps_vhost_group = escapeshellcmd($conf['web']['apps_vhost_group']);
+			$install_dir = escapeshellcmd($conf['web']['website_basedir'].'/apps');
+
+			$command = 'groupadd '.$apps_vhost_user;
+			if(!is_group($apps_vhost_group)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+			$command = 'useradd -g '.$apps_vhost_group.' -d '.$install_dir.' '.$apps_vhost_group;
+			if(!is_user($apps_vhost_user)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+
+			//$command = 'adduser '.$conf['apache']['user'].' '.$apps_vhost_group;
+			$command = 'usermod -a -G '.$apps_vhost_group.' '.$conf['apache']['user'];
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+			if(!@is_dir($install_dir)){
+				mkdir($install_dir, 0755, true);
+			} else {
+				chmod($install_dir, 0755);
+			}
+			chown($install_dir, $apps_vhost_user);
+			chgrp($install_dir, $apps_vhost_group);
+
+			//* Copy the apps vhost file
+			$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
+			$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
+			$apps_vhost_servername = ($conf['web']['apps_vhost_servername'] == '')?'':'ServerName '.$conf['web']['apps_vhost_servername'];
+			
+			//* Get the apps vhost port
+			if($this->is_update == true) {
+				$conf['web']['apps_vhost_port'] = get_apps_vhost_port_number();
+			}
+
+			// Dont just copy over the virtualhost template but add some custom settings
+			$tpl = new tpl('apache_apps.vhost.master');
+			$tpl->setVar('apps_vhost_ip',$conf['web']['apps_vhost_ip']);
+			$tpl->setVar('apps_vhost_port',$conf['web']['apps_vhost_port']);
+			$tpl->setVar('apps_vhost_dir',$conf['web']['website_basedir'].'/apps');
+			$tpl->setVar('apps_vhost_basedir',$conf['web']['website_basedir']);
+			$tpl->setVar('apps_vhost_servername',$apps_vhost_servername);
+			$tpl->setVar('apache_version',getapacheversion());
+			if($this->is_update == true) {
+				$tpl->setVar('logging',get_logging_state());
+			} else {
+				$tpl->setVar('logging','yes');
+			}
+
+
+			// comment out the listen directive if port is 80 or 443
+			if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) {
+				$tpl->setVar('vhost_port_listen','#');
+			} else {
+				$tpl->setVar('vhost_port_listen','');
+			}
+
+			wf($vhost_conf_dir.'/apps.vhost', $tpl->grab());
+			unset($tpl);
+
+			//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
+			//* and create the symlink
+			if(@is_link($vhost_conf_enabled_dir.'/apps.vhost')) unlink($vhost_conf_enabled_dir.'/apps.vhost');
+			if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost') && @is_file($vhost_conf_dir.'/apps.vhost')) {
+				@symlink($vhost_conf_dir.'/apps.vhost', $vhost_conf_enabled_dir.'/000-apps.vhost');
+			}
+
+			if(!is_file($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter')) {
+				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_apps_fcgi_starter.master', 'tpl/apache_apps_fcgi_starter.master');
+				$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
+				$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
+				mkdir($conf['web']['website_basedir'].'/php-fcgi-scripts/apps', 0755, true);
+				//copy('tpl/apache_apps_fcgi_starter.master',$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
+				wf($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter', $content);
+				exec('chmod +x '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
+				exec('chown -R ispapps:ispapps '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps');
+
+			}
+		}
+		if($conf['nginx']['installed'] == true){
+			$apps_vhost_user = escapeshellcmd($conf['web']['apps_vhost_user']);
+			$apps_vhost_group = escapeshellcmd($conf['web']['apps_vhost_group']);
+			$install_dir = escapeshellcmd($conf['web']['website_basedir'].'/apps');
+
+			$command = 'groupadd '.$apps_vhost_user;
+			if(!is_group($apps_vhost_group)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+			$command = 'useradd -g '.$apps_vhost_group.' -d '.$install_dir.' '.$apps_vhost_group;
+			if(!is_user($apps_vhost_user)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+
+			//$command = 'adduser '.$conf['nginx']['user'].' '.$apps_vhost_group;
+			$command = 'usermod -a -G '.$apps_vhost_group.' '.$conf['nginx']['user'];
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+			if(!@is_dir($install_dir)){
+				mkdir($install_dir, 0755, true);
+			} else {
+				chmod($install_dir, 0755);
+			}
+			chown($install_dir, $apps_vhost_user);
+			chgrp($install_dir, $apps_vhost_group);
+
+			//* Copy the apps vhost file
+			$vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
+			$vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
+			$apps_vhost_servername = ($conf['web']['apps_vhost_servername'] == '')?'_':$conf['web']['apps_vhost_servername'];
+
+			// Dont just copy over the virtualhost template but add some custom settings
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_apps.vhost.master', 'tpl/nginx_apps.vhost.master');
+
+			if($conf['web']['apps_vhost_ip'] == '_default_'){
+				$apps_vhost_ip = '';
+			} else {
+				$apps_vhost_ip = $conf['web']['apps_vhost_ip'].':';
+			}
+
+			$socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
+			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
+			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
+			$fpm_socket = $socket_dir.'apps.sock';
+			$cgi_socket = escapeshellcmd($conf['nginx']['cgi_socket']);
+
+			$content = str_replace('{apps_vhost_ip}', $apps_vhost_ip, $content);
+			$content = str_replace('{apps_vhost_port}', $conf['web']['apps_vhost_port'], $content);
+			$content = str_replace('{apps_vhost_dir}', $conf['web']['website_basedir'].'/apps', $content);
+			$content = str_replace('{apps_vhost_servername}', $apps_vhost_servername, $content);
+			//$content = str_replace('{fpm_port}', ($conf['nginx']['php_fpm_start_port']+1), $content);
+			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
+			$content = str_replace('{cgi_socket}', $cgi_socket, $content);
+
+			if(	file_exists('/var/run/php5-fpm.sock')
+				|| file_exists('/var/run/php/php7.0-fpm.sock')
+				|| file_exists('/var/run/php/php7.1-fpm.sock')
+				|| file_exists('/var/run/php/php7.2-fpm.sock')
+				|| file_exists('/var/run/php/php7.3-fpm.sock')
+			){
+				$use_tcp = '#';
+				$use_socket = '';
+			} else {
+				$use_tcp = '';
+				$use_socket = '#';
+			}
+			$content = str_replace('{use_tcp}', $use_tcp, $content);
+			$content = str_replace('{use_socket}', $use_socket, $content);
+			
+			// SSL in apps vhost is off by default. Might change later.
+			$content = str_replace('{ssl_on}', '', $content);
+			$content = str_replace('{ssl_comment}', '#', $content);
+			
+			// Fix socket path on PHP 7 systems
+			if(file_exists('/var/run/php/php7.0-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
+			if(file_exists('/var/run/php/php7.1-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content);
+			if(file_exists('/var/run/php/php7.2-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.2-fpm.sock', $content);
+
+			wf($vhost_conf_dir.'/apps.vhost', $content);
+
+			// PHP-FPM
+			// Dont just copy over the php-fpm pool template but add some custom settings
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apps_php_fpm_pool.conf.master', 'tpl/apps_php_fpm_pool.conf.master');
+			$content = str_replace('{fpm_pool}', 'apps', $content);
+			//$content = str_replace('{fpm_port}', ($conf['nginx']['php_fpm_start_port']+1), $content);
+			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
+			$content = str_replace('{fpm_user}', $apps_vhost_user, $content);
+			$content = str_replace('{fpm_group}', $apps_vhost_group, $content);
+			wf($conf['nginx']['php_fpm_pool_dir'].'/apps.conf', $content);
+
+			//copy('tpl/nginx_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
+			//* and create the symlink
+			if(@is_link($vhost_conf_enabled_dir.'/apps.vhost')) unlink($vhost_conf_enabled_dir.'/apps.vhost');
+			if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost')) {
+				symlink($vhost_conf_dir.'/apps.vhost', $vhost_conf_enabled_dir.'/000-apps.vhost');
+			}
+
+		}
+	}
+
+	public function make_ispconfig_ssl_cert() {
+		global $conf,$autoinstall;
+
+		$install_dir = $conf['ispconfig_install_dir'];
+
+		$ssl_crt_file = $install_dir.'/interface/ssl/ispserver.crt';
+		$ssl_csr_file = $install_dir.'/interface/ssl/ispserver.csr';
+		$ssl_key_file = $install_dir.'/interface/ssl/ispserver.key';
+
+		if(!@is_dir($install_dir.'/interface/ssl')) mkdir($install_dir.'/interface/ssl', 0755, true);
+
+		$ssl_pw = substr(md5(mt_rand()), 0, 6);
+		exec("openssl genrsa -des3 -passout pass:$ssl_pw -out $ssl_key_file 4096");
+		if(AUTOINSTALL){
+			exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -key $ssl_key_file -out $ssl_csr_file");
+		} else {
+			exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file");
+		}
+		exec("openssl req -x509 -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -in $ssl_csr_file -out $ssl_crt_file -days 3650");
+		exec("openssl rsa -passin pass:$ssl_pw -in $ssl_key_file -out $ssl_key_file.insecure");
+		rename($ssl_key_file, $ssl_key_file.'.secure');
+		rename($ssl_key_file.'.insecure', $ssl_key_file);
+		
+		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
+
+	}
+
+	public function install_ispconfig() {
+		global $conf;
+
+		$install_dir = $conf['ispconfig_install_dir'];
+
+		//* Create the ISPConfig installation directory
+		if(!@is_dir($install_dir)) {
+			$command = "mkdir $install_dir";
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		//* Create a ISPConfig user and group
+		$command = 'groupadd ispconfig';
+		if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = 'useradd -g ispconfig -d '.$install_dir.' ispconfig';
+		if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* copy the ISPConfig interface part
+		$command = 'cp -rf ../interface '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* copy the ISPConfig server part
+		$command = 'cp -rf ../server '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		
+		//* Make a backup of the security settings
+		if(is_file('/usr/local/ispconfig/security/security_settings.ini')) copy('/usr/local/ispconfig/security/security_settings.ini','/usr/local/ispconfig/security/security_settings.ini~');
+		
+		//* copy the ISPConfig security part
+		$command = 'cp -rf ../security '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		
+		//* Apply changed security_settings.ini values to new security_settings.ini file
+		if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) {
+			$security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~'));
+			$security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini'));
+			if(is_array($security_settings_new) && is_array($security_settings_old)) {
+				foreach($security_settings_new as $section => $sval) {
+					if(is_array($sval)) {
+						foreach($sval as $key => $val) {
+							if(isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) {
+								$security_settings_new[$section][$key] = $security_settings_old[$section][$key];
+							}
+						}
+					}
+				}
+				file_put_contents('/usr/local/ispconfig/security/security_settings.ini',array_to_ini($security_settings_new));
+			}
+		}
+
+		//* Create a symlink, so ISPConfig is accessible via web
+		// Replaced by a separate vhost definition for port 8080
+		// $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
+		// caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* Create the config file for ISPConfig interface
+		$configfile = 'config.inc.php';
+		if(is_file($install_dir.'/interface/lib/'.$configfile)) {
+			copy($install_dir.'/interface/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+
+		$content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
+		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
+		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
+		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
+		$content = str_replace('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
+
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
+		$content = str_replace('{language}', $conf['language'], $content);
+		$content = str_replace('{timezone}', $conf['timezone'], $content);
+		$content = str_replace('{theme}', $conf['theme'], $content);
+		$content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
+
+		wf($install_dir.'/interface/lib/'.$configfile, $content);
+
+		//* Create the config file for ISPConfig server
+		$configfile = 'config.inc.php';
+		if(is_file($install_dir.'/server/lib/'.$configfile)) {
+			copy($install_dir.'/server/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+
+		$content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
+		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
+		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
+		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
+		$content = str_replace('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
+
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
+		$content = str_replace('{language}', $conf['language'], $content);
+		$content = str_replace('{timezone}', $conf['timezone'], $content);
+		$content = str_replace('{theme}', $conf['theme'], $content);
+		$content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
+
+		wf($install_dir.'/server/lib/'.$configfile, $content);
+
+		//* Create the config file for remote-actions (but only, if it does not exist, because
+		//  the value is a autoinc-value and so changed by the remoteaction_core_module
+		if (!file_exists($install_dir.'/server/lib/remote_action.inc.php')) {
+			$content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>';
+			wf($install_dir.'/server/lib/remote_action.inc.php', $content);
+		}
+
+		//* Enable the server modules and plugins.
+		// TODO: Implement a selector which modules and plugins shall be enabled.
+		$dir = $install_dir.'/server/mods-available/';
+		if (is_dir($dir)) {
+			if ($dh = opendir($dir)) {
+				while (($file = readdir($dh)) !== false) {
+					if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
+						include_once $install_dir.'/server/mods-available/'.$file;
+						$module_name = substr($file, 0, -8);
+						$tmp = new $module_name;
+						if($tmp->onInstall()) {
+							if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) {
+								@symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
+								// @symlink($install_dir.'/server/mods-available/'.$file, '../mods-enabled/'.$file);
+							}
+							if (strpos($file, '_core_module') !== false) {
+								if(!@is_link($install_dir.'/server/mods-core/'.$file)) {
+									@symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
+									// @symlink($install_dir.'/server/mods-available/'.$file, '../mods-core/'.$file);
+								}
+							}
+						}
+						unset($tmp);
+					}
+				}
+				closedir($dh);
+			}
+		}
+
+		$dir = $install_dir.'/server/plugins-available/';
+		if (is_dir($dir)) {
+			if ($dh = opendir($dir)) {
+				while (($file = readdir($dh)) !== false) {
+					if($conf['apache']['installed'] == true && $file == 'nginx_plugin.inc.php') continue;
+					if($conf['nginx']['installed'] == true && $file == 'apache2_plugin.inc.php') continue;
+					if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
+						include_once $install_dir.'/server/plugins-available/'.$file;
+						$plugin_name = substr($file, 0, -8);
+						$tmp = new $plugin_name;
+						if(method_exists($tmp, 'onInstall') && $tmp->onInstall()) {
+							if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) {
+								@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
+								//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-enabled/'.$file);
+							}
+							if (strpos($file, '_core_plugin') !== false) {
+								if(!@is_link($install_dir.'/server/plugins-core/'.$file)) {
+									@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
+									//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-core/'.$file);
+								}
+							}
+						}
+						unset($tmp);
+					}
+				}
+				closedir($dh);
+			}
+		}
+
+		// Update the server config
+		$mail_server_enabled = ($conf['services']['mail'])?1:0;
+		$web_server_enabled = ($conf['services']['web'])?1:0;
+		$dns_server_enabled = ($conf['services']['dns'])?1:0;
+		$file_server_enabled = ($conf['services']['file'])?1:0;
+		$db_server_enabled = ($conf['services']['db'])?1:0;
+		$vserver_server_enabled = ($conf['openvz']['installed'])?1:0;
+		$proxy_server_enabled = ($conf['services']['proxy'])?1:0;
+		$firewall_server_enabled = ($conf['services']['firewall'])?1:0;
+		$xmpp_server_enabled = ($conf['services']['xmpp'])?1:0;
+
+		$sql = "UPDATE `server` SET mail_server = '$mail_server_enabled', web_server = '$web_server_enabled', dns_server = '$dns_server_enabled', file_server = '$file_server_enabled', db_server = '$db_server_enabled', vserver_server = '$vserver_server_enabled', proxy_server = '$proxy_server_enabled', firewall_server = '$firewall_server_enabled', xmpp_server = '$xmpp_server_enabled' WHERE server_id = ?";
+
+		$this->db->query($sql, $conf['server_id']);
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+			$this->dbmaster->query($sql, $conf['server_id']);
+		}
+
+
+		// chown install dir to root and chmod 755
+		$command = 'chown root:root '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		$command = 'chmod 755 '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* Chmod the files and directories in the install dir
+		$command = 'chmod -R 750 '.$install_dir.'/*';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* chown the interface files to the ispconfig user and group
+		$command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* Chmod the files and directories in the acme dir
+		$command = 'chmod -R 755 '.$install_dir.'/interface/acme';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		
+		//* chown the server files to the root user and group
+		$command = 'chown -R root:root '.$install_dir.'/server';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		
+		//* chown the security files to the root user and group
+		$command = 'chown -R root:root '.$install_dir.'/security';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		
+		//* chown the security directory and security_settings.ini to root:ispconfig
+		$command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		$command = 'chown root:ispconfig '.$install_dir.'/security';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		$command = 'chown root:ispconfig '.$install_dir.'/security/ids.whitelist';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		$command = 'chown root:ispconfig '.$install_dir.'/security/ids.htmlfield';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		$command = 'chown root:ispconfig '.$install_dir.'/security/apache_directives.blacklist';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		$command = 'chown root:ispconfig '.$install_dir.'/security/nginx_directives.blacklist';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		
+		//* Make the global language file directory group writable
+		exec("chmod -R 770 $install_dir/interface/lib/lang");
+
+		//* Make the temp directory for language file exports writable
+		if(is_dir($install_dir.'/interface/web/temp')) exec("chmod -R 770 $install_dir/interface/web/temp");
+
+		//* Make all interface language file directories group writable
+		$handle = @opendir($install_dir.'/interface/web');
+		while ($file = @readdir($handle)) {
+			if ($file != '.' && $file != '..') {
+				if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
+					$handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
+					chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang', 0770);
+					while ($lang_file = @readdir($handle2)) {
+						if ($lang_file != '.' && $lang_file != '..') {
+							chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file, 0770);
+						}
+					}
+				}
+			}
+		}
+
+		//* Make the APS directories group writable
+		exec("chmod -R 770 $install_dir/interface/web/sites/aps_meta_packages");
+		exec("chmod -R 770 $install_dir/server/aps_packages");
+
+		//* make sure that the server config file (not the interface one) is only readable by the root user
+		chmod($install_dir.'/server/lib/config.inc.php', 0600);
+		chown($install_dir.'/server/lib/config.inc.php', 'root');
+		chgrp($install_dir.'/server/lib/config.inc.php', 'root');
+
+		//* Make sure thet the interface config file is readable by user ispconfig only
+		chmod($install_dir.'/interface/lib/config.inc.php', 0600);
+		chown($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
+		chgrp($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
+
+		chmod($install_dir.'/server/lib/remote_action.inc.php', 0600);
+		chown($install_dir.'/server/lib/remote_action.inc.php', 'root');
+		chgrp($install_dir.'/server/lib/remote_action.inc.php', 'root');
+
+		if(@is_file($install_dir.'/server/lib/mysql_clientdb.conf')) {
+			chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
+			chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
+			chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
+		}
+
+		if(is_dir($install_dir.'/interface/invoices')) {
+			exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
+			exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
+		}
+		
+		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
+
+		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
+		// and must be fixed as this will allow the apache user to read the ispconfig files.
+		// Later this must run as own apache server or via suexec!
+		if($conf['apache']['installed'] == true){
+			$command = 'adduser '.$conf['apache']['user'].' ispconfig';
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+			if(is_group('ispapps')){
+				$command = 'adduser '.$conf['apache']['user'].' ispapps';
+				caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+			}
+		}
+		if($conf['nginx']['installed'] == true){
+			$command = 'adduser '.$conf['nginx']['user'].' ispconfig';
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+			if(is_group('ispapps')){
+				$command = 'adduser '.$conf['nginx']['user'].' ispapps';
+				caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+			}
+		}
+
+		//* Make the shell scripts executable
+		$command = "chmod +x $install_dir/server/scripts/*.sh";
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		if ($this->install_ispconfig_interface == true && isset($conf['interface_password']) && $conf['interface_password']!='admin') {
+			$sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';";
+			$this->db->query($sql, $conf['interface_password']);
+		}
+
+		if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
+			//* Copy the ISPConfig vhost for the controlpanel
+			$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
+			$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
+
+			// Dont just copy over the virtualhost template but add some custom settings
+			$tpl = new tpl('apache_ispconfig.vhost.master');
+			$tpl->setVar('vhost_port',$conf['apache']['vhost_port']);
+
+			// comment out the listen directive if port is 80 or 443
+			if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
+				$tpl->setVar('vhost_port_listen','#');
+			} else {
+				$tpl->setVar('vhost_port_listen','');
+			}
+
+			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
+				$tpl->setVar('ssl_comment','');
+			} else {
+				$tpl->setVar('ssl_comment','#');
+			}
+			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key') && is_file($install_dir.'/interface/ssl/ispserver.bundle')) {
+				$tpl->setVar('ssl_bundle_comment','');
+			} else {
+				$tpl->setVar('ssl_bundle_comment','#');
+			}
+			
+			$tpl->setVar('apache_version',getapacheversion());
+
+			wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
+
+			//* and create the symlink
+			if($this->is_update == false) {
+				if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
+				if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
+					symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
+				}
+			}
+			//if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
+			$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
+			$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
+			@mkdir('/var/www/php-fcgi-scripts/ispconfig', 0755, true);
+			wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
+			exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
+			@symlink($install_dir.'/interface/web', '/var/www/ispconfig');
+			exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
+			//}
+		}
+
+		if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
+			//* Copy the ISPConfig vhost for the controlpanel
+			$vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
+			$vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
+
+			// Dont just copy over the virtualhost template but add some custom settings
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master');
+			$content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
+
+			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
+				$content = str_replace('{ssl_on}', 'ssl', $content);
+				$content = str_replace('{ssl_comment}', '', $content);
+				$content = str_replace('{fastcgi_ssl}', 'on', $content);
+			} else {
+				$content = str_replace('{ssl_on}', '', $content);
+				$content = str_replace('{ssl_comment}', '#', $content);
+				$content = str_replace('{fastcgi_ssl}', 'off', $content);
+			}
+
+			$socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
+			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
+			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
+			$fpm_socket = $socket_dir.'ispconfig.sock';
+
+			//$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
+			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
+
+			wf($vhost_conf_dir.'/ispconfig.vhost', $content);
+
+			unset($content);
+
+			// PHP-FPM
+			// Dont just copy over the php-fpm pool template but add some custom settings
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master');
+			$content = str_replace('{fpm_pool}', 'ispconfig', $content);
+			//$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
+			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
+			$content = str_replace('{fpm_user}', 'ispconfig', $content);
+			$content = str_replace('{fpm_group}', 'ispconfig', $content);
+			wf($conf['nginx']['php_fpm_pool_dir'].'/ispconfig.conf', $content);
+
+			//copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
+			//* and create the symlink
+			if($this->is_update == false) {
+				if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
+				if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
+					symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
+				}
+			}
+		}
+
+		//* Install the update script
+		if(is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
+		chown($install_dir.'/server/scripts/update_from_dev.sh', 'root');
+		chmod($install_dir.'/server/scripts/update_from_dev.sh', 0700);
+//		chown($install_dir.'/server/scripts/update_from_tgz.sh', 'root');
+//		chmod($install_dir.'/server/scripts/update_from_tgz.sh', 0700);
+		chown($install_dir.'/server/scripts/ispconfig_update.sh', 'root');
+		chmod($install_dir.'/server/scripts/ispconfig_update.sh', 0700);
+		if(!is_link('/usr/local/bin/ispconfig_update_from_dev.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update_from_dev.sh');
+		if(!is_link('/usr/local/bin/ispconfig_update.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update.sh');
+
+		//* Make the logs readable for the ispconfig user
+		if(@is_file('/var/log/mail.log')) exec('chmod +r /var/log/mail.log');
+		if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
+		if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
+		if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
+		if(@is_file('/var/log/clamav/clamav.log')) exec('chmod +r /var/log/clamav/clamav.log');
+		if(@is_file('/var/log/clamav/freshclam.log')) exec('chmod +r /var/log/clamav/freshclam.log');
+
+		//* Create the ispconfig log file and directory
+		if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) {
+			if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir'], 0755);
+			touch($conf['ispconfig_log_dir'].'/ispconfig.log');
+		}
+
+		//* Create the ispconfig auth log file and set uid/gid
+		if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) {
+			touch($conf['ispconfig_log_dir'].'/auth.log');
+		}
+		exec('chown ispconfig:ispconfig '. $conf['ispconfig_log_dir'].'/auth.log');
+		exec('chmod 660 '. $conf['ispconfig_log_dir'].'/auth.log');
+
+		if(is_user('getmail')) {
+			rename($install_dir.'/server/scripts/run-getmail.sh', '/usr/local/bin/run-getmail.sh');
+			if(is_user('getmail')) chown('/usr/local/bin/run-getmail.sh', 'getmail');
+			chmod('/usr/local/bin/run-getmail.sh', 0744);
+		}
+
+		//* Add Log-Rotation
+		if (is_dir('/etc/logrotate.d')) {
+			@unlink('/etc/logrotate.d/logispc3'); // ignore, if the file is not there
+			/* We rotate these logs in cron_daily.php
+			$fh = fopen('/etc/logrotate.d/logispc3', 'w');
+			fwrite($fh,
+					"$conf['ispconfig_log_dir']/ispconfig.log { \n" .
+					"	weekly \n" .
+					"	missingok \n" .
+					"	rotate 4 \n" .
+					"	compress \n" .
+					"	delaycompress \n" .
+					"} \n" .
+					"$conf['ispconfig_log_dir']/cron.log { \n" .
+					"	weekly \n" .
+					"	missingok \n" .
+					"	rotate 4 \n" .
+					"	compress \n" .
+					"	delaycompress \n" .
+					"}");
+			fclose($fh);
+			*/
+		}
+
+		//* Remove Domain module as its functions are available in the client module now
+		if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
+		
+		//* Disable rkhunter run and update in debian cronjob as ispconfig is running and updating rkhunter
+		if(is_file('/etc/default/rkhunter')) {
+			replaceLine('/etc/default/rkhunter', 'CRON_DAILY_RUN="yes"', 'CRON_DAILY_RUN="no"', 1, 0);
+			replaceLine('/etc/default/rkhunter', 'CRON_DB_UPDATE="yes"', 'CRON_DB_UPDATE="no"', 1, 0);
+		}
+		
+		// Add symlink for patch tool
+		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
+		
+		// Change mode of a few files from amavisd
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
+	}
+
+	public function configure_dbserver() {
+		global $conf;
+
+		//* If this server shall act as database server for client DB's, we configure this here
+		$install_dir = $conf['ispconfig_install_dir'];
+
+		// Create a file with the database login details which
+		// are used to create the client databases.
+
+		if(!is_dir($install_dir.'/server/lib')) {
+			$command = "mkdir $install_dir/server/lib";
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mysql_clientdb.conf.master', 'tpl/mysql_clientdb.conf.master');
+		$content = str_replace('{hostname}', $conf['mysql']['host'], $content);
+		$content = str_replace('{username}', $conf['mysql']['admin_user'], $content);
+		$content = str_replace('{password}', addslashes($conf['mysql']['admin_password']), $content);
+		wf($install_dir.'/server/lib/mysql_clientdb.conf', $content);
+		chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
+		chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
+		chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
+
+	}
+
+	public function install_crontab() {
+		global $conf;
+
+		$install_dir = $conf['ispconfig_install_dir'];
+
+		//* Root Crontab
+		exec('crontab -u root -l > crontab.txt');
+		$existing_root_cron_jobs = file('crontab.txt');
+
+		// remove existing ispconfig cronjobs, in case the syntax has changed
+		foreach($existing_root_cron_jobs as $key => $val) {
+			if(stristr($val, $install_dir)) unset($existing_root_cron_jobs[$key]);
+		}
+
+		$root_cron_jobs = array(
+			"* * * * * ".$install_dir."/server/server.sh 2>&1 | while read line; do echo `/bin/date` \"\$line\" >> ".$conf['ispconfig_log_dir']."/cron.log; done",
+			"* * * * * ".$install_dir."/server/cron.sh 2>&1 | while read line; do echo `/bin/date` \"\$line\" >> ".$conf['ispconfig_log_dir']."/cron.log; done"
+		);
+
+		if ($conf['nginx']['installed'] == true) {
+			$root_cron_jobs[] = "0 0 * * * ".$install_dir."/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
+		}
+
+		foreach($root_cron_jobs as $cron_job) {
+			if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
+				$existing_root_cron_jobs[] = $cron_job."\n";
+			}
+		}
+		file_put_contents('crontab.txt', $existing_root_cron_jobs);
+		exec('crontab -u root crontab.txt &> /dev/null');
+		unlink('crontab.txt');
+
+		//* Getmail crontab
+		if(is_user('getmail')) {
+			$cf = $conf['getmail'];
+			exec('crontab -u getmail -l > crontab.txt');
+			$existing_cron_jobs = file('crontab.txt');
+
+			$cron_jobs = array(
+				'*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null'
+			);
+
+			// remove existing ispconfig cronjobs, in case the syntax has changed
+			foreach($existing_cron_jobs as $key => $val) {
+				if(stristr($val, 'getmail')) unset($existing_cron_jobs[$key]);
+			}
+
+			foreach($cron_jobs as $cron_job) {
+				if(!in_array($cron_job."\n", $existing_cron_jobs)) {
+					$existing_cron_jobs[] = $cron_job."\n";
+				}
+			}
+			file_put_contents('crontab.txt', $existing_cron_jobs);
+			exec('crontab -u getmail crontab.txt &> /dev/null');
+			unlink('crontab.txt');
+		}
+
+		touch($conf['ispconfig_log_dir'].'/cron.log');
+		chmod($conf['ispconfig_log_dir'].'/cron.log', 0660);
+
+	}
+	
+	public function create_mount_script(){
+		global $app, $conf;
+		$mount_script = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh';
+		$mount_command = '';
+		
+		if(is_file($mount_script)) return;
+		if(is_file('/etc/rc.local')){
+			$rc_local = file('/etc/rc.local');
+			if(is_array($rc_local) && !empty($rc_local)){
+				foreach($rc_local as $line){
+					$line = trim($line);
+					if(substr($line, 0, 1) == '#') continue;
+					if(strpos($line, 'sshfs') !== false && strpos($line, '/var/backup') !== false){
+						$mount_command = "#!/bin/sh\n\n";
+						$mount_command .= $line."\n\n";
+						file_put_contents($mount_script, $mount_command);
+						chmod($mount_script, 0755);
+						chown($mount_script, 'root');
+						chgrp($mount_script, 'root');
+						break;
+					}
+				}
+			}
+		}
+	}
+	
+	// This function is called at the end of the update process and contains code to clean up parts of old ISPCONfig releases
+	public function cleanup_ispconfig() {
+		global $app,$conf;
+		
+		// Remove directories recursively
+		if(is_dir('/usr/local/ispconfig/interface/web/designer')) exec('rm -rf /usr/local/ispconfig/interface/web/designer');
+		if(is_dir('/usr/local/ispconfig/interface/web/themes/default-304')) exec('rm -rf /usr/local/ispconfig/interface/web/themes/default-304');
+		
+		// Remove files
+		if(is_file('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php');
+		if(is_file('/usr/local/ispconfig/interface/lib/classes/form.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/form.inc.php');
+		
+		// Change mode of a few files from amavisd
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
+		
+	}
+
+	public function getinitcommand($servicename, $action, $init_script_directory = ''){
+		global $conf;
+		// upstart
+		if(is_executable('/sbin/initctl')){
+			exec('/sbin/initctl version 2>/dev/null | /bin/grep -q upstart', $retval['output'], $retval['retval']);
+			if(intval($retval['retval']) == 0) return 'service '.$servicename.' '.$action;
+		}
+		// systemd
+		if(is_executable('/bin/systemd') || is_executable('/usr/bin/systemctl')){
+			return 'systemctl '.$action.' '.$servicename.'.service';
+		}
+		// sysvinit
+		if($init_script_directory == '') $init_script_directory = $conf['init_scripts'];
+		if(substr($init_script_directory, -1) === '/') $init_script_directory = substr($init_script_directory, 0, -1);
+		return $init_script_directory.'/'.$servicename.' '.$action;
+	}
+
+	/**
+	 * Helper function - get the path to a template file based on
+	 * the local part of the filename. Checks first for the existence
+	 * of a distribution specific file and if not found looks in the
+	 * base template folder. Optionally the behaviour can be changed
+	 * by setting the 2nd parameter which will fetch the contents
+	 * of the template file and return it instead of the path. The 3rd
+	 * parameter further extends this behaviour by filtering the contents
+	 * by inserting the ispconfig database credentials using the {} placeholders.
+	 *
+	 * @param string $tLocal local part of filename
+	 * @param bool $tRf
+	 * @param bool $tDBCred
+	 * @return string Relative path to the chosen template file
+	 */
+	protected function get_template_file($tLocal, $tRf=false, $tDBCred=false) {
+		global $conf, $dist;
+
+		$final_path = '';
+		$dist_template = $conf['ispconfig_install_dir'] . '/server/conf-custom/install/' . $tLocal . '.master';
+		if (file_exists($dist_template)) {
+			$final_path = $dist_template;
+		} else {
+			$dist_template = 'dist/tpl/'.strtolower($dist['name'])."/$tLocal.master";
+			if (file_exists($dist_template)) {
+				$final_path = $dist_template;
+			} else {
+				$final_path = "tpl/$tLocal.master";
+			}
+		}
+
+		if (!$tRf) {
+			return $final_path;
+		} else {
+			return (!$tDBCred) ? rf($final_path) : $this->insert_db_credentials(rf($final_path));
+		}
+	}
+
+	/**
+	 * Helper function - writes the contents to a config file
+	 * and performs a backup if the file exist. Additionally
+	 * if the file exists the new file will be given the
+	 * same rights and ownership as the original. Optionally the
+	 * rights and/or ownership can be overriden by appending umask,
+	 * user and group to the parameters. Providing only uid and gid
+	 * values will result in only a chown.
+	 *
+	 * @param $tConf
+	 * @param $tContents
+	 * @return bool
+	 */
+	protected function write_config_file($tConf, $tContents) {
+		// Backup config file before writing new contents and stat file
+		if ( is_file($tConf) ) {
+			$stat = exec('stat -c \'%a %U %G\' '.escapeshellarg($tConf), $output, $res);
+			if ($res == 0) { // stat successfull
+				list($access, $user, $group) = explode(" ", $stat);
+			}
+
+			if ( copy($tConf, $tConf.'~') ) {
+				chmod($tConf.'~', 0400);
+			}
+		}
+
+		wf($tConf, $tContents); // write file
+
+		if (func_num_args() >= 4) // override rights and/or ownership
+			{
+			$args = func_get_args();
+			$output = array_slice($args, 2);
+
+			switch (sizeof($output)) {
+			case 3:
+				$umask = array_shift($output);
+				if (is_numeric($umask) && preg_match('/^0?[0-7]{3}$/', $umask)) {
+					$access = $umask;
+				}
+			case 2:
+				if (is_user($output[0]) && is_group($output[1])) {
+					list($user, $group) = $output;
+				}
+				break;
+			}
+		}
+
+		if (!empty($user) && !empty($group)) {
+			chown($tConf, $user);
+			chgrp($tConf, $group);
+		}
+
+		if (!empty($access)) {
+			exec("chmod $access $tConf");
+		}
+	}
+
+	/**
+	 * Helper function - filter the contents of a config
+	 * file by inserting the common ispconfig database
+	 * credentials.
+	 *
+	 * @param $tContents
+	 * @return string
+	 */
+	protected function insert_db_credentials($tContents) {
+		global $conf;
+
+		$tContents = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $tContents);
+		$tContents = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $tContents);
+		$tContents = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $tContents);
+		$tContents = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $tContents);
+		$tContents = str_replace('{mysql_server_host}', $conf['mysql']['host'], $tContents);
+		$tContents = str_replace('{mysql_server_port}', $conf['mysql']['port'], $tContents);
+		$tContents = str_replace('{mysql_server_port}', $conf["mysql"]["port"], $tContents);
+
+		return $tContents;
+	}
+
+}
+
+?>
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index e69de29bb2..83949a7154 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -0,0 +1,32 @@
+-- rspamd
+ALTER TABLE `spamfilter_policy` ADD `rspamd_greylisting` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `policyd_greylist`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_greylisting_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_greylisting`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_greylisting_level`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_method` ENUM('add_header','rewrite_subject') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'rewrite_subject' AFTER `rspamd_spam_tag_level`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_kill_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_tag_method`;
+
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 4;
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 5;
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 6;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '4.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '6.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '2.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '7.00' WHERE id = 7;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '6.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '8.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '4.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '10.00' WHERE id = 7;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '10.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '12.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '8.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '20.00' WHERE id = 7;
+-- end of rspamd
diff --git a/install/sql/incremental/upd_dev_collection.sql.orig b/install/sql/incremental/upd_dev_collection.sql.orig
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/install/sql/incremental/upd_dev_collection.sql.rej b/install/sql/incremental/upd_dev_collection.sql.rej
new file mode 100644
index 0000000000..4c57d840ab
--- /dev/null
+++ b/install/sql/incremental/upd_dev_collection.sql.rej
@@ -0,0 +1,40 @@
+--- install/sql/incremental/upd_dev_collection.sql
++++ install/sql/incremental/upd_dev_collection.sql
+@@ -80,4 +80,37 @@ INSERT IGNORE INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_us
+ 
+ ALTER TABLE `dns_soa` CHANGE `xfer` `xfer` TEXT NULL;
+ ALTER TABLE `dns_soa` CHANGE `also_notify` `also_notify` TEXT NULL;
+-ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;+ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;
++
++-- rspamd
++ALTER TABLE `spamfilter_policy` ADD `rspamd_greylisting` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `policyd_greylist`;
++ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_greylisting_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_greylisting`;
++ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_greylisting_level`;
++ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_method` ENUM('add_header','rewrite_subject') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'rewrite_subject' AFTER `rspamd_spam_tag_level`;
++ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_kill_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_tag_method`;
++
++UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 4;
++UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 5;
++UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 6;
++
++UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '4.00';
++UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '6.00' WHERE id = 1;
++UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 2;
++UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 3;
++UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '2.00' WHERE id = 6;
++UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '7.00' WHERE id = 7;
++
++UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '6.00';
++UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '8.00' WHERE id = 1;
++UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 2;
++UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 3;
++UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '4.00' WHERE id = 6;
++UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '10.00' WHERE id = 7;
++
++UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '10.00';
++UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '12.00' WHERE id = 1;
++UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 2;
++UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 3;
++UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '8.00' WHERE id = 6;
++UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '20.00' WHERE id = 7;
++-- end of rspamd
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 2417ef0d21..5337c2b77a 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1589,6 +1589,11 @@ CREATE TABLE `spamfilter_policy` (
   `policyd_quota_out` int(11) NOT NULL DEFAULT  '-1',
   `policyd_quota_out_period` int(11) NOT NULL DEFAULT  '24',
   `policyd_greylist` ENUM(  'Y',  'N' ) NOT NULL DEFAULT  'N',
+  `rspamd_greylisting` enum('n','y') NOT NULL DEFAULT 'n',
+  `rspamd_spam_greylisting_level` decimal(5,2) DEFAULT NULL,
+  `rspamd_spam_tag_level` decimal(5,2) DEFAULT NULL,
+  `rspamd_spam_tag_method` enum('add_header','rewrite_subject') NOT NULL DEFAULT 'rewrite_subject',
+  `rspamd_spam_kill_level` decimal(5,2) DEFAULT NULL,
   PRIMARY KEY  (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
@@ -2517,13 +2522,13 @@ INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `s
 -- Dumping data for table `spamfilter_policy`
 -- 
 
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '');
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM*** ', NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '', 'n', 6.00, 8.00, 'rewrite_subject', 12.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 2.00, 4.00, 'rewrite_subject', 8.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 7.00, 10.00, 'rewrite_subject', 20.00);
 
 -- --------------------------------------------------------
 
diff --git a/install/sql/ispconfig3.sql.orig b/install/sql/ispconfig3.sql.orig
new file mode 100644
index 0000000000..2417ef0d21
--- /dev/null
+++ b/install/sql/ispconfig3.sql.orig
@@ -0,0 +1,2570 @@
+/*
+Copyright (c) 2007-2012, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+-- Includes 
+-- 
+-- iso_country_list.sql
+-- 
+-- This will create and then populate a MySQL table with a list of the names and
+-- ISO 3166 codes for countries in existence as of the date below.
+-- 
+-- For updates to this file, see http://27.org/isocountrylist/
+-- For more about ISO 3166, see http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
+-- 
+-- Created by getisocountrylist.pl on Sun Nov  2 14:59:20 2003.
+-- Wm. Rhodes <iso_country_list@27.org>
+-- 
+
+-- 
+-- ISPConfig 3
+-- DB-Version: 3.0.0.9
+-- 
+
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- --------------------------------------------------------
+-- --------------------------------------------------------
+-- DB-STRUCTURE
+-- --------------------------------------------------------
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `aps_instances`
+--
+
+CREATE TABLE IF NOT EXISTS `aps_instances` (
+  `id` int(4) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `customer_id` int(4) NOT NULL DEFAULT '0',
+  `package_id` int(4) NOT NULL DEFAULT '0',
+  `instance_status` int(4) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `aps_instances_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `aps_instances_settings` (
+  `id` int(4) NOT NULL AUTO_INCREMENT,
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `instance_id` int(4) NOT NULL DEFAULT '0',
+  `name` varchar(255) NOT NULL DEFAULT '',
+  `value` text,
+  PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `aps_packages`
+--
+
+CREATE TABLE IF NOT EXISTS `aps_packages` (
+  `id` int(4) NOT NULL AUTO_INCREMENT,
+  `path` varchar(255) NOT NULL DEFAULT '',
+  `name` varchar(255) NOT NULL DEFAULT '',
+  `category` varchar(255) NOT NULL DEFAULT '',
+  `version` varchar(20) NOT NULL DEFAULT '',
+  `release` int(4) NOT NULL DEFAULT '0',
+  `package_url` TEXT,
+  `package_status` int(1) NOT NULL DEFAULT '2',
+  PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Tabellenstruktur für Tabelle `aps_settings`
+--
+
+CREATE TABLE IF NOT EXISTS `aps_settings` (
+  `id` int(4) NOT NULL AUTO_INCREMENT,
+  `name` varchar(255) NOT NULL DEFAULT '',
+  `value` text,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `name` (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `attempts_login`
+--
+
+CREATE TABLE `attempts_login` (
+  `ip` varchar(39) NOT NULL DEFAULT '',
+  `times` int(11) DEFAULT NULL,
+  `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `client`
+--
+
+CREATE TABLE `client` (
+  `client_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `company_name` varchar(64) DEFAULT NULL,
+  `company_id` varchar(255) DEFAULT NULL,
+  `gender` enum('','m','f') NOT NULL DEFAULT '',
+  `contact_firstname` varchar( 64 ) NOT NULL DEFAULT '',
+  `contact_name` varchar(64) DEFAULT NULL,
+  `customer_no` varchar(64) DEFAULT NULL,
+  `vat_id` varchar(64) DEFAULT NULL,
+  `street` varchar(255) DEFAULT NULL,
+  `zip` varchar(32) DEFAULT NULL,
+  `city` varchar(64) DEFAULT NULL,
+  `state` varchar(32) DEFAULT NULL,
+  `country` char(2) DEFAULT NULL,
+  `telephone` varchar(32) DEFAULT NULL,
+  `mobile` varchar(32) DEFAULT NULL,
+  `fax` varchar(32) DEFAULT NULL,
+  `email` varchar(255) DEFAULT NULL,
+  `internet` varchar(255) NOT NULL DEFAULT '',
+  `icq` varchar(16) DEFAULT NULL,
+  `notes` text,
+  `bank_account_owner` varchar(255) DEFAULT NULL,
+  `bank_account_number` varchar(255) DEFAULT NULL,
+  `bank_code` varchar(255) DEFAULT NULL,
+  `bank_name` varchar(255) DEFAULT NULL,
+  `bank_account_iban` varchar(255) DEFAULT NULL,
+  `bank_account_swift` varchar(255) DEFAULT NULL,
+  `paypal_email` varchar(255) DEFAULT NULL,
+  `default_mailserver` int(11) unsigned NOT NULL DEFAULT '1',
+  `mail_servers` text,
+  `limit_maildomain` int(11) NOT NULL DEFAULT '-1',
+  `limit_mailbox` int(11) NOT NULL DEFAULT '-1',
+  `limit_mailalias` int(11) NOT NULL DEFAULT '-1',
+  `limit_mailaliasdomain` int(11) NOT NULL DEFAULT '-1',
+  `limit_mailforward` int(11) NOT NULL DEFAULT '-1',
+  `limit_mailcatchall` int(11) NOT NULL DEFAULT '-1',
+  `limit_mailrouting` int(11) NOT NULL DEFAULT '0',
+  `limit_mailfilter` int(11) NOT NULL DEFAULT '-1',
+  `limit_fetchmail` int(11) NOT NULL DEFAULT '-1',
+  `limit_mailquota` int(11) NOT NULL DEFAULT '-1',
+  `limit_spamfilter_wblist` int(11) NOT NULL DEFAULT '0',
+  `limit_spamfilter_user` int(11) NOT NULL DEFAULT '0',
+  `limit_spamfilter_policy` int(11) NOT NULL DEFAULT '0',
+  `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
+  `xmpp_servers` text,
+  `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
+  `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
+  `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_anon` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_auth_options` varchar(255) NOT NULL DEFAULT 'plain,hashed,isp',
+  `limit_xmpp_vjud` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_proxy` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `default_webserver` int(11) unsigned NOT NULL DEFAULT '1',
+  `web_servers` text,
+  `limit_web_ip` text,
+  `limit_web_domain` int(11) NOT NULL DEFAULT '-1',
+  `limit_web_quota` int(11) NOT NULL DEFAULT '-1',
+  `web_php_options` varchar(255) NOT NULL DEFAULT 'no,fast-cgi,cgi,mod,suphp,php-fpm,hhvm',
+  `limit_cgi` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_ssi` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_perl` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_ruby` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_python` enum('n','y') NOT NULL DEFAULT 'n',
+  `force_suexec` enum('n','y') NOT NULL DEFAULT 'y',
+  `limit_hterror` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_wildcard` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_ssl` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_ssl_letsencrypt` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_web_subdomain` int(11) NOT NULL DEFAULT '-1',
+  `limit_web_aliasdomain` int(11) NOT NULL DEFAULT '-1',
+  `limit_ftp_user` int(11) NOT NULL DEFAULT '-1',
+  `limit_shell_user` int(11) NOT NULL DEFAULT '0',
+  `ssh_chroot` varchar(255) NOT NULL DEFAULT 'no,jailkit,ssh-chroot',
+  `limit_webdav_user` int(11) NOT NULL DEFAULT '0',
+  `limit_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y',
+  `limit_directive_snippets` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n',
+  `limit_aps` int(11) NOT NULL DEFAULT '-1',
+  `default_dnsserver` int(11) unsigned NOT NULL DEFAULT '1',
+  `db_servers` text,
+  `limit_dns_zone` int(11) NOT NULL DEFAULT '-1',
+  `default_slave_dnsserver` int(11) unsigned NOT NULL DEFAULT '1',
+  `limit_dns_slave_zone` int(11) NOT NULL DEFAULT '-1',
+  `limit_dns_record` int(11) NOT NULL DEFAULT '-1',
+  `default_dbserver` int(11) NOT NULL DEFAULT '1',
+  `dns_servers` text,
+  `limit_database` int(11) NOT NULL DEFAULT '-1',
+  `limit_database_user` int(11) NOT NULL DEFAULT '-1',
+  `limit_database_quota` int(11) NOT NULL default '-1',
+  `limit_cron` int(11) NOT NULL DEFAULT '0',
+  `limit_cron_type` enum('url','chrooted','full') NOT NULL DEFAULT 'url',
+  `limit_cron_frequency` int(11) NOT NULL DEFAULT '5',
+  `limit_traffic_quota` int(11) NOT NULL DEFAULT '-1',
+  `limit_client` int(11) NOT NULL DEFAULT '0',
+  `limit_domainmodule` int(11) NOT NULL DEFAULT '0',
+  `limit_mailmailinglist` int(11) NOT NULL DEFAULT '-1',
+  `limit_openvz_vm` int(11) NOT NULL DEFAULT '0',
+  `limit_openvz_vm_template_id` int(11) NOT NULL DEFAULT '0',
+  `parent_client_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `username` varchar(64) DEFAULT NULL,
+  `password` varchar(64) DEFAULT NULL,
+  `language` char(2) NOT NULL DEFAULT 'en',
+  `usertheme` varchar(32) NOT NULL DEFAULT 'default',
+  `template_master` int(11) unsigned NOT NULL DEFAULT '0',
+  `template_additional` text,
+  `created_at` bigint(20) DEFAULT NULL,
+  `locked` enum('n','y') NOT NULL DEFAULT 'n',
+  `canceled` enum('n','y') NOT NULL DEFAULT 'n',
+  `can_use_api` enum('n','y') NOT NULL DEFAULT 'n',
+  `tmp_data` mediumblob,
+  `id_rsa` varchar(2000) NOT NULL DEFAULT '',
+  `ssh_rsa` varchar(600) NOT NULL DEFAULT '',
+  `customer_no_template` varchar(255) DEFAULT 'R[CLIENTID]C[CUSTOMER_NO]',
+  `customer_no_start` int(11) NOT NULL DEFAULT '1',
+  `customer_no_counter` int(11) NOT NULL DEFAULT '0',
+  `added_date` date NULL DEFAULT NULL,
+  `added_by` varchar(255) DEFAULT NULL,
+  `validation_status` enum('accept','review','reject') NOT NULL DEFAULT 'accept',
+  `risk_score` int(10) unsigned NOT NULL DEFAULT '0',
+  `activation_code` varchar(10) NOT NULL DEFAULT '',
+  PRIMARY KEY (`client_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `client_circle`
+--
+
+CREATE TABLE `client_circle` (
+  `circle_id` int(11) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `circle_name` varchar(64) DEFAULT NULL,
+  `client_ids` text,
+  `description` text,
+  `active` enum('n','y') NOT NULL default 'y',
+  PRIMARY KEY (`circle_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `client_template`
+-- 
+
+CREATE TABLE `client_template` (
+  `template_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `template_name` varchar(64) NOT NULL DEFAULT '',
+  `template_type` varchar(1) NOT NULL default 'm',
+  `mail_servers` text,
+  `limit_maildomain` int(11) NOT NULL default '-1',
+  `limit_mailbox` int(11) NOT NULL default '-1',
+  `limit_mailalias` int(11) NOT NULL default '-1',
+  `limit_mailaliasdomain` int(11) NOT NULL default '-1',
+  `limit_mailforward` int(11) NOT NULL default '-1',
+  `limit_mailcatchall` int(11) NOT NULL default '-1',
+  `limit_mailrouting` int(11) NOT NULL default '0',
+  `limit_mailfilter` int(11) NOT NULL default '-1',
+  `limit_fetchmail` int(11) NOT NULL default '-1',
+  `limit_mailquota` int(11) NOT NULL default '-1',
+  `limit_spamfilter_wblist` int(11) NOT NULL default '0',
+  `limit_spamfilter_user` int(11) NOT NULL default '0',
+  `limit_spamfilter_policy` int(11) NOT NULL default '0',
+  `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
+  `xmpp_servers` text,
+  `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
+  `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
+  `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_anon` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_vjud` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_proxy` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `web_servers` text,
+  `limit_web_ip` text,
+  `limit_web_domain` int(11) NOT NULL default '-1',
+  `limit_web_quota` int(11) NOT NULL default '-1',
+  `web_php_options` varchar(255) NOT NULL DEFAULT 'no',
+  `limit_cgi` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_ssi` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_perl` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_ruby` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_python` enum('n','y') NOT NULL DEFAULT 'n',
+  `force_suexec` enum('n','y') NOT NULL DEFAULT 'y',
+  `limit_hterror` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_wildcard` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_ssl` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_ssl_letsencrypt` enum('n','y') NOT NULL DEFAULT 'n',
+  `limit_web_subdomain` int(11) NOT NULL default '-1',
+  `limit_web_aliasdomain` int(11) NOT NULL default '-1',
+  `limit_ftp_user` int(11) NOT NULL default '-1',
+  `limit_shell_user` int(11) NOT NULL default '0',
+  `ssh_chroot` varchar(255) NOT NULL DEFAULT 'no',
+  `limit_webdav_user` int(11) NOT NULL default '0',
+  `limit_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y',
+  `limit_directive_snippets` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n',
+  `limit_aps` int(11) NOT NULL DEFAULT '-1',
+  `dns_servers` text,
+  `limit_dns_zone` int(11) NOT NULL default '-1',
+  `default_slave_dnsserver` int(11) NOT NULL DEFAULT '0',
+  `limit_dns_slave_zone` int(11) NOT NULL default '-1',
+  `limit_dns_record` int(11) NOT NULL default '-1',
+  `db_servers` text,
+  `limit_database` int(11) NOT NULL default '-1',
+  `limit_database_user` int(11) NOT NULL DEFAULT '-1',
+  `limit_database_quota` int(11) NOT NULL default '-1',
+  `limit_cron` int(11) NOT NULL default '0',
+  `limit_cron_type` enum('url','chrooted','full') NOT NULL default 'url',
+  `limit_cron_frequency` int(11) NOT NULL default '5',
+  `limit_traffic_quota` int(11) NOT NULL default '-1',
+  `limit_client` int(11) NOT NULL default '0',
+  `limit_domainmodule` int(11) NOT NULL DEFAULT '0',
+  `limit_mailmailinglist` int(11) NOT NULL default '-1',
+  `limit_openvz_vm` int(11) NOT NULL DEFAULT '0',
+  `limit_openvz_vm_template_id` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY  (`template_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `client_template_assigned`
+-- 
+
+CREATE TABLE `client_template_assigned` (
+  `assigned_template_id` bigint(20) NOT NULL auto_increment,
+  `client_id` bigint(11) NOT NULL DEFAULT '0',
+  `client_template_id` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`assigned_template_id`),
+  KEY `client_id` (`client_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `invoice_message_template`
+--
+
+CREATE TABLE `client_message_template` (
+  `client_message_template_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `template_type` varchar(255) DEFAULT NULL,
+  `template_name` varchar(255) DEFAULT NULL,
+  `subject` varchar(255) DEFAULT NULL,
+  `message` text,
+  PRIMARY KEY (`client_message_template_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `invoice_message_template`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `country`
+--
+
+CREATE TABLE `country` (
+  `iso` char(2) NOT NULL DEFAULT '',
+  `name` varchar(64) NOT NULL DEFAULT '',
+  `printable_name` varchar(64) NOT NULL DEFAULT '',
+  `iso3` char(3) DEFAULT NULL,
+  `numcode` smallint(6) DEFAULT NULL,
+  `eu` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY (`iso`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `cron`
+-- 
+CREATE TABLE `cron` (
+  `id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NULL default NULL,
+  `sys_perm_group` varchar(5) NULL default NULL,
+  `sys_perm_other` varchar(5) NULL default NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `parent_domain_id` int(11) unsigned NOT NULL default '0',
+  `type` enum('url','chrooted','full') NOT NULL default 'url',
+  `command` TEXT,
+  `run_min` varchar(100) NULL,
+  `run_hour` varchar(100) NULL,
+  `run_mday` varchar(100) NULL,
+  `run_month` varchar(100) NULL,
+  `run_wday` varchar(100) NULL,
+  `log` enum('n','y') NOT NULL default 'n',
+  `active` enum('n','y') NOT NULL default 'y',
+  PRIMARY KEY  (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `directive_snippets`
+-- 
+
+CREATE TABLE IF NOT EXISTS `directive_snippets` (
+  `directive_snippets_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `name` varchar(255) DEFAULT NULL,
+  `type` varchar(255) DEFAULT NULL,
+  `snippet` mediumtext,
+  `customer_viewable` ENUM('n','y') NOT NULL DEFAULT 'n',
+  `required_php_snippets` varchar(255) NOT NULL DEFAULT '',
+  `active` enum('n','y') NOT NULL DEFAULT 'y',
+  `master_directive_snippets_id` int(11) unsigned NOT NULL DEFAULT '0',
+  PRIMARY KEY (`directive_snippets_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `dns_rr`
+-- 
+CREATE TABLE `dns_rr` (
+  `id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `server_id` int(11) NOT NULL default '1',
+  `zone` int(11) unsigned NOT NULL DEFAULT '0',
+  `name` varchar(255) NOT NULL DEFAULT '',
+  `type` enum('A','AAAA','ALIAS','CNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') default NULL,
+  `data` TEXT NOT NULL,
+  `aux` int(11) unsigned NOT NULL default '0',
+  `ttl` int(11) unsigned NOT NULL default '3600',
+  `active` enum('N','Y') NOT NULL default 'Y',
+  `stamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
+  `serial` int(10) unsigned default NULL,
+  PRIMARY KEY  (`id`),
+  KEY `rr` (`zone`,`type`,`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table  `dns_slave`
+--
+
+CREATE TABLE `dns_slave` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `server_id` int(11) NOT NULL default '1',
+  `origin` varchar(255) NOT NULL DEFAULT '',
+  `ns` varchar(255) NOT NULL DEFAULT '',
+  `active` enum('N','Y') NOT NULL DEFAULT 'N',
+  `xfer` TEXT NULL,
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `slave` (`origin`,`server_id`),
+  KEY `active` (`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `dns_ssl_ca`
+-- 
+
+CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `active` enum('N','Y') NOT NULL DEFAULT 'N',
+  `ca_name` varchar(255) NOT NULL DEFAULT '',
+  `ca_issue` varchar(255) NOT NULL DEFAULT '',
+  `ca_wildcard` enum('Y','N') NOT NULL DEFAULT 'N',
+  `ca_iodef` text NOT NULL,
+  `ca_critical` tinyint(1) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY (`ca_issue`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`);
+
+INSERT INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `active`, `ca_name`, `ca_issue`, `ca_wildcard`, `ca_iodef`, `ca_critical`) VALUES
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'AC Camerfirma', 'camerfirma.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'ACCV', 'accv.es', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Actalis', 'actalis.it', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Amazon', 'amazon.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Asseco', 'certum.pl', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Buypass', 'buypass.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CA Disig', 'disig.sk', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CATCert', 'aoc.cat', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certinomis', 'www.certinomis.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certizen', 'hongkongpost.gov.hk', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodoca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'e-tugra', 'e-tugra.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'EDICOM', 'edicomgroup.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Firmaprofesional', 'firmaprofesional.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'FNMT', 'fnmt.es', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GlobalSign', 'globalsign.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GoDaddy', 'godaddy.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Google Trust Services', 'pki.goog', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GRCA', 'gca.nat.gov.tw', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'HARICA', 'harica.gr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'IdenTrust', 'identrust.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Kamu SM', 'kamusm.gov.tr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Microsec e-Szigno', 'e-szigno.hu', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'NetLock', 'netlock.hu', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PKIoverheid', 'www.pkioverheid.nl', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PROCERT', 'procert.net.ve', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'QuoVadis', 'quovadisglobal.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SECOM', 'secomtrust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sertifitseerimiskeskuse', 'sk.ee', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'StartCom', 'startcomca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SwissSign', 'swisssign.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec / Thawte / GeoTrust', 'symantec.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'T-Systems', 'telesec.de', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Telia', 'telia.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Trustwave', 'trustwave.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Web.com', 'web.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0);
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `dns_soa`
+-- 
+
+CREATE TABLE `dns_soa` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `server_id` int(11) NOT NULL default '1',
+  `origin` varchar(255) NOT NULL DEFAULT '',
+  `ns` varchar(255) NOT NULL DEFAULT '',
+  `mbox` varchar(255) NOT NULL DEFAULT '',
+  `serial` int(11) unsigned NOT NULL default '1',
+  `refresh` int(11) unsigned NOT NULL default '28800',
+  `retry` int(11) unsigned NOT NULL default '7200',
+  `expire` int(11) unsigned NOT NULL default '604800',
+  `minimum` int(11) unsigned NOT NULL default '3600',
+  `ttl` int(11) unsigned NOT NULL default '3600',
+  `active` enum('N','Y') NOT NULL DEFAULT 'N',
+  `xfer` TEXT NULL,
+  `also_notify` TEXT NULL,
+  `update_acl` varchar(255) default NULL,
+  `dnssec_initialized` ENUM('Y','N') NOT NULL DEFAULT 'N',
+  `dnssec_wanted` ENUM('Y','N') NOT NULL DEFAULT 'N',
+  `dnssec_last_signed` BIGINT NOT NULL DEFAULT '0',
+  `dnssec_info` TEXT NULL,
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `origin` (`origin`),
+  KEY `active` (`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `dns_template`
+-- 
+
+CREATE TABLE `dns_template` (
+  `template_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `name` varchar(64) default NULL,
+  `fields` varchar(255) default NULL,
+  `template` text,
+  `visible` enum('N','Y') NOT NULL default 'Y',
+  PRIMARY KEY  (`template_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Table structure for table  `domain`
+--
+
+CREATE TABLE `domain` (
+  `domain_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `domain` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`domain_id`),
+  UNIQUE KEY `domain` (`domain`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `firewall`
+-- 
+
+CREATE TABLE `firewall` (
+  `firewall_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `tcp_port` text,
+  `udp_port` text,
+  `active` enum('n','y') NOT NULL default 'y',
+  PRIMARY KEY  (`firewall_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `ftp_user`
+-- 
+
+CREATE TABLE `ftp_user` (
+  `ftp_user_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `parent_domain_id` int(11) unsigned NOT NULL default '0',
+  `username` varchar(64) default NULL,
+  `username_prefix` varchar(50) NOT NULL default '',
+  `password` varchar(64) default NULL,
+  `quota_size` bigint(20) NOT NULL default '-1',
+  `active` enum('n','y') NOT NULL default 'y',
+  `uid` varchar(64) default NULL,
+  `gid` varchar(64) default NULL,
+  `dir` varchar(255) default NULL,
+  `quota_files` bigint(20) NOT NULL default '-1',
+  `ul_ratio` int(11) NOT NULL default '-1',
+  `dl_ratio` int(11) NOT NULL default '-1',
+  `ul_bandwidth` int(11) NOT NULL default '-1',
+  `dl_bandwidth` int(11) NOT NULL default '-1',
+  `expires` datetime NULL DEFAULT NULL,
+  `user_type` set('user','system') NOT NULL DEFAULT 'user',
+  `user_config` text,
+  PRIMARY KEY  (`ftp_user_id`),
+  KEY `active` (`active`),
+  KEY `server_id` (`server_id`),
+  KEY `username` (`username`),
+  KEY `quota_files` (`quota_files`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `ftp_traffic`
+-- 
+
+CREATE TABLE `ftp_traffic` (
+  `hostname` varchar(255) NOT NULL,
+  `traffic_date` date NOT NULL,
+  `in_bytes` bigint(32) unsigned NOT NULL,
+  `out_bytes` bigint(32) unsigned NOT NULL,
+  UNIQUE KEY (`hostname`,`traffic_date`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `help_faq`
+--
+
+CREATE TABLE `help_faq` (
+  `hf_id` int(11) NOT NULL AUTO_INCREMENT,
+  `hf_section` int(11) DEFAULT NULL,
+  `hf_order` int(11) DEFAULT '0',
+  `hf_question` text,
+  `hf_answer` text,
+  `sys_userid` int(11) DEFAULT NULL,
+  `sys_groupid` int(11) DEFAULT NULL,
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  PRIMARY KEY (`hf_id`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `help_faq_sections`
+--
+
+CREATE TABLE `help_faq_sections` (
+  `hfs_id` int(11) NOT NULL AUTO_INCREMENT,
+  `hfs_name` varchar(255) DEFAULT NULL,
+  `hfs_order` int(11) DEFAULT '0',
+  `sys_userid` int(11) DEFAULT NULL,
+  `sys_groupid` int(11) DEFAULT NULL,
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  PRIMARY KEY (`hfs_id`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- Table structure for table `iptables`
+--
+
+DROP TABLE IF EXISTS `iptables`;
+CREATE TABLE `iptables` (
+  `iptables_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `server_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `table` varchar(10) DEFAULT NULL COMMENT 'INPUT OUTPUT FORWARD',
+  `source_ip` varchar(16) DEFAULT NULL,
+  `destination_ip` varchar(16) DEFAULT NULL,
+  `protocol` varchar(10) DEFAULT 'TCP' COMMENT 'TCP UDP GRE',
+  `singleport` varchar(10) DEFAULT NULL,
+  `multiport` varchar(40) DEFAULT NULL,
+  `state` varchar(20) DEFAULT NULL COMMENT 'NEW ESTABLISHED RECNET etc',
+  `target` varchar(10) DEFAULT NULL COMMENT 'ACCEPT DROP REJECT LOG',
+  `active` enum('n','y') NOT NULL DEFAULT 'y',
+  PRIMARY KEY (`iptables_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_access`
+-- 
+
+CREATE TABLE `mail_access` (
+  `access_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) NOT NULL default '0',
+  `source` varchar(255) NOT NULL DEFAULT '',
+  `access` varchar(255) NOT NULL DEFAULT '',
+  `type` set('recipient','sender','client') NOT NULL DEFAULT 'recipient',
+  `active` enum('n','y') NOT NULL default 'y',
+  PRIMARY KEY  (`access_id`),
+  KEY `server_id` (`server_id`,`source`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table  `mail_backup`
+--
+
+CREATE TABLE `mail_backup` (
+  `backup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `server_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `parent_domain_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `mailuser_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `backup_mode` varchar(64) NOT NULL DEFAULT  '',
+  `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
+  `filename` varchar(255) NOT NULL DEFAULT '',
+  `filesize` VARCHAR(20) NOT NULL DEFAULT '',
+  PRIMARY KEY (`backup_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_content_filter`
+-- 
+
+CREATE TABLE `mail_content_filter` (
+  `content_filter_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `server_id` int(11) NOT NULL default '0',
+  `type` varchar(255) default NULL,
+  `pattern` varchar(255) default NULL,
+  `data` varchar(255) default NULL,
+  `action` varchar(255) default NULL,
+  `active` varchar(255) NOT NULL default 'y',
+  PRIMARY KEY  (`content_filter_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_domain`
+-- 
+
+CREATE TABLE `mail_domain` (
+  `domain_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `domain` varchar(255) NOT NULL default '',
+  `dkim` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `dkim_selector` varchar(63) NOT NULL DEFAULT 'default',
+  `dkim_private` mediumtext NULL,
+  `dkim_public` mediumtext NULL,
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`domain_id`),
+  KEY `server_id` (`server_id`,`domain`),
+  KEY `domain_active` (`domain`,`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_forwarding`
+-- 
+
+CREATE TABLE `mail_forwarding` (
+  `forwarding_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `source` varchar(255) NOT NULL DEFAULT '',
+  `destination` text,
+  `type` enum('alias','aliasdomain','forward','catchall') NOT NULL default 'alias',
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  `allow_send_as` ENUM('n','y') NOT NULL DEFAULT 'n',
+  `greylisting` enum('n','y' ) NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`forwarding_id`),
+  KEY `server_id` (`server_id`,`source`),
+  KEY `type` (`type`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_get`
+-- 
+
+CREATE TABLE `mail_get` (
+  `mailget_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `type` varchar(255) default NULL,
+  `source_server` varchar(255) default NULL,
+  `source_username` varchar(255) default NULL,
+  `source_password` varchar(64) default NULL,
+  `source_delete` varchar(255) NOT NULL default 'y',
+  `source_read_all` varchar(255) NOT NULL default 'y',
+  `destination` varchar(255) default NULL,
+  `active` varchar(255) NOT NULL default 'y',
+  PRIMARY KEY  (`mailget_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Tabellenstruktur für Tabelle `mail_mailinglist`
+--
+
+CREATE TABLE `mail_mailinglist` (
+  `mailinglist_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `domain` varchar(255) NOT NULL DEFAULT '',
+  `listname` varchar(255) NOT NULL DEFAULT '',
+  `email` varchar(255) NOT NULL DEFAULT '',
+  `password` varchar(255) NOT NULL DEFAULT '',
+  PRIMARY KEY  (`mailinglist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for Table `mail_relay_recipient`
+--
+
+CREATE TABLE IF NOT EXISTS `mail_relay_recipient` (
+  `relay_recipient_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `source` varchar(255) DEFAULT NULL,
+  `access` varchar(255) NOT NULL DEFAULT 'OK',
+  `active` varchar(255) NOT NULL DEFAULT 'y',
+  PRIMARY KEY (`relay_recipient_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_traffic`
+-- 
+
+CREATE TABLE `mail_traffic` (
+  `traffic_id` int(11) unsigned NOT NULL auto_increment,
+  `mailuser_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `month` char(7) NOT NULL DEFAULT '',
+  `traffic` bigint(20) unsigned NOT NULL DEFAULT '0',
+  PRIMARY KEY  (`traffic_id`),
+  KEY `mailuser_id` (`mailuser_id`,`month`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_transport`
+-- 
+
+CREATE TABLE `mail_transport` (
+  `transport_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `domain` varchar(255) NOT NULL default '',
+  `transport` varchar(255) NOT NULL DEFAULT '',
+  `sort_order` int(11) unsigned NOT NULL default '5',
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`transport_id`),
+  KEY `server_id` (`server_id`,`transport`),
+  KEY `server_id_2` (`server_id`,`domain`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_user`
+-- 
+
+CREATE TABLE `mail_user` (
+  `mailuser_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `email` varchar(255) NOT NULL default '',
+  `login` varchar(255) NOT NULL default '',
+  `password` varchar(255) NOT NULL default '',
+  `name` varchar(255) NOT NULL default '',
+  `uid` int(11) NOT NULL default '5000',
+  `gid` int(11) NOT NULL default '5000',
+  `maildir` varchar(255) NOT NULL default '',
+  `maildir_format` varchar(255) NOT NULL default 'maildir',
+  `quota` bigint(20) NOT NULL default '-1',
+  `cc` varchar(255) NOT NULL default '',
+  `sender_cc` varchar(255) NOT NULL default '',
+  `homedir` varchar(255) NOT NULL default '',
+  `autoresponder` enum('n','y') NOT NULL default 'n',
+  `autoresponder_start_date` datetime NULL default NULL,
+  `autoresponder_end_date` datetime NULL default NULL,
+  `autoresponder_subject` varchar(255) NOT NULL default 'Out of office reply',
+  `autoresponder_text` mediumtext NULL,
+  `move_junk` enum('n','y') NOT NULL default 'n',
+  `custom_mailfilter` mediumtext,
+  `postfix` enum('n','y') NOT NULL default 'y',
+  `greylisting` enum('n','y' ) NOT NULL DEFAULT 'n',
+  `access` enum('n','y') NOT NULL default 'y',
+  `disableimap` enum('n','y') NOT NULL default 'n',
+  `disablepop3` enum('n','y') NOT NULL default 'n',
+  `disabledeliver` enum('n','y') NOT NULL default 'n',
+  `disablesmtp` enum('n','y') NOT NULL default 'n',
+  `disablesieve` enum('n','y') NOT NULL default 'n',
+  `disablesieve-filter` enum('n','y') NOT NULL default 'n',
+  `disablelda` enum('n','y') NOT NULL default 'n',
+  `disablelmtp` enum('n','y') NOT NULL default 'n',
+  `disabledoveadm` enum('n','y') NOT NULL default 'n',
+  `last_quota_notification` date NULL default NULL,
+  `backup_interval` VARCHAR( 255 ) NOT NULL default 'none',
+  `backup_copies` INT NOT NULL DEFAULT '1',
+  PRIMARY KEY  (`mailuser_id`),
+  KEY `server_id` (`server_id`,`email`),
+  KEY `email_access` (`email`,`access`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `mail_user_filter`
+-- 
+
+CREATE TABLE `mail_user_filter` (
+  `filter_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `mailuser_id` int(11) unsigned NOT NULL default '0',
+  `rulename` varchar(64) default NULL,
+  `source` varchar(255) default NULL,
+  `searchterm` varchar(255) default NULL,
+  `op` varchar(255) default NULL,
+  `action` varchar(255) default NULL,
+  `target` varchar(255) default NULL,
+  `active` enum('n','y') NOT NULL default 'y',
+  PRIMARY KEY  (`filter_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `monitor_data`
+--
+
+CREATE TABLE `monitor_data` (
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `type` varchar(255) NOT NULL default '',
+  `created` int(11) unsigned NOT NULL default '0',
+  `data` mediumtext,
+  `state` enum('no_state','unknown','ok','info','warning','critical','error') NOT NULL DEFAULT 'unknown',
+  PRIMARY KEY (`server_id`,`type`,`created`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `openvz_ip`
+--
+
+CREATE TABLE IF NOT EXISTS `openvz_ip` (
+  `ip_address_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `ip_address` varchar(39) DEFAULT NULL,
+  `vm_id` int(11) NOT NULL DEFAULT '0',
+  `reserved` varchar(255) NOT NULL DEFAULT 'n',
+  `additional` varchar(255) NOT NULL DEFAULT 'n',
+  PRIMARY KEY (`ip_address_id`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+
+--
+-- Dumping data for table `openvz_ip`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `openvz_ostemplate`
+--
+
+CREATE TABLE IF NOT EXISTS `openvz_ostemplate` (
+  `ostemplate_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `template_name` varchar(255) DEFAULT NULL,
+  `template_file` varchar(255) NOT NULL DEFAULT '',
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `allservers` varchar(255) NOT NULL DEFAULT 'y',
+  `active` varchar(255) NOT NULL DEFAULT 'y',
+  `description` text,
+  PRIMARY KEY (`ostemplate_id`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+
+--
+-- Dumping data for table `openvz_ostemplate`
+--
+
+INSERT INTO `openvz_ostemplate` (`ostemplate_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `template_file`, `server_id`, `allservers`, `active`, `description`) VALUES(1, 1, 1, 'riud', 'riud', '', 'Debian minimal', 'debian-minimal-x86', 1, 'y', 'y', 'Debian minimal image.');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `openvz_template`
+--
+
+CREATE TABLE IF NOT EXISTS `openvz_template` (
+  `template_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `template_name` varchar(255) DEFAULT NULL,
+  `diskspace` int(11) NOT NULL DEFAULT '0',
+  `traffic` int(11) NOT NULL DEFAULT '-1',
+  `bandwidth` int(11) NOT NULL DEFAULT '-1',
+  `ram` int(11) NOT NULL DEFAULT '0',
+  `ram_burst` int(11) NOT NULL DEFAULT '0',
+  `cpu_units` int(11) NOT NULL DEFAULT '1000',
+  `cpu_num` int(11) NOT NULL DEFAULT '4',
+  `cpu_limit` int(11) NOT NULL DEFAULT '400',
+  `io_priority` int(11) NOT NULL DEFAULT '4',
+  `active` varchar(255) NOT NULL DEFAULT 'y',
+  `description` text,
+  `numproc` varchar(255) DEFAULT NULL,
+  `numtcpsock` varchar(255) DEFAULT NULL,
+  `numothersock` varchar(255) DEFAULT NULL,
+  `vmguarpages` varchar(255) DEFAULT NULL,
+  `kmemsize` varchar(255) DEFAULT NULL,
+  `tcpsndbuf` varchar(255) DEFAULT NULL,
+  `tcprcvbuf` varchar(255) DEFAULT NULL,
+  `othersockbuf` varchar(255) DEFAULT NULL,
+  `dgramrcvbuf` varchar(255) DEFAULT NULL,
+  `oomguarpages` varchar(255) DEFAULT NULL,
+  `privvmpages` varchar(255) DEFAULT NULL,
+  `lockedpages` varchar(255) DEFAULT NULL,
+  `shmpages` varchar(255) DEFAULT NULL,
+  `physpages` varchar(255) DEFAULT NULL,
+  `numfile` varchar(255) DEFAULT NULL,
+  `avnumproc` varchar(255) DEFAULT NULL,
+  `numflock` varchar(255) DEFAULT NULL,
+  `numpty` varchar(255) DEFAULT NULL,
+  `numsiginfo` varchar(255) DEFAULT NULL,
+  `dcachesize` varchar(255) DEFAULT NULL,
+  `numiptent` varchar(255) DEFAULT NULL,
+  `swappages` varchar(255) DEFAULT NULL,
+  `hostname` varchar(255) DEFAULT NULL,
+  `nameserver` varchar(255) DEFAULT NULL,
+  `create_dns` varchar(1) NOT NULL DEFAULT 'n',
+  `capability` varchar(255) DEFAULT NULL,
+  `features` varchar(255) DEFAULT NULL,
+  `iptables` varchar(255) DEFAULT NULL,
+  `custom` text,
+  PRIMARY KEY (`template_id`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+
+--
+-- Dumping data for table `openvz_template`
+--
+
+INSERT INTO `openvz_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `diskspace`, `traffic`, `bandwidth`, `ram`, `ram_burst`, `cpu_units`, `cpu_num`, `cpu_limit`, `io_priority`, `active`, `description`, `numproc`, `numtcpsock`, `numothersock`, `vmguarpages`, `kmemsize`, `tcpsndbuf`, `tcprcvbuf`, `othersockbuf`, `dgramrcvbuf`, `oomguarpages`, `privvmpages`, `lockedpages`, `shmpages`, `physpages`, `numfile`, `avnumproc`, `numflock`, `numpty`, `numsiginfo`, `dcachesize`, `numiptent`, `swappages`, `hostname`, `nameserver`, `create_dns`, `capability`, `features`, `iptables`, `custom`) VALUES(1, 1, 1, 'riud', 'riud', '', 'small', 10, -1, -1, 256, 512, 1000, 4, 400, 4, 'y', '', '999999:999999', '7999992:7999992', '7999992:7999992', '65536:unlimited', '2147483646:2147483646', '214748160:396774400', '214748160:396774400', '214748160:396774400', '214748160:396774400', '65536:65536', '131072:139264', '999999:999999', '65536:65536', '0:2147483647', '23999976:23999976', '180:180', '999999:999999', '500000:500000', '999999:999999', '2147483646:2147483646', '999999:999999', '256000:256000', 'v{VEID}.test.tld', '8.8.8.8 8.8.4.4', 'n', '', '', '', '');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `openvz_traffic`
+--
+
+CREATE TABLE IF NOT EXISTS `openvz_traffic` (
+  `veid` int(11) NOT NULL DEFAULT '0',
+  `traffic_date` date NULL DEFAULT NULL,
+  `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
+  UNIQUE KEY (`veid`,`traffic_date`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `openvz_traffic`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `openvz_vm`
+--
+
+CREATE TABLE IF NOT EXISTS `openvz_vm` (
+  `vm_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `veid` int(10) unsigned NOT NULL DEFAULT '0',
+  `ostemplate_id` int(11) NOT NULL DEFAULT '0',
+  `template_id` int(11) NOT NULL DEFAULT '0',
+  `ip_address` varchar(255) NOT NULL DEFAULT '',
+  `hostname` varchar(255) DEFAULT NULL,
+  `vm_password` varchar(255) DEFAULT NULL,
+  `start_boot` varchar(255) NOT NULL DEFAULT 'y',
+  `bootorder` int(11) NOT NULL DEFAULT '1',
+  `active` varchar(255) NOT NULL DEFAULT 'y',
+  `active_until_date` date NULL DEFAULT NULL,
+  `description` text,
+  `diskspace` int(11) NOT NULL DEFAULT '0',
+  `traffic` int(11) NOT NULL DEFAULT '-1',
+  `bandwidth` int(11) NOT NULL DEFAULT '-1',
+  `ram` int(11) NOT NULL DEFAULT '0',
+  `ram_burst` int(11) NOT NULL DEFAULT '0',
+  `cpu_units` int(11) NOT NULL DEFAULT '1000',
+  `cpu_num` int(11) NOT NULL DEFAULT '4',
+  `cpu_limit` int(11) NOT NULL DEFAULT '400',
+  `io_priority` int(11) NOT NULL DEFAULT '4',
+  `nameserver` varchar(255) NOT NULL DEFAULT '8.8.8.8 8.8.4.4',
+  `create_dns` varchar(1) NOT NULL DEFAULT 'n',
+  `capability` text,
+  `features` text,
+  `iptabless` text,
+  `config` mediumtext,
+  `custom` text,
+  PRIMARY KEY (`vm_id`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+
+--
+-- Dumping data for table `openvz_vm`
+--
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `remote_session`
+-- 
+
+CREATE TABLE `remote_session` (
+  `remote_session` varchar(64) NOT NULL DEFAULT '',
+  `remote_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `remote_functions` text,
+  `client_login` tinyint(1) unsigned NOT NULL default '0',
+  `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
+  PRIMARY KEY  (`remote_session`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `remote_user`
+-- 
+
+CREATE TABLE `remote_user` (
+  `remote_userid` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `remote_username` varchar(64) NOT NULL DEFAULT '',
+  `remote_password` varchar(64) NOT NULL DEFAULT '',
+  `remote_access` enum('y','n') NOT NULL DEFAULT 'y',
+  `remote_ips` TEXT,
+  `remote_functions` text,
+  PRIMARY KEY  (`remote_userid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `server`
+-- 
+
+CREATE TABLE `server` (
+  `server_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_name` varchar(255) NOT NULL default '',
+  `mail_server` tinyint(1) NOT NULL default '0',
+  `web_server` tinyint(1) NOT NULL default '0',
+  `dns_server` tinyint(1) NOT NULL default '0',
+  `file_server` tinyint(1) NOT NULL default '0',
+  `db_server` tinyint(1) NOT NULL default '0',
+  `vserver_server` tinyint(1) NOT NULL default '0',
+  `proxy_server` tinyint(1) NOT NULL default '0',
+  `firewall_server` tinyint(1) NOT NULL default '0',
+  `xmpp_server` tinyint(1) NOT NULL default '0',
+  `config` text,
+  `updated` bigint(20) unsigned NOT NULL default '0',
+  `mirror_server_id` int(11) unsigned NOT NULL default '0',
+  `dbversion` int(11) unsigned NOT NULL default '1',
+  `active` tinyint(1) NOT NULL default '1',
+  PRIMARY KEY  (`server_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `server_ip`
+-- 
+
+CREATE TABLE `server_ip` (
+  `server_ip_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `client_id` int(11) unsigned NOT NULL default '0',
+  `ip_type` enum(  'IPv4',  'IPv6' ) NOT NULL DEFAULT  'IPv4',
+  `ip_address` varchar(39) default NULL,
+  `virtualhost` enum('n','y') NOT NULL default 'y',
+  `virtualhost_port` varchar(255) default '80,443',
+  PRIMARY KEY  (`server_ip_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `server_ip_map`
+-- 
+
+CREATE TABLE `server_ip_map` (
+  `server_ip_map_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `source_ip` varchar(15) DEFAULT NULL,
+  `destination_ip` varchar(35) DEFAULT '',
+  `active` enum('n','y') NOT NULL DEFAULT 'y',
+  PRIMARY KEY (`server_ip_map_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table  `server_php`
+--
+
+CREATE TABLE `server_php` (
+  `server_php_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `client_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `name` varchar(255) DEFAULT NULL,
+  `php_fastcgi_binary` varchar(255) DEFAULT NULL,
+  `php_fastcgi_ini_dir` varchar(255) DEFAULT NULL,
+  `php_fpm_init_script` varchar(255) DEFAULT NULL,
+  `php_fpm_ini_dir` varchar(255) DEFAULT NULL,
+  `php_fpm_pool_dir` varchar(255) DEFAULT NULL,
+  `active` enum('n','y') NOT NULL DEFAULT 'y',
+  PRIMARY KEY (`server_php_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `shell_user`
+--
+
+CREATE TABLE `shell_user` (
+  `shell_user_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `parent_domain_id` int(11) unsigned NOT NULL default '0',
+  `username` varchar(64) default NULL,
+  `username_prefix` varchar(50) NOT NULL default '',
+  `password` varchar(64) default NULL,
+  `quota_size` bigint(20) NOT NULL default '-1',
+  `active` enum('n','y') NOT NULL default 'y',
+  `puser` varchar(255) default NULL,
+  `pgroup` varchar(255) default NULL,
+  `shell` varchar(255) NOT NULL default '/bin/bash',
+  `dir` varchar(255) default NULL,
+  `chroot` varchar(255) NOT NULL DEFAULT '',
+  `ssh_rsa` text,
+  PRIMARY KEY  (`shell_user_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `software_package`
+-- 
+
+CREATE TABLE `software_package` (
+  `package_id` int(11) unsigned NOT NULL auto_increment,
+  `software_repo_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `package_name` varchar(64) NOT NULL DEFAULT '',
+  `package_title` varchar(64) NOT NULL DEFAULT '',
+  `package_description` text,
+  `package_version` varchar(8) default NULL,
+  `package_type` enum('ispconfig','app','web') NOT NULL default 'app',
+  `package_installable` enum('yes','no','key') NOT NULL default 'yes',
+  `package_requires_db` enum('no','mysql') NOT NULL default 'no',
+  `package_remote_functions` text,
+  `package_key` varchar(255) NOT NULL DEFAULT '',
+  `package_config` text,
+  PRIMARY KEY  (`package_id`),
+  UNIQUE KEY `package_name` (`package_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `software_repo`
+-- 
+
+CREATE TABLE `software_repo` (
+  `software_repo_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `repo_name` varchar(64) default NULL,
+  `repo_url` varchar(255) default NULL,
+  `repo_username` varchar(64) default NULL,
+  `repo_password` varchar(64) default NULL,
+  `active` enum('n','y') NOT NULL default 'y',
+  PRIMARY KEY  (`software_repo_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `software_update`
+-- 
+
+CREATE TABLE `software_update` (
+  `software_update_id` int(11) unsigned NOT NULL auto_increment,
+  `software_repo_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `package_name` varchar(64) NOT NULL DEFAULT '',
+  `update_url` varchar(255) NOT NULL DEFAULT '',
+  `update_md5` varchar(255) NOT NULL DEFAULT '',
+  `update_dependencies` varchar(255) NOT NULL DEFAULT '',
+  `update_title` varchar(64) NOT NULL DEFAULT '',
+  `v1` tinyint(1) NOT NULL default '0',
+  `v2` tinyint(1) NOT NULL default '0',
+  `v3` tinyint(1) NOT NULL default '0',
+  `v4` tinyint(1) NOT NULL default '0',
+  `type` enum('full','update') NOT NULL default 'full',
+  PRIMARY KEY  (`software_update_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `software_update_inst`
+-- 
+
+CREATE TABLE `software_update_inst` (
+  `software_update_inst_id` int(11) unsigned NOT NULL auto_increment,
+  `software_update_id` int(11) unsigned NOT NULL default '0',
+  `package_name` varchar(64) NOT NULL DEFAULT '',
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `status` enum('none','installing','installed','deleting','deleted','failed') NOT NULL default 'none',
+  PRIMARY KEY  (`software_update_inst_id`),
+  UNIQUE KEY `software_update_id` (`software_update_id`,`package_name`,`server_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `spamfilter_policy`
+-- 
+
+CREATE TABLE `spamfilter_policy` (
+  `id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `policy_name` varchar(64) default NULL,
+  `virus_lover` enum('N','Y') default 'N',
+  `spam_lover` enum('N','Y') default 'N',
+  `banned_files_lover` enum('N','Y') default 'N',
+  `bad_header_lover` enum('N','Y') default 'N',
+  `bypass_virus_checks` enum('N','Y') default 'N',
+  `bypass_spam_checks` enum('N','Y') default 'N',
+  `bypass_banned_checks` enum('N','Y') default 'N',
+  `bypass_header_checks` enum('N','Y') default 'N',
+  `spam_modifies_subj` enum('N','Y') default 'N',
+  `virus_quarantine_to` varchar(255) default NULL,
+  `spam_quarantine_to` varchar(255) default NULL,
+  `banned_quarantine_to` varchar(255) default NULL,
+  `bad_header_quarantine_to` varchar(255) default NULL,
+  `clean_quarantine_to` varchar(255) default NULL,
+  `other_quarantine_to` varchar(255) default NULL,
+  `spam_tag_level` DECIMAL(5,2) default NULL,
+  `spam_tag2_level` DECIMAL(5,2) default NULL,
+  `spam_kill_level` DECIMAL(5,2) default NULL,
+  `spam_dsn_cutoff_level` DECIMAL(5,2) default NULL,
+  `spam_quarantine_cutoff_level` DECIMAL(5,2) default NULL,
+  `addr_extension_virus` varchar(64) default NULL,
+  `addr_extension_spam` varchar(64) default NULL,
+  `addr_extension_banned` varchar(64) default NULL,
+  `addr_extension_bad_header` varchar(64) default NULL,
+  `warnvirusrecip` enum('N','Y') default 'N',
+  `warnbannedrecip` enum('N','Y') default 'N',
+  `warnbadhrecip` enum('N','Y') default 'N',
+  `newvirus_admin` varchar(64) default NULL,
+  `virus_admin` varchar(64) default NULL,
+  `banned_admin` varchar(64) default NULL,
+  `bad_header_admin` varchar(64) default NULL,
+  `spam_admin` varchar(64) default NULL,
+  `spam_subject_tag` varchar(64) default NULL,
+  `spam_subject_tag2` varchar(64) default NULL,
+  `message_size_limit` int(11) unsigned default NULL,
+  `banned_rulenames` varchar(64) default NULL,
+  `policyd_quota_in` int(11) NOT NULL DEFAULT  '-1',
+  `policyd_quota_in_period` int(11) NOT NULL DEFAULT  '24',
+  `policyd_quota_out` int(11) NOT NULL DEFAULT  '-1',
+  `policyd_quota_out_period` int(11) NOT NULL DEFAULT  '24',
+  `policyd_greylist` ENUM(  'Y',  'N' ) NOT NULL DEFAULT  'N',
+  PRIMARY KEY  (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `spamfilter_users`
+-- 
+
+CREATE TABLE `spamfilter_users` (
+  `id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `priority` tinyint(3) unsigned NOT NULL default '7',
+  `policy_id` int(11) unsigned NOT NULL default '1',
+  `email` varchar(255) NOT NULL DEFAULT '',
+  `fullname` varchar(64) default NULL,
+  `local` varchar(1) default NULL,
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `email` (`email`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `spamfilter_wblist`
+-- 
+
+CREATE TABLE `spamfilter_wblist` (
+  `wblist_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `wb` enum('W','B') NOT NULL default 'W',
+  `rid` int(11) unsigned NOT NULL DEFAULT '0',
+  `email` varchar(255) NOT NULL DEFAULT '',
+  `priority` tinyint(3) unsigned NOT NULL DEFAULT '0',
+  `active` enum('y','n') NOT NULL default 'y',
+  PRIMARY KEY  (`wblist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `support_message`
+-- 
+
+CREATE TABLE `support_message` (
+  `support_message_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `recipient_id` int(11) unsigned NOT NULL default '0',
+  `sender_id` int(11) unsigned NOT NULL default '0',
+  `subject` varchar(255) default NULL,
+  `message` text default NULL,
+  `tstamp` int(11) NOT NULL default '0',
+  PRIMARY KEY  (`support_message_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sys_config`
+--
+
+CREATE TABLE `sys_config` (
+  `group` varchar(64) NOT NULL DEFAULT '',
+  `name` varchar(64) NOT NULL DEFAULT '',
+  `value` varchar(255) NOT NULL DEFAULT '',
+  PRIMARY KEY (`group`, `name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sys_cron`
+--
+
+CREATE TABLE IF NOT EXISTS `sys_cron` (
+  `name` varchar(50) NOT NULL DEFAULT '',
+  `last_run` datetime NULL DEFAULT NULL,
+  `next_run` datetime NULL DEFAULT NULL,
+  `running` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
+  PRIMARY KEY (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table  `sys_datalog`
+--
+
+CREATE TABLE `sys_datalog` (
+  `datalog_id` int(11) unsigned NOT NULL auto_increment,
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `dbtable` varchar(255) NOT NULL default '',
+  `dbidx` varchar(255) NOT NULL default '',
+  `action` char(1) NOT NULL default '',
+  `tstamp` int(11) NOT NULL default '0',
+  `user` varchar(255) NOT NULL default '',
+  `data` longtext,
+  `status` set('pending','ok','warning','error') NOT NULL default 'ok',
+  `error` mediumtext,
+  `session_id` varchar(64) NOT NULL DEFAULT '',
+  PRIMARY KEY  (`datalog_id`),
+  KEY `server_id` (`server_id`,`status`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `sys_dbsync`
+-- 
+
+CREATE TABLE `sys_dbsync` (
+  `id` int(11) unsigned NOT NULL auto_increment,
+  `jobname` varchar(64) NOT NULL default '',
+  `sync_interval_minutes` int(11) unsigned NOT NULL default '0',
+  `db_type` varchar(16) NOT NULL default '',
+  `db_host` varchar(255) NOT NULL default '',
+  `db_name` varchar(64) NOT NULL default '',
+  `db_username` varchar(64) NOT NULL default '',
+  `db_password` varchar(64) NOT NULL default '',
+  `db_tables` varchar(255) NOT NULL default 'admin,forms',
+  `empty_datalog` int(11) unsigned NOT NULL default '0',
+  `sync_datalog_external` int(11) unsigned NOT NULL default '0',
+  `active` tinyint(1) NOT NULL default '1',
+  `last_datalog_id` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  KEY `last_datalog_id` (`last_datalog_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `sys_filesync`
+-- 
+
+CREATE TABLE `sys_filesync` (
+  `id` int(11) unsigned NOT NULL auto_increment,
+  `jobname` varchar(64) NOT NULL default '',
+  `sync_interval_minutes` int(11) unsigned NOT NULL default '0',
+  `ftp_host` varchar(255) NOT NULL default '',
+  `ftp_path` varchar(255) NOT NULL default '',
+  `ftp_username` varchar(64) NOT NULL default '',
+  `ftp_password` varchar(64) NOT NULL default '',
+  `local_path` varchar(255) NOT NULL default '',
+  `wput_options` varchar(255) NOT NULL default '--timestamping --reupload --dont-continue',
+  `active` tinyint(1) NOT NULL default '1',
+  PRIMARY KEY  (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `sys_group`
+-- 
+
+CREATE TABLE `sys_group` (
+  `groupid` int(11) unsigned NOT NULL auto_increment,
+  `name` varchar(64) NOT NULL default '',
+  `description` text,
+  `client_id` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`groupid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `sys_ini`
+-- 
+
+CREATE TABLE `sys_ini` (
+  `sysini_id` int(11) unsigned NOT NULL auto_increment,
+  `config` longtext,
+  `default_logo` text NOT NULL,
+  `custom_logo` text NOT NULL,
+  PRIMARY KEY  (`sysini_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `sys_log`
+-- 
+
+CREATE TABLE `sys_log` (
+  `syslog_id` int(11) unsigned NOT NULL auto_increment,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `datalog_id` int(11) unsigned NOT NULL default '0',
+  `loglevel` tinyint(4) NOT NULL default '0',
+  `tstamp` int(11) unsigned NOT NULL DEFAULT '0',
+  `message` text,
+  PRIMARY KEY  (`syslog_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sys_remoteaction`
+--
+
+CREATE TABLE `sys_remoteaction` (
+  `action_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `tstamp` int(11) NOT NULL DEFAULT '0',
+  `action_type` varchar(20) NOT NULL DEFAULT '',
+  `action_param` mediumtext,
+  `action_state` enum('pending','ok','warning','error') NOT NULL DEFAULT 'pending',
+  `response` mediumtext,
+  PRIMARY KEY (`action_id`),
+  KEY `server_id` (`server_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sys_session`
+--
+
+CREATE TABLE `sys_session` (
+  `session_id` varchar(64) NOT NULL DEFAULT '',
+  `date_created` datetime NULL DEFAULT NULL,
+  `last_updated` datetime NULL DEFAULT NULL,
+  `permanent` enum('n','y') NOT NULL DEFAULT 'n',
+  `session_data` longtext,
+  PRIMARY KEY (`session_id`),
+  KEY `last_updated` (`last_updated`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `sys_theme`
+--
+
+CREATE TABLE IF NOT EXISTS `sys_theme` (
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `var_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `tpl_name` varchar(32) NOT NULL DEFAULT '',
+  `username` varchar(64) NOT NULL DEFAULT '',
+  `logo_url` varchar(255) NOT NULL DEFAULT '',
+  PRIMARY KEY (`var_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `sys_user`
+-- 
+
+CREATE TABLE `sys_user` (
+  `userid` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '1' COMMENT 'Created by userid',
+  `sys_groupid` int(11) unsigned NOT NULL default '1' COMMENT 'Created by groupid',
+  `sys_perm_user` varchar(5) NOT NULL default 'riud',
+  `sys_perm_group` varchar(5) NOT NULL default 'riud',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `username` varchar(64) NOT NULL default '',
+  `passwort` varchar(64) NOT NULL default '',
+  `modules` varchar(255) NOT NULL default '',
+  `startmodule` varchar(255) NOT NULL default '',
+  `app_theme` varchar(32) NOT NULL default 'default',
+  `typ` varchar(16) NOT NULL default 'user',
+  `active` tinyint(1) NOT NULL default '1',
+  `language` varchar(2) NOT NULL default 'en',
+  `groups` TEXT,
+  `default_group` int(11) unsigned NOT NULL default '0',
+  `client_id` int(11) unsigned NOT NULL default '0',
+  `id_rsa` VARCHAR( 2000 ) NOT NULL default '',
+  `ssh_rsa` VARCHAR( 600 ) NOT NULL default '',
+  `lost_password_function` tinyint(1) NOT NULL default '1',
+  `lost_password_hash` VARCHAR(50) NOT NULL default '',
+  `lost_password_reqtime` DATETIME NULL default NULL,
+  PRIMARY KEY  (`userid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `webdav_user`
+--
+
+CREATE TABLE `webdav_user` (
+  `webdav_user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `parent_domain_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `username` varchar(64) DEFAULT NULL,
+  `username_prefix` varchar(50) NOT NULL default '',
+  `password` varchar(64) DEFAULT NULL,
+  `active` enum('n','y') NOT NULL DEFAULT 'y',
+  `dir` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`webdav_user_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `web_backup`
+--
+
+CREATE TABLE `web_backup` (
+  `backup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `server_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `parent_domain_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `backup_type` enum('web','mysql','mongodb') NOT NULL DEFAULT 'web',
+  `backup_mode` varchar(64) NOT NULL DEFAULT  '',
+  `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
+  `filename` varchar(255) NOT NULL DEFAULT '',
+  `filesize` VARCHAR(20) NOT NULL DEFAULT '',
+  PRIMARY KEY (`backup_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `web_database`
+--
+
+CREATE TABLE `web_database` (
+  `database_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `parent_domain_id` int(11) unsigned NOT NULL DEFAULT  '0',
+  `type` varchar(16) NOT NULL DEFAULT 'y',
+  `database_name` varchar(64) DEFAULT NULL,
+  `database_name_prefix` varchar(50) NOT NULL default '',
+  `database_quota` int(11) DEFAULT NULL,
+  `quota_exceeded` enum('n','y') NOT NULL DEFAULT 'n',
+  `last_quota_notification` date NULL default NULL,
+  `database_user_id` int(11) unsigned DEFAULT NULL,
+  `database_ro_user_id` int(11) unsigned DEFAULT NULL,
+  `database_charset` varchar(64) DEFAULT NULL,
+  `remote_access` enum('n','y') NOT NULL DEFAULT 'y',
+  `remote_ips` text,
+  `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
+  `backup_copies` INT NOT NULL DEFAULT '1',
+  `active` enum('n','y') NOT NULL DEFAULT 'y',
+  PRIMARY KEY (`database_id`),
+  KEY `database_user_id` (`database_user_id`),
+  KEY `database_ro_user_id` (`database_ro_user_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Tabellenstruktur für Tabelle `web_database_user`
+--
+
+CREATE TABLE IF NOT EXISTS `web_database_user` (
+  `database_user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) UNSIGNED NOT NULL DEFAULT '0',
+  `database_user` varchar(64) DEFAULT NULL,
+  `database_user_prefix` varchar(50) NOT NULL default '',
+  `database_password` varchar(64) DEFAULT NULL,
+  `database_password_mongo` varchar(32) DEFAULT NULL,
+  PRIMARY KEY (`database_user_id`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `web_domain`
+-- 
+
+CREATE TABLE `web_domain` (
+  `domain_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) default NULL,
+  `sys_perm_group` varchar(5) default NULL,
+  `sys_perm_other` varchar(5) default NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `ip_address` varchar(39) default NULL,
+  `ipv6_address` VARCHAR( 255 ) default NULL,
+  `domain` varchar(255) default NULL,
+  `type` varchar(32) default NULL,
+  `parent_domain_id` int(11) unsigned NOT NULL default '0',
+  `vhost_type` varchar(32) default NULL,
+  `document_root` varchar(255) default NULL,
+  `web_folder` varchar(100) default NULL,
+  `system_user` varchar(255) default NULL,
+  `system_group` varchar(255) default NULL,
+  `hd_quota` bigint(20) NOT NULL default '0',
+  `traffic_quota` bigint(20) NOT NULL default '-1',
+  `cgi` enum('n','y') NOT NULL default 'y',
+  `ssi` enum('n','y') NOT NULL default 'y',
+  `suexec` enum('n','y') NOT NULL default 'y',
+  `errordocs` tinyint(1) NOT NULL default '1',
+  `is_subdomainwww` tinyint(1) NOT NULL default '1',
+  `subdomain` enum('none','www','*') NOT NULL default 'none',
+  `php` varchar(32) NOT NULL default 'y',
+  `ruby` enum('n','y') NOT NULL default 'n',
+  `python` enum('n','y') NOT NULL default 'n',
+  `perl` enum('n','y') NOT NULL default 'n',
+  `redirect_type` varchar(255) default NULL,
+  `redirect_path` varchar(255) default NULL,
+  `seo_redirect` varchar(255) default NULL,
+  `rewrite_to_https` ENUM('y','n') NOT NULL DEFAULT 'n',
+  `ssl` enum('n','y') NOT NULL default 'n',
+  `ssl_letsencrypt` enum('n','y') NOT NULL DEFAULT 'n',
+  `ssl_letsencrypt_exclude` enum('n','y') NOT NULL DEFAULT 'n',
+  `ssl_state` varchar(255) NULL,
+  `ssl_locality` varchar(255) NULL,
+  `ssl_organisation` varchar(255) NULL,
+  `ssl_organisation_unit` varchar(255) NULL,
+  `ssl_country` varchar(255) NULL,
+  `ssl_domain` varchar(255) NULL,
+  `ssl_request` mediumtext NULL,
+  `ssl_cert` mediumtext NULL,
+  `ssl_bundle` mediumtext NULL,
+  `ssl_key` mediumtext NULL,
+  `ssl_action` varchar(16) NULL,
+  `stats_password` varchar(255) default NULL,
+  `stats_type` varchar(255) default 'awstats',
+  `allow_override` varchar(255) NOT NULL default 'All',
+  `apache_directives` mediumtext,
+  `nginx_directives` mediumtext,
+  `php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'y',
+  `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n',
+  `pm` enum('static','dynamic','ondemand') NOT NULL DEFAULT 'dynamic',
+  `pm_max_children` int(11) NOT NULL DEFAULT '10',
+  `pm_start_servers` int(11) NOT NULL DEFAULT '2',
+  `pm_min_spare_servers` int(11) NOT NULL DEFAULT '1',
+  `pm_max_spare_servers` int(11) NOT NULL DEFAULT '5',
+  `pm_process_idle_timeout` int(11) NOT NULL DEFAULT '10',
+  `pm_max_requests` int(11) NOT NULL DEFAULT '0',
+  `php_open_basedir` mediumtext,
+  `custom_php_ini` mediumtext,
+  `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
+  `backup_copies` INT NOT NULL DEFAULT '1',
+  `backup_excludes` mediumtext,
+  `active` enum('n','y') NOT NULL default 'y',
+  `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
+  `fastcgi_php_version` varchar(255) DEFAULT NULL,
+  `proxy_directives` mediumtext,
+  `enable_spdy` ENUM('y','n') NULL DEFAULT 'n',
+  `last_quota_notification` date NULL default NULL,
+  `rewrite_rules` mediumtext,
+  `added_date` date NULL DEFAULT NULL,
+  `added_by` varchar(255) DEFAULT NULL,
+  `directive_snippets_id` int(11) unsigned NOT NULL default '0',
+  `enable_pagespeed` ENUM('y','n') NOT NULL DEFAULT 'n',
+  `http_port` int(11) unsigned NOT NULL DEFAULT '80',
+  `https_port` int(11) unsigned NOT NULL DEFAULT '443',
+  `folder_directive_snippets` text,
+  `log_retention` int(11) NOT NULL DEFAULT '10',
+  PRIMARY KEY  (`domain_id`),
+  UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `web_folder`
+--
+
+CREATE TABLE IF NOT EXISTS `web_folder` (
+  `web_folder_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `parent_domain_id` int(11) NOT NULL DEFAULT '0',
+  `path` varchar(255) DEFAULT NULL,
+  `active` varchar(255) NOT NULL DEFAULT 'y',
+  PRIMARY KEY (`web_folder_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `web_folder`
+--
+
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `web_folder_user`
+--
+
+CREATE TABLE IF NOT EXISTS `web_folder_user` (
+  `web_folder_user_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `web_folder_id` int(11) NOT NULL DEFAULT '0',
+  `username` varchar(255) DEFAULT NULL,
+  `password` varchar(255) DEFAULT NULL,
+  `active` varchar(255) NOT NULL DEFAULT 'y',
+  PRIMARY KEY (`web_folder_user_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Dumping data for table `web_folder_user`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table  `web_traffic`
+--
+
+CREATE TABLE `web_traffic` (
+  `hostname` varchar(255) NOT NULL DEFAULT '',
+  `traffic_date` date NULL DEFAULT NULL,
+  `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
+  UNIQUE KEY  (`hostname`,`traffic_date`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `xmpp_domain`
+--
+
+CREATE TABLE `xmpp_domain` (
+  `domain_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `domain` varchar(255) NOT NULL default '',
+
+  `management_method` ENUM( 'normal', 'maildomain' ) NOT NULL default 'normal',
+  `public_registration` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `registration_url` varchar(255) NOT NULL DEFAULT '',
+  `registration_message` varchar(255) NOT NULL DEFAULT '',
+  `domain_admins` text,
+
+  `use_pubsub` enum('n','y') NOT NULL DEFAULT 'n',
+  `use_proxy` enum('n','y') NOT NULL DEFAULT 'n',
+  `use_anon_host` enum('n','y') NOT NULL DEFAULT 'n',
+
+  `use_vjud` enum('n','y') NOT NULL DEFAULT 'n',
+  `vjud_opt_mode` enum('in', 'out') NOT NULL DEFAULT 'in',
+
+  `use_muc_host` enum('n','y') NOT NULL DEFAULT 'n',
+  `muc_name` varchar(30) NOT NULL DEFAULT '',
+  `muc_restrict_room_creation` enum('n', 'y', 'm') NOT NULL DEFAULT 'm',
+  `muc_admins` text,
+  `use_pastebin` enum('n','y') NOT NULL DEFAULT 'n',
+  `pastebin_expire_after` int(3) NOT NULL DEFAULT 48,
+  `pastebin_trigger` varchar(10) NOT NULL DEFAULT '!paste',
+  `use_http_archive` enum('n','y') NOT NULL DEFAULT 'n',
+  `http_archive_show_join` enum('n', 'y') NOT NULL DEFAULT 'n',
+  `http_archive_show_status` enum('n', 'y') NOT NULL DEFAULT 'n',
+  `use_status_host` enum('n','y') NOT NULL DEFAULT 'n',
+
+  `ssl_state` varchar(255) NULL,
+  `ssl_locality` varchar(255) NULL,
+  `ssl_organisation` varchar(255) NULL,
+  `ssl_organisation_unit` varchar(255) NULL,
+  `ssl_country` varchar(255) NULL,
+  `ssl_email` varchar(255) NULL,
+  `ssl_request` mediumtext NULL,
+  `ssl_cert` mediumtext NULL,
+  `ssl_bundle` mediumtext NULL,
+  `ssl_key` mediumtext NULL,
+  `ssl_action` varchar(16) NULL,
+
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`domain_id`),
+  KEY `server_id` (`server_id`,`domain`),
+  KEY `domain_active` (`domain`,`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table  `xmpp_user`
+--
+
+CREATE TABLE `xmpp_user` (
+  `xmppuser_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `jid` varchar(255) NOT NULL default '',
+  `password` varchar(255) NOT NULL default '',
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`xmppuser_id`),
+  KEY `server_id` (`server_id`,`jid`),
+  KEY `jid_active` (`jid`,`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- --------------------------------------------------------
+-- --------------------------------------------------------
+-- DB-DATA
+-- --------------------------------------------------------
+-- --------------------------------------------------------
+
+--
+-- Dumping data for table `aps_settings`
+--
+
+INSERT INTO `aps_settings` (`id`, `name`, `value`) VALUES(1, 'ignore-php-extension', '');
+INSERT INTO `aps_settings` (`id`, `name`, `value`) VALUES(2, 'ignore-php-configuration', '');
+INSERT INTO `aps_settings` (`id`, `name`, `value`) VALUES(3, 'ignore-webserver-module', '');
+
+-- --------------------------------------------------------
+
+--
+-- Dumping data for table `country`
+--
+
+INSERT INTO `country` (`iso`, `name`, `printable_name`, `iso3`, `numcode`, `eu`) VALUES
+('AF', 'AFGHANISTAN', 'Afghanistan', 'AFG', 4, 'n'),
+('AL', 'ALBANIA', 'Albania', 'ALB', 8, 'n'),
+('DZ', 'ALGERIA', 'Algeria', 'DZA', 12, 'n'),
+('AS', 'AMERICAN SAMOA', 'American Samoa', 'ASM', 16, 'n'),
+('AD', 'ANDORRA', 'Andorra', 'AND', 20, 'n'),
+('AO', 'ANGOLA', 'Angola', 'AGO', 24, 'n'),
+('AI', 'ANGUILLA', 'Anguilla', 'AIA', 660, 'n'),
+('AQ', 'ANTARCTICA', 'Antarctica', NULL, NULL, 'n'),
+('AG', 'ANTIGUA AND BARBUDA', 'Antigua and Barbuda', 'ATG', 28, 'n'),
+('AR', 'ARGENTINA', 'Argentina', 'ARG', 32, 'n'),
+('AM', 'ARMENIA', 'Armenia', 'ARM', 51, 'n'),
+('AW', 'ARUBA', 'Aruba', 'ABW', 533, 'n'),
+('AU', 'AUSTRALIA', 'Australia', 'AUS', 36, 'n'),
+('AT', 'AUSTRIA', 'Austria', 'AUT', 40, 'y'),
+('AZ', 'AZERBAIJAN', 'Azerbaijan', 'AZE', 31, 'n'),
+('BS', 'BAHAMAS', 'Bahamas', 'BHS', 44, 'n'),
+('BH', 'BAHRAIN', 'Bahrain', 'BHR', 48, 'n'),
+('BD', 'BANGLADESH', 'Bangladesh', 'BGD', 50, 'n'),
+('BB', 'BARBADOS', 'Barbados', 'BRB', 52, 'n'),
+('BY', 'BELARUS', 'Belarus', 'BLR', 112, 'n'),
+('BE', 'BELGIUM', 'Belgium', 'BEL', 56, 'y'),
+('BZ', 'BELIZE', 'Belize', 'BLZ', 84, 'n'),
+('BJ', 'BENIN', 'Benin', 'BEN', 204, 'n'),
+('BM', 'BERMUDA', 'Bermuda', 'BMU', 60, 'n'),
+('BT', 'BHUTAN', 'Bhutan', 'BTN', 64, 'n'),
+('BO', 'BOLIVIA', 'Bolivia', 'BOL', 68, 'n'),
+('BA', 'BOSNIA AND HERZEGOVINA', 'Bosnia and Herzegovina', 'BIH', 70, 'n'),
+('BW', 'BOTSWANA', 'Botswana', 'BWA', 72, 'n'),
+('BV', 'BOUVET ISLAND', 'Bouvet Island', NULL, NULL, 'n'),
+('BR', 'BRAZIL', 'Brazil', 'BRA', 76, 'n'),
+('IO', 'BRITISH INDIAN OCEAN TERRITORY', 'British Indian Ocean Territory', NULL, NULL, 'n'),
+('BN', 'BRUNEI DARUSSALAM', 'Brunei Darussalam', 'BRN', 96, 'n'),
+('BG', 'BULGARIA', 'Bulgaria', 'BGR', 100, 'y'),
+('BF', 'BURKINA FASO', 'Burkina Faso', 'BFA', 854, 'n'),
+('BI', 'BURUNDI', 'Burundi', 'BDI', 108, 'n'),
+('KH', 'CAMBODIA', 'Cambodia', 'KHM', 116, 'n'),
+('CM', 'CAMEROON', 'Cameroon', 'CMR', 120, 'n'),
+('CA', 'CANADA', 'Canada', 'CAN', 124, 'n'),
+('CV', 'CAPE VERDE', 'Cape Verde', 'CPV', 132, 'n'),
+('KY', 'CAYMAN ISLANDS', 'Cayman Islands', 'CYM', 136, 'n'),
+('CF', 'CENTRAL AFRICAN REPUBLIC', 'Central African Republic', 'CAF', 140, 'n'),
+('TD', 'CHAD', 'Chad', 'TCD', 148, 'n'),
+('CL', 'CHILE', 'Chile', 'CHL', 152, 'n'),
+('CN', 'CHINA', 'China', 'CHN', 156, 'n'),
+('CX', 'CHRISTMAS ISLAND', 'Christmas Island', NULL, NULL, 'n'),
+('CC', 'COCOS (KEELING) ISLANDS', 'Cocos (Keeling) Islands', NULL, NULL, 'n'),
+('CO', 'COLOMBIA', 'Colombia', 'COL', 170, 'n'),
+('KM', 'COMOROS', 'Comoros', 'COM', 174, 'n'),
+('CG', 'CONGO', 'Congo', 'COG', 178, 'n'),
+('CD', 'CONGO, THE DEMOCRATIC REPUBLIC OF THE', 'Congo, the Democratic Republic of the', 'COD', 180, 'n'),
+('CK', 'COOK ISLANDS', 'Cook Islands', 'COK', 184, 'n'),
+('CR', 'COSTA RICA', 'Costa Rica', 'CRI', 188, 'n'),
+('CI', 'COTE D''IVOIRE', 'Cote D''Ivoire', 'CIV', 384, 'n'),
+('HR', 'CROATIA', 'Croatia', 'HRV', 191, 'y'),
+('CU', 'CUBA', 'Cuba', 'CUB', 192, 'n'),
+('CY', 'CYPRUS', 'Cyprus', 'CYP', 196, 'y'),
+('CZ', 'CZECH REPUBLIC', 'Czech Republic', 'CZE', 203, 'y'),
+('DK', 'DENMARK', 'Denmark', 'DNK', 208, 'y'),
+('DJ', 'DJIBOUTI', 'Djibouti', 'DJI', 262, 'n'),
+('DM', 'DOMINICA', 'Dominica', 'DMA', 212, 'n'),
+('DO', 'DOMINICAN REPUBLIC', 'Dominican Republic', 'DOM', 214, 'n'),
+('EC', 'ECUADOR', 'Ecuador', 'ECU', 218, 'n'),
+('EG', 'EGYPT', 'Egypt', 'EGY', 818, 'n'),
+('SV', 'EL SALVADOR', 'El Salvador', 'SLV', 222, 'n'),
+('GQ', 'EQUATORIAL GUINEA', 'Equatorial Guinea', 'GNQ', 226, 'n'),
+('ER', 'ERITREA', 'Eritrea', 'ERI', 232, 'n'),
+('EE', 'ESTONIA', 'Estonia', 'EST', 233, 'y'),
+('ET', 'ETHIOPIA', 'Ethiopia', 'ETH', 231, 'n'),
+('FK', 'FALKLAND ISLANDS (MALVINAS)', 'Falkland Islands (Malvinas)', 'FLK', 238, 'n'),
+('FO', 'FAROE ISLANDS', 'Faroe Islands', 'FRO', 234, 'n'),
+('FJ', 'FIJI', 'Fiji', 'FJI', 242, 'n'),
+('FI', 'FINLAND', 'Finland', 'FIN', 246, 'y'),
+('FR', 'FRANCE', 'France', 'FRA', 250, 'y'),
+('GF', 'FRENCH GUIANA', 'French Guiana', 'GUF', 254, 'n'),
+('PF', 'FRENCH POLYNESIA', 'French Polynesia', 'PYF', 258, 'n'),
+('TF', 'FRENCH SOUTHERN TERRITORIES', 'French Southern Territories', NULL, NULL, 'n'),
+('GA', 'GABON', 'Gabon', 'GAB', 266, 'n'),
+('GM', 'GAMBIA', 'Gambia', 'GMB', 270, 'n'),
+('GE', 'GEORGIA', 'Georgia', 'GEO', 268, 'n'),
+('DE', 'GERMANY', 'Germany', 'DEU', 276, 'y'),
+('GH', 'GHANA', 'Ghana', 'GHA', 288, 'n'),
+('GI', 'GIBRALTAR', 'Gibraltar', 'GIB', 292, 'n'),
+('GR', 'GREECE', 'Greece', 'GRC', 300, 'y'),
+('GL', 'GREENLAND', 'Greenland', 'GRL', 304, 'n'),
+('GD', 'GRENADA', 'Grenada', 'GRD', 308, 'n'),
+('GP', 'GUADELOUPE', 'Guadeloupe', 'GLP', 312, 'n'),
+('GU', 'GUAM', 'Guam', 'GUM', 316, 'n'),
+('GT', 'GUATEMALA', 'Guatemala', 'GTM', 320, 'n'),
+('GN', 'GUINEA', 'Guinea', 'GIN', 324, 'n'),
+('GW', 'GUINEA-BISSAU', 'Guinea-Bissau', 'GNB', 624, 'n'),
+('GY', 'GUYANA', 'Guyana', 'GUY', 328, 'n'),
+('HT', 'HAITI', 'Haiti', 'HTI', 332, 'n'),
+('HM', 'HEARD ISLAND AND MCDONALD ISLANDS', 'Heard Island and Mcdonald Islands', NULL, NULL, 'n'),
+('VA', 'HOLY SEE (VATICAN CITY STATE)', 'Holy See (Vatican City State)', 'VAT', 336, 'n'),
+('HN', 'HONDURAS', 'Honduras', 'HND', 340, 'n'),
+('HK', 'HONG KONG', 'Hong Kong', 'HKG', 344, 'n'),
+('HU', 'HUNGARY', 'Hungary', 'HUN', 348, 'y'),
+('IS', 'ICELAND', 'Iceland', 'ISL', 352, 'n'),
+('IN', 'INDIA', 'India', 'IND', 356, 'n'),
+('ID', 'INDONESIA', 'Indonesia', 'IDN', 360, 'n'),
+('IR', 'IRAN, ISLAMIC REPUBLIC OF', 'Iran, Islamic Republic of', 'IRN', 364, 'n'),
+('IQ', 'IRAQ', 'Iraq', 'IRQ', 368, 'n'),
+('IE', 'IRELAND', 'Ireland', 'IRL', 372, 'y'),
+('IL', 'ISRAEL', 'Israel', 'ISR', 376, 'n'),
+('IT', 'ITALY', 'Italy', 'ITA', 380, 'y'),
+('JM', 'JAMAICA', 'Jamaica', 'JAM', 388, 'n'),
+('JP', 'JAPAN', 'Japan', 'JPN', 392, 'n'),
+('JO', 'JORDAN', 'Jordan', 'JOR', 400, 'n'),
+('KZ', 'KAZAKHSTAN', 'Kazakhstan', 'KAZ', 398, 'n'),
+('KE', 'KENYA', 'Kenya', 'KEN', 404, 'n'),
+('KI', 'KIRIBATI', 'Kiribati', 'KIR', 296, 'n'),
+('KP', 'KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF', 'Korea, Democratic People''s Republic of', 'PRK', 408, 'n'),
+('KR', 'KOREA, REPUBLIC OF', 'Korea, Republic of', 'KOR', 410, 'n'),
+('KW', 'KUWAIT', 'Kuwait', 'KWT', 414, 'n'),
+('KG', 'KYRGYZSTAN', 'Kyrgyzstan', 'KGZ', 417, 'n'),
+('LA', 'LAO PEOPLE''S DEMOCRATIC REPUBLIC', 'Lao People''s Democratic Republic', 'LAO', 418, 'n'),
+('LV', 'LATVIA', 'Latvia', 'LVA', 428, 'y'),
+('LB', 'LEBANON', 'Lebanon', 'LBN', 422, 'n'),
+('LS', 'LESOTHO', 'Lesotho', 'LSO', 426, 'n'),
+('LR', 'LIBERIA', 'Liberia', 'LBR', 430, 'n'),
+('LY', 'LIBYAN ARAB JAMAHIRIYA', 'Libyan Arab Jamahiriya', 'LBY', 434, 'n'),
+('LI', 'LIECHTENSTEIN', 'Liechtenstein', 'LIE', 438, 'n'),
+('LT', 'LITHUANIA', 'Lithuania', 'LTU', 440, 'y'),
+('LU', 'LUXEMBOURG', 'Luxembourg', 'LUX', 442, 'y'),
+('MO', 'MACAO', 'Macao', 'MAC', 446, 'n'),
+('MK', 'MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF', 'Macedonia, the Former Yugoslav Republic of', 'MKD', 807, 'n'),
+('MG', 'MADAGASCAR', 'Madagascar', 'MDG', 450, 'n'),
+('MW', 'MALAWI', 'Malawi', 'MWI', 454, 'n'),
+('MY', 'MALAYSIA', 'Malaysia', 'MYS', 458, 'n'),
+('MV', 'MALDIVES', 'Maldives', 'MDV', 462, 'n'),
+('ML', 'MALI', 'Mali', 'MLI', 466, 'n'),
+('MT', 'MALTA', 'Malta', 'MLT', 470, 'y'),
+('MH', 'MARSHALL ISLANDS', 'Marshall Islands', 'MHL', 584, 'n'),
+('MQ', 'MARTINIQUE', 'Martinique', 'MTQ', 474, 'n'),
+('MR', 'MAURITANIA', 'Mauritania', 'MRT', 478, 'n'),
+('MU', 'MAURITIUS', 'Mauritius', 'MUS', 480, 'n'),
+('YT', 'MAYOTTE', 'Mayotte', NULL, NULL, 'n'),
+('MX', 'MEXICO', 'Mexico', 'MEX', 484, 'n'),
+('FM', 'MICRONESIA, FEDERATED STATES OF', 'Micronesia, Federated States of', 'FSM', 583, 'n'),
+('MD', 'MOLDOVA, REPUBLIC OF', 'Moldova, Republic of', 'MDA', 498, 'n'),
+('MC', 'MONACO', 'Monaco', 'MCO', 492, 'n'),
+('MN', 'MONGOLIA', 'Mongolia', 'MNG', 496, 'n'),
+('MS', 'MONTSERRAT', 'Montserrat', 'MSR', 500, 'n'),
+('MA', 'MOROCCO', 'Morocco', 'MAR', 504, 'n'),
+('MZ', 'MOZAMBIQUE', 'Mozambique', 'MOZ', 508, 'n'),
+('MM', 'MYANMAR', 'Myanmar', 'MMR', 104, 'n'),
+('NA', 'NAMIBIA', 'Namibia', 'NAM', 516, 'n'),
+('NR', 'NAURU', 'Nauru', 'NRU', 520, 'n'),
+('NP', 'NEPAL', 'Nepal', 'NPL', 524, 'n'),
+('NL', 'NETHERLANDS', 'Netherlands', 'NLD', 528, 'y'),
+('AN', 'NETHERLANDS ANTILLES', 'Netherlands Antilles', 'ANT', 530, 'n'),
+('NC', 'NEW CALEDONIA', 'New Caledonia', 'NCL', 540, 'n'),
+('NZ', 'NEW ZEALAND', 'New Zealand', 'NZL', 554, 'n'),
+('NI', 'NICARAGUA', 'Nicaragua', 'NIC', 558, 'n'),
+('NE', 'NIGER', 'Niger', 'NER', 562, 'n'),
+('NG', 'NIGERIA', 'Nigeria', 'NGA', 566, 'n'),
+('NU', 'NIUE', 'Niue', 'NIU', 570, 'n'),
+('NF', 'NORFOLK ISLAND', 'Norfolk Island', 'NFK', 574, 'n'),
+('MP', 'NORTHERN MARIANA ISLANDS', 'Northern Mariana Islands', 'MNP', 580, 'n'),
+('NO', 'NORWAY', 'Norway', 'NOR', 578, 'n'),
+('OM', 'OMAN', 'Oman', 'OMN', 512, 'n'),
+('PK', 'PAKISTAN', 'Pakistan', 'PAK', 586, 'n'),
+('PW', 'PALAU', 'Palau', 'PLW', 585, 'n'),
+('PS', 'PALESTINIAN TERRITORY, OCCUPIED', 'Palestinian Territory, Occupied', NULL, NULL, 'n'),
+('PA', 'PANAMA', 'Panama', 'PAN', 591, 'n'),
+('PG', 'PAPUA NEW GUINEA', 'Papua New Guinea', 'PNG', 598, 'n'),
+('PY', 'PARAGUAY', 'Paraguay', 'PRY', 600, 'n'),
+('PE', 'PERU', 'Peru', 'PER', 604, 'n'),
+('PH', 'PHILIPPINES', 'Philippines', 'PHL', 608, 'n'),
+('PN', 'PITCAIRN', 'Pitcairn', 'PCN', 612, 'n'),
+('PL', 'POLAND', 'Poland', 'POL', 616, 'y'),
+('PT', 'PORTUGAL', 'Portugal', 'PRT', 620, 'y'),
+('PR', 'PUERTO RICO', 'Puerto Rico', 'PRI', 630, 'n'),
+('QA', 'QATAR', 'Qatar', 'QAT', 634, 'n'),
+('RE', 'REUNION', 'Reunion', 'REU', 638, 'n'),
+('RO', 'ROMANIA', 'Romania', 'ROM', 642, 'y'),
+('RU', 'RUSSIAN FEDERATION', 'Russian Federation', 'RUS', 643, 'n'),
+('RW', 'RWANDA', 'Rwanda', 'RWA', 646, 'n'),
+('SH', 'SAINT HELENA', 'Saint Helena', 'SHN', 654, 'n'),
+('KN', 'SAINT KITTS AND NEVIS', 'Saint Kitts and Nevis', 'KNA', 659, 'n'),
+('LC', 'SAINT LUCIA', 'Saint Lucia', 'LCA', 662, 'n'),
+('PM', 'SAINT PIERRE AND MIQUELON', 'Saint Pierre and Miquelon', 'SPM', 666, 'n'),
+('VC', 'SAINT VINCENT AND THE GRENADINES', 'Saint Vincent and the Grenadines', 'VCT', 670, 'n'),
+('WS', 'SAMOA', 'Samoa', 'WSM', 882, 'n'),
+('SM', 'SAN MARINO', 'San Marino', 'SMR', 674, 'n'),
+('ST', 'SAO TOME AND PRINCIPE', 'Sao Tome and Principe', 'STP', 678, 'n'),
+('SA', 'SAUDI ARABIA', 'Saudi Arabia', 'SAU', 682, 'n'),
+('SN', 'SENEGAL', 'Senegal', 'SEN', 686, 'n'),
+('RS', 'SERBIA', 'Serbia', 'SRB', 381, 'n'),
+('SC', 'SEYCHELLES', 'Seychelles', 'SYC', 690, 'n'),
+('SL', 'SIERRA LEONE', 'Sierra Leone', 'SLE', 694, 'n'),
+('SG', 'SINGAPORE', 'Singapore', 'SGP', 702, 'n'),
+('SK', 'SLOVAKIA', 'Slovakia', 'SVK', 703, 'y'),
+('SI', 'SLOVENIA', 'Slovenia', 'SVN', 705, 'y'),
+('SB', 'SOLOMON ISLANDS', 'Solomon Islands', 'SLB', 90, 'n'),
+('SO', 'SOMALIA', 'Somalia', 'SOM', 706, 'n'),
+('ZA', 'SOUTH AFRICA', 'South Africa', 'ZAF', 710, 'n'),
+('GS', 'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS', 'South Georgia and the South Sandwich Islands', NULL, NULL, 'n'),
+('ES', 'SPAIN', 'Spain', 'ESP', 724, 'y'),
+('LK', 'SRI LANKA', 'Sri Lanka', 'LKA', 144, 'n'),
+('SD', 'SUDAN', 'Sudan', 'SDN', 736, 'n'),
+('SR', 'SURINAME', 'Suriname', 'SUR', 740, 'n'),
+('SJ', 'SVALBARD AND JAN MAYEN', 'Svalbard and Jan Mayen', 'SJM', 744, 'n'),
+('SZ', 'SWAZILAND', 'Swaziland', 'SWZ', 748, 'n'),
+('SE', 'SWEDEN', 'Sweden', 'SWE', 752, 'y'),
+('CH', 'SWITZERLAND', 'Switzerland', 'CHE', 756, 'n'),
+('SY', 'SYRIAN ARAB REPUBLIC', 'Syrian Arab Republic', 'SYR', 760, 'n'),
+('TW', 'TAIWAN, PROVINCE OF CHINA', 'Taiwan, Province of China', 'TWN', 158, 'n'),
+('TJ', 'TAJIKISTAN', 'Tajikistan', 'TJK', 762, 'n'),
+('TZ', 'TANZANIA, UNITED REPUBLIC OF', 'Tanzania, United Republic of', 'TZA', 834, 'n'),
+('TH', 'THAILAND', 'Thailand', 'THA', 764, 'n'),
+('TL', 'TIMOR-LESTE', 'Timor-Leste', NULL, NULL, 'n'),
+('TG', 'TOGO', 'Togo', 'TGO', 768, 'n'),
+('TK', 'TOKELAU', 'Tokelau', 'TKL', 772, 'n'),
+('TO', 'TONGA', 'Tonga', 'TON', 776, 'n'),
+('TT', 'TRINIDAD AND TOBAGO', 'Trinidad and Tobago', 'TTO', 780, 'n'),
+('TN', 'TUNISIA', 'Tunisia', 'TUN', 788, 'n'),
+('TR', 'TURKEY', 'Turkey', 'TUR', 792, 'n'),
+('TM', 'TURKMENISTAN', 'Turkmenistan', 'TKM', 795, 'n'),
+('TC', 'TURKS AND CAICOS ISLANDS', 'Turks and Caicos Islands', 'TCA', 796, 'n'),
+('TV', 'TUVALU', 'Tuvalu', 'TUV', 798, 'n'),
+('UG', 'UGANDA', 'Uganda', 'UGA', 800, 'n'),
+('UA', 'UKRAINE', 'Ukraine', 'UKR', 804, 'n'),
+('AE', 'UNITED ARAB EMIRATES', 'United Arab Emirates', 'ARE', 784, 'n'),
+('GB', 'UNITED KINGDOM', 'United Kingdom', 'GBR', 826, 'y'),
+('US', 'UNITED STATES', 'United States', 'USA', 840, 'n'),
+('UM', 'UNITED STATES MINOR OUTLYING ISLANDS', 'United States Minor Outlying Islands', NULL, NULL, 'n'),
+('UY', 'URUGUAY', 'Uruguay', 'URY', 858, 'n'),
+('UZ', 'UZBEKISTAN', 'Uzbekistan', 'UZB', 860, 'n'),
+('VU', 'VANUATU', 'Vanuatu', 'VUT', 548, 'n'),
+('VE', 'VENEZUELA', 'Venezuela', 'VEN', 862, 'n'),
+('VN', 'VIET NAM', 'Viet Nam', 'VNM', 704, 'n'),
+('VG', 'VIRGIN ISLANDS, BRITISH', 'Virgin Islands, British', 'VGB', 92, 'n'),
+('VI', 'VIRGIN ISLANDS, U.S.', 'Virgin Islands, U.s.', 'VIR', 850, 'n'),
+('WF', 'WALLIS AND FUTUNA', 'Wallis and Futuna', 'WLF', 876, 'n'),
+('EH', 'WESTERN SAHARA', 'Western Sahara', 'ESH', 732, 'n'),
+('YE', 'YEMEN', 'Yemen', 'YEM', 887, 'n'),
+('ZM', 'ZAMBIA', 'Zambia', 'ZMB', 894, 'n'),
+('ZW', 'ZIMBABWE', 'Zimbabwe', 'ZWE', 716, 'n'),
+('ME', 'MONTENEGRO', 'Montenegro', 'MNE', 382, 'n');
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `dns_template`
+-- 
+
+INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM,DNSSEC', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=3600\nttl=3600\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\nTXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600', 'y');
+
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `help_faq`
+-- 
+
+INSERT INTO `help_faq` VALUES (1,1,0,'I would like to know ...','Yes, of course.',1,1,'riud','riud','r');
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `help_faq_sections`
+-- 
+
+INSERT INTO `help_faq_sections` VALUES (1,'General',0,NULL,NULL,NULL,NULL,NULL);
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `software_repo`
+-- 
+
+INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `repo_name`, `repo_url`, `repo_username`, `repo_password`, `active`) VALUES (1, 1, 1, 'riud', 'riud', '', 'ISPConfig Addons', 'http://repo.ispconfig.org/addons/', '', '', 'n');
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `spamfilter_policy`
+-- 
+
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '');
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM*** ', NULL, NULL);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `sys_group`
+-- 
+
+INSERT INTO `sys_group` (`groupid`, `name`, `description`, `client_id`) VALUES (1, 'admin', 'Administrators group', 0);
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `sys_ini`
+-- 
+
+INSERT INTO `sys_ini` (`sysini_id`, `config`, `default_logo`, `custom_logo`) VALUES (1, '', 'data:image/png;base64,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', '');
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `sys_user`
+-- 
+
+INSERT INTO `sys_theme` (`var_id`, `tpl_name`, `username`, `logo_url`) VALUES (NULL, 'default', 'global', 'themes/default/images/header_logo.png');
+INSERT INTO `sys_theme` (`var_id`, `tpl_name`, `username`, `logo_url`) VALUES (NULL, 'default-v2', 'global', 'themes/default-v2/images/header_logo.png');
+
+-- --------------------------------------------------------
+
+-- 
+-- Dumping data for table `sys_user`
+-- 
+
+INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `username`, `passwort`, `modules`, `startmodule`, `app_theme`, `typ`, `active`, `language`, `groups`, `default_group`, `client_id`) VALUES (1, 1, 0, 'riud', 'riud', '', 'admin', '21232f297a57a5a743894a0e4a801fc3', 'dashboard,admin,client,mail,monitor,sites,dns,vm,tools,help', 'dashboard', 'default', 'admin', 1, 'en', '1,2', 1, 0);
+
+-- --------------------------------------------------------
+
+--
+-- Dumping data for table `sys_config`
+--
+
+INSERT INTO sys_config VALUES ('db','db_version','3.1dev');
+INSERT INTO sys_config VALUES ('interface','session_timeout','0');
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/install/sql/ispconfig3.sql.rej b/install/sql/ispconfig3.sql.rej
new file mode 100644
index 0000000000..6c8d2e4a9c
--- /dev/null
+++ b/install/sql/ispconfig3.sql.rej
@@ -0,0 +1,23 @@
+--- install/sql/ispconfig3.sql
++++ install/sql/ispconfig3.sql
+@@ -2522,13 +2527,13 @@ INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `s
+ -- Dumping data for table `spamfilter_policy`
+ -- 
+ 
+-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '');
+-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL);
+-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
++INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '', 'n', 6.00, 8.00, 'rewrite_subject', 12.00);
++INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
++INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
++INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00);
++INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00);
++INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 2.00, 4.00, 'rewrite_subject', 8.00);
++INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 7.00, 10.00, 'rewrite_subject', 20.00);
+ 
+ -- --------------------------------------------------------
+ 
diff --git a/install/tpl/rspamd_antivirus.conf.master b/install/tpl/rspamd_antivirus.conf.master
new file mode 100644
index 0000000000..f88d81ac7c
--- /dev/null
+++ b/install/tpl/rspamd_antivirus.conf.master
@@ -0,0 +1,30 @@
+clamav {
+    # If set force this action if any virus is found (default unset: no action is forced)
+    #action = "reject";
+    # if `true` only messages with non-image attachments will be checked (default true)
+    scan_mime_parts = true;
+    # If `max_size` is set, messages > n bytes in size are not scanned
+    #max_size = 20000000;
+    # symbol to add (add it to metric if you want non-zero weight)
+    symbol = "CLAM_VIRUS";
+    # type of scanner: "clamav", "fprot", "sophos" or "savapi"
+    type = "clamav";
+    # For "savapi" you must also specify the following variable
+    #product_id = 12345;
+    # You can enable logging for clean messages
+    #log_clean = true;
+    # servers to query (if port is unspecified, scanner-specific default is used)
+    # can be specified multiple times to pool servers
+    # can be set to a path to a unix socket
+    # Enable this in local.d/antivirus.conf
+    #servers = "127.0.0.1:3310";
+    servers = "/var/run/clamav/clamd.ctl";
+    # if `patterns` is specified virus name will be matched against provided regexes and the related
+    # symbol will be yielded if a match is found. If no match is found, default symbol is yielded.
+    patterns {
+      # symbol_name = "pattern";
+      JUST_EICAR = "^Eicar-Test-Signature$";
+    }
+    # `whitelist` points to a map of IP addresses. Mail from these addresses is not scanned.
+    whitelist = "/etc/rspamd/antivirus.wl";
+}
\ No newline at end of file
diff --git a/install/tpl/rspamd_classifier-bayes.conf.master b/install/tpl/rspamd_classifier-bayes.conf.master
new file mode 100644
index 0000000000..1688d57e21
--- /dev/null
+++ b/install/tpl/rspamd_classifier-bayes.conf.master
@@ -0,0 +1,3 @@
+autolearn = [-0.01, 5.00];
+per_user = true;
+per_language = true;
\ No newline at end of file
diff --git a/install/tpl/rspamd_dkim_signing.conf.master b/install/tpl/rspamd_dkim_signing.conf.master
new file mode 100644
index 0000000000..0e55a7ead2
--- /dev/null
+++ b/install/tpl/rspamd_dkim_signing.conf.master
@@ -0,0 +1,2 @@
+path = "<tmpl_var name='dkim_path'>/$domain.private";
+selector = "default";
\ No newline at end of file
diff --git a/install/tpl/rspamd_greylist.conf.master b/install/tpl/rspamd_greylist.conf.master
new file mode 100644
index 0000000000..74ea715a22
--- /dev/null
+++ b/install/tpl/rspamd_greylist.conf.master
@@ -0,0 +1 @@
+servers = "127.0.0.1:6379";
\ No newline at end of file
diff --git a/install/tpl/rspamd_groups.conf.master b/install/tpl/rspamd_groups.conf.master
new file mode 100644
index 0000000000..62a986533a
--- /dev/null
+++ b/install/tpl/rspamd_groups.conf.master
@@ -0,0 +1,4 @@
+group "antivirus" {
+    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/antivirus_group.conf"
+    .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/antivirus_group.conf"
+}
diff --git a/install/tpl/rspamd_milter_headers.conf.master b/install/tpl/rspamd_milter_headers.conf.master
new file mode 100644
index 0000000000..d399bbf4ec
--- /dev/null
+++ b/install/tpl/rspamd_milter_headers.conf.master
@@ -0,0 +1,2 @@
+use = ["x-spamd-bar", "x-spam-level", "authentication-results"];
+authenticated_headers = ["authentication-results"];
\ No newline at end of file
diff --git a/install/tpl/rspamd_mx_check.conf.master b/install/tpl/rspamd_mx_check.conf.master
new file mode 100644
index 0000000000..0a628f9c83
--- /dev/null
+++ b/install/tpl/rspamd_mx_check.conf.master
@@ -0,0 +1,9 @@
+enabled = true;
+servers = "localhost";
+key_prefix = "rmx";
+symbol_bad_mx = "MX_INVALID";
+symbol_no_mx = "MX_MISSING";
+symbol_good_mx = "MX_GOOD";
+expire = 86400;
+expire_novalid = 7200;
+greylist_invalid = false;
\ No newline at end of file
diff --git a/install/tpl/rspamd_neural.conf.master b/install/tpl/rspamd_neural.conf.master
new file mode 100644
index 0000000000..76f8a6d344
--- /dev/null
+++ b/install/tpl/rspamd_neural.conf.master
@@ -0,0 +1,31 @@
+servers = 127.0.0.1:6379;
+enabled = true;
+
+rules {
+  "LONG" {
+    train {
+      max_trains = 5000;
+      max_usages = 200;
+      max_iterations = 25;
+      learning_rate = 0.01,
+      spam_score = 10;
+      ham_score = -2;
+    }
+    symbol_spam = "NEURAL_SPAM_LONG";
+    symbol_ham = "NEURAL_HAM_LONG";
+    ann_expire = 100d;
+  }
+  "SHORT" {
+    train {
+      max_trains = 100;
+      max_usages = 2;
+      max_iterations = 25;
+      learning_rate = 0.01,
+      spam_score = 10;
+      ham_score = -2;
+    }
+    symbol_spam = "NEURAL_SPAM_SHORT";
+    symbol_ham = "NEURAL_HAM_SHORT";
+    ann_expire = 1d;
+  }
+}
\ No newline at end of file
diff --git a/install/tpl/rspamd_neural_group.conf.master b/install/tpl/rspamd_neural_group.conf.master
new file mode 100644
index 0000000000..5aabdefaff
--- /dev/null
+++ b/install/tpl/rspamd_neural_group.conf.master
@@ -0,0 +1,18 @@
+symbols = {
+  "NEURAL_SPAM_LONG" {
+    weight = 1.0; # sample weight
+    description = "Neural network spam (long)";
+  }
+  "NEURAL_HAM_LONG" {
+    weight = -2.0; # sample weight
+    description = "Neural network ham (long)";
+  }
+  "NEURAL_SPAM_SHORT" {
+    weight = 0.5; # sample weight
+    description = "Neural network spam (short)";
+  }
+  "NEURAL_HAM_SHORT" {
+    weight = -1.0; # sample weight
+    description = "Neural network ham (short)";
+  }
+}
diff --git a/install/tpl/rspamd_options.inc.master b/install/tpl/rspamd_options.inc.master
new file mode 100644
index 0000000000..69e40365b7
--- /dev/null
+++ b/install/tpl/rspamd_options.inc.master
@@ -0,0 +1,5 @@
+local_addrs = "127.0.0.0/8, ::1";
+
+dns {
+	nameserver = ["127.0.0.1:53:10"];
+}
diff --git a/install/tpl/rspamd_override_rbl.conf.master b/install/tpl/rspamd_override_rbl.conf.master
new file mode 100644
index 0000000000..310e722832
--- /dev/null
+++ b/install/tpl/rspamd_override_rbl.conf.master
@@ -0,0 +1,53 @@
+# RBL
+symbols = {
+	"RBL_SENDERSCORE" {
+		weight = 4.0;
+		description = "From address is listed in senderscore.com BL";
+	}
+	"RBL_SPAMHAUS_SBL" {
+		weight = 2.0;
+		description = "From address is listed in zen sbl";
+	}
+	"RBL_SPAMHAUS_CSS" {
+	  weight = 2.0;
+	  description = "From address is listed in zen css";
+	}
+	"RBL_SPAMHAUS_XBL" {
+	  weight = 4.0;
+	  description = "From address is listed in zen xbl";
+	}
+	"RBL_SPAMHAUS_XBL_ANY" {
+	  weight = 4.0;
+	  description = "From or receive address is listed in zen xbl (any list)";
+	}
+	"RBL_SPAMHAUS_PBL" {
+	  weight = 2.0;
+	  description = "From address is listed in zen pbl (ISP list)";
+	}
+	"RBL_SPAMHAUS_DROP" {
+	  weight = 7.0;
+	  description = "From address is listed in zen drop bl";
+	}
+	"RECEIVED_SPAMHAUS_XBL" {
+	  weight = 3.0;
+	  description = "Received address is listed in zen xbl";
+	  one_shot = true;
+	}
+	"RBL_MAILSPIKE_WORST" {
+	  weight = 2.0;
+	  description = "From address is listed in RBL - worst possible reputation";
+	}
+	"RBL_MAILSPIKE_VERYBAD" {
+	  weight = 1.5;
+	  description = "From address is listed in RBL - very bad reputation";
+	}
+	"RBL_MAILSPIKE_BAD" {
+	  weight = 1.0;
+	  description = "From address is listed in RBL - bad reputation";
+	}
+	"RBL_SEM" {
+	  weight = 1.0;
+	  description = "Address is listed in Spameatingmonkey RBL";
+	}
+	# /RBL
+}
diff --git a/install/tpl/rspamd_override_surbl.conf.master b/install/tpl/rspamd_override_surbl.conf.master
new file mode 100644
index 0000000000..30676a46fd
--- /dev/null
+++ b/install/tpl/rspamd_override_surbl.conf.master
@@ -0,0 +1,108 @@
+symbols = {
+	# SURBL
+	"PH_SURBL_MULTI" {
+	  weight = 5.5;
+	  description = "SURBL: Phishing sites";
+	}
+	"MW_SURBL_MULTI" {
+	  weight = 5.5;
+	  description = "SURBL: Malware sites";
+	}
+	"ABUSE_SURBL" {
+	  weight = 5.5;
+	  description = "SURBL: ABUSE";
+	}
+	"CRACKED_SURBL" {
+	  weight = 4.0;
+	  description = "SURBL: cracked site";
+	}
+	"RAMBLER_URIBL" {
+	  weight = 4.5;
+	  description = "Rambler uribl";
+	  one_shot = true;
+	}
+	"RAMBLER_EMAILBL" {
+	  weight = 9.5;
+	  description = "Rambler emailbl";
+	  one_shot = true;
+	}
+	"MSBL_EBL" {
+	  weight = 7.5;
+	  description = "MSBL emailbl";
+	  one_shot = true;
+	}
+	"SEM_URIBL" {
+	  weight = 3.5;
+	  description = "Spameatingmonkey uribl";
+	}
+	"SEM_URIBL_FRESH15" {
+	  weight = 3.0;
+	  description = "Spameatingmonkey uribl. Domains registered in the last 15 days (.AERO,.BIZ,.COM,.INFO,.NAME,.NET,.PRO,.SK,.TEL,.US)";
+	}
+	"DBL" {
+	  weight = 0.0;
+	  description = "DBL unknown result";
+	}
+	"DBL_SPAM" {
+	  weight = 6.5;
+	  description = "DBL uribl spam";
+	}
+	"DBL_PHISH" {
+	  weight = 6.5;
+	  description = "DBL uribl phishing";
+	}
+	"DBL_MALWARE" {
+	  weight = 6.5;
+	  description = "DBL uribl malware";
+	}
+	"DBL_BOTNET" {
+	  weight = 5.5;
+	  description = "DBL uribl botnet C&C domain";
+	}
+	"DBL_ABUSE" {
+	  weight = 6.5;
+	  description = "DBL uribl abused legit spam";
+	}
+	"DBL_ABUSE_REDIR" {
+	  weight = 1.5;
+	  description = "DBL uribl abused spammed redirector domain";
+	}
+	"DBL_ABUSE_PHISH" {
+	  weight = 7.5;
+	  description = "DBL uribl abused legit phish";
+	}
+	"DBL_ABUSE_MALWARE" {
+	  weight = 7.5;
+	  description = "DBL uribl abused legit malware";
+	}
+	"DBL_ABUSE_BOTNET" {
+	  weight = 5.5;
+	  description = "DBL uribl abused legit botnet C&C";
+	}
+	"URIBL_BLACK" {
+	  weight = 7.5;
+	  description = "uribl.com black url";
+	}
+	"URIBL_RED" {
+	  weight = 3.5;
+	  description = "uribl.com red url";
+	}
+	"URIBL_GREY" {
+	  weight = 1.5;
+	  description = "uribl.com grey url";
+	  one_shot = true;
+	}
+	"URIBL_SBL" {
+	  weight = 6.5;
+	  description = "Spamhaus SBL URIBL";
+	}
+	"URIBL_SBL_CSS" {
+	  weight = 6.5;
+	  description = "Spamhaus SBL CSS URIBL";
+	}
+	"RBL_SARBL_BAD" {
+	  weight = 2.5;
+	  description = "A domain listed in the mail is blacklisted in SARBL";
+	}
+	# /SURBL
+}
diff --git a/install/tpl/rspamd_redis.conf.master b/install/tpl/rspamd_redis.conf.master
new file mode 100644
index 0000000000..b908af9f5e
--- /dev/null
+++ b/install/tpl/rspamd_redis.conf.master
@@ -0,0 +1 @@
+servers = "127.0.0.1";
\ No newline at end of file
diff --git a/install/tpl/rspamd_symbols_antivirus.conf.master b/install/tpl/rspamd_symbols_antivirus.conf.master
new file mode 100644
index 0000000000..8c2d93d89e
--- /dev/null
+++ b/install/tpl/rspamd_symbols_antivirus.conf.master
@@ -0,0 +1,15 @@
+subject = "***SPAM*** %s";
+symbols = {
+	"CLAM_VIRUS" {
+		weight = 50;
+		description = "Clamav has found a virus.";
+	}
+	"JUST_EICAR" {
+		weight = 50;
+		description = "Clamav has found a virus.";
+	}
+	"R_DUMMY" {
+		weight = 0.0;
+		description = "Dummy symbol";
+	}
+}
\ No newline at end of file
diff --git a/install/tpl/rspamd_users.conf.master b/install/tpl/rspamd_users.conf.master
new file mode 100644
index 0000000000..73d437d6cb
--- /dev/null
+++ b/install/tpl/rspamd_users.conf.master
@@ -0,0 +1,43 @@
+settings {
+	authenticated {
+		priority = 10;
+		authenticated = yes;
+		#apply "default" { groups_disabled = ["rbl", "spf"]; }
+		apply "default" {
+			#symbols_enabled = [];
+			symbols_disabled = [];
+			#groups_enabled = [];
+			groups_disabled = ["rbl"];
+		}
+	}
+	whitelist {
+		priority = 10;
+		rcpt = "postmaster";
+		rcpt = "hostmaster";
+		rcpt = "abuse";
+		want_spam = yes;
+	}
+	whitelist-ip {
+		priority = 10;
+<tmpl_loop name="whitelist_ips">
+		ip = "<tmpl_var name='ip'>";
+</tmpl_loop>
+		
+		want_spam = yes;
+	}
+#	whitelist-timmehosting {
+#		priority = 20;
+#		from = "@xxx";
+#		from = "@xxx";
+#		want_spam = yes;
+#	}
+	whitelist-ca {
+		priority = 20;
+		from = "@comodo.com";
+		from = "@geotrust.com";
+		from = "@geotrusteurope.com";
+		want_spam = yes;
+	}
+	.include(try=true; glob=true) "$LOCAL_CONFDIR/local.d/users/*.conf"
+	.include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/users.local.conf"
+}
diff --git a/install/tpl/rspamd_users.inc.conf.master b/install/tpl/rspamd_users.inc.conf.master
new file mode 120000
index 0000000000..30bb52fd8e
--- /dev/null
+++ b/install/tpl/rspamd_users.inc.conf.master
@@ -0,0 +1 @@
+../../server/conf/rspamd_users.inc.conf.master
\ No newline at end of file
diff --git a/install/tpl/rspamd_wblist.inc.conf.master b/install/tpl/rspamd_wblist.inc.conf.master
new file mode 100644
index 0000000000..fc06127eae
--- /dev/null
+++ b/install/tpl/rspamd_wblist.inc.conf.master
@@ -0,0 +1,18 @@
+spamfilter_wblist-<tmpl_var name='record_id'> {
+	priority = <tmpl_var name='priority'>;
+	from = "<tmpl_var name='from'>";
+	rcpt = "<tmpl_var name='recipient'>";
+<tmpl_if name='wblist' op='==' value='W'>
+	want_spam = yes;
+</tmpl_else>
+	apply "default" {
+		R_DUMMY = 999.0;
+		actions {
+			reject = 0.2;
+			add_header = 0.1;
+			greylist = 0.1;
+			rewrite_subject = 0.1;
+		}
+	}
+</tmpl_if>
+}
\ No newline at end of file
diff --git a/install/tpl/rspamd_worker-controller.inc.master b/install/tpl/rspamd_worker-controller.inc.master
new file mode 120000
index 0000000000..dae1932369
--- /dev/null
+++ b/install/tpl/rspamd_worker-controller.inc.master
@@ -0,0 +1 @@
+../../server/conf/rspamd_worker-controller.inc.master
\ No newline at end of file
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 6441609cab..36f157d8e6 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -38,6 +38,8 @@ homedir_path=/var/vmail
 maildir_format=maildir
 dkim_path=/var/lib/amavis/dkim
 dkim_strength=1024
+content_filter=amavis
+rspamd_password=
 pop3_imap_daemon=courier
 mail_filter_syntax=maildrop
 mailuser_uid=5000
diff --git a/install/update.php b/install/update.php
index 104aab57ff..42ddd625f5 100644
--- a/install/update.php
+++ b/install/update.php
@@ -397,6 +397,12 @@ if($reconfigure_services_answer == 'yes' || $reconfigure_services_answer == 'sel
 			$inst->configure_amavis();
 		}
 
+		//** Configure Rspamd
+		if($conf['rspamd']['installed'] == true && $inst->reconfigure_app('Rspamd', $reconfigure_services_answer)) {
+			swriteln('Configuring Rspamd');
+			$inst->configure_rspamd();
+		}
+
 		//** Configure Getmail
 		if ($inst->reconfigure_app('Getmail', $reconfigure_services_answer)) {
 			swriteln('Configuring Getmail');
@@ -532,6 +538,7 @@ if($reconfigure_services_answer == 'yes') {
 		if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
 		if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
 		if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
+		if($conf['rspamd']['installed'] == true && $conf['rspamd']['init_script'] != '') system($inst->getinitcommand($conf['rspamd']['init_script'], 'restart'));
 		if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
 		if($conf['courier']['installed'] == true){
 			if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng
index 6f2e2d00ba..bc217c30b0 100644
--- a/interface/lib/lang/de.lng
+++ b/interface/lib/lang/de.lng
@@ -158,4 +158,5 @@ $wb['security_check1_txt'] = 'Sicherheitsüberprüfung für:';
 $wb['security_check2_txt'] = 'fehlgeschlagen.';
 $wb['select_directive_snippet_txt'] = 'Direktiven Schnipsel';
 $wb['select_master_directive_snippet_txt'] = 'Master Direktiven Schnipsel';
-?>
+$wb['add_header_txt'] = 'Header (fügt "X-Spam: Yes" hinzu)';
+$wb['rewrite_subject_txt'] = 'Betreff (fügt "***SPAM***" am Anfang hinzu)';
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 1a6c8070cb..1c19d0928b 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -466,6 +466,29 @@ $form["tabs"]['mail'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'content_filter' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'rspamd',
+			'value' => array('amavisd' => 'Amavisd', 'rspamd' => 'Rspamd')
+		),
+		'rspamd_password' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+												'type' => 'TRIM'),
+			),
+		),
+		'rspamd_available' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
 		'dkim_path' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -1953,4 +1976,10 @@ $form["tabs"]['rescue'] = array(
 		//#################################
 	)
 );
-?>
+
+/*$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+if(!isset($mail_config['rspamd_available']) || $mail_config['rspamd_available'] != 'y') {
+	$form['tabs']['mail']['fields']['content_filter']['default'] = 'amavisd';
+	unset($form['tabs']['mail']['fields']['content_filter']['value']['rspamd']);
+	unset($form['tabs']['mail']['fields']['rspamd_password']);
+}*/
\ No newline at end of file
diff --git a/interface/web/admin/form/server_config.tform.php.orig b/interface/web/admin/form/server_config.tform.php.orig
new file mode 100644
index 0000000000..1a6c8070cb
--- /dev/null
+++ b/interface/web/admin/form/server_config.tform.php.orig
@@ -0,0 +1,1956 @@
+<?php
+
+/*
+  Form Definition
+
+  Tabledefinition
+
+  Datatypes:
+  - INTEGER (Forces the input to Int)
+  - DOUBLE
+  - CURRENCY (Formats the values to currency notation)
+  - VARCHAR (no format check, maxlength: 255)
+  - TEXT (no format check)
+  - DATE (Dateformat, automatic conversion to timestamps)
+
+  Formtype:
+  - TEXT (Textfield)
+  - TEXTAREA (Textarea)
+  - PASSWORD (Password textfield, input is not shown when edited)
+  - SELECT (Select option field)
+  - RADIO
+  - CHECKBOX
+  - CHECKBOXARRAY
+  - FILE
+
+  VALUE:
+  - Wert oder Array
+
+  Hint:
+  The ID field of the database table is not part of the datafield definition.
+  The ID field must be always auto incement (int or bigint).
+
+
+ */
+
+$form["title"] = "Server Config";
+$form["description"] = "";
+$form["name"] = "server_config";
+$form["action"] = "server_config_edit.php";
+$form["db_table"] = "server";
+$form["db_table_idx"] = "server_id";
+$form["db_history"] = "yes";
+$form["tab_default"] = "server";
+$form["list_default"] = "server_config_list.php";
+$form["auth"] = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"] = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['server'] = array(
+	'title' => "Server",
+	'width' => 70,
+	'template' => "templates/server_config_server_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'auto_network_configuration' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'ip_address' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '192.168.0.105',
+			'validators' => array(0 => array('type' => 'ISIPV4',
+					'errmsg' => 'ip_address_error_wrong'),
+			),
+			'value' => '',
+			'width' => '15',
+			'maxlength' => '255'
+		),
+		'netmask' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '255.255.255.0',
+			'validators' => array(0 => array('type' => 'ISIPV4',
+					'errmsg' => 'netmask_error_wrong'),
+			),
+			'value' => '',
+			'width' => '15',
+			'maxlength' => '255'
+		),
+		'v6_prefix' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array(  0 => array('type' => 'ISV6PREFIX',
+						'errmsg' => 'v6_prefix_wrong'),
+						1 => array('type' => 'V6PREFIXEND',
+						'errmsg' => 'v6_prefix_end'),
+						2 => array('type' => 'V6PREFIXLENGTH',
+						'errmsg' => 'v6_prefix_length')
+			),
+			'default' => ''
+		),
+		'gateway' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '192.168.0.1',
+			'validators' => array(0 => array('type' => 'ISIPV4',
+					'errmsg' => 'gateway_error_wrong'),
+			),
+			'value' => '',
+			'width' => '15',
+			'maxlength' => '255'
+		),
+		'firewall' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'bastille',
+			'value' => array('bastille' => 'bastille', 'ufw' => 'ufw'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'hostname' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'server1.domain.tld',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+												'errmsg' => 'hostname_error_empty'),
+									1 => array ('type' => 'REGEX',
+												'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/',
+												'errmsg'=> 'hostname_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'nameservers' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '192.168.0.1,192.168.0.2',
+			'validators' => array(0 => array('type' => 'NOTEMPTY',
+					'errmsg' => 'nameservers_error_empty'),
+			),
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'loglevel' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '2',
+			'value' => array('0' => 'Debug', '1' => 'Warnings', '2' => 'Errors'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'admin_notify_events' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '1',
+			'value' => array('3' => 'no_notifications_txt', '0' => 'Debug', '1' => 'Warnings', '2' => 'Errors'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'backup_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '/var/backup',
+			'validators' => array(	0 => array ( 	'type' => 'REGEX',
+										'regex' => "/(|^\\/{1,2}(?:[\\w-]+[.]?\\/?){5,128})$/",
+										'errmsg'=> 'backup_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'backup_tmp' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '/tmp/',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'tmpdir_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => "/^\/[a-zA-Z0-9\.\-\_\/]{3,128}$/",
+										'errmsg'=> 'tmpdir_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'backup_dir_is_mount' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'backup_mode' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'userzip',
+			'value' => array('userzip' => 'backup_mode_userzip', 'rootgz' => 'backup_mode_rootgz'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'backup_time' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '0:00',
+			'value' => array(	'0:00' => '0:00h',
+								'0:15' => '0:15h',
+								'0:30' => '0:30h',
+								'0:45' => '0:45h',
+								'1:00' => '1:00h',
+								'1:15' => '1:15h',
+								'1:30' => '1:30h',
+								'1:45' => '1:45h',
+								'2:00' => '2:00h',
+								'2:15' => '2:15h',
+								'2:30' => '2:30h',
+								'2:45' => '2:45h',
+								'3:00' => '3:00h',
+								'3:15' => '3:15h',
+								'3:30' => '3:30h',
+								'3:45' => '3:45h',
+								'4:00' => '4:00h',
+								'4:15' => '4:15h',
+								'4:30' => '4:30h',
+								'4:45' => '4:45h',
+								'5:00' => '5:00h',
+								'5:15' => '5:15h',
+								'5:30' => '5:30h',
+								'5:45' => '5:45h',
+								'6:00' => '6:00h',
+								'6:15' => '6:15h',
+								'6:30' => '6:30h',
+								'6:45' => '6:45h',
+								'7:00' => '7:00h',
+								'7:15' => '7:15h',
+								'7:30' => '7:30h',
+								'7:45' => '7:45h',
+								'8:00' => '8:00h',
+								'8:15' => '8:15h',
+								'8:30' => '8:30h',
+								'8:45' => '8:45h',
+								'9:00' => '9:00h',
+								'9:15' => '9:15h',
+								'9:30' => '9:30h',
+								'9:45' => '9:45h',
+								'10:00' => '10:00h',
+								'10:15' => '10:15h',
+								'10:30' => '10:30h',
+								'10:45' => '10:45h',
+								'11:00' => '11:00h',
+								'11:15' => '11:15h',
+								'11:30' => '11:30h',
+								'11:45' => '11:45h',
+								'12:00' => '12:00h',
+								'12:15' => '12:15h',
+								'12:30' => '12:30h',
+								'12:45' => '12:45h',
+								'13:00' => '13:00h',
+								'13:15' => '13:15h',
+								'13:30' => '13:30h',
+								'13:45' => '13:45h',
+								'14:00' => '14:00h',
+								'14:15' => '14:15h',
+								'14:30' => '14:30h',
+								'14:45' => '14:45h',
+								'15:00' => '15:00h',
+								'15:15' => '15:15h',
+								'15:30' => '15:30h',
+								'15:45' => '15:45h',
+								'16:00' => '16:00h',
+								'16:15' => '16:15h',
+								'16:30' => '16:30h',
+								'16:45' => '16:45h',
+								'17:00' => '17:00h',
+								'17:15' => '17:15h',
+								'17:30' => '17:30h',
+								'17:45' => '17:45h',
+								'18:00' => '18:00h',
+								'18:15' => '18:15h',
+								'18:30' => '18:30h',
+								'18:45' => '18:45h',
+								'19:00' => '19:00h',
+								'19:15' => '19:15h',
+								'19:30' => '19:30h',
+								'19:45' => '19:45h',
+								'20:00' => '20:00h',
+								'20:15' => '20:15h',
+								'20:30' => '20:30h',
+								'20:45' => '20:45h',
+								'21:00' => '21:00h',
+								'21:15' => '21:15h',
+								'21:30' => '21:30h',
+								'21:45' => '21:45h',
+								'22:00' => '22:00h',
+								'22:15' => '22:15h',
+								'22:30' => '22:30h',
+								'22:45' => '22:45h',
+								'23:00' => '23:00h',
+								'23:15' => '23:15h',
+								'23:30' => '23:30h',
+								'23:45' => '23:45h',
+								),
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'backup_delete' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'monit_url' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[0-9a-zA-Z\:\/\-\.\[\]]{0,255}$/',
+					'errmsg'=> 'monit_url_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'monit_user' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'monit_password' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'munin_url' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[0-9a-zA-Z\:\/\-\.\[\]]{0,255}$/',
+					'errmsg'=> 'munin_url_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'munin_user' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'munin_password' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'monitor_system_updates' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'log_retention' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'validators' => array (  0 => array ( 'type' => 'ISPOSITIVE',
+				'errmsg'=> 'log_retention_error_ispositive'),
+			),
+			'default' => '30',
+			'value' => '',
+			'width' => '4',
+			'maxlength' => '4'
+		),
+		'migration_mode' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['mail'] = array(
+	'title' => "Mail",
+	'width' => 60,
+	'template' => "templates/server_config_mail_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'module' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value' => array('postfix_mysql' => 'postfix_mysql')
+		),
+		'maildir_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '/home/vmail/[domain]/[localpart]/',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'maildir_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{5,128}$/',
+										'errmsg'=> 'maildir_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'maildir_format' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '20',
+			'value' => array('maildir' => 'Maildir', 'mdbox' => 'mdbox')
+		),
+		'homedir_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '/home/vmail/',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'homedir_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'homedir_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'dkim_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '/var/lib/amavis/dkim',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'dkim_strength' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '2048',
+			'value' => array('1024' => 'weak (1024)', '2048' => 'normal (2048)', '4096' => 'strong (4096)')
+		),
+        'relayhost_password' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '',
+            'value' => '',
+            'width' => '40',
+            'maxlength' => '255'
+        ),
+
+		'pop3_imap_daemon' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '20',
+			'value' => array('courier' => 'Courier', 'dovecot' => 'Dovecot')
+		),
+		'mail_filter_syntax' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '20',
+			'value' => array('maildrop' => 'Maildrop', 'sieve' => 'Sieve')
+		),
+		'mailuser_uid' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '5000',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'mailuser_uid_error_empty'),
+									1 => array('type' => 'RANGE',
+										'range' => '1999:',
+										'errmsg' => 'mailuser_uid_error_range'),
+			),
+			'value' => '',
+			'width' => '10',
+			'maxlength' => '255'
+		),
+		'mailuser_gid' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '5000',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'mailuser_gid_error_empty'),
+									1 => array('type' => 'RANGE',
+										'range' => '1999:',
+										'errmsg' => 'mailuser_gid_error_range'),
+			),
+			'value' => '',
+			'width' => '10',
+			'maxlength' => '255'
+		),
+		'mailuser_name' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'vmail',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'mailuser_name_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^(?!ispconfig|root)([a-zA-Z0-9]{1,20})$/',
+										'errmsg'=> 'mailuser_name_error_regex'),
+			),
+			'value' => '',
+			'width' => '10',
+			'maxlength' => '255'
+		),
+		'mailuser_group' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'vmail',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'mailuser_group_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^(?!ispconfig|root)([a-zA-Z0-9]{1,20})$/',
+										'errmsg'=> 'mailuser_group_name_error_regex'),
+			),
+			'value' => '',
+			'width' => '10',
+			'maxlength' => '255'
+		),
+		'mailbox_virtual_uidgid_maps' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'validators' => array (0 => array ( 'type' => 'CUSTOM',
+					'class' => 'validate_server_mail_config',
+					'function' => 'mailbox_virtual_uidgid_maps'),
+			),
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'relayhost' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'relayhost_user' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'relayhost_password' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'reject_sender_login_mismatch' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'mailbox_size_limit' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value' => '',
+			'width' => '10',
+			'maxlength' => '15'
+		),
+		'message_size_limit' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value' => '',
+			'width' => '10',
+			'maxlength' => '15'
+		),
+		'mailbox_quota_stats' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'realtime_blackhole_list' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '/^((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])(,\s*(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]))*)?$/',
+					'errmsg'=> 'rbl_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'overquota_notify_admin' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'overquota_notify_client' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'overquota_notify_freq' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '7',
+			'value' => '',
+			'width' => '20',
+			'maxlength' => '255'
+		),
+		'overquota_notify_onok' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['getmail'] = array(
+	'title' => "Getmail",
+	'width' => 80,
+	'template' => "templates/server_config_getmail_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'getmail_config_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'getmail_config_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'getmail_config_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['web'] = array(
+	'title' => "Web",
+	'width' => 60,
+	'template' => "templates/server_config_web_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_type' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'apache',
+			'value' => array('apache' => 'Apache', 'nginx' => 'Nginx')
+		),
+		'website_basedir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'website_basedir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'website_basedir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'website_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array(	'type' => 'NOTEMPTY',
+										'errmsg' => 'website_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{5,128}$/',
+										'errmsg'=> 'website_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'website_symlinks' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'website_symlinks_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]\:]{5,128}$/',
+										'errmsg'=> 'website_symlinks_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'website_symlinks_rel' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'network_filesystem' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'website_autoalias' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'vhost_rewrite_v6' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n',1 => 'y')
+		),
+		'vhost_conf_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'vhost_conf_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'vhost_conf_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'vhost_conf_enabled_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'vhost_conf_enabled_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'vhost_conf_enabled_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'nginx_enable_pagespeed' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n',1 => 'y')
+		),
+		'nginx_vhost_conf_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_vhost_conf_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'nginx_vhost_conf_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'nginx_vhost_conf_enabled_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_vhost_conf_enabled_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'nginx_vhost_conf_enabled_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'CA_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array(	0 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{0,128}$/',
+										'errmsg'=> 'ca_path_error_regex'),
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'CA_pass' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'security_level' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '20',
+			'value' => array('10' => 'Medium', '20' => 'High')
+		),
+		'set_folder_permissions_on_update' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'web_folder_protection' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'add_web_users_to_sshusers_group' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'check_apache_config' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'enable_sni' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'enable_ip_wildcard' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'logging' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'yes',
+			'value' => array('yes' => 'Yes', 'anon' => 'Anonymize IP', 'no' => 'No')
+		),
+		'overtraffic_notify_admin' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'overtraffic_notify_client' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'overquota_notify_admin' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'overquota_notify_client' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'overquota_db_notify_admin' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'overquota_db_notify_client' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'overquota_notify_freq' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '7',
+			'value' => '',
+			'width' => '20',
+			'maxlength' => '255'
+		),
+		'overquota_notify_onok' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'user' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(0 => array('type' => 'NOTEMPTY',
+					'errmsg' => 'apache_user_error_empty'),
+					1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysuser',
+							'check_names' => false,
+							'errmsg' => 'invalid_apache_user_txt'
+						),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'group' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(0 => array('type' => 'NOTEMPTY',
+					'errmsg' => 'apache_group_error_empty'),
+					1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysgroup',
+							'check_names' => false,
+							'errmsg' => 'invalid_apache_group_txt'
+						),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'connect_userid_to_webid' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'connect_userid_to_webid_start' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '10000',
+			'validators' => array(0 => array('type' => 'ISINT',
+					'errmsg' => 'connect_userid_to_webid_startid_isint'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'nginx_user' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_user_error_empty'),
+									1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysuser',
+							'check_names' => false,
+							'errmsg' => 'invalid_nginx_user_txt'
+						),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'nginx_group' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_group_error_empty'),
+									1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysgroup',
+							'check_names' => false,
+							'errmsg' => 'invalid_nginx_group_txt'
+						),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_ini_path_apache' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_ini_path_apache_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_ini_path_apache_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_ini_path_cgi' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_ini_path_cgi_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_ini_path_cgi_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_default_name' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'Default',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_default_name_error_empty'),
+			),
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'TRIM'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					2 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_fpm_init_script' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_fpm_init_script_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_]{1,128}$/',
+										'errmsg'=> 'php_fpm_init_script_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_fpm_ini_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_fpm_ini_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_fpm_ini_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_fpm_pool_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_fpm_pool_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_fpm_pool_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_fpm_start_port' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(0 => array('type' => 'ISPOSITIVE',
+					'errmsg' => 'php_fpm_start_port_error_empty'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_fpm_socket_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_fpm_socket_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_fpm_socket_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'php_open_basedir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_open_basedir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/\]\[\:]{1,}$/',
+										'errmsg'=> 'php_open_basedir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '4000'
+		),
+		'php_ini_check_minutes' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '1',
+			'validators' => array(0 => array('type' => 'NOTEMPTY',
+					'errmsg' => 'php_ini_check_minutes_error_empty'),
+			),
+			'value' => '',
+			'width' => '10',
+			'maxlength' => '255'
+		),
+		'php_handler' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'fast-cgi',
+			'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
+			'searchable' => 2
+		),
+		'php_fpm_incron_reload' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'nginx_cgi_socket' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_cgi_socket_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'nginx_cgi_socket_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'htaccess_allow_override' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'htaccess_allow_override_error_empty'),
+			),
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'enable_spdy' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'y',
+			'value' => array (
+				0 => 'n',
+				1 => 'y'
+			)
+		),
+		'apps_vhost_enabled' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'y',
+			'value' => array (0 => 'n', 1 => 'y')
+		),
+		'apps_vhost_port' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '8081',
+			'validators' => array(0 => array('type' => 'NOTEMPTY',
+					'errmsg' => 'apps_vhost_port_error_empty'),
+			),
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'apps_vhost_ip' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '_default_',
+			'validators' => array(0 => array('type' => 'NOTEMPTY',
+					'errmsg' => 'apps_vhost_ip_error_empty'),
+			),
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'apps_vhost_servername' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'awstats_conf_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'awstats_data_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'awstats_data_dir_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'awstats_data_dir_error_regex'),
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'awstats_pl' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'awstats_pl_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'awstats_pl_error_regex'),
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'awstats_buildstaticpages_pl' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'awstats_buildstaticpages_pl_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'awstats_buildstaticpages_pl_error_regex'),
+			),
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'skip_le_check' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'n',
+			'value' => array (
+				0 => 'n',
+				1 => 'y'
+			)
+		),
+		'php_fpm_reload_mode' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'reload',
+			'value' => array('reload' => 'Reload', 'restart' => 'Restart'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['dns'] = array(
+	'title' => "DNS",
+	'width' => 60,
+	'template' => "templates/server_config_dns_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'bind_user' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'bind_user_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^(?!ispconfig)([a-zA-Z0-9]{1,20})$/',
+										'errmsg'=> 'invalid_bind_user_txt'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'bind_group' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'bind_group_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^(?!ispconfig)([a-zA-Z0-9]{1,20})$/',
+										'errmsg'=> 'invalid_bind_group_txt'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'bind_zonefiles_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'bind_zonefiles_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'bind_zonefiles_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'named_conf_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'named_conf_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'named_conf_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'named_conf_local_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'named_conf_local_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'named_conf_local_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'disable_bind_log' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['fastcgi'] = array(
+	'title' => "FastCGI",
+	'width' => 80,
+	'template' => "templates/server_config_fastcgi_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'fastcgi_starter_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_starter_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+										'errmsg'=> 'fastcgi_starter_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'fastcgi_starter_script' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_starter_script_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'fastcgi_starter_script_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'fastcgi_alias' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_alias_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'fastcgi_alias_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'fastcgi_phpini_path' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_phpini_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+										'errmsg'=> 'fastcgi_phpini_path_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'fastcgi_children' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(0 => array('type' => 'ISPOSITIVE',
+					'errmsg' => 'fastcgi_children_error_empty'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'fastcgi_max_requests' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array( 0 => array( 'type' => 'ISINT',
+					'errmsg' => 'fastcgi_max_requests_error_empty'),
+				1 => array( 'type' => 'RANGE',
+					'range' => '0:',
+					'errmsg' => 'fastcgi_max_requests_error_empty'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'fastcgi_bin' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_bin_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+										'errmsg'=> 'fastcgi_bin_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'fastcgi_config_syntax' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '2',
+			'value' => array('1' => 'Old (apache 2.0)', '2' => 'New (apache 2.2)'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+
+$form["tabs"]['xmpp'] = array(
+    'title' => "XMPP",
+    'width' => 80,
+    'template' => "templates/server_config_xmpp_edit.htm",
+    'fields' => array(
+        //#################################
+        // Begin Datatable fields
+        //#################################
+        'xmpp_use_ipv6' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value' => array(0 => 'n', 1 => 'y')
+        ),
+        'xmpp_bosh_max_inactivity' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '30',
+            'validators' => array(0 => array('type' => 'ISINT',
+                'errmsg' => 'ip_address_error_wrong'),
+                array('type'=>'RANGE', 'range'=>'15:360', 'errmsg' => 'xmpp_bosh_timeout_range_wrong')
+            ),
+            'value' => '',
+            'width' => '15'
+        ),
+
+        'xmpp_server_admins' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+            'default' => 'admin@service.com, superuser@service.com',
+            'value' => '',
+            'width' => '15'
+        ),
+
+        'xmpp_modules_enabled' => array(
+            'datatype' => 'TEXT',
+            'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+            'default' => "saslauth, tls, dialback, disco, discoitems, version, uptime, time, ping, admin_adhoc, admin_telnet, bosh, posix, announce, offline, webpresence, mam, stream_management, message_carbons",
+            'value' => '',
+            'separator' => ","
+        ),
+
+        'xmpp_port_http' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '5290',
+            'validators' => array(0 => array('type' => 'ISINT')),
+            'value' => '5290',
+            'width' => '15'
+        ),
+        'xmpp_port_https' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '5291',
+            'validators' => array(0 => array('type' => 'ISINT')),
+            'value' => '5291',
+            'width' => '15'
+        ),
+        'xmpp_port_pastebin' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '5292',
+            'validators' => array(0 => array('type' => 'ISINT')),
+            'value' => '5292',
+            'width' => '15'
+        ),
+        'xmpp_port_bosh' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '5280',
+            'validators' => array(0 => array('type' => 'ISINT')),
+            'value' => '5280',
+            'width' => '15'
+        ),
+        //#################################
+        // ENDE Datatable fields
+        //#################################
+    )
+);
+
+$form["tabs"]['jailkit'] = array(
+	'title' => "Jailkit",
+	'width' => 80,
+	'template' => "templates/server_config_jailkit_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'jailkit_chroot_home' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'jailkit_chroot_home_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+										'errmsg'=> 'jailkit_chroot_home_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'jailkit_chroot_app_sections' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'jailkit_chroot_app_sections_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\-\_\ ]{1,128}$/',
+										'errmsg'=> 'jailkit_chroot_app_sections_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '1000'
+		),
+		'jailkit_chroot_app_programs' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'jailkit_chroot_app_programs_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/',
+										'errmsg'=> 'jailkit_chroot_app_programs_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '1000'
+		),
+		'jailkit_chroot_cron_programs' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'jailkit_chroot_cron_programs_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/',
+										'errmsg'=> 'jailkit_chroot_cron_programs_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '1000'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+/*
+$form["tabs"]['ufw_firewall'] = array (
+	'title' 	=> "UFW Firewall",
+	'width' 	=> 80,
+	'template' 	=> "templates/server_config_ufw_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'ufw_enable' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'no',
+			'value'		=> array(0 => 'no',1 => 'yes')
+		),
+		'ufw_manage_builtins' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'no',
+			'value'		=> array(0 => 'no',1 => 'yes')
+		),
+		'ufw_ipv6' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'no',
+			'value'		=> array(0 => 'no',1 => 'yes')
+		),
+		'ufw_default_input_policy' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> 'ACCEPT',
+			'value'		=> array('ACCEPT' => 'accept', 'DROP' => 'drop', 'REJECT' => 'reject')
+		),
+		'ufw_default_output_policy' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> 'ACCEPT',
+			'value'		=> array('ACCEPT' => 'accept', 'DROP' => 'drop', 'REJECT' => 'reject')
+		),
+		'ufw_default_forward_policy' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> 'ACCEPT',
+			'value'		=> array('ACCEPT' => 'accept', 'DROP' => 'drop', 'REJECT' => 'reject')
+		),
+		'ufw_default_application_policy' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> 'DROP',
+			'value'		=> array('ACCEPT' => 'accept', 'DROP' => 'drop', 'REJECT' => 'reject')
+		),
+		'ufw_log_level' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> 'low',
+			'value'		=> array('low' => 'low', 'medium' => 'medium', 'high' => 'high')
+		)
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+*/
+
+$form["tabs"]['vlogger'] = array(
+	'title' => "vlogger",
+	'width' => 80,
+	'template' => "templates/server_config_vlogger_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'config_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'vlogger_config_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'vlogger_config_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+
+
+$form["tabs"]['cron'] = array(
+	'title' => "Cron",
+	'width' => 80,
+	'template' => "templates/server_config_cron_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'init_script' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'cron_init_script_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\-\_]{1,30}$/',
+										'errmsg'=> 'cron_init_script_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'crontab_dir' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'crontab_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'crontab_dir_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'wget' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'cron_wget_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'cron_wget_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['rescue'] = array(
+	'title' => "Rescue",
+	'width' => 80,
+	'template' => "templates/server_config_rescue_edit.htm",
+	'fields' => array(
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'try_rescue' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'do_not_try_rescue_httpd' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'do_not_try_rescue_mongodb' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'do_not_try_rescue_mysql' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'do_not_try_rescue_mail' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 108bf96de8..50b3514564 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -296,4 +296,7 @@ $wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
 $wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
 $wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload Modus';
-?>
+$wb['content_filter_txt'] = 'Content-Filter';
+$wb['rspamd_url_txt'] = 'Rspamd-URL';
+$wb['rspamd_user_txt'] = 'Rspamd-Benutzer';
+$wb['rspamd_password_txt'] = 'Rspamd-Passwort';
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/de_server_config.lng.orig b/interface/web/admin/lib/lang/de_server_config.lng.orig
new file mode 100644
index 0000000000..108bf96de8
--- /dev/null
+++ b/interface/web/admin/lib/lang/de_server_config.lng.orig
@@ -0,0 +1,299 @@
+<?php
+$wb['jailkit_chroot_home_txt'] = 'Jailkit Chroot home';
+$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit Chroot Anwendungsbereiche';
+$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit Chrooted Anwendungen';
+$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit Cron Chrooted Anwendungen';
+$wb['website_path_txt'] = 'Webseiten Pfad';
+$wb['website_symlinks_txt'] = 'Webseiten Symlinks';
+$wb['website_symlinks_rel_txt'] = 'Erstelle relative Symlinks';
+$wb['vhost_conf_dir_txt'] = 'vHost Konfigurationsverzeichnis';
+$wb['vhost_conf_enabled_dir_txt'] = 'vHost config enabled dir';
+$wb['getmail_config_dir_txt'] = 'Getmail Konfigurationsverzeichnis';
+$wb['fastcgi_starter_path_txt'] = 'FastCGI Starter Pfad';
+$wb['fastcgi_starter_script_txt'] = 'FastCGI Starter Script';
+$wb['fastcgi_alias_txt'] = 'FastCGI Alias';
+$wb['fastcgi_phpini_path_txt'] = 'FastCGI php.ini Pfad';
+$wb['fastcgi_children_txt'] = 'FastCGI Children';
+$wb['fastcgi_max_requests_txt'] = 'FastCGI max. Anfragen';
+$wb['fastcgi_bin_txt'] = 'FastCGI Bin';
+$wb['module_txt'] = 'Modul';
+$wb['maildir_path_txt'] = 'Maildir Pfad';
+$wb['maildir_format_txt'] = 'Maildir Format';
+$wb['homedir_path_txt'] = 'Homedir Pfad';
+$wb['dkim_path_txt'] = 'DKIM Pfad';
+$wb['mailuser_uid_txt'] = 'Mailbenutzer UID';
+$wb['mailuser_gid_txt'] = 'Mailbenutzer GID';
+$wb['mailuser_name_txt'] = 'Mailbenutzer Name';
+$wb['mailuser_group_txt'] = 'Mailbenutzer Gruppe';
+$wb['mailbox_virtual_uidgid_maps_txt'] = 'Website Linux Uid für Mailboxen';
+$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'nur für einzel-Server Installationen.';
+$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid kann in Multiserver-Umgebung nicht gemappt werden.';
+$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Uid Mapping funktioniert nur in Verbindung mit dovecot.';
+$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Uid Mapping kann nur umgeschaltet werden, wenn noch keine Mailuser angelegt sind.';
+$wb['relayhost_txt'] = 'Relayhost';
+$wb['relayhost_user_txt'] = 'Relayhost Benutzer';
+$wb['relayhost_password_txt'] = 'Relayhost Passwort';
+$wb['reject_sender_login_mismatch_txt'] = 'Zurückweisen von Mails, wenn Sender nicht gleich Login';
+$wb['mailbox_size_limit_txt'] = 'E-Mailkonto Beschränkung';
+$wb['message_size_limit_txt'] = 'E-Mailgrößen Beschränkung';
+$wb['ip_address_txt'] = 'IP Adresse';
+$wb['netmask_txt'] = 'Netzmaske';
+$wb['gateway_txt'] = 'Gateway';
+$wb['hostname_txt'] = 'Hostname';
+$wb['nameservers_txt'] = 'Nameserver';
+$wb['auto_network_configuration_txt'] = 'Netzwerkkonfiguration';
+$wb['website_basedir_txt'] = 'Webseiten basedir';
+$wb['website_autoalias_txt'] = 'Webseiten Autoalias';
+$wb['website_autoalias_note_txt'] = 'Platzhalter:';
+$wb['ip_address_error_wrong'] = 'Ungültiges IP Adressen Format.';
+$wb['netmask_error_wrong'] = 'Ungültiges Netzmasken Format.';
+$wb['gateway_error_wrong'] = 'Ungültiges Gateway Format.';
+$wb['hostname_error_empty'] = 'Hostname ist leer.';
+$wb['nameservers_error_empty'] = 'Nameserver ist leer.';
+$wb['config_dir_txt'] = 'Konfigurationsverzeichnis';
+$wb['init_script_txt'] = 'Cron init Script Name';
+$wb['crontab_dir_txt'] = 'Pfad für individuelle Crontabs';
+$wb['wget_txt'] = 'Pfad zum wget Programm';
+$wb['web_user_txt'] = 'Apache Benutzer';
+$wb['web_group_txt'] = 'Apache Gruppe';
+$wb['security_level_txt'] = 'Sicherheitslevel';
+$wb['loglevel_txt'] = 'Loglevel';
+$wb['apps_vhost_port_txt'] = 'Apps vHost Port';
+$wb['apps_vhost_ip_txt'] = 'Apps vHost IP Adresse';
+$wb['apps_vhost_servername_txt'] = 'Apps vHost Domain';
+$wb['bind_user_txt'] = 'BIND Benutzer';
+$wb['bind_group_txt'] = 'BIND Gruppe';
+$wb['bind_zonefiles_dir_txt'] = 'BIND Zonefiles Verzeichnis';
+$wb['named_conf_path_txt'] = 'BIND named.conf Pfad';
+$wb['bind_user_error_empty'] = 'BIND Benutzer ist leer.';
+$wb['bind_group_error_empty'] = 'BIND Gruppe ist leer.';
+$wb['bind_zonefiles_dir_error_empty'] = 'BIND Zonefiles Verzeichnis ist leer.';
+$wb['named_conf_path_error_empty'] = 'BIND named.conf Pfad ist leer.';
+$wb['named_conf_local_path_error_empty'] = 'BIND named.conf.local Pfad ist leer.';
+$wb['mail_filter_syntax_txt'] = 'E-Mailfilter Syntax';
+$wb['pop3_imap_daemon_txt'] = 'POP3/IMAP Dämon';
+$wb['php_open_basedir_txt'] = 'PHP open_basedir';
+$wb['php_open_basedir_error_empty'] = 'PHP open_basedir ist leer.';
+$wb['htaccess_allow_override_txt'] = '.htaccess AllowOverride';
+$wb['htaccess_allow_override_error_empty'] = '.htaccess AllowOverride ist leer.';
+$wb['awstats_conf_dir_txt'] = 'AWStats Konfigurationsverzeichnis';
+$wb['awstats_data_dir_txt'] = 'AWStats Datenverzeichnis';
+$wb['awstats_pl_txt'] = 'AWStats awstats.pl Script';
+$wb['awstats_buildstaticpages_pl_txt'] = 'AWStats awstats_buildstaticpages.pl Script';
+$wb['backup_dir_txt'] = 'Backupverzeichnis';
+$wb['backup_tmp_txt'] = 'Backup tmp-Dir (zip)';
+$wb['named_conf_local_path_txt'] = 'BIND named.conf.local Pfad';
+$wb['php_ini_path_cgi_txt'] = 'CGI php.ini Pfad';
+$wb['php_ini_path_apache_txt'] = 'Apache php.ini Pfad';
+$wb['check_apache_config_txt'] = 'Teste Apache Konfiguration beim Neustart';
+$wb['CA_path_txt'] = 'CA Pfad';
+$wb['CA_pass_txt'] = 'CA Passwort';
+$wb['ufw_enable_txt'] = 'Aktivieren';
+$wb['ufw_manage_builtins_txt'] = 'Verwalte Builtin Rules';
+$wb['ufw_ipv6_txt'] = 'Aktiviere IPv6';
+$wb['ufw_default_input_policy_txt'] = 'Default Input Policy';
+$wb['ufw_default_output_policy_txt'] = 'Default Output Policy';
+$wb['ufw_default_forward_policy_txt'] = 'Default Forward Policy';
+$wb['ufw_default_application_policy_txt'] = 'Default Application Policy';
+$wb['ufw_log_level_txt'] = 'Loglevel';
+$wb['network_config_warning_txt'] = 'Die Netzwerk Konfiguration Option ist nur auf Debian- und Ubuntu Servern verfügbar. Aktivieren Sie diese Option nicht, falls Ihr Netzwerk Interface nicht eth0 heißt.';
+$wb['server_type_txt'] = 'Server Typ';
+$wb['nginx_vhost_conf_dir_txt'] = 'Nginx vHost Konfigurations Verzeichnis';
+$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Nginx vHost config enabled dir';
+$wb['nginx_user_txt'] = 'Nginx Benutzer';
+$wb['nginx_group_txt'] = 'Nginx Gruppe';
+$wb['nginx_cgi_socket_txt'] = 'Nginx CGI Socket';
+$wb['backup_dir_error_empty'] = 'Backup Verzeichnis ist leer.';
+$wb['tmpdir_path_error_empty'] = 'Tmp-Dir Pfad ist leer.';
+$wb['tmpdir_path_error_regex'] = 'Invalid Tmp-Dir Pfad.';
+$wb['maildir_path_error_empty'] = 'Maildir Pfad ist leer.';
+$wb['homedir_path_error_empty'] = 'Homedir Pfad ist leer.';
+$wb['mailuser_uid_error_empty'] = 'Mail Benutzer UID ist leer.';
+$wb['mailuser_gid_error_empty'] = 'Mail Benutzer GID ist leer.';
+$wb['mailuser_name_error_empty'] = 'Mail Benutzer Name ist leer.';
+$wb['mailuser_group_error_empty'] = 'Mail Benutzer Gruppe ist leer.';
+$wb['getmail_config_dir_error_empty'] = 'Getmail config dir ist leer.';
+$wb['website_basedir_error_empty'] = 'Webseiten basedir ist leer.';
+$wb['website_path_error_empty'] = 'Webseiten Pfad ist leer.';
+$wb['website_symlinks_error_empty'] = 'Webseiten Symlinks ist leer.';
+$wb['vhost_conf_dir_error_empty'] = 'vHost config dir ist leer.';
+$wb['vhost_conf_enabled_dir_error_empty'] = 'vHost config enabled dir ist leer.';
+$wb['nginx_vhost_conf_dir_error_empty'] = 'Nginx vHost config dir ist leer.';
+$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Nginx vHost config enabled dir ist leer.';
+$wb['apache_user_error_empty'] = 'Apache Benutzer ist leer.';
+$wb['apache_group_error_empty'] = 'Apache Grupp ist leer.';
+$wb['nginx_user_error_empty'] = 'Nginx Benutzer ist leer.';
+$wb['nginx_group_error_empty'] = 'Nginx Gruppe ist leer.';
+$wb['php_ini_path_apache_error_empty'] = 'Apache php.ini Pfad ist leer.';
+$wb['php_ini_path_cgi_error_empty'] = 'CGI php.ini Pfad ist leer.';
+$wb['nginx_cgi_socket_empty'] = 'Nginx CGI Socket ist leer.';
+$wb['apps_vhost_port_error_empty'] = 'Apps vHost Port ist leer.';
+$wb['apps_vhost_ip_error_empty'] = 'Apps vHost IP Adresse ist leer.';
+$wb['fastcgi_starter_path_error_empty'] = 'FastCGI Starter Pfad ist leer.';
+$wb['fastcgi_starter_script_error_empty'] = 'FastCGI Starter Script  ist leer.';
+$wb['fastcgi_alias_error_empty'] = 'FastCGI Alias ist leer.';
+$wb['fastcgi_phpini_path_error_empty'] = 'FastCGI php.ini Pfad ist leer.';
+$wb['fastcgi_children_error_empty'] = 'FastCGI Children ist leer.';
+$wb['fastcgi_max_requests_error_empty'] = 'FastCGI max. Requests ist leer.';
+$wb['fastcgi_bin_error_empty'] = 'FastCGI Bin ist leer.';
+$wb['jailkit_chroot_home_error_empty'] = 'Jailkit Chroot home ist leer.';
+$wb['jailkit_chroot_app_sections_error_empty'] = 'Jailkit Chroot Anwendungsbereiche ist leer.';
+$wb['jailkit_chroot_app_programs_error_empty'] = 'Jailkit Chrooted Anwendungen ist leer.';
+$wb['jailkit_chroot_cron_programs_error_empty'] = 'Jailkit Cron Chrooted Anwendungen ist leer.';
+$wb['vlogger_config_dir_error_empty'] = 'Konfigurationsverzeichnis ist leer.';
+$wb['cron_init_script_error_empty'] = 'Cron Startscript Name ist leer.';
+$wb['crontab_dir_error_empty'] = 'Pfad für individuelle Crontabs ist leer.';
+$wb['cron_wget_error_empty'] = 'Pfad zum wget Programm ist leer.';
+$wb['php_fpm_init_script_txt'] = 'PHP-FPM Init Script';
+$wb['php_fpm_init_script_error_empty'] = 'PHP-FPM Init Script ist leer.';
+$wb['php_fpm_ini_path_txt'] = 'PHP-FPM php.ini Pfad';
+$wb['php_fpm_ini_path_error_empty'] = 'PHP-FPM php.ini Pfad ist leer.';
+$wb['php_fpm_pool_dir_txt'] = 'PHP-FPM Pool Verzeichnis';
+$wb['php_fpm_pool_dir_error_empty'] = 'PHP-FPM Pool Verzeichnis ist leer.';
+$wb['php_fpm_start_port_txt'] = 'PHP-FPM Start Port';
+$wb['php_fpm_start_port_error_empty'] = 'PHP-FPM Start Port ist leer.';
+$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM Socket Verzeichnis';
+$wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM Socket Verzeichnis ist leer.';
+$wb['fastcgi_config_syntax_txt'] = 'FastCGI Konfigurations Syntax';
+$wb['try_rescue_txt'] = 'Aktiviere Service Monitoring und Neustart bei Unerreichbarkeit';
+$wb['do_not_try_rescue_httpd_txt'] = 'Deaktiviere HTTPD Monitoring';
+$wb['do_not_try_rescue_mongodb_txt'] = 'Deaktiviere MongoDB Monitoring';
+$wb['do_not_try_rescue_mysql_txt'] = 'Deaktiviere MySQL Monitoring';
+$wb['do_not_try_rescue_mail_txt'] = 'Deaktiviere E-Mail Monitoring';
+$wb['rescue_description_txt'] = '<b>Information:</b> Falls Sie MySQL stoppen möchten, wählen Sie die Funktion \'Deaktiviere MySQL Monitoring\' und warten Sie 2 bis 3 Minuten. Wenn Sie nicht 2 bis 3 Minuten warten wird ISPConfig versuchen MySQL wieder zu starten.';
+$wb['enable_sni_txt'] = 'Aktiviere SNI';
+$wb['set_folder_permissions_on_update_txt'] = 'Verzeichnisberechtigungen beim Update setzen';
+$wb['add_web_users_to_sshusers_group_txt'] = 'Webbenutzer zur -sshusers- hinzufügen';
+$wb['connect_userid_to_webid_txt'] = 'Linux Userid mit webid verknüpfen';
+$wb['connect_userid_to_webid_start_txt'] = 'Start ID für userid/webid Verknüpfung';
+$wb['realtime_blackhole_list_txt'] = 'Realtime Blackhole Liste';
+$wb['realtime_blackhole_list_note_txt'] = '(Mehrere Realtime Blackhole Listen mit Kommas trennen)';
+$wb['ssl_settings_txt'] = 'SSL Einstellungen';
+$wb['permissions_txt'] = 'Berechtigungen';
+$wb['php_settings_txt'] = 'PHP Einstellungen';
+$wb['apps_vhost_settings_txt'] = 'Apps vHost Einstellungen';
+$wb['awstats_settings_txt'] = 'AWStats Einstellungen';
+$wb['backup_mode_txt'] = 'Backupmodus';
+$wb['backup_mode_userzip'] = 'Backup Dateien gehören dem Web Benutzer (.zip Datei)';
+$wb['backup_mode_rootgz'] = 'Backup aller Dateien des Webverzeichnisses als Root Benutzer';
+$wb['backup_time_txt'] = 'Backupzeit';
+$wb['firewall_txt'] = 'Firewall';
+$wb['mailbox_quota_stats_txt'] = 'E-Mailkonto Beschränkung Statistiken';
+$wb['enable_ip_wildcard_txt'] = 'IP Adressen Wildcard (*) aktivieren';
+$wb['web_folder_protection_txt'] = 'Webverzeichnis unveränderlich machen (erweiterte Attribute)';
+$wb['overtraffic_notify_admin_txt'] = 'Ãœberschreiten des Datentransfer Limits an den Administrator senden';
+$wb['overtraffic_notify_client_txt'] = 'Ãœberschreiten des Datentransfer Limits an den Kunden senden';
+$wb['rbl_error_regex'] = 'Bitte geben Sie gültige RBL-Hostnamen an.';
+$wb['overquota_notify_admin_txt'] = 'Quota-Warnungen an den Administrator senden';
+$wb['overquota_notify_client_txt'] = 'Quota-Warnungen an den Kunden senden';
+$wb['overquota_notify_onok_txt'] = 'Meldung an den Kunden senden, wenn Belegung wieder ok';
+$wb['overquota_notify_freq_txt'] = 'Quota-Warnung alle X Tage versenden';
+$wb['overquota_notify_freq_note_txt'] = '0 = Meldung nur einmalig versenden, keine Wiederholung';
+$wb['admin_notify_events_txt'] = 'Sende E-Mail an Administrator ab folgendem Level';
+$wb['no_notifications_txt'] = 'Keine Benachrichtigungen';
+$wb['monit_url_txt'] = 'Monit-URL';
+$wb['monit_user_txt'] = 'Monit-Benutzer';
+$wb['monit_password_txt'] = 'Monit-Passwort';
+$wb['monit_url_error_regex'] = 'Ungültige Monit-URL';
+$wb['monit_url_note_txt'] = 'Platzhalter:';
+$wb['munin_url_txt'] = 'Munin-URL';
+$wb['munin_user_txt'] = 'Munin-Benutzer';
+$wb['munin_password_txt'] = 'Munin-Passwort';
+$wb['munin_url_error_regex'] = 'Ungültige Munin-URL';
+$wb['munin_url_note_txt'] = 'Platzhalter:';
+$wb['backup_dir_is_mount_txt'] = 'Backupverzeichnis ist ein eigener Mount?';
+$wb['backup_dir_mount_cmd_txt'] = 'Mount-Befehl, falls Backupverzeichnis nicht gemountet';
+$wb['backup_delete_txt'] = 'Backups loeschen wenn eine Domain / Webseite geloescht wird';
+$wb['v6_prefix_txt'] = 'IPv6 Prefix';
+$wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror';
+$wb['v6_prefix_length'] = 'Prefix zu lang fuer angegebene IPv6-Adresse ';
+$wb['monitor_system_updates_txt'] = 'Suche nach Linux updates';
+$wb['dkim_strength_txt'] = 'DKIM Stärke';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir or path too short, min. length 5 chars.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
+$wb['network_filesystem_txt'] = 'Netzwerk-Dateisystem';
+$wb['overquota_db_notify_admin_txt'] = 'Datenbank-Quota-Warnungen an den Administrator senden';
+$wb['overquota_db_notify_client_txt'] = 'Datenbank-Quota-Warnungen an den Kunden senden';
+$wb['php_ini_check_minutes_txt'] = 'Prüfe php.ini alle X Minuten auf Änderungen';
+$wb['php_ini_check_minutes_error_empty'] = 'Bitte geben Sie einen Wert an, wie oft die php.ini auf Änderungen geprüft werden soll.';
+$wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung';
+$wb['php_handler_txt'] = 'Standard-PHP-Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
+$wb['enable_spdy_txt'] = 'Stellt SPDY/HTTP2 zur Verfügung';
+$wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
+$wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
+$wb['disabled_txt'] = 'Disabled';
+$wb['web_settings_txt'] = 'Web Server';
+$wb['xmpp_server_txt'] = 'XMPP Server';
+$wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
+$wb['xmpp_bosh_max_inactivity_txt'] = 'Max. BOSH inactivity time';
+$wb['xmpp_bosh_timeout_range_wrong'] = 'Please enter a bosh timeout range between 15 - 360';
+$wb['xmpp_module_saslauth'] = 'saslauth';
+$wb['xmpp_server_admins_txt'] = 'Server Admins (JIDs)';
+$wb['xmpp_modules_enabled_txt'] = 'Serverwide enabled plugins (one per line)';
+$wb['xmpp_ports_txt'] = 'Component ports';
+$wb['xmpp_port_http_txt'] = 'HTTP';
+$wb['xmpp_port_https_txt'] = 'HTTPS';
+$wb['xmpp_port_pastebin_txt'] = 'Pastebin';
+$wb['xmpp_port_bosh_txt'] = 'BOSH';
+$wb['skip_le_check_txt'] = 'Skip Lets Encrypt Check';
+$wb['migration_mode_txt'] = 'Server Migration Mode';
+$wb['nginx_enable_pagespeed_txt'] = 'Makes Pagespeed available';
+$wb['logging_txt'] = 'Store website access and error logs';
+$wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
+$wb['log_retention_txt'] = 'Log retention (days)';
+$wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
+$wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
+$wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload Modus';
+?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng.rej b/interface/web/admin/lib/lang/de_server_config.lng.rej
new file mode 100644
index 0000000000..eeed14711e
--- /dev/null
+++ b/interface/web/admin/lib/lang/de_server_config.lng.rej
@@ -0,0 +1,11 @@
+--- interface/web/admin/lib/lang/de_server_config.lng
++++ interface/web/admin/lib/lang/de_server_config.lng
+@@ -295,4 +295,7 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+ $wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
+ $wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
+ $wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
+-?>
++$wb['content_filter_txt'] = 'Content-Filter';
++$wb['rspamd_url_txt'] = 'Rspamd-URL';
++$wb['rspamd_user_txt'] = 'Rspamd-Benutzer';
++$wb['rspamd_password_txt'] = 'Rspamd-Passwort';
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index ac0ee42b90..0ba3638a0a 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -297,4 +297,7 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
-?>
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng.orig b/interface/web/admin/lib/lang/en_server_config.lng.orig
new file mode 100644
index 0000000000..ac0ee42b90
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_server_config.lng.orig
@@ -0,0 +1,300 @@
+<?php
+$wb["ufw_enable_txt"] = 'Enable';
+$wb["ufw_manage_builtins_txt"] = 'Manage Builtin Rules';
+$wb["ufw_ipv6_txt"] = 'Enable IPv6';
+$wb["ufw_default_input_policy_txt"] = 'Default Input Policy';
+$wb["ufw_default_output_policy_txt"] = 'Default Output Policy';
+$wb["ufw_default_forward_policy_txt"] = 'Default Forward Policy';
+$wb["ufw_default_application_policy_txt"] = 'Default Application Policy';
+$wb["ufw_log_level_txt"] = 'Log Level';
+$wb["jailkit_chroot_home_txt"] = 'Jailkit chroot home';
+$wb["jailkit_chroot_app_sections_txt"] = 'Jailkit chroot app sections';
+$wb["jailkit_chroot_app_programs_txt"] = 'Jailkit chrooted applications';
+$wb["jailkit_chroot_cron_programs_txt"] = 'Jailkit cron chrooted applications';
+$wb["website_path_txt"] = 'Website path';
+$wb["website_symlinks_txt"] = 'Website symlinks';
+$wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
+$wb["website_basedir_txt"] = 'Website basedir';
+$wb["website_autoalias_txt"] = 'Website auto alias';
+$wb["website_autoalias_note_txt"] = 'Placeholders:';
+$wb["vhost_conf_dir_txt"] = 'Vhost config dir';
+$wb["vhost_conf_enabled_dir_txt"] = 'Vhost config enabled dir';
+$wb["getmail_config_dir_txt"] = 'Getmail config dir';
+$wb["fastcgi_starter_path_txt"] = 'FastCGI starter path';
+$wb["fastcgi_starter_script_txt"] = 'FastCGI starter script';
+$wb["fastcgi_alias_txt"] = 'FastCGI Alias';
+$wb["fastcgi_phpini_path_txt"] = 'FastCGI php.ini Path';
+$wb["fastcgi_children_txt"] = 'FastCGI Children';
+$wb["fastcgi_max_requests_txt"] = 'FastCGI max. Requests';
+$wb["fastcgi_bin_txt"] = 'FastCGI Bin';
+$wb["module_txt"] = 'Module';
+$wb["maildir_path_txt"] = 'Maildir Path';
+$wb['maildir_format_txt'] = 'Maildir Format';
+$wb["homedir_path_txt"] = 'Homedir Path';
+$wb["dkim_path_txt"] = 'DKIM Path';
+$wb["mailuser_uid_txt"] = 'Mailuser UID';
+$wb["mailuser_gid_txt"] = 'Mailuser GID';
+$wb["mailuser_name_txt"] = 'Mailuser Name';
+$wb["mailuser_group_txt"] = 'Mailuser Group';
+$wb['mailbox_virtual_uidgid_maps_txt'] = 'Use Websites Linux uid for mailbox';
+$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'only in single web and mail-server-setup';
+$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid cannot be mapped in multi-server-setup.';
+$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Uid-mapping can only be used with dovecot.';
+$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Uid-mapping cannot be changed if there are already mail users.';
+$wb["relayhost_txt"] = 'Relayhost';
+$wb["relayhost_user_txt"] = 'Relayhost User';
+$wb["relayhost_password_txt"] = 'Relayhost Password';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
+$wb["mailbox_size_limit_txt"] = 'Mailbox Size Limit';
+$wb["message_size_limit_txt"] = 'Message Size Limit';
+$wb["ip_address_txt"] = 'IP Address';
+$wb["netmask_txt"] = 'Netmask';
+$wb["gateway_txt"] = 'Gateway';
+$wb["hostname_txt"] = 'Hostname';
+$wb["nameservers_txt"] = 'Nameservers';
+$wb["auto_network_configuration_txt"] = 'Network Configuration';
+$wb["ip_address_error_wrong"] = 'Invalid IP address format.';
+$wb["netmask_error_wrong"] = 'Invalid Netmask format.';
+$wb["gateway_error_wrong"] = 'Invalid Gateway format.';
+$wb["hostname_error_empty"] = 'Hostname is empty.';
+$wb["hostname_error_regex"] = 'Invalid Hostname.';
+$wb["nameservers_error_empty"] = 'Nameserver is empty.';
+$wb["config_dir_txt"] = 'Config directory';
+$wb["init_script_txt"] = 'Cron init script name';
+$wb["crontab_dir_txt"] = 'Path for individual crontabs';
+$wb["wget_txt"] = 'Path to wget program';
+$wb["web_user_txt"] = 'Apache user';
+$wb["web_group_txt"] = 'Apache group';
+$wb["security_level_txt"] = 'Security level';
+$wb["loglevel_txt"] = 'Loglevel';
+$wb["apps_vhost_port_txt"] = 'Apps-vhost port';
+$wb["apps_vhost_ip_txt"] = 'Apps-vhost IP';
+$wb["apps_vhost_servername_txt"] = 'Apps-vhost Domain';
+$wb["bind_user_txt"] = 'BIND User';
+$wb["bind_group_txt"] = 'BIND Group';
+$wb["bind_zonefiles_dir_txt"] = 'BIND zonefiles directory';
+$wb["named_conf_path_txt"] = 'BIND named.conf path';
+$wb["bind_user_error_empty"] = 'BIND user is empty.';
+$wb["bind_group_error_empty"] = 'BIND group is empty.';
+$wb["bind_zonefiles_dir_error_empty"] = 'BIND zonefiles directory is empty.';
+$wb["named_conf_path_error_empty"] = 'BIND named.conf path is empty.';
+$wb["named_conf_local_path_error_empty"] = 'BIND named.conf.local path is empty.';
+$wb["mail_filter_syntax_txt"] = 'Mailfilter Syntax';
+$wb["pop3_imap_daemon_txt"] = 'POP3/IMAP Daemon';
+$wb["php_open_basedir_txt"] = 'PHP open_basedir';
+$wb["php_open_basedir_error_empty"] = 'PHP open_basedir is empty.';
+$wb["htaccess_allow_override_txt"] = '.htaccess AllowOverride';
+$wb["htaccess_allow_override_error_empty"] = '.htaccess AllowOverride is empty.';
+$wb["awstats_conf_dir_txt"] = 'awstats conf folder';
+$wb["awstats_data_dir_txt"] = 'awstats data folder';
+$wb["awstats_pl_txt"] = 'awstats.pl script';
+$wb["awstats_buildstaticpages_pl_txt"] = 'awstats_buildstaticpages.pl script';
+$wb["backup_dir_txt"] = 'Backup directory';
+$wb["backup_tmp_txt"] = 'Backup tmp directory for zip';
+$wb["named_conf_local_path_txt"] = 'BIND named.conf.local path';
+$wb["php_ini_path_cgi_txt"] = 'CGI php.ini path';
+$wb["php_ini_path_apache_txt"] = 'Apache php.ini path';
+$wb["check_apache_config_txt"] = 'Test apache configuration on restart';
+$wb["network_config_warning_txt"] = 'The network configuration option is only available for Debian and Ubuntu Servers. Do not enable this option if your network interface is not eth0.';
+$wb["CA_path_txt"] = 'CA Path';
+$wb["CA_pass_txt"] = 'CA passphrase';
+$wb["fastcgi_config_syntax_txt"] = 'FastCGI config syntax';
+$wb["backup_mode_txt"] = 'Backup mode';
+$wb["backup_mode_userzip"] = 'Backup web files owned by web user as zip';
+$wb["backup_mode_rootgz"] = 'Backup all files in web directory as root user';
+$wb['tmpdir_path_error_empty'] = 'tmp-dir Path is empty.';
+$wb['tmpdir_path_error_regex'] = 'Invalid tmp-dir path.';
+$wb["backup_time_txt"] = 'Backup time';
+$wb["server_type_txt"] = 'Server Type';
+$wb["nginx_vhost_conf_dir_txt"] = 'Nginx Vhost config dir';
+$wb["nginx_vhost_conf_enabled_dir_txt"] = 'Nginx Vhost config enabled dir';
+$wb["nginx_user_txt"] = 'Nginx user';
+$wb["nginx_group_txt"] = 'Nginx group';
+$wb["nginx_cgi_socket_txt"] = 'Nginx CGI Socket';
+$wb["backup_dir_error_empty"] = 'Backup directory is empty.';
+$wb["maildir_path_error_empty"] = 'Maildir Path is empty.';
+$wb["homedir_path_error_empty"] = 'Homedir Path is empty.';
+$wb["mailuser_uid_error_empty"] = 'Mailuser UID is empty.';
+$wb["mailuser_gid_error_empty"] = 'Mailuser GID is empty.';
+$wb["mailuser_name_error_empty"] = 'Mailuser Name is empty.';
+$wb["mailuser_group_error_empty"] = 'Mailuser Group is empty.';
+$wb["getmail_config_dir_error_empty"] = 'Getmail config dir is empty.';
+$wb["website_basedir_error_empty"] = 'Website basedir is empty.';
+$wb["website_path_error_empty"] = 'Website path is empty.';
+$wb["website_symlinks_error_empty"] = 'Website symlinks is empty.';
+$wb["vhost_conf_dir_error_empty"] = 'Vhost config dir is empty.';
+$wb["vhost_conf_enabled_dir_error_empty"] = 'Vhost config enabled dir is empty.';
+$wb["nginx_vhost_conf_dir_error_empty"] = 'Nginx Vhost config dir is empty.';
+$wb["nginx_vhost_conf_enabled_dir_error_empty"] = 'Nginx Vhost config enabled dir is empty.';
+$wb["apache_user_error_empty"] = 'Apache user is empty.';
+$wb["apache_group_error_empty"] = 'Apache group is empty.';
+$wb["nginx_user_error_empty"] = 'Nginx user is empty.';
+$wb["nginx_group_error_empty"] = 'Nginx group is empty.';
+$wb["php_ini_path_apache_error_empty"] = 'Apache php.ini path is empty.';
+$wb["php_ini_path_cgi_error_empty"] = 'CGI php.ini path is empty.';
+$wb["nginx_cgi_socket_empty"] = 'Nginx CGI Socket is empty.';
+$wb["apps_vhost_port_error_empty"] = 'Apps-vhost port is empty.';
+$wb["apps_vhost_ip_error_empty"] = 'Apps-vhost IP is empty.';
+$wb["fastcgi_starter_path_error_empty"] = 'FastCGI starter path is empty.';
+$wb["fastcgi_starter_script_error_empty"] = 'FastCGI starter script is empty.';
+$wb["fastcgi_alias_error_empty"] = 'FastCGI Alias is empty.';
+$wb["fastcgi_phpini_path_error_empty"] = 'FastCGI php.ini Path is empty.';
+$wb["fastcgi_children_error_empty"] = 'FastCGI Children is empty.';
+$wb["fastcgi_max_requests_error_empty"] = 'FastCGI max. Requests is empty.';
+$wb["fastcgi_bin_error_empty"] = 'FastCGI Bin is empty.';
+$wb["jailkit_chroot_home_error_empty"] = 'Jailkit chroot home is empty.';
+$wb["jailkit_chroot_app_sections_error_empty"] = 'Jailkit chroot app sections is empty.';
+$wb["jailkit_chroot_app_programs_error_empty"] = 'Jailkit chrooted applications is empty.';
+$wb["jailkit_chroot_cron_programs_error_empty"] = 'Jailkit cron chrooted applications is empty.';
+$wb["vlogger_config_dir_error_empty"] = 'Config directory is empty.';
+$wb["cron_init_script_error_empty"] = 'Cron init script name is empty.';
+$wb["crontab_dir_error_empty"] = 'Path for individual crontabs is empty.';
+$wb["cron_wget_error_empty"] = 'Path to wget program is empty.';
+$wb["php_fpm_init_script_txt"] = 'PHP-FPM init script';
+$wb["php_fpm_init_script_error_empty"] = 'PHP-FPM init script is empty.';
+$wb["php_fpm_ini_path_txt"] = 'PHP-FPM php.ini path';
+$wb["php_fpm_ini_path_error_empty"] = 'PHP-FPM php.ini path is empty.';
+$wb["php_fpm_pool_dir_txt"] = 'PHP-FPM pool directory';
+$wb["php_fpm_pool_dir_error_empty"] = 'PHP-FPM pool directory is empty.';
+$wb["php_fpm_start_port_txt"] = 'PHP-FPM start port';
+$wb["php_fpm_start_port_error_empty"] = 'PHP-FPM start port is empty.';
+$wb["php_fpm_socket_dir_txt"] = 'PHP-FPM socket directory';
+$wb["php_fpm_socket_dir_error_empty"] = 'PHP-FPM socket directory is empty.';
+$wb["try_rescue_txt"] = 'Enable service monitoring and restart on failure';
+$wb["do_not_try_rescue_httpd_txt"] = 'Disable HTTPD monitoring';
+$wb["do_not_try_rescue_mongodb_txt"] = 'Disable MongoDB monitoring';
+$wb["do_not_try_rescue_mysql_txt"] = 'Disable MySQL monitoring';
+$wb["do_not_try_rescue_mail_txt"] = 'Disable Email monitoring';
+$wb["rescue_description_txt"] = '<b>Information:</b> If you want to shut down mysql you have to select the "Disable MySQL monitor" checkbox and then wait 2-3 minutes.<br>If you do not wait 2-3 minutes, rescue will try to restart mysql!';
+$wb["enable_sni_txt"] = 'Enable SNI';
+$wb["set_folder_permissions_on_update_txt"] = 'Set folder permissions on update';
+$wb["add_web_users_to_sshusers_group_txt"] = 'Add web users to -sshusers- group';
+$wb["connect_userid_to_webid_txt"] = 'Connect Linux userid to webid';
+$wb["connect_userid_to_webid_start_txt"] = 'Start ID for userid/webid connect';
+$wb["realtime_blackhole_list_txt"] = 'Real-time Blackhole List';
+$wb["realtime_blackhole_list_note_txt"] = '(Separate RBL\'s with commas)';
+$wb["ssl_settings_txt"] = 'SSL Settings';
+$wb["permissions_txt"] = 'Permissions';
+$wb["php_settings_txt"] = 'PHP Settings';
+$wb["apps_vhost_settings_txt"] = 'Apps Vhost Settings';
+$wb["awstats_settings_txt"] = 'AWStats Settings';
+$wb["firewall_txt"] = 'Firewall';
+$wb["mailbox_quota_stats_txt"] = 'Mailbox quota statistics';
+$wb["enable_ip_wildcard_txt"] = 'Enable IP wildcard (*)';
+$wb["web_folder_protection_txt"] = 'Make web folders immutable (extended attributes)';
+$wb["overtraffic_notify_admin_txt"] = 'Send overtraffic notification to admin';
+$wb["overtraffic_notify_client_txt"] = 'Send overtraffic notification to client';
+$wb["rbl_error_regex"] = 'Please specify valid RBL hostnames.';
+$wb["overquota_notify_admin_txt"] = 'Send quota warnings to admin';
+$wb["overquota_notify_client_txt"] = 'Send quota warnings to client';
+$wb["overquota_notify_onok_txt"] = 'Send quota ok message to client';
+$wb['overquota_notify_freq_txt'] = 'Send quota warning each X days';
+$wb['overquota_notify_freq_note_txt'] = '0 = send message just once, no repeated messages';
+$wb['admin_notify_events_txt'] = 'Send email to admin starting with the following level';
+$wb['no_notifications_txt'] = 'No Notifications';
+$wb['monit_url_txt'] = 'Monit URL';
+$wb['monit_user_txt'] = 'Monit User';
+$wb['monit_password_txt'] = 'Monit Password';
+$wb['monit_url_error_regex'] = 'Invalid Monit URL';
+$wb['monit_url_note_txt'] = 'Placeholder:';
+$wb['munin_url_txt'] = 'Munin URL';
+$wb['munin_user_txt'] = 'Munin User';
+$wb['munin_password_txt'] = 'Munin Password';
+$wb['munin_url_error_regex'] = 'Invalid Munin URL';
+$wb['munin_url_note_txt'] = 'Placeholder:';
+$wb["v6_prefix_txt"] = 'IPv6 Prefix';
+$wb["vhost_rewrite_v6_txt"] = 'Rewrite IPv6 on Mirror';
+$wb["v6_prefix_length"] = 'Prefix too long according to defined IPv6 ';
+$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
+$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
+$wb["overquota_db_notify_admin_txt"] = 'Send DB quota warnings to admin';
+$wb["overquota_db_notify_client_txt"] = 'Send DB quota warnings to client';
+$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['php_handler_txt'] = "Default PHP Handler";
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
+$wb['disabled_txt'] = 'Disabled';
+$wb['dkim_strength_txt'] = 'DKIM strength';
+$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir path, min. length 5 chars.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
+$wb['network_filesystem_txt'] = 'Network Filesystem';
+$wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
+$wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
+$wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
+$wb['web_settings_txt'] = 'Web Server';
+$wb['xmpp_server_txt'] = 'XMPP Server';
+$wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
+$wb['xmpp_bosh_max_inactivity_txt'] = 'Max. BOSH inactivity time';
+$wb['xmpp_bosh_timeout_range_wrong'] = 'Please enter a bosh timeout range between 15 - 360';
+$wb['xmpp_module_saslauth'] = 'saslauth';
+$wb['xmpp_server_admins_txt'] = 'Server Admins (JIDs)';
+$wb['xmpp_modules_enabled_txt'] = 'Serverwide enabled plugins (one per line)';
+$wb['xmpp_ports_txt'] = 'Component ports';
+$wb['xmpp_port_http_txt'] = 'HTTP';
+$wb['xmpp_port_https_txt'] = 'HTTPS';
+$wb['xmpp_port_pastebin_txt'] = 'Pastebin';
+$wb['xmpp_port_bosh_txt'] = 'BOSH';
+$wb["disable_bind_log_txt"] = "Disable bind9 messages for Loglevel WARN";
+$wb["apps_vhost_enabled_txt"] = "Apps-vhost enabled";
+$wb['skip_le_check_txt'] = 'Skip Lets Encrypt Check';
+$wb['migration_mode_txt'] = 'Server Migration Mode';
+$wb['nginx_enable_pagespeed_txt'] = 'Makes Pagespeed available';
+$wb['logging_txt'] = 'Store website access and error logs';
+$wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
+$wb['log_retention_txt'] = 'Log retention (days)';
+$wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_name_txt'] = 'Description Default PHP-Version';
+$wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
+$wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng.rej b/interface/web/admin/lib/lang/en_server_config.lng.rej
new file mode 100644
index 0000000000..1460249765
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_server_config.lng.rej
@@ -0,0 +1,11 @@
+--- interface/web/admin/lib/lang/en_server_config.lng
++++ interface/web/admin/lib/lang/en_server_config.lng
+@@ -296,4 +296,7 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
+ $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
+ $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+-?>
++$wb['content_filter_txt'] = 'Content Filter';
++$wb['rspamd_url_txt'] = 'Rspamd URL';
++$wb['rspamd_user_txt'] = 'Rspamd User';
++$wb['rspamd_password_txt'] = 'Rspamd Password';
\ No newline at end of file
diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index 523671c0c7..8a7cd770a3 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -52,6 +52,21 @@ $app->load('tform_actions');
 
 class page_action extends tform_actions {
 
+	function onShow() {
+		global $app, $conf;
+		
+		// get the config
+		$app->uses('getconf');
+		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
+		
+		if($web_config['server_type'] == 'nginx'){
+			unset($app->tform->formDef["tabs"]["fastcgi"]);
+			unset($app->tform->formDef["tabs"]["vlogger"]);
+		}
+		
+		parent::onShow();
+	}
+
 	function onSubmit() {
 		global $app, $conf;
 		
@@ -73,11 +88,17 @@ class page_action extends tform_actions {
 			$server_id = $this->id;
 
 			$this->dataRecord = $app->getconf->get_server_config($server_id, $section);
+
+			if($section == 'mail'){
+				$server_config = $app->getconf->get_server_config($server_id, 'server');
+				$rspamd_url = 'https://'.$server_config['hostname'].':8081/rspamd/';
+			}
 		}
 
 		$record = $app->tform->getHTML($this->dataRecord, $this->active_tab, 'EDIT');
 
 		$record['id'] = $this->id;
+		if(isset($rspamd_url)) $record['rspamd_url'] = $rspamd_url;
 		$app->tpl->setVar($record);
 	}
 
@@ -112,6 +133,14 @@ class page_action extends tform_actions {
 				}
 			}
 
+			if($section === 'mail') {
+				if(isset($server_config_array['mail']['rspamd_available']) && $server_config_array['mail']['rspamd_available'] === 'y') {
+					$this->dataRecord['rspamd_available'] = 'y';
+				} else {
+					$this->dataRecord['rspamd_available'] = 'n';
+				}
+			}
+			
 			if($app->tform->errorMessage == '') {
 				$server_config_array[$section] = $app->tform->encode($this->dataRecord, $section);
 				$server_config_str = $app->ini_parser->get_ini_string($server_config_array);
@@ -123,6 +152,48 @@ class page_action extends tform_actions {
 		}
 	}
 
+	function onAfterUpdate() {
+		global $app;
+		
+		if(isset($this->dataRecord['content_filter'])){
+			$app->uses('ini_parser');
+			$old_config = $app->ini_parser->parse_ini_string(stripslashes($this->oldDataRecord['config']));
+			if($this->dataRecord['content_filter'] == 'rspamd' && $old_config['mail']['content_filter'] != $this->dataRecord['content_filter']){
+			
+				$spamfilter_users = $app->db->queryAllRecords("SELECT * FROM spamfilter_users WHERE server_id = ?", intval($this->id));
+				if(is_array($spamfilter_users) && !empty($spamfilter_users)){
+					foreach($spamfilter_users as $spamfilter_user){
+						$app->db->datalogUpdate('spamfilter_users', $spamfilter_user, 'id', $spamfilter_user["id"], true);
+					}
+				}
+				
+				$spamfilter_wblists = $app->db->queryAllRecords("SELECT * FROM spamfilter_wblist WHERE server_id = ?", intval($this->id));
+				if(is_array($spamfilter_wblists) && !empty($spamfilter_wblists)){
+					foreach($spamfilter_wblists as $spamfilter_wblist){
+						$app->db->datalogUpdate('spamfilter_wblist', $spamfilter_wblist, 'wblist_id', $spamfilter_wblist["wblist_id"], true);
+					}
+				}
+				
+				$mail_users = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE server_id = ? AND (autoresponder = 'y' OR move_junk = 'y')", intval($this->id));
+				if(is_array($mail_users) && !empty($mail_users)){
+					foreach($mail_users as $mail_user){
+						if($mail_user['autoresponder'] == 'y'){
+							$mail_user['autoresponder'] = 'n';
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+							$mail_user['autoresponder'] = 'y';
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+						} else {
+							$mail_user['move_junk'] = 'n';
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+							$mail_user['move_junk'] = 'y';
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+						}
+						
+					}
+				}
+			}
+		}
+	}
 }
 
 $app->tform_actions = new page_action;
diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm
index c1531c654a..6ba37104ef 100644
--- a/interface/web/admin/templates/server_config_mail_edit.htm
+++ b/interface/web/admin/templates/server_config_mail_edit.htm
@@ -44,6 +44,20 @@
                         {tmpl_var name='mail_filter_syntax'}
                     </select></div>
             </div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='content_filter_txt'}</label>
+                <div class="col-sm-9"><select name="content_filter" id="content_filter" class="form-control">
+                        {tmpl_var name='content_filter'}
+                    </select></div>
+            </div>
+			<div class="form-group rspamd">
+                <label for="rspamd_url" class="col-sm-3 control-label col-text">{tmpl_var name='rspamd_url_txt'}</label>
+                <div class="col-sm-6"><a href="{tmpl_var name='rspamd_url'}" target="_blank">{tmpl_var name='rspamd_url'}</a><a href="{tmpl_var name='rspamd_url'}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow" style="margin-left:20px"><span class="icon icon-link"></span></a></div>
+            </div>
+			<div class="form-group rspamd">
+                <label for="rspamd_password" class="col-sm-3 control-label">{tmpl_var name='rspamd_password_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_password" id="rspamd_password" value="{tmpl_var name='rspamd_password'}" class="form-control" /></div>
+			</div>
             <div class="form-group">
                 <label for="mailuser_uid" class="col-sm-3 control-label">{tmpl_var name='mailuser_uid_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="mailuser_uid" id="mailuser_uid" value="{tmpl_var name='mailuser_uid'}" class="form-control" /></div></div>
@@ -125,3 +139,23 @@
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
+<script>
+	if($('#rspamd_password').val() == ''){
+		var pword = password(8, false, 1);
+		jQuery('#rspamd_password').val(pword);
+	}
+	
+	if($('#content_filter').val() === 'rspamd'){
+		$('.rspamd').show();
+	} else {
+		$('.rspamd').hide();
+	}
+	
+	$('#content_filter').change(function(){
+		if($(this).val() === 'rspamd'){
+			$('.rspamd').show();
+		} else {
+			$('.rspamd').hide();
+		}
+	});
+</script>
diff --git a/interface/web/mail/form/spamfilter_policy.tform.php b/interface/web/mail/form/spamfilter_policy.tform.php
index 31e8b8092a..d6ecef9bbc 100644
--- a/interface/web/mail/form/spamfilter_policy.tform.php
+++ b/interface/web/mail/form/spamfilter_policy.tform.php
@@ -304,6 +304,42 @@ $form["tabs"]['taglevel'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
+		'rspamd_greylisting' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'rspamd_spam_greylisting_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'rspamd_spam_tag_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'rspamd_spam_tag_method' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'rewrite_subject',
+			'value'  => array('add_header' => $app->lng('add_header_txt'), 'rewrite_subject' => $app->lng('rewrite_subject_txt'))
+		),
+		'rspamd_spam_kill_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/mail/form/spamfilter_policy.tform.php.orig b/interface/web/mail/form/spamfilter_policy.tform.php.orig
new file mode 100644
index 0000000000..31e8b8092a
--- /dev/null
+++ b/interface/web/mail/form/spamfilter_policy.tform.php.orig
@@ -0,0 +1,496 @@
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"]    = "Spamfilter policy";
+$form["description"]  = "";
+$form["name"]    = "spamfilter_policy";
+$form["action"]   = "spamfilter_policy_edit.php";
+$form["db_table"]  = "spamfilter_policy";
+$form["db_table_idx"] = "id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "policy";
+$form["list_default"] = "spamfilter_policy_list.php";
+$form["auth"]   = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = 'r'; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['policy'] = array (
+	'title'  => "Policy",
+	'width'  => 100,
+	'template'  => "templates/spamfilter_policy_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'policy_name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
+					'errmsg'=> 'policyname_error_notempty'),
+			),
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'virus_lover' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'spam_lover' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'banned_files_lover' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'bad_header_lover' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'bypass_virus_checks' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'bypass_banned_checks' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'bypass_header_checks' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+
+$form["tabs"]['quarantine'] = array (
+	'title'  => "Quarantine",
+	'width'  => 100,
+	'template'  => "templates/spamfilter_quarantine_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'virus_quarantine_to' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'spam_quarantine_to' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'banned_quarantine_to' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'bad_header_quarantine_to' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'clean_quarantine_to' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'other_quarantine_to' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['taglevel'] = array (
+	'title'  => "Tag-Level",
+	'width'  => 100,
+	'template'  => "templates/spamfilter_taglevel_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'spam_tag_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'spam_tag2_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'spam_kill_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'spam_dsn_cutoff_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'spam_quarantine_cutoff_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'spam_modifies_subj' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'spam_subject_tag' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'spam_subject_tag2' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+
+$form["tabs"]['other'] = array (
+	'title'  => "Other",
+	'width'  => 100,
+	'template'  => "templates/spamfilter_other_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'addr_extension_virus' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'addr_extension_spam' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'addr_extension_banned' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'addr_extension_bad_header' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'warnvirusrecip' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'warnbannedrecip' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'warnbadhrecip' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'N',
+			'value'  => array('N' => 'No', 'Y' => 'Yes')
+		),
+		'newvirus_admin' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'virus_admin' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'banned_admin' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'bad_header_admin' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'spam_admin' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+
+		'message_size_limit' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'banned_rulenames' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+?>
diff --git a/interface/web/mail/lib/lang/de_spamfilter_policy.lng b/interface/web/mail/lib/lang/de_spamfilter_policy.lng
index 32acca4686..04b8274478 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_policy.lng
@@ -35,4 +35,10 @@ $wb['bad_header_admin_txt'] = 'Bad Header Administrator';
 $wb['spam_admin_txt'] = 'SPAM Administrator';
 $wb['message_size_limit_txt'] = 'Nachrichtengrößen Limit';
 $wb['banned_rulenames_txt'] = 'Banned Richtliniennamen';
-?>
+$wb['rspamd_greylisting_txt'] = 'Greylisting nutzen';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting-Level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM-Markierungslevel';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM-Markierungsmethode';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM-Reject-Level';
+$wb['btn_save_txt'] = 'Speichern';
+$wb['btn_cancel_txt'] = 'Abbrechen';
diff --git a/interface/web/mail/lib/lang/en.lng b/interface/web/mail/lib/lang/en.lng
index e5f9e678c7..22c67a286b 100644
--- a/interface/web/mail/lib/lang/en.lng
+++ b/interface/web/mail/lib/lang/en.lng
@@ -48,4 +48,5 @@ $wb['Global Filters'] = 'Global Filters';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb["Relay Recipients"] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
-?>
\ No newline at end of file
+$wb['add_header_txt'] = 'Header (adds "X-Spam: Yes")';
+$wb['rewrite_subject_txt'] = 'Subject (adds "***SPAM***" at the beginning)';
diff --git a/interface/web/mail/lib/lang/en_spamfilter_policy.lng b/interface/web/mail/lib/lang/en_spamfilter_policy.lng
index 2e0f05d6c0..f9e8a8e303 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_policy.lng
@@ -35,4 +35,11 @@ $wb["bad_header_admin_txt"] = 'Bad header admin';
 $wb["spam_admin_txt"] = 'SPAM admin';
 $wb["message_size_limit_txt"] = 'Message size limit';
 $wb["banned_rulenames_txt"] = 'Banned rulenames';
-?>
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+?>
\ No newline at end of file
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index 72877a774d..28d4f40917 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -273,7 +273,10 @@ class page_action extends tform_actions {
 		}
 
 		//* make sure that the email domain is lowercase
-		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+		if(isset($this->dataRecord["domain"])){
+			$this->dataRecord["domain"] = $app->functions->idn_encode($this->dataRecord["domain"]);
+			$this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+		}
 
 
 		parent::onSubmit();
@@ -317,7 +320,7 @@ class page_action extends tform_actions {
 			$soaDomain = $this->dataRecord['domain'].'.';
  			while ((!isset($soa) && (substr_count($soaDomain,'.') > 1))) {
 				$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $soaDomain);
-				$soaDomain = preg_replace("/^\w+\./","",$soaDomain);
+				$soaDomain = preg_replace("/^[^\.]+\./","",$soaDomain);
 			}
 			if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa);
 		}
@@ -450,7 +453,7 @@ class page_action extends tform_actions {
 			$soaDomain = $domain.'.';
 			while ((!isset($soa) && (substr_count($soaDomain,'.') > 1))) {
 				$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $soaDomain);
-				$soaDomain = preg_replace("/^[\w\-]+\./","",$soaDomain);
+				$soaDomain = preg_replace("/^[^\.]+\./","",$soaDomain);
 			}
 
 			if ( ($selector || $dkim_private || $dkim_active) && $dkim_active )
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 910d7a096a..263b98ef31 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -295,7 +295,7 @@ class page_action extends tform_actions {
 					"priority" => 10,
 					"policy_id" => $policy_id,
 					"email" => $this->dataRecord["email"],
-					"fullname" => $this->dataRecord["email"],
+					"fullname" => $app->functions->idn_decode($this->dataRecord["email"]),
 					"local" => 'Y'
 				);
 				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
@@ -342,7 +342,7 @@ class page_action extends tform_actions {
 						"priority" => 10,
 						"policy_id" => $policy_id,
 						"email" => $this->dataRecord["email"],
-						"fullname" => $this->dataRecord["email"],
+						"fullname" => $app->functions->idn_decode($this->dataRecord["email"]),
 						"local" => 'Y'
 					);
 					$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
diff --git a/interface/web/mail/spamfilter_policy_edit.php b/interface/web/mail/spamfilter_policy_edit.php
index 5320506846..55a42fe847 100644
--- a/interface/web/mail/spamfilter_policy_edit.php
+++ b/interface/web/mail/spamfilter_policy_edit.php
@@ -49,6 +49,46 @@ $app->uses('tpl,tform,tform_actions');
 $app->load('tform_actions');
 
 class page_action extends tform_actions {
+
+	function onShow() {
+		global $app, $conf;
+		
+		// get the config
+		$app->uses('getconf');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		$content_filter = 'amavisd';
+		if($mail_config['content_filter'] == 'rspamd'){
+			$content_filter = 'rspamd';
+			unset($app->tform->formDef["tabs"]["policy"]['fields']['banned_files_lover']);
+			unset($app->tform->formDef["tabs"]["policy"]['fields']['bad_header_lover']);
+			unset($app->tform->formDef["tabs"]["policy"]['fields']['bypass_virus_checks']);
+			unset($app->tform->formDef["tabs"]["policy"]['fields']['bypass_banned_checks']);
+			unset($app->tform->formDef["tabs"]["policy"]['fields']['bypass_header_checks']);
+			
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_tag_level']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_tag2_level']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_kill_level']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_dsn_cutoff_level']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_quarantine_cutoff_level']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_modifies_subj']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_subject_tag']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_subject_tag2']);
+			
+			unset($app->tform->formDef["tabs"]["quarantine"]);
+			unset($app->tform->formDef["tabs"]["other"]);
+		} else {
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_greylisting']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_spam_greylisting_level']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_spam_tag_level']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_spam_tag_method']);
+			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_spam_kill_level']);
+		}
+		$app->tpl->setVar("content_filter", $content_filter);
+		
+		parent::onShow();
+	}
+	
 	function onShowNew() {
 		global $app, $conf;
 
@@ -86,11 +126,37 @@ class page_action extends tform_actions {
 
 		parent::onSubmit();
 	}
+	
+	function onAfterUpdate() {
+		global $app, $conf;
+		
+		$app->uses('getconf');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		if($mail_config['content_filter'] == 'rspamd'){
+			$record_has_changed = false;
+			if(isset($this->dataRecord['rspamd_spam_greylisting_level']) && !isset($this->dataRecord['rspamd_greylisting'])) $this->dataRecord['rspamd_greylisting'] = 'n';
+			foreach($this->dataRecord as $key => $val) {
+				if(isset($this->oldDataRecord[$key]) && @$this->oldDataRecord[$key] != $val) {
+					// Record has changed
+					$record_has_changed = true;
+				}
+			}
+		
+			if($record_has_changed){
+				$spamfilter_users = $app->db->queryAllRecords("SELECT * FROM spamfilter_users WHERE policy_id = ?", intval($this->id));
+
+				if(is_array($spamfilter_users) && !empty($spamfilter_users)){
+					foreach($spamfilter_users as $spamfilter_user){
+						$app->db->datalogUpdate('spamfilter_users', $spamfilter_user, 'id', $spamfilter_user["id"], true);
+					}
+				}
+			}
+		}
+	}
 
 }
 
 $app->tform_actions = new page_action;
 $app->tform_actions->onLoad();
-
-
-?>
+?>
\ No newline at end of file
diff --git a/interface/web/mail/spamfilter_policy_list.php b/interface/web/mail/spamfilter_policy_list.php
index c2ab38d5f7..2aa7c7bec1 100644
--- a/interface/web/mail/spamfilter_policy_list.php
+++ b/interface/web/mail/spamfilter_policy_list.php
@@ -16,9 +16,28 @@ $list_def_file = "list/spamfilter_policy.list.php";
 $app->auth->check_module_permissions('mail');
 
 $app->uses('listform_actions');
-//$app->listform_actions->SQLExtWhere = "wb = 'W'";
 
-$app->listform_actions->onLoad();
-
-
-?>
+class list_action extends listform_actions {
+
+	function onShow() {
+		global $app, $conf;
+		
+		// get the config
+		$app->uses('getconf');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		$content_filter = 'amavisd';
+		if($mail_config['content_filter'] == 'rspamd'){
+			$content_filter = 'rspamd';
+		}
+		$app->tpl->setVar("content_filter", $content_filter);
+
+		parent::onShow();
+	}
+
+}
+
+$list = new list_action;
+//$list->SQLExtWhere = "wb = 'W'";
+$list->onLoad();
+?>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_policy_edit.htm b/interface/web/mail/templates/spamfilter_policy_edit.htm
index 317bbdb822..0496d3a85a 100644
--- a/interface/web/mail/templates/spamfilter_policy_edit.htm
+++ b/interface/web/mail/templates/spamfilter_policy_edit.htm
@@ -20,6 +20,7 @@
                     {tmpl_var name='spam_lover'}
                 </select></div>
             </div>
+			<tmpl_if name='content_filter' op='==' value='amavisd'>
             <div class="form-group">
                 <label for="banned_files_lover" class="col-sm-3 control-label">{tmpl_var name='banned_files_lover_txt'}</label>
                 <div class="col-sm-9"><select name="banned_files_lover" id="banned_files_lover" class="form-control">
@@ -50,7 +51,7 @@
                     {tmpl_var name='bypass_header_checks'}
                 </select></div>
             </div>
-        
+			</tmpl_if>
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
diff --git a/interface/web/mail/templates/spamfilter_policy_list.htm b/interface/web/mail/templates/spamfilter_policy_list.htm
index da1183d75f..0dd72dee54 100644
--- a/interface/web/mail/templates/spamfilter_policy_list.htm
+++ b/interface/web/mail/templates/spamfilter_policy_list.htm
@@ -19,16 +19,20 @@
                         <th data-column="policy_name"><tmpl_var name="policy_name_txt"></th>
                         <th data-column="virus_lover"><tmpl_var name="virus_lover_txt"></th>
                         <th data-column="spam_lover"><tmpl_var name="spam_lover_txt"></th>
+						<tmpl_if name='content_filter' op='==' value='amavisd'>
                         <th data-column="banned_files_lover"><tmpl_var name="banned_files_lover_txt"></th>
                         <th data-column="bad_header_lover"><tmpl_var name="bad_header_lover_txt"></th>
+						</tmpl_if>
                         <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
                     <tr>
                         <td><input class="form-control" type="text" name="search_policy_name" value="{tmpl_var name='search_policy_name'}" /></td>
                         <td><select class="form-control" name="search_virus_lover">{tmpl_var name='search_virus_lover'}</select></td>
                         <td><select class="form-control" name="search_spam_lover">{tmpl_var name='search_spam_lover'}</select></td>
+						<tmpl_if name='content_filter' op='==' value='amavisd'>
                         <td><select class="form-control" name="search_banned_files_lover">{tmpl_var name='search_banned_files_lover'}</select></td>
                         <td><select class="form-control" name="search_bad_header_lover">{tmpl_var name='search_bad_header_lover'}</select></td>
+						</tmpl_if>
                         <td class="text-right">
                             <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_list.php"><span class="icon icon-filter"></span></button>
                         </td>
@@ -40,8 +44,10 @@
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="policy_name"}</a></td>
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virus_lover"}</a></td>
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="spam_lover"}</a></td>
+						<tmpl_if name='content_filter' op='==' value='amavisd'>
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="banned_files_lover"}</a></td>
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="bad_header_lover"}</a></td>
+						</tmpl_if>
                         <td class="text-right">
                             <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_policy_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
@@ -49,14 +55,14 @@
                 </tmpl_loop>
                 <tmpl_unless name="records">
                     <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td colspan="6">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                        <td colspan="{tmpl_if name='content_filter' op='==' value='amavisd'}6{/tmpl_else}4{/tmpl_if}">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                     </tr>
                 </tmpl_unless>
                 </tbody>
 
                 <tfoot>
                     <tr>
-                        <td colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="{tmpl_if name='content_filter' op='==' value='amavisd'}6{/tmpl_else}4{/tmpl_if}"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
diff --git a/interface/web/mail/templates/spamfilter_taglevel_edit.htm b/interface/web/mail/templates/spamfilter_taglevel_edit.htm
index ba92662ba6..1b3c3b482c 100644
--- a/interface/web/mail/templates/spamfilter_taglevel_edit.htm
+++ b/interface/web/mail/templates/spamfilter_taglevel_edit.htm
@@ -4,7 +4,7 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-        
+        <tmpl_if name='content_filter' op='==' value='amavisd'>
             <div class="form-group">
                 <label for="spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag_level_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="spam_tag_level" id="spam_tag_level" value="{tmpl_var name='spam_tag_level'}" class="form-control" /></div></div>
@@ -32,6 +32,33 @@
             <div class="form-group">
                 <label for="spam_subject_tag2" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag2_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="spam_subject_tag2" id="spam_subject_tag2" value="{tmpl_var name='spam_subject_tag2'}" class="form-control" /></div></div>
+			</tmpl_if>
+			<tmpl_if name='content_filter' op='==' value='rspamd'>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='rspamd_greylisting_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='rspamd_greylisting'}
+                </div>
+            </div>
+			<div class="form-group">
+                <label for="rspamd_spam_greylisting_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_greylisting_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_greylisting_level" id="rspamd_spam_greylisting_level" value="{tmpl_var name='rspamd_spam_greylisting_level'}" class="form-control" /></div>
+			</div>
+			<div class="form-group">
+                <label for="rspamd_spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_tag_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_tag_level" id="rspamd_spam_tag_level" value="{tmpl_var name='rspamd_spam_tag_level'}" class="form-control" /></div>
+			</div>
+			<div class="form-group">
+                <label for="rspamd_spam_tag_method" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_tag_method_txt'}</label>
+                <div class="col-sm-9"><select name="rspamd_spam_tag_method" id="rspamd_spam_tag_method" class="form-control">
+                    {tmpl_var name='rspamd_spam_tag_method'}
+                </select></div>
+            </div>
+			<div class="form-group">
+                <label for="rspamd_spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_kill_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_kill_level" id="rspamd_spam_kill_level" value="{tmpl_var name='rspamd_spam_kill_level'}" class="form-control" /></div>
+			</div>
+			</tmpl_if>
         
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
@@ -39,4 +66,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index d533f7b3c0..94982a6dc1 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -74,6 +74,16 @@
     </Directory>
   </IfModule>
 
+{tmpl_if name="use_rspamd"}
+  <Location /rspamd>
+        Order allow,deny
+        Allow from all
+  </Location>
+  RewriteEngine On
+  RewriteRule ^/rspamd$ /rspamd/ [R,L]
+  RewriteRule ^/rspamd/(.*) http://127.0.0.1:11334/$1 [P]
+{/tmpl_if}
+
 </VirtualHost>
 
 
diff --git a/server/conf/autoresponder.master b/server/conf/autoresponder.master
index 0126c998d4..114db23d64 100644
--- a/server/conf/autoresponder.master
+++ b/server/conf/autoresponder.master
@@ -4,7 +4,7 @@ if ($RETURNCODE==1)
        {
        if (!/^List-Unsubscribe:.*/:h )
        {
-               if (!/^X-Spam-Flag: YES/:h )
+               if (!/^(X-Spam-Flag: YES|X-Spam: Yes|Subject: \*\*\*\s*SPAM\s*\*\*\*.*)/:h )
                {
                   NOW=time
                   if ({start_date} lt $NOW && {end_date} gt $NOW)
diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master
index ed5e3a49ae..8a97f82a43 100644
--- a/server/conf/nginx_apps.vhost.master
+++ b/server/conf/nginx_apps.vhost.master
@@ -199,4 +199,29 @@ server {
                alias /var/lib/mailman/archives/public;
                autoindex on;
         }
+
+        {use_rspamd}location /rspamd/ {
+                {use_rspamd}proxy_pass http://127.0.0.1:11334/;
+                {use_rspamd}rewrite ^//(.*) /$1;
+                {use_rspamd}proxy_set_header X-Forwarded-Proto $scheme;
+                {use_rspamd}proxy_set_header Host $host;
+                {use_rspamd}proxy_set_header X-Real-IP $remote_addr;
+                {use_rspamd}proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+                {use_rspamd}proxy_pass_header Authorization;
+                {use_rspamd}client_max_body_size 0;
+                {use_rspamd}client_body_buffer_size 1m;
+                {use_rspamd}proxy_intercept_errors on;
+                {use_rspamd}proxy_buffering on;
+                {use_rspamd}proxy_buffer_size 128k;
+                {use_rspamd}proxy_buffers 256 16k;
+                {use_rspamd}proxy_busy_buffers_size 256k;
+                {use_rspamd}proxy_temp_file_write_size 256k;
+                {use_rspamd}proxy_max_temp_file_size 0;
+                {use_rspamd}proxy_read_timeout 300;
+                {use_rspamd}
+                {use_rspamd}location ~* ^/rspamd/(.+\.(jpg|jpeg|gif|css|png|js|ico|html?|xml|txt))$ {
+                       {use_rspamd}alias /usr/share/rspamd/www/$1;
+                {use_rspamd}}
+        {use_rspamd}}
+
 }
diff --git a/server/conf/rspamd_users.inc.conf.master b/server/conf/rspamd_users.inc.conf.master
new file mode 100644
index 0000000000..18934c2760
--- /dev/null
+++ b/server/conf/rspamd_users.inc.conf.master
@@ -0,0 +1,41 @@
+spamfilter_users-<tmpl_var name='record_id'> {
+	priority = <tmpl_var name='priority'>;
+	<tmpl_if name='local' op='==' value='Y'>rcpt<tmpl_else>from</tmpl_if> = "<tmpl_var name='email'>";
+<tmpl_if name='spam_lover_virus_lover' op='==' value='spam_lover_AND_virus_lover'>
+	want_spam = yes;
+</tmpl_if>
+<tmpl_if name='spam_lover_virus_lover' op='==' value='spam_lover_AND_NOTvirus_lover'>
+	apply "default" {
+		CLAM_VIRUS = 1999.0;
+		JUST_EICAR = 1999.0;
+		actions {
+			reject = 999.0;
+		}
+	}
+</tmpl_if>
+<tmpl_if name='spam_lover_virus_lover' op='==' value='NOTspam_lover_AND_virus_lover'>
+	apply "default" {
+		CLAM_VIRUS = -999.0;
+		JUST_EICAR = -999.0;
+		actions {
+			<tmpl_if name='rspamd_greylisting' op='==' value='y'>greylist = <tmpl_var name='rspamd_spam_greylisting_level'>;</tmpl_if>
+			
+			<tmpl_var name='rspamd_spam_tag_method'> = <tmpl_var name='rspamd_spam_tag_level'>;
+			reject = <tmpl_var name='rspamd_spam_kill_level'>;
+		}
+	}
+</tmpl_if>
+<tmpl_if name='spam_lover_virus_lover' op='==' value='NOTspam_lover_AND_NOTvirus_lover'>
+	apply "default" {
+		CLAM_VIRUS = <tmpl_var name='rspamd_virus_kill_level'>;
+		JUST_EICAR = <tmpl_var name='rspamd_virus_kill_level'>;
+		actions {
+			<tmpl_if name='rspamd_greylisting' op='==' value='y'>greylist = <tmpl_var name='rspamd_spam_greylisting_level'>;</tmpl_if>
+			
+			<tmpl_var name='rspamd_spam_tag_method'> = <tmpl_var name='rspamd_spam_tag_level'>;
+			reject = <tmpl_var name='rspamd_spam_kill_level'>;
+		}
+	}
+</tmpl_if>
+
+}
\ No newline at end of file
diff --git a/server/conf/rspamd_worker-controller.inc.master b/server/conf/rspamd_worker-controller.inc.master
new file mode 100644
index 0000000000..75b744c883
--- /dev/null
+++ b/server/conf/rspamd_worker-controller.inc.master
@@ -0,0 +1,8 @@
+# Included from top-level .conf file
+
+type = "controller";
+count = 1;
+password = "<tmpl_var name='rspamd_password'>";
+secure_ip = "127.0.0.1";
+secure_ip = "::1";
+static_dir = "${WWWDIR}";
\ No newline at end of file
diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master
index 8e78c6c83a..13c08dd56b 100644
--- a/server/conf/sieve_filter.master
+++ b/server/conf/sieve_filter.master
@@ -1,4 +1,4 @@
-require ["fileinto", "regex", "vacation"];
+require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
 
 <tmpl_if name="cc">
 # Send a copy of email to
@@ -9,7 +9,7 @@ redirect "<tmpl_var name='address'>";
 
 <tmpl_if name="move_junk" op="==" value="y">
 # Move spam to spam folder
-if header :contains "X-Spam-Flag" "YES" {
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
   fileinto "Junk";
   # Stop here so that we do not reply on spams
   stop;
@@ -26,7 +26,7 @@ keep;
 #################################################################
 
 # Move spam to spam folder
-if header :contains "X-Spam-Flag" "YES" {
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
   fileinto "Junk";
   # Stop here so that we do not reply on spams
   stop;
diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master
index b1f7fcb87d..5244693102 100644
--- a/server/conf/sieve_filter_1.2.master
+++ b/server/conf/sieve_filter_1.2.master
@@ -1,8 +1,8 @@
-require ["fileinto", "regex", "date", "relational", "vacation"];
+require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
 
 <tmpl_if name="move_junk" op="==" value="y">
 # Move spam to spam folder
-if header :contains "X-Spam-Flag" "YES" {
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
   fileinto "Junk";
   # Stop here so that we do not reply on spams
   stop;
@@ -26,7 +26,7 @@ keep;
 #################################################################
 
 # Move spam to spam folder
-if header :contains "X-Spam-Flag" "YES" {
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
   # Stop here so that we do not reply on spams
   stop;
 }
diff --git a/server/mods-available/mail_module.inc.php b/server/mods-available/mail_module.inc.php
index bc6d290145..14cbbb24e4 100644
--- a/server/mods-available/mail_module.inc.php
+++ b/server/mods-available/mail_module.inc.php
@@ -55,7 +55,14 @@ class mail_module {
 		'mail_content_filter_delete',
 		'mail_mailinglist_insert',
 		'mail_mailinglist_update',
-		'mail_mailinglist_delete');
+		'mail_mailinglist_delete',
+		'spamfilter_users_insert',
+		'spamfilter_users_update',
+		'spamfilter_users_delete',
+		'spamfilter_wblist_insert',
+		'spamfilter_wblist_update',
+		'spamfilter_wblist_delete'
+		);
 
 	//* This function is called during ispconfig installation to determine
 	//  if a symlink shall be created for this plugin.
@@ -102,7 +109,10 @@ class mail_module {
 		$app->modules->registerTableHook('mail_get', 'mail_module', 'process');
 		$app->modules->registerTableHook('mail_content_filter', 'mail_module', 'process');
 		$app->modules->registerTableHook('mail_mailinglist', 'mail_module', 'process');
+		$app->modules->registerTableHook('spamfilter_users', 'mail_module', 'process');
+		$app->modules->registerTableHook('spamfilter_wblist', 'mail_module', 'process'); 
 
+		$app->services->registerService('rspamd', 'mail_module', 'restartRspamd');
 	}
 
 	/*
@@ -154,9 +164,34 @@ class mail_module {
 			if($action == 'u') $app->plugins->raiseEvent('mail_mailinglist_update', $data);
 			if($action == 'd') $app->plugins->raiseEvent('mail_mailinglist_delete', $data);
 			break;
+		case 'spamfilter_users':
+			if($action == 'i') $app->plugins->raiseEvent('spamfilter_users_insert', $data);
+			if($action == 'u') $app->plugins->raiseEvent('spamfilter_users_update', $data);
+			if($action == 'd') $app->plugins->raiseEvent('spamfilter_users_delete', $data);
+			break;
+		case 'spamfilter_wblist':
+			if($action == 'i') $app->plugins->raiseEvent('spamfilter_wblist_insert', $data);
+			if($action == 'u') $app->plugins->raiseEvent('spamfilter_wblist_update', $data);
+			if($action == 'd') $app->plugins->raiseEvent('spamfilter_wblist_delete', $data);
+			break;
 		} // end switch
 	} // end function
 
+	function restartRspamd($action = 'reload') {
+		global $app;
+
+		$app->uses('system');
+
+		$daemon = 'rspamd';
+
+		$retval = array('output' => '', 'retval' => 0);
+		if($action == 'restart') {
+			exec($app->system->getinitcommand($daemon, 'restart').' 2>&1', $retval['output'], $retval['retval']);
+		} else {
+			exec($app->system->getinitcommand($daemon, 'reload').' 2>&1', $retval['output'], $retval['retval']);
+		}
+		return $retval;
+	}
 } // end class
 
 ?>
diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php
index b843e3c8a4..32a62174ff 100644
--- a/server/plugins-available/apps_vhost_plugin.inc.php
+++ b/server/plugins-available/apps_vhost_plugin.inc.php
@@ -106,6 +106,16 @@ class apps_vhost_plugin {
 				$vhost_port_listen = '#';
 			}
 			$tpl->setVar('vhost_port_listen', $vhost_port_listen);
+			
+			$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+			if($mail_config['content_filter'] == 'rspamd'){
+				$use_rspamd = true;
+				exec('/usr/sbin/a2enmod proxy');
+				exec('/usr/sbin/a2enmod proxy_http');
+			} else {
+				$use_rspamd = false;
+			}
+			$tpl->setVar('use_rspamd', $use_rspamd);
 
 			$content = $tpl->grab();
 
@@ -184,6 +194,14 @@ class apps_vhost_plugin {
 			$content = str_replace('{use_tcp}', $use_tcp, $content);
 			$content = str_replace('{use_socket}', $use_socket, $content);
 			
+			$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+			if($mail_config['content_filter'] == 'rspamd'){
+				$use_rspamd = '';
+			} else {
+				$use_rspamd = '#';
+			}
+			$content = str_replace('{use_rspamd}', $use_rspamd, $content);
+
 			// Fix socket path on PHP 7 systems
 			if(file_exists('/var/run/php/php7.0-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.1-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content);
@@ -221,7 +239,3 @@ class apps_vhost_plugin {
 
 
 } // end class
-
-
-
-?>
diff --git a/server/plugins-available/mail_plugin_dkim.inc.php b/server/plugins-available/mail_plugin_dkim.inc.php
index 6f042e9070..405691d130 100755
--- a/server/plugins-available/mail_plugin_dkim.inc.php
+++ b/server/plugins-available/mail_plugin_dkim.inc.php
@@ -104,6 +104,9 @@ class mail_plugin_dkim {
 	function check_system($data) {
 		global $app, $mail_config;
 
+		/** TODO: FIX IF ONLY RSPAMD IS INSTALLED AND NO AMAVIS! **/
+		/** TODO: FIX DKIM FOR RSPAMD, RSPAMD CANNOT READ FILES OF amavis:root **/
+		
 		$app->uses('getconf');
 		$check=true;
 
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 2b0b1ba67b..bbd1c2546c 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -60,15 +60,11 @@ class postfix_server_plugin {
 		Register for the events
 		*/
 
-		$app->plugins->registerEvent('server_insert', 'postfix_server_plugin', 'insert');
-		$app->plugins->registerEvent('server_update', 'postfix_server_plugin', 'update');
-
-
-
+		$app->plugins->registerEvent('server_insert', $this->plugin_name, 'insert');
+		$app->plugins->registerEvent('server_update', $this->plugin_name, 'update');
 	}
 
 	function insert($event_name, $data) {
-		global $app, $conf;
 
 		$this->update($event_name, $data);
 
@@ -116,7 +112,7 @@ class postfix_server_plugin {
 			if($rbl_hosts != ''){
 				$rbl_hosts = explode(",", $rbl_hosts);
 			}
-			$options = explode(", ", exec("postconf -h smtpd_recipient_restrictions"));
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 			$new_options = array();
 			foreach ($options as $key => $value) {
 				if (!preg_match('/reject_rbl_client/', $value)) {
@@ -162,7 +158,8 @@ class postfix_server_plugin {
 		}		
 		
 		if($app->system->is_installed('dovecot')) {
-			$temp = exec("postconf -n virtual_transport", $out);
+			$out = null;
+			exec("postconf -n virtual_transport", $out);
 			if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
 				// If dovecot switch to lmtp
 				if($out[0] != "virtual_transport = lmtp:unix:private/dovecot-lmtp") {
@@ -182,12 +179,51 @@ class postfix_server_plugin {
 			}
 		}
 
-		exec("postconf -e 'mailbox_size_limit = ".intval($mail_config['mailbox_size_limit']*1024*1024)."'"); //TODO : no reload?
-		exec("postconf -e 'message_size_limit = ".intval($mail_config['message_size_limit']*1024*1024)."'"); //TODO : no reload?
+		if($mail_config['content_filter'] != $old_ini_data['mail']['content_filter']) {
+			if($mail_config['content_filter'] == 'rspamd'){
+				exec("postconf -X 'receive_override_options'");
+				exec("postconf -X 'content_filter'");
+				
+				exec("postconf -e 'smtpd_milters = inet:localhost:11332'");
+				exec("postconf -e 'non_smtpd_milters = inet:localhost:11332'");
+				exec("postconf -e 'milter_protocol = 6'");
+				exec("postconf -e 'milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}'");
+				exec("postconf -e 'milter_default_action = accept'");
+				
+				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
+				
+				$new_options = array();
+				$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+				foreach ($options as $key => $value) {
+					if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
+						$new_options[] = $value;
+					}
+				}
+				exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+			}	
+			if($mail_config['content_filter'] == 'amavisd'){
+				exec("postconf -X 'smtpd_milters'");
+				exec("postconf -X 'milter_protocol'");
+				exec("postconf -X 'milter_mail_macros'");
+				exec("postconf -X 'milter_default_action'");
+				
+				exec("postconf -e 'receive_override_options = no_address_mappings'");
+				exec("postconf -e 'content_filter = amavis:[127.0.0.1]:10024'");
+				
+				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'");
+			}
+		}
 		
+		if($mail_config['content_filter'] == 'rspamd' && ($mail_config['rspamd_password'] != $old_ini_data['mail']['rspamd_password'] || $mail_config['content_filter'] != $old_ini_data['mail']['content_filter'])) {
+			$tpl = new tpl();
+			$tpl->newTemplate('rspamd_worker-controller.inc.master');
+			$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
+			$app->system->file_put_contents('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());
+			$app->services->restartServiceDelayed('rspamd', 'reload');
+		}
 
+		exec("postconf -e 'mailbox_size_limit = ".intval($mail_config['mailbox_size_limit']*1024*1024)."'");
+		exec("postconf -e 'message_size_limit = ".intval($mail_config['message_size_limit']*1024*1024)."'");
+		$app->services->restartServiceDelayed('postfix', 'reload');
 	}
-
 } // end class
-
-?>
diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
new file mode 100644
index 0000000000..65f4522ba7
--- /dev/null
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -0,0 +1,255 @@
+<?php
+
+/*
+Copyright (c) 2018, Falko Timme, Timme Hosting GmbH & Co. KG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class rspamd_plugin {
+
+	var $plugin_name = 'rspamd_plugin';
+	var $class_name  = 'rspamd_plugin';
+	var $users_config_dir = '/etc/rspamd/local.d/users/';
+
+	//* This function is called during ispconfig installation to determine
+	//  if a symlink shall be created for this plugin.
+	function onInstall() {
+		global $conf;
+
+		if($conf['services']['mail'] == true) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/*
+	 	This function is called when the plugin is loaded
+	*/
+
+	function onLoad() {
+		global $app;
+
+		/*
+		Register for the events
+		*/
+
+		//* spamfilter_users
+		$app->plugins->registerEvent('spamfilter_users_insert', $this->plugin_name, 'spamfilter_users_insert');
+		$app->plugins->registerEvent('spamfilter_users_update', $this->plugin_name, 'spamfilter_users_update');
+		$app->plugins->registerEvent('spamfilter_users_delete', $this->plugin_name, 'spamfilter_users_delete');
+
+		//* spamfilter_wblist
+		$app->plugins->registerEvent('spamfilter_wblist_insert', $this->plugin_name, 'spamfilter_wblist_insert');
+		$app->plugins->registerEvent('spamfilter_wblist_update', $this->plugin_name, 'spamfilter_wblist_update');
+		$app->plugins->registerEvent('spamfilter_wblist_delete', $this->plugin_name, 'spamfilter_wblist_delete');
+		
+		//* server ip
+		$app->plugins->registerEvent('server_ip_insert', $this->plugin_name, 'server_ip');
+		$app->plugins->registerEvent('server_ip_update', $this->plugin_name, 'server_ip');
+		$app->plugins->registerEvent('server_ip_delete', $this->plugin_name, 'server_ip');
+	}
+
+	function spamfilter_users_insert($event_name, $data) {
+		global $app, $conf;
+
+		$this->action = 'insert';
+		// just run the spamfilter_users_update function
+		$this->spamfilter_users_update($event_name, $data);
+	}
+
+	function spamfilter_users_update($event_name, $data) {
+		global $app, $conf;
+
+		// get the config
+		$app->uses('getconf,system,functions');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+
+		if(is_dir('/etc/rspamd')) {
+			$policy = $app->db->queryOneRecord("SELECT * FROM spamfilter_policy WHERE id = ?", intval($data['new']['policy_id']));
+			
+			//* Create the config file
+			$user_file = $this->users_config_dir.'spamfilter_user_'.intval($data['new']['id']).'.conf';
+		
+			if(is_array($policy) && !empty($policy)){
+				if(!is_dir($this->users_config_dir)){
+					$app->system->mkdirpath($this->users_config_dir);
+				}
+		
+				$app->load('tpl');
+
+				$tpl = new tpl();
+				$tpl->newTemplate('rspamd_users.inc.conf.master');
+				$tpl->setVar('record_id', intval($data['new']['id']));
+				$tpl->setVar('priority', intval($data['new']['priority']));
+				$tpl->setVar('email', $app->functions->idn_encode($data['new']['email']));
+				$tpl->setVar('local', $data['new']['local']);
+				
+				$tpl->setVar('rspamd_greylisting', $policy['rspamd_greylisting']);
+				$tpl->setVar('rspamd_spam_greylisting_level', floatval($policy['rspamd_spam_greylisting_level']));
+				
+				$tpl->setVar('rspamd_spam_tag_level', floatval($policy['rspamd_spam_tag_level']));
+				$tpl->setVar('rspamd_spam_tag_method', $policy['rspamd_spam_tag_method']);
+				
+				$tpl->setVar('rspamd_spam_kill_level', floatval($policy['rspamd_spam_kill_level']));
+				$tpl->setVar('rspamd_virus_kill_level', floatval($policy['rspamd_spam_kill_level']) + 1000);
+				
+				$spam_lover_virus_lover = '';
+				if($policy['spam_lover'] == 'Y' && $policy['virus_lover'] == 'Y') $spam_lover_virus_lover = 'spam_lover_AND_virus_lover';
+				if($policy['spam_lover'] == 'Y' && $policy['virus_lover'] != 'Y') $spam_lover_virus_lover = 'spam_lover_AND_NOTvirus_lover';
+				if($policy['spam_lover'] != 'Y' && $policy['virus_lover'] == 'Y') $spam_lover_virus_lover = 'NOTspam_lover_AND_virus_lover';
+				if($policy['spam_lover'] != 'Y' && $policy['virus_lover'] != 'Y') $spam_lover_virus_lover = 'NOTspam_lover_AND_NOTvirus_lover';
+				
+				$tpl->setVar('spam_lover_virus_lover', $spam_lover_virus_lover);
+				
+				//$groups_disabled = array();
+				//if($policy['virus_lover'] == 'Y') $groups_disabled[] = '';
+		
+				$app->system->file_put_contents($user_file, $tpl->grab());
+			} else {
+				if(is_file($user_file)) {
+					unlink($user_file);
+				}
+			}
+			
+			if($mail_config['content_filter'] == 'rspamd'){
+				if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
+			}
+		}
+	}
+
+	function spamfilter_users_delete($event_name, $data) {
+		global $app, $conf;
+
+		// get the config
+		$app->uses('getconf');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+
+		if(is_dir('/etc/rspamd')) {
+			//* delete the config file
+			$user_file = $this->users_config_dir.'spamfilter_user_'.intval($data['old']['id']).'.conf';
+			if(is_file($user_file)) unlink($user_file);
+			
+		}
+		
+		if($mail_config['content_filter'] == 'rspamd') {
+			if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
+		}
+	}
+
+	function spamfilter_wblist_insert($event_name, $data) {
+		global $app, $conf;
+		
+		$this->action = 'insert';
+		// just run the spamfilter_wblist_update function
+		$this->spamfilter_wblist_update($event_name, $data);
+	}
+
+	function spamfilter_wblist_update($event_name, $data) {
+		global $app, $conf;
+
+		$app->uses('getconf,system,functions');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		if(is_dir('/etc/rspamd')) {
+			$recipient = $app->db->queryOneRecord("SELECT email FROM spamfilter_users WHERE id = ?", intval($data['new']['rid']));
+			//* Create the config file
+			$wblist_file = $this->users_config_dir.'spamfilter_wblist_'.intval($data['new']['wblist_id']).'.conf';
+		
+			if($data['new']['active'] == 'y' && is_array($recipient) && !empty($recipient)){
+				if(!is_dir($this->users_config_dir)){
+					$app->system->mkdirpath($this->users_config_dir);
+				}
+		
+				$app->load('tpl');
+
+				$tpl = new tpl();
+				$tpl->newTemplate('rspamd_wblist.inc.conf.master');
+				$tpl->setVar('record_id', intval($data['new']['wblist_id']));
+				$tpl->setVar('priority', intval($data['new']['priority']));
+				$tpl->setVar('from', $app->functions->idn_encode($data['new']['email']));
+				$tpl->setVar('recipient', $app->functions->idn_encode($recipient['email']));
+				//$tpl->setVar('action', ($data['new']['wb'] == 'W'? 'want_spam = yes;' : 'action = "reject";'));
+				$tpl->setVar('wblist', $data['new']['wb']);
+		
+				$app->system->file_put_contents($wblist_file, $tpl->grab());
+			} else {
+				if(is_file($wblist_file)) unlink($wblist_file);
+			}
+			
+			if($mail_config['content_filter'] == 'rspamd'){
+				if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
+			}
+		}
+	}
+	
+	function spamfilter_wblist_delete($event_name, $data) {
+		global $app, $conf;
+
+		$app->uses('getconf');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+
+		if(is_dir('/etc/rspamd')) {
+			//* delete the config file
+			$wblist_file = $this->users_config_dir.'spamfilter_wblist_'.intval($data['old']['wblist_id']).'.conf';
+			if(is_file($wblist_file)) unlink($wblist_file);
+			
+			if($mail_config['content_filter'] == 'rspamd'){
+				if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
+			}
+		}
+	}
+
+	function server_ip($event_name, $data) {
+		global $app, $conf;
+ 
+		// get the config
+		$app->uses("getconf,system");
+		$app->load('tpl');
+
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		if(is_dir('/etc/rspamd')) {
+			$tpl = new tpl();
+			$tpl->newTemplate('rspamd_users.conf.master');
+				
+			$whitelist_ips = array();
+			$ips = $app->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']);
+			if(is_array($ips) && !empty($ips)){
+				foreach($ips as $ip){
+					$whitelist_ips[] = array('ip' => $ip['ip_address']);
+				}
+			}
+			$tpl->setLoop('whitelist_ips', $whitelist_ips);
+			$app->system->file_put_contents('/etc/rspamd/local.d/users.conf', $tpl->grab());
+				
+			if($mail_config['content_filter'] == 'rspamd'){
+				$app->services->restartServiceDelayed('rspamd', 'reload');
+			}
+		}
+	}
+	
+} // end class
-- 
GitLab


From ae7c9c651284e1fd8d5d4de6a83a4622aa29c354 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 8 Jul 2019 18:05:32 +0200
Subject: [PATCH 050/571] Set the same AllowOverride value for cgi-bin
 directory that is set for the website.

---
 server/conf/vhost.conf.master | 1 +
 1 file changed, 1 insertion(+)

diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index ee7dcac076..75f6a72e87 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -215,6 +215,7 @@
 <tmpl_if name='cgi' op='==' value='y'>
 		# cgi enabled
 	<Directory {tmpl_var name='document_root'}/cgi-bin>
+			AllowOverride <tmpl_var name='allow_override'>
 			<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 			Require all granted
 			<tmpl_else>
-- 
GitLab


From 0d8f89bbff775b0c6d2ec243b4297d369193f54c Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 8 Jul 2019 18:27:11 +0200
Subject: [PATCH 051/571] - added rspamd conditionals for mail dkim plugin

---
 install/lib/installer_base.lib.php            |   6 +
 .../mail_plugin_dkim.inc.php                  | 188 +++++++++++-------
 2 files changed, 118 insertions(+), 76 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 7221dd7dec..7abd315b84 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1458,6 +1458,12 @@ class installer_base {
 			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
 		}
 
+		if(is_user('_rspamd') && is_group('amavis')) {
+			exec("usermod -G amavis _rspamd");
+		} elseif(is_user('rspamd') && is_group('amavis')) {
+			exec("usermod -G amavis rspamd");
+		}
+				
 		if(!is_dir('/etc/rspamd/local.d/')){
 			mkdir('/etc/rspamd/local.d/', 0755, true);
 		}
diff --git a/server/plugins-available/mail_plugin_dkim.inc.php b/server/plugins-available/mail_plugin_dkim.inc.php
index 405691d130..ff649971a9 100755
--- a/server/plugins-available/mail_plugin_dkim.inc.php
+++ b/server/plugins-available/mail_plugin_dkim.inc.php
@@ -29,6 +29,7 @@
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
  @author Florian Schaal, info@schaal-24.de
+ @author Marius Burkard, m.burkard@ispconfig.org (modified for rspamd)
  @copyright Florian Schaal, info@schaal-24.de
  */
 
@@ -59,8 +60,8 @@ class mail_plugin_dkim {
 	/**
 	 * This function is called when the plugin is loaded
 	 */
-	function onLoad() {
-		global $app, $conf;
+	public function onLoad() {
+		global $app;
 		/*
 		Register for the events
 		*/
@@ -73,7 +74,7 @@ class mail_plugin_dkim {
 	 * This function gets the amavisd-config file
 	 * @return string path to the amavisd-config for dkim-keys
 	 */
-	function get_amavis_config() {
+	private function get_amavis_config() {
 		$pos_config=array(
 			'/etc/amavisd.conf/50-user',
 			'/etc/amavis/conf.d/50-user',
@@ -101,45 +102,59 @@ class mail_plugin_dkim {
 	 * @param array $data mail-settings
 	 * @return boolean - true when the amavis-config and the dkim-dir are writeable
 	 */
-	function check_system($data) {
-		global $app, $mail_config;
+	private function check_system() {
+		global $app, $conf, $mail_config;
 
-		/** TODO: FIX IF ONLY RSPAMD IS INSTALLED AND NO AMAVIS! **/
-		/** TODO: FIX DKIM FOR RSPAMD, RSPAMD CANNOT READ FILES OF amavis:root **/
-		
 		$app->uses('getconf');
-		$check=true;
-
-		/* check for amavis-config */
-		$amavis_configfile = $this->get_amavis_config();
+		$check = true;
 
-		//* Create the file if it does not exists.
-		if (substr_compare($amavis_configfile, '60-dkim', -7) === 0 && !file_exists($amavis_configfile))
-			$app->system->touch($amavis_configfile);
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		if($mail_config['content_filter'] != 'rspamd') {
+			/* check for amavis-config */
+			$amavis_configfile = $this->get_amavis_config();
 
-		if ( $amavis_configfile == '' || !is_writeable($amavis_configfile) ) {
-			$app->log('Amavis-config not found or not writeable.', LOGLEVEL_ERROR);
-			$check=false;
+			//* Create the file if it does not exists.
+			if (substr_compare($amavis_configfile, '60-dkim', -7) === 0 && !file_exists($amavis_configfile)) {
+				$app->system->touch($amavis_configfile);
+			}
+			
+			if ( $amavis_configfile == '' || !is_writeable($amavis_configfile) ) {
+				$app->log('Amavis-config not found or not writeable.', LOGLEVEL_ERROR);
+				$check = false;
+			}
 		}
 
 		/* dir for dkim-keys writeable? */
-		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 		if (isset($mail_config['dkim_path']) && !empty($mail_config['dkim_path']) && $mail_config['dkim_path'] != '/') {
             if (!is_dir($mail_config['dkim_path'])) {
                 $app->log('DKIM Path '.$mail_config['dkim_path'].' not found - (re)created.', LOGLEVEL_DEBUG);
 				if($app->system->is_user('amavis')) { 
 					$amavis_user='amavis'; 
+				} elseif($app->system->is_user('_rspamd')) {
+					$amavis_user = '_rspamd';
+				} elseif($app->system->is_user('rspamd')) {
+					$amavis_user = 'rspamd';
 				} elseif ($app->system->is_user('vscan')) { 
-					$amavis_user='vscan'; 
+					$amavis_user = 'vscan'; 
+				} else { 
+					$amavis_user = ''; 
 				}
-				else { 
-					$amavis_user=''; 
+				if($app->system->is_user('amavis')) { 
+					$amavis_group='amavis'; 
+				} elseif($app->system->is_user('_rspamd')) {
+					$amavis_group = '_rspamd';
+				} elseif($app->system->is_user('rspamd')) {
+					$amavis_group = 'rspamd';
+				} elseif ($app->system->is_user('vscan')) { 
+					$amavis_group = 'vscan'; 
+				} else { 
+					$amavis_group = ''; 
 				}
+				
 				if(!empty($amavis_user)) {
-					mkdir($mail_config['dkim_path'], 0750, true);
-					$app->system->chown($mail_config['dkim_path'], $amavis_user);
+					$app->system->mkdirpath($mail_config['dkim_path'], 0750, $amavis_user, $amavis_group);
 				} else {
-					mkdir($mail_config['dkim_path'], 0755, true);
+					$app->system->mkdirpath($mail_config['dkim_path'], 0755);
 					$app->log('No user amavis or vscan found - using root for '.$mail_config['dkim_path'], LOGLEVEL_WARNING);
 				}
             } else {
@@ -169,12 +184,15 @@ class mail_plugin_dkim {
 	/**
 	 * This function restarts amavis
 	 */
-    function restart_amavis() {
+    private function restart_amavis() {
         global $app;
+		$output = null;
 		$initcommand = $app->system->getinitcommand(array('amavis', 'amavisd'), 'restart');
 		$app->log('Restarting amavis: '.$initcommand.'.', LOGLEVEL_DEBUG);
 		exec($initcommand, $output);
-		foreach($output as $logline) $app->log($logline, LOGLEVEL_DEBUG);
+		foreach($output as $logline) {
+			$app->log($logline, LOGLEVEL_DEBUG);
+		}
     }
 
 	/**
@@ -184,8 +202,8 @@ class mail_plugin_dkim {
 	 * @param string $key_domain mail-domain
 	 * @return bool - true when the private key was written to disk
 	 */
-	function write_dkim_key($key_file, $key_value, $key_domain) {
-		global $app, $mailconfig;
+	private function write_dkim_key($key_file, $key_value, $key_domain) {
+		global $app;
 		$success=false;
 		if ($key_file == '' || $key_value  == '' || $key_domain == '') {
 			$app->log('DKIM internal error for domain '.$key_domain, LOGLEVEL_ERROR);
@@ -194,14 +212,20 @@ class mail_plugin_dkim {
 		if ( $app->system->file_put_contents($key_file.'.private', $key_value) ) {
 			$app->log('Saved DKIM Private-key to '.$key_file.'.private', LOGLEVEL_DEBUG);
 			$success=true;
+			$pubkey = null;
+			$result = 0;
 			/* now we get the DKIM Public-key */
 			exec('cat '.escapeshellarg($key_file.'.private').'|openssl rsa -pubout 2> /dev/null', $pubkey, $result);
 			$public_key='';
-			foreach($pubkey as $values) $public_key=$public_key.$values."\n";
+			foreach($pubkey as $values) {
+				$public_key = $public_key . $values . "\n";
+			}
 			/* save the DKIM Public-key in dkim-dir */
-			if ( $app->system->file_put_contents($key_file.'.public', $public_key) )
+			if($app->system->file_put_contents($key_file.'.public', $public_key)) {
 				$app->log('Saved DKIM Public to '.$key_domain.'.', LOGLEVEL_DEBUG);
-			else $app->log('Unable to save DKIM Public to '.$key_domain.'.', LOGLEVEL_DEBUG);
+			} else {
+				$app->log('Unable to save DKIM Public to '.$key_domain.'.', LOGLEVEL_DEBUG);
+			}
 		} else {
 			$app->log('Unable to save DKIM Private-key to '.$key_file.'.private', LOGLEVEL_ERROR);
 		}
@@ -213,26 +237,32 @@ class mail_plugin_dkim {
 	 * @param string $key_file full path to the key-file
 	 * @param string $key_domain mail-domain
 	 */
-	function remove_dkim_key($key_file, $key_domain) {
+	private function remove_dkim_key($key_file, $key_domain) {
 		global $app;
 		if (file_exists($key_file.'.private')) {
 			$app->system->unlink($key_file.'.private');
 			$app->log('Deleted the DKIM Private-key for '.$key_domain.'.', LOGLEVEL_DEBUG);
-		} else $app->log('Unable to delete the DKIM Private-key for '.$key_domain.' (not found).', LOGLEVEL_DEBUG);
+		} else {
+			$app->log('Unable to delete the DKIM Private-key for '.$key_domain.' (not found).', LOGLEVEL_DEBUG);
+		}
 		if (file_exists($key_file.'.public')) {
 			$app->system->unlink($key_file.'.public');
 			$app->log('Deleted the DKIM Public-key for '.$key_domain.'.', LOGLEVEL_DEBUG);
-		} else $app->log('Unable to delete the DKIM Public-key for '.$key_domain.' (not found).', LOGLEVEL_DEBUG);
+		} else {
+			$app->log('Unable to delete the DKIM Public-key for '.$key_domain.' (not found).', LOGLEVEL_DEBUG);
+		}
 	}
 
 	/**
 	 * This function adds the entry to the amavisd-config
 	 * @param string $key_domain mail-domain
 	 */
-	function add_to_amavis($key_domain, $selector, $old_selector) {
+	private function add_to_amavis($key_domain, $selector, $old_selector) {
 		global $app, $mail_config;
 
-		if (empty($selector)) $selector = 'default';
+		if (empty($selector)) {
+			$selector = 'default';
+		}
 		$restart = false;
 		$amavis_configfile = $this->get_amavis_config();
 
@@ -270,7 +300,7 @@ class mail_plugin_dkim {
 	 * This function removes the entry from the amavisd-config
 	 * @param string $key_domain mail-domain
 	 */
-	function remove_from_amavis($key_domain) {
+	private function remove_from_amavis($key_domain) {
 		global $app;
 
 		$restart = false;
@@ -308,14 +338,17 @@ class mail_plugin_dkim {
 	 * This function controlls new key-files and amavisd-entries
 	 * @param array $data mail-settings
 	 */
-	function add_dkim($data) {
-		global $app;
+	private function add_dkim($data) {
+		global $app, $conf;
 		if ($data['new']['active'] == 'y') {
 			$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-			if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' )
+			if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
 				$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+			}
 			if ($this->write_dkim_key($mail_config['dkim_path']."/".$data['new']['domain'], $data['new']['dkim_private'], $data['new']['domain'])) {
-				if ($this->add_to_amavis($data['new']['domain'], $data['new']['dkim_selector'], $data['old']['dkim_selector'] )) {
+				if($mail_config['content_filter'] == 'rspamd') {
+					$app->services->restartServiceDelayed('rspamd', 'reload');
+				} elseif ($this->add_to_amavis($data['new']['domain'], $data['new']['dkim_selector'], $data['old']['dkim_selector'] )) {
 					$this->restart_amavis();
 				} else {
 					$this->remove_dkim_key($mail_config['dkim_path']."/".$data['new']['domain'], $data['new']['domain']);
@@ -329,86 +362,89 @@ class mail_plugin_dkim {
 	/**
 	 * This function controlls the removement of keyfiles (public and private)
 	 * and the entry in the amavisd-config
-	 * @param array $data mail-settings
+	 * @param array $_data mail-settings
 	 */
-	function remove_dkim($_data) {
-		global $app;
+	private function remove_dkim($_data) {
+		global $app, $conf;
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-		if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' )
+		if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
 			$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+		}
 		$this->remove_dkim_key($mail_config['dkim_path']."/".$_data['domain'], $_data['domain']);
-		if ($this->remove_from_amavis($_data['domain']))
+		
+		if($mail_config['content_filter'] == 'rspamd') {
+			$app->services->restartServiceDelayed('rspamd', 'reload');
+		} elseif ($this->remove_from_amavis($_data['domain'])) {
 			$this->restart_amavis();
+		}
 	}
 
 	/**
 	 * Function called by onLoad
 	 * deletes dkim-keys
 	 */
-	function domain_dkim_delete($event_name, $data) {
-		if (isset($data['old']['dkim']) && $data['old']['dkim'] == 'y' && $data['old']['active'] == 'y')
+	public function domain_dkim_delete($event_name, $data) {
+		if (isset($data['old']['dkim']) && $data['old']['dkim'] == 'y' && $data['old']['active'] == 'y') {
 			$this->remove_dkim($data['old']);
+		}
 	}
 
 	/**
 	 * Function called by onLoad
 	 * insert dkim-keys
 	 */
-	function domain_dkim_insert($event_name, $data) {
-		if (isset($data['new']['dkim']) && $data['new']['dkim']=='y' && $this->check_system($data))
+	public function domain_dkim_insert($event_name, $data) {
+		if (isset($data['new']['dkim']) && $data['new']['dkim']=='y' && $this->check_system()) {
 			$this->add_dkim($data);
+		}
 	}
 
 	/**
 	 * Function called by onLoad
 	 * chang dkim-settings
 	 */
-	function domain_dkim_update($event_name, $data) {
+	public function domain_dkim_update($event_name, $data) {
 		global $app;
 		if($data['new']['dkim'] == 'y' || $data['old']['dkim'] == 'y'){
-			if ($this->check_system($data)) {
+			if ($this->check_system()) {
 				/* maildomain disabled */
 				if ($data['new']['active'] == 'n' && $data['old']['active'] == 'y' && $data['new']['dkim']=='y') {
 					$app->log('Maildomain '.$data['new']['domain'].' disabled - remove DKIM-settings', LOGLEVEL_DEBUG);
 					$this->remove_dkim($data['new']);
 				}
 				/* maildomain re-enabled */
-				if ($data['new']['active'] == 'y' && $data['old']['active'] == 'n' && $data['new']['dkim']=='y') 
+				if ($data['new']['active'] == 'y' && $data['old']['active'] == 'n' && $data['new']['dkim']=='y') {
 					$this->add_dkim($data);
-
+				}
+				
 				/* maildomain active - only dkim changes */
 				if ($data['new']['active'] == 'y' && $data['old']['active'] == 'y') {
 					/* dkim disabled */
 					if ($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'n') {
 						$this->remove_dkim($data['new']);
 					}
-					/* dkim enabled */
-					elseif ($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'y') {
-						$this->add_dkim($data);
-					}
-					/* new private-key */
-					if ($data['new']['dkim_private'] != $data['old']['dkim_private'] && $data['new']['dkim'] == 'y') {
-						$this->add_dkim($data);
-					}
-					/* new selector */
-					if ($data['new']['dkim_selector'] != $data['old']['dkim_selector'] && $data['new']['dkim'] == 'y') {
+					/* dkim enabled
+					 * or new private-key
+					 * or new selector
+					 * or new domain-name
+					 */
+					elseif (
+							($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'y')
+							|| ($data['new']['dkim_private'] != $data['old']['dkim_private'] && $data['new']['dkim'] == 'y')
+							|| ($data['new']['dkim_selector'] != $data['old']['dkim_selector'] && $data['new']['dkim'] == 'y')
+							|| ($data['new']['domain'] != $data['old']['domain'])
+							) {
+						if ($data['new']['domain'] != $data['old']['domain']) {
+							$this->remove_dkim($data['old']);
+						}
 						$this->add_dkim($data);
 					}
-					/* new domain-name */
-					if ($data['new']['domain'] != $data['old']['domain']) {
-						$this->remove_dkim($data['old']);
+					/* resync */
+					elseif($data['new'] == $data['old'] && $data['new']['dkim']=='y') {
 						$this->add_dkim($data);
 					}
 				}
-
-				/* resync */
-				if ($data['new']['active'] == 'y' && $data['new'] == $data['old'] && $data['new']['dkim']=='y') {
-					$this->add_dkim($data);
-				}
 			}
 		}
 	}
-
 }
-
-?>
-- 
GitLab


From 938676a4ade832320c903deb20c90121e1a839e5 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 8 Jul 2019 20:48:03 +0200
Subject: [PATCH 052/571] Fixed error in internal cron system.

---
 server/cron.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/cron.php b/server/cron.php
index ba59ff4049..5e66f51a96 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -69,7 +69,7 @@ $conf['server_id'] = intval($conf['server_id']);
 
 
 // Load required base-classes
-$app->uses('modules,ini_parser,file,services,getconf,system,cron,functions');
+$app->uses('modules,ini_parser,file,services,getconf,system,cron,functions,plugins');
 $app->load('libdatetime,cronjob');
 
 // read all cron jobs
-- 
GitLab


From cc8a3e8aae815c62b72fb9ba36ada041fba0e31c Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 8 Jul 2019 21:32:49 +0200
Subject: [PATCH 053/571] Missed to remove swriteln function in monitor
 lib/classes/monitor_tools.inc.php

---
 server/lib/classes/monitor_tools.inc.php | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index a15514fd72..1d3dab290b 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -217,21 +217,18 @@ class monitor_tools {
 			$distconfid = 'debian100';
 			$distid = 'debian60';
 			$distbaseid = 'debian';
-			swriteln("Operating System: Debian 10.0 (Buster) or compatible\n");
 		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) {
 			$distname = 'Debian';
 			$distver = 'Testing';
 			$distid = 'debian60';
 			$distconfid = 'debiantesting';
 			$distbaseid = 'debian';
-			swriteln("Operating System: Debian Testing\n");
 		} else {
 			$distname = 'Debian';
 			$distver = 'Unknown';
 			$distid = 'debian60';
 			$distconfid = 'debian100';
 			$distbaseid = 'debian';
-			swriteln("Operating System: Debian or compatible, unknown version.\n");
 		}
 	}
 
-- 
GitLab


From 13a54746407ec7bd0d8faefa5c2750ec99da1f91 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jul 2019 11:42:45 +0200
Subject: [PATCH 054/571] - fixed cron lockfile check, fixes #5334

---
 server/cron.php | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/server/cron.php b/server/cron.php
index ba59ff4049..d82abd3718 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -33,21 +33,28 @@ require SCRIPT_PATH."/lib/config.inc.php";
 
 // Check whether another instance of this script is already running
 $lockFile = $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock';
-if (is_file($lockFile)) {
+if(is_file($lockFile)) {
 	clearstatcache();
-
-	// Maybe we hit a deadlock and the lock file is no longer relevant
-	if(filemtime($lockFile) > time() - 86400) { // 86400 seconds = 1 day
-		if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - The cron lock file is older than one day.' . "\n";
-		exit;
-	}
-
-	// Check if the process id we have in the lock file is still present
+	
+// Check if the process id we have in the lock file is still present
 	$pid = trim(file_get_contents($lockFile));
 	if(preg_match('/^[0-9]+$/', $pid)) {
-		if(file_exists('/proc/' . $pid)) {
-			if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already an instance of server.php running with pid ' . $pid . '.' . "\n";
-			exit;
+		if(is_dir('/proc/' . $pid)) {
+			if(file_exists('/proc/' . $pid . '/cmdline')) {
+				if(strpos(file_get_contents('/proc/' . $pid . '/cmdline'), 'cron.php') !== false) {
+					if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already an instance of cron.php running with pid ' . $pid . '.' . "\n";
+					exit;
+				} else {
+					if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is a process running with pid ' . $pid . ' but it seems not to be cron.php, continuing.' . "\n";
+				}
+			} else {
+				if(filemtime($lockFile) < time() - 86400) {
+					if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already an instance of cron.php running with pid ' . $pid . ' but process is older than 1 day. Continuing.' . "\n";
+				} else {
+					if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already an instance of cron.php running with pid ' . $pid . '.' . "\n";
+					exit;
+				}
+			}
 		}
 	}
 	if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n";
-- 
GitLab


From ab82c4dd7d2fabb57f11f9a8a73259be4b2cc66c Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jul 2019 13:30:50 +0200
Subject: [PATCH 055/571] - addition for previous commit (moving warning
 message)

---
 server/cron.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/server/cron.php b/server/cron.php
index 6d7aa49785..ef13d06e2f 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -55,9 +55,11 @@ if(is_file($lockFile)) {
 					exit;
 				}
 			}
+		} else {
+			if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n";
+
 		}
 	}
-	if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n";
 }
 
 // Set Lockfile
-- 
GitLab


From e9c89a7a051bee0706820079e80aae310dfdd59d Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 10 Jul 2019 18:03:46 +0200
Subject: [PATCH 056/571] - fixed missing tpl class loading

---
 server/plugins-available/postfix_server_plugin.inc.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index bbd1c2546c..4ed25fd5d1 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -215,6 +215,8 @@ class postfix_server_plugin {
 		}
 		
 		if($mail_config['content_filter'] == 'rspamd' && ($mail_config['rspamd_password'] != $old_ini_data['mail']['rspamd_password'] || $mail_config['content_filter'] != $old_ini_data['mail']['content_filter'])) {
+			$app->load('tpl');
+
 			$tpl = new tpl();
 			$tpl->newTemplate('rspamd_worker-controller.inc.master');
 			$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
-- 
GitLab


From 7f9a53e50c003c6c1c700340f4fa729ec1139070 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 12 Jul 2019 15:55:34 +0200
Subject: [PATCH 057/571] - missing rspamd conf file on update

---
 install/tpl/rspamd_wblist.inc.conf.master | 19 +------------------
 server/conf/rspamd_wblist.inc.conf.master | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 18 deletions(-)
 mode change 100644 => 120000 install/tpl/rspamd_wblist.inc.conf.master
 create mode 100644 server/conf/rspamd_wblist.inc.conf.master

diff --git a/install/tpl/rspamd_wblist.inc.conf.master b/install/tpl/rspamd_wblist.inc.conf.master
deleted file mode 100644
index fc06127eae..0000000000
--- a/install/tpl/rspamd_wblist.inc.conf.master
+++ /dev/null
@@ -1,18 +0,0 @@
-spamfilter_wblist-<tmpl_var name='record_id'> {
-	priority = <tmpl_var name='priority'>;
-	from = "<tmpl_var name='from'>";
-	rcpt = "<tmpl_var name='recipient'>";
-<tmpl_if name='wblist' op='==' value='W'>
-	want_spam = yes;
-</tmpl_else>
-	apply "default" {
-		R_DUMMY = 999.0;
-		actions {
-			reject = 0.2;
-			add_header = 0.1;
-			greylist = 0.1;
-			rewrite_subject = 0.1;
-		}
-	}
-</tmpl_if>
-}
\ No newline at end of file
diff --git a/install/tpl/rspamd_wblist.inc.conf.master b/install/tpl/rspamd_wblist.inc.conf.master
new file mode 120000
index 0000000000..1ab3744b99
--- /dev/null
+++ b/install/tpl/rspamd_wblist.inc.conf.master
@@ -0,0 +1 @@
+../../server/conf/rspamd_wblist.inc.conf.master
\ No newline at end of file
diff --git a/server/conf/rspamd_wblist.inc.conf.master b/server/conf/rspamd_wblist.inc.conf.master
new file mode 100644
index 0000000000..fc06127eae
--- /dev/null
+++ b/server/conf/rspamd_wblist.inc.conf.master
@@ -0,0 +1,18 @@
+spamfilter_wblist-<tmpl_var name='record_id'> {
+	priority = <tmpl_var name='priority'>;
+	from = "<tmpl_var name='from'>";
+	rcpt = "<tmpl_var name='recipient'>";
+<tmpl_if name='wblist' op='==' value='W'>
+	want_spam = yes;
+</tmpl_else>
+	apply "default" {
+		R_DUMMY = 999.0;
+		actions {
+			reject = 0.2;
+			add_header = 0.1;
+			greylist = 0.1;
+			rewrite_subject = 0.1;
+		}
+	}
+</tmpl_if>
+}
\ No newline at end of file
-- 
GitLab


From 49d521e9147ca3e54ed79c6e7991224eef8b810f Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 12 Jul 2019 17:48:41 +0200
Subject: [PATCH 058/571] Fixed #5341 CSS Styles do not load in ISPConfig UI
 when no SSL is used

---
 install/tpl/apache_ispconfig.vhost.master | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/tpl/apache_ispconfig.vhost.master b/install/tpl/apache_ispconfig.vhost.master
index 55135299f1..d8c56de22d 100644
--- a/install/tpl/apache_ispconfig.vhost.master
+++ b/install/tpl/apache_ispconfig.vhost.master
@@ -89,11 +89,11 @@ NameVirtualHost *:<tmpl_var name="vhost_port">
 
   <IfModule mod_headers.c>
     # ISPConfig 3.1 currently requires unsafe-line for both scripts and styles, as well as unsafe-eval
-    Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'; upgrade-insecure-requests"
+    <tmpl_var name="ssl_comment">Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'; upgrade-insecure-requests"
     Header set X-Content-Type-Options: nosniff
     Header set X-Frame-Options: SAMEORIGIN
     Header set X-XSS-Protection: "1; mode=block"
-    Header always edit Set-Cookie (.*) "$1; HTTPOnly; Secure"
+    <tmpl_var name="ssl_comment">Header always edit Set-Cookie (.*) "$1; HTTPOnly; Secure"
     <IfVersion >= 2.4.7>
         Header setifempty Strict-Transport-Security "max-age=15768000"
     </IfVersion>
-- 
GitLab


From f5b9582436f59cd6262525330ef003a7907f1a02 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 12 Jul 2019 18:31:50 +0200
Subject: [PATCH 059/571] - use crypted password for rspamd UI if possible

---
 server/plugins-available/postfix_server_plugin.inc.php | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 4ed25fd5d1..763a89b4b4 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -217,9 +217,15 @@ class postfix_server_plugin {
 		if($mail_config['content_filter'] == 'rspamd' && ($mail_config['rspamd_password'] != $old_ini_data['mail']['rspamd_password'] || $mail_config['content_filter'] != $old_ini_data['mail']['content_filter'])) {
 			$app->load('tpl');
 
+			$rspamd_password = $mail_config['rspamd_password'];
+			$crypted_password = trim(exec('rspamadm pw -p ' . escapeshellarg($rspamd_password)));
+			if($crypted_password) {
+				$rspamd_password = $crypted_password;
+			}
+			
 			$tpl = new tpl();
 			$tpl->newTemplate('rspamd_worker-controller.inc.master');
-			$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
+			$tpl->setVar('rspamd_password', $rspamd_password);
 			$app->system->file_put_contents('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());
 			$app->services->restartServiceDelayed('rspamd', 'reload');
 		}
-- 
GitLab


From eae236864fddd9753da68d0dbac622ff68aac55e Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 15 Jul 2019 17:09:30 +0200
Subject: [PATCH 060/571] Fixed #5340 Debian 10 warnings about deprecated
 dovecot config and missing dh params file.

---
 install/dist/lib/debian60.lib.php        | 26 ++++++++++++++++++++++++
 install/tpl/debian6_dovecot2.conf.master |  2 ++
 2 files changed, 28 insertions(+)

diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index 0cd7116568..022d358932 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -116,6 +116,32 @@ class installer extends installer_base {
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
 			}
+			if(version_compare($dovecot_version,2.3) >= 0) {
+				// Remove deprecated setting(s)
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+				
+				// Check if we have a dhparams file and if not, create it
+				if(!file_exists('/etc/dovecot/dh.pem')) {
+					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
+					if(file_exists('/var/lib/dovecot/ssl-parameters.dat')) {
+						// convert existing ssl parameters file
+						$command = 'dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					} else {
+						/*
+						   Create a new dhparams file. We use 2048 bit only as it simply takes too long
+						   on smaller systems to generate a 4096 bit dh file (> 30 minutes). If you need
+						   a 4096 bit file, create it manually before you install ISPConfig
+						*/
+						$command = 'openssl dhparam -out /etc/dovecot/dh.pem 2048';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					}
+				}
+			} else {
+				// remove settings which are not supported in Dovecot < 2.3
+				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
+				removeLine($config_dir.'/'.$configfile, 'ssl_dh =');
+			}
 		} else {
 			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian6_dovecot.conf.master')) {
 				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian6_dovecot.conf.master', $config_dir.'/'.$configfile);
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index db6e0bfbe2..f13bbd53df 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -6,7 +6,9 @@ log_timestamp = "%Y-%m-%d %H:%M:%S "
 mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
+ssl_dh = </etc/dovecot/dh.pem
 ssl_protocols = !SSLv2 !SSLv3
+ssl_min_protocol = TLSv1
 mail_max_userip_connections = 100
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
-- 
GitLab


From 536e907f55e0405398e70203bc4e1d319162d45b Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 15 Jul 2019 18:39:50 +0200
Subject: [PATCH 061/571] - implemented per-domain-dkim, including custom
 selector

---
 install/lib/installer_base.lib.php             | 14 ++++++++++++++
 install/tpl/rspamd_dkim_signing.conf.master    |  5 +++--
 server/lib/classes/system.inc.php              | 18 ++++++++++++++++--
 .../plugins-available/mail_plugin_dkim.inc.php |  5 +++++
 .../postfix_server_plugin.inc.php              | 15 +++++++++++++++
 5 files changed, 53 insertions(+), 4 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 7abd315b84..4024e544b7 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1456,6 +1456,20 @@ class installer_base {
 				}
 			}
 			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+			
+			if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
+				$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+			}
+			$dkim_domains = $this->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM `mail_domain` WHERE `dkim` = ? ORDER BY `domain` ASC', 'y');
+			$fpp = fopen('/etc/rspamd/local.d/dkim_domains.map', 'w');
+			$fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w');
+			foreach($dkim_domains as $dkim_domain) {
+				fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n");
+				fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector']);
+			}
+			fclose($fpp);
+			fclose($fps);
+			unset($dkim_domains);
 		}
 
 		if(is_user('_rspamd') && is_group('amavis')) {
diff --git a/install/tpl/rspamd_dkim_signing.conf.master b/install/tpl/rspamd_dkim_signing.conf.master
index 0e55a7ead2..a27ee78f91 100644
--- a/install/tpl/rspamd_dkim_signing.conf.master
+++ b/install/tpl/rspamd_dkim_signing.conf.master
@@ -1,2 +1,3 @@
-path = "<tmpl_var name='dkim_path'>/$domain.private";
-selector = "default";
\ No newline at end of file
+try_fallback = false;
+path_map = "/etc/rspamd/local.d/dkim_domains.map";
+selector_map = "/etc/rspamd/local.d/dkim_selectors.map";";
\ No newline at end of file
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 5c277ada1a..304701a5f2 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1535,7 +1535,14 @@ class system{
 		$found = 0;
 		if(is_array($lines)) {
 			foreach($lines as $line) {
-				if($strict == 0) {
+				if($strict == 0 && preg_match('/^REGEX:(.*)$/', $search_pattern)) {
+					if(preg_match(substr($search_pattern, 6), $line)) {
+						$out .= $new_line."\n";
+						$found = 1;
+					} else {
+						$out .= $line;
+					}
+				} elseif($strict == 0) {
 					if(stristr($line, $search_pattern)) {
 						$out .= $new_line."\n";
 						$found = 1;
@@ -1573,7 +1580,14 @@ class system{
 		if($lines = @file($filename)) {
 			$out = '';
 			foreach($lines as $line) {
-				if($strict == 0) {
+				if($strict == 0 && preg_match('/^REGEX:(.*)$/', $search_pattern)) {
+					if(preg_match(substr($search_pattern, 6), $line)) {
+						$out .= $new_line."\n";
+						$found = 1;
+					} else {
+						$out .= $line;
+					}
+				} elseif($strict == 0) {
 					if(!stristr($line, $search_pattern)) {
 						$out .= $line;
 					}
diff --git a/server/plugins-available/mail_plugin_dkim.inc.php b/server/plugins-available/mail_plugin_dkim.inc.php
index ff649971a9..ebfd6c0ac7 100755
--- a/server/plugins-available/mail_plugin_dkim.inc.php
+++ b/server/plugins-available/mail_plugin_dkim.inc.php
@@ -347,6 +347,9 @@ class mail_plugin_dkim {
 			}
 			if ($this->write_dkim_key($mail_config['dkim_path']."/".$data['new']['domain'], $data['new']['dkim_private'], $data['new']['domain'])) {
 				if($mail_config['content_filter'] == 'rspamd') {
+					$app->system->replaceLine('/etc/rspamd/local.d/dkim_domains.map', 'REGEX:/^' . preg_quote($data['new']['domain'], '/') . ' /', $data['new']['domain'] . ' ' . $mail_config['dkim_path']."/".$data['new']['domain'] . '.private');
+					$app->system->replaceLine('/etc/rspamd/local.d/dkim_selectors.map', 'REGEX:/^' . preg_quote($data['new']['domain'], '/') . ' /', $data['new']['domain'] . ' ' . $data['new']['dkim_selector']);
+					
 					$app->services->restartServiceDelayed('rspamd', 'reload');
 				} elseif ($this->add_to_amavis($data['new']['domain'], $data['new']['dkim_selector'], $data['old']['dkim_selector'] )) {
 					$this->restart_amavis();
@@ -373,6 +376,8 @@ class mail_plugin_dkim {
 		$this->remove_dkim_key($mail_config['dkim_path']."/".$_data['domain'], $_data['domain']);
 		
 		if($mail_config['content_filter'] == 'rspamd') {
+			$app->system->removeLine('/etc/rspamd/local.d/dkim_domains.map', 'REGEX:/^' . preg_quote($_data['domain'], '/') . ' /');
+			$app->system->removeLine('/etc/rspamd/local.d/dkim_selectors.map', 'REGEX:/^' . preg_quote($_data['domain'], '/') . ' /');
 			$app->services->restartServiceDelayed('rspamd', 'reload');
 		} elseif ($this->remove_from_amavis($_data['domain'])) {
 			$this->restart_amavis();
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 763a89b4b4..933db86b3b 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -200,6 +200,21 @@ class postfix_server_plugin {
 					}
 				}
 				exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+				
+				// get all domains that have dkim enabled
+				if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
+					$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+				}
+				$dkim_domains = $app->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM `mail_domain` WHERE `dkim` = ? ORDER BY `domain` ASC', 'y');
+				$fpp = fopen('/etc/rspamd/local.d/dkim_domains.map', 'w');
+				$fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w');
+				foreach($dkim_domains as $dkim_domain) {
+					fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n");
+					fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector']);
+				}
+				fclose($fpp);
+				fclose($fps);
+				unset($dkim_domains);
 			}	
 			if($mail_config['content_filter'] == 'amavisd'){
 				exec("postconf -X 'smtpd_milters'");
-- 
GitLab


From 3d54268ee21a4351d45f94090526758e01824b77 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 15 Jul 2019 18:51:10 +0200
Subject: [PATCH 062/571] - problem with missing newlines from previous commit

---
 install/lib/installer_base.lib.php            | 27 ++++++++++---------
 .../postfix_server_plugin.inc.php             |  2 +-
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 4024e544b7..f752b693d0 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1457,19 +1457,6 @@ class installer_base {
 			}
 			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
 			
-			if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
-				$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
-			}
-			$dkim_domains = $this->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM `mail_domain` WHERE `dkim` = ? ORDER BY `domain` ASC', 'y');
-			$fpp = fopen('/etc/rspamd/local.d/dkim_domains.map', 'w');
-			$fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w');
-			foreach($dkim_domains as $dkim_domain) {
-				fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n");
-				fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector']);
-			}
-			fclose($fpp);
-			fclose($fps);
-			unset($dkim_domains);
 		}
 
 		if(is_user('_rspamd') && is_group('amavis')) {
@@ -1485,6 +1472,20 @@ class installer_base {
 		if(!is_dir('/etc/rspamd/override.d/')){
 			mkdir('/etc/rspamd/override.d/', 0755, true);
 		}
+		
+		if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
+			$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+		}
+		$dkim_domains = $this->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM `mail_domain` WHERE `dkim` = ? ORDER BY `domain` ASC', 'y');
+		$fpp = fopen('/etc/rspamd/local.d/dkim_domains.map', 'w');
+		$fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w');
+		foreach($dkim_domains as $dkim_domain) {
+			fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n");
+			fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector'] . "\n");
+		}
+		fclose($fpp);
+		fclose($fps);
+		unset($dkim_domains);
 
 		$tpl = new tpl();
 		$tpl->newTemplate('rspamd_users.conf.master');
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 933db86b3b..f66fc40d42 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -210,7 +210,7 @@ class postfix_server_plugin {
 				$fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w');
 				foreach($dkim_domains as $dkim_domain) {
 					fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n");
-					fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector']);
+					fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector'] . "\n");
 				}
 				fclose($fpp);
 				fclose($fps);
-- 
GitLab


From 0f15aff2403e6ec8270607e4ce880908833ea644 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 15 Jul 2019 18:59:08 +0200
Subject: [PATCH 063/571] - added missing database name set on update of
 ISPConfig

---
 install/update.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/install/update.php b/install/update.php
index 42ddd625f5..b700219f2e 100644
--- a/install/update.php
+++ b/install/update.php
@@ -253,6 +253,7 @@ prepareDBDump();
 
 //* initialize the database
 $inst->db = new db();
+$inst->db->setDBName($conf['mysql']['database']);
 
 //* initialize the master DB, if we have a multiserver setup
 if($conf['mysql']['master_slave_setup'] == 'y') {
-- 
GitLab


From 66357f0779da7af83fe1d8310849672db5b08df6 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 15 Jul 2019 19:05:45 +0200
Subject: [PATCH 064/571] - still problem with domain selector on update of
 ISPC

---
 install/lib/installer_base.lib.php | 2 +-
 install/update.php                 | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index f752b693d0..4db0da1ecf 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1476,7 +1476,7 @@ class installer_base {
 		if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
 			$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
 		}
-		$dkim_domains = $this->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM `mail_domain` WHERE `dkim` = ? ORDER BY `domain` ASC', 'y');
+		$dkim_domains = $this->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM ?? WHERE `dkim` = ? ORDER BY `domain` ASC', $conf['mysql']['database'] . '.mail_domain', 'y');
 		$fpp = fopen('/etc/rspamd/local.d/dkim_domains.map', 'w');
 		$fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w');
 		foreach($dkim_domains as $dkim_domain) {
diff --git a/install/update.php b/install/update.php
index b700219f2e..42ddd625f5 100644
--- a/install/update.php
+++ b/install/update.php
@@ -253,7 +253,6 @@ prepareDBDump();
 
 //* initialize the database
 $inst->db = new db();
-$inst->db->setDBName($conf['mysql']['database']);
 
 //* initialize the master DB, if we have a multiserver setup
 if($conf['mysql']['master_slave_setup'] == 'y') {
-- 
GitLab


From 78041c8dff476bca0d75d57bdadfe881f4d40512 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 15 Jul 2019 19:09:02 +0200
Subject: [PATCH 065/571] - syntax error in config for rspamd dkim

---
 install/tpl/rspamd_dkim_signing.conf.master | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/tpl/rspamd_dkim_signing.conf.master b/install/tpl/rspamd_dkim_signing.conf.master
index a27ee78f91..ed9abe40ee 100644
--- a/install/tpl/rspamd_dkim_signing.conf.master
+++ b/install/tpl/rspamd_dkim_signing.conf.master
@@ -1,3 +1,3 @@
 try_fallback = false;
 path_map = "/etc/rspamd/local.d/dkim_domains.map";
-selector_map = "/etc/rspamd/local.d/dkim_selectors.map";";
\ No newline at end of file
+selector_map = "/etc/rspamd/local.d/dkim_selectors.map";
\ No newline at end of file
-- 
GitLab


From 1eb51aa6feb069c3ff969b95d1e452abae916f78 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 18 Jul 2019 11:00:53 +0200
Subject: [PATCH 066/571] - fixed white/blacklisting for rspamd

---
 install/lib/update.lib.php                     |  2 +-
 server/conf/rspamd_users.inc.conf.master       | 16 ++++++++--------
 server/conf/rspamd_wblist.inc.conf.master      | 14 +++++++++++---
 server/plugins-available/rspamd_plugin.inc.php |  3 ++-
 4 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php
index 3406b760b0..fd1a34b2ca 100644
--- a/install/lib/update.lib.php
+++ b/install/lib/update.lib.php
@@ -103,7 +103,7 @@ function checkDbHealth() {
 	$notok = array();
 
 	echo "Checking ISPConfig database .. ";
-	exec("mysqlcheck -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." -P ".escapeshellarg($conf['mysql']['port'])." -r ".escapeshellarg($conf["mysql"]["database"]), $result);
+	exec("mysqlcheck -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." -P ".escapeshellarg($conf['mysql']['port'])." --auto-repair ".escapeshellarg($conf["mysql"]["database"]), $result);
 	for( $i=0; $i<sizeof($result);$i++) {
 		if ( substr($result[$i], -2) != "OK" ) {
 			$notok[] = $result[$i];
diff --git a/server/conf/rspamd_users.inc.conf.master b/server/conf/rspamd_users.inc.conf.master
index 18934c2760..43890e8135 100644
--- a/server/conf/rspamd_users.inc.conf.master
+++ b/server/conf/rspamd_users.inc.conf.master
@@ -5,34 +5,34 @@ spamfilter_users-<tmpl_var name='record_id'> {
 	want_spam = yes;
 </tmpl_if>
 <tmpl_if name='spam_lover_virus_lover' op='==' value='spam_lover_AND_NOTvirus_lover'>
-	apply "default" {
+	apply {
 		CLAM_VIRUS = 1999.0;
 		JUST_EICAR = 1999.0;
 		actions {
-			reject = 999.0;
+			reject = null;
 		}
 	}
 </tmpl_if>
 <tmpl_if name='spam_lover_virus_lover' op='==' value='NOTspam_lover_AND_virus_lover'>
-	apply "default" {
+	apply {
 		CLAM_VIRUS = -999.0;
 		JUST_EICAR = -999.0;
 		actions {
 			<tmpl_if name='rspamd_greylisting' op='==' value='y'>greylist = <tmpl_var name='rspamd_spam_greylisting_level'>;</tmpl_if>
-			
-			<tmpl_var name='rspamd_spam_tag_method'> = <tmpl_var name='rspamd_spam_tag_level'>;
+			<tmpl_if name='rspamd_spam_tag_method' op='==' value='rewrite_subject'>"rewrite subject" =  <tmpl_var name='rspamd_spam_tag_level'>;</tmpl_if>
+			<tmpl_if name='rspamd_spam_tag_method' op='==' value='add_header'>"add header" =  <tmpl_var name='rspamd_spam_tag_level'>;</tmpl_if>
 			reject = <tmpl_var name='rspamd_spam_kill_level'>;
 		}
 	}
 </tmpl_if>
 <tmpl_if name='spam_lover_virus_lover' op='==' value='NOTspam_lover_AND_NOTvirus_lover'>
-	apply "default" {
+	apply {
 		CLAM_VIRUS = <tmpl_var name='rspamd_virus_kill_level'>;
 		JUST_EICAR = <tmpl_var name='rspamd_virus_kill_level'>;
 		actions {
 			<tmpl_if name='rspamd_greylisting' op='==' value='y'>greylist = <tmpl_var name='rspamd_spam_greylisting_level'>;</tmpl_if>
-			
-			<tmpl_var name='rspamd_spam_tag_method'> = <tmpl_var name='rspamd_spam_tag_level'>;
+			<tmpl_if name='rspamd_spam_tag_method' op='==' value='rewrite_subject'>"rewrite subject" =  <tmpl_var name='rspamd_spam_tag_level'>;</tmpl_if>
+			<tmpl_if name='rspamd_spam_tag_method' op='==' value='add_header'>"add header" =  <tmpl_var name='rspamd_spam_tag_level'>;</tmpl_if>
 			reject = <tmpl_var name='rspamd_spam_kill_level'>;
 		}
 	}
diff --git a/server/conf/rspamd_wblist.inc.conf.master b/server/conf/rspamd_wblist.inc.conf.master
index fc06127eae..aaa7d06f67 100644
--- a/server/conf/rspamd_wblist.inc.conf.master
+++ b/server/conf/rspamd_wblist.inc.conf.master
@@ -4,14 +4,22 @@ spamfilter_wblist-<tmpl_var name='record_id'> {
 	rcpt = "<tmpl_var name='recipient'>";
 <tmpl_if name='wblist' op='==' value='W'>
 	want_spam = yes;
+	apply {
+		actions {
+			reject = null;
+			"add header" = null;
+			greylist = null;
+			"rewrite subject" = null;
+		}
+	}
 </tmpl_else>
-	apply "default" {
+	apply {
 		R_DUMMY = 999.0;
 		actions {
 			reject = 0.2;
-			add_header = 0.1;
+			"add header" = 0.1;
 			greylist = 0.1;
-			rewrite_subject = 0.1;
+			"rewrite subject" = 0.1;
 		}
 	}
 </tmpl_if>
diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 65f4522ba7..b6eddc401f 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -189,7 +189,8 @@ class rspamd_plugin {
 				$tpl = new tpl();
 				$tpl->newTemplate('rspamd_wblist.inc.conf.master');
 				$tpl->setVar('record_id', intval($data['new']['wblist_id']));
-				$tpl->setVar('priority', intval($data['new']['priority']));
+				// we need to add 10 to priority to avoid mailbox/domain spamfilter settings overriding white/blacklists
+				$tpl->setVar('priority', intval($data['new']['priority']) + 10);
 				$tpl->setVar('from', $app->functions->idn_encode($data['new']['email']));
 				$tpl->setVar('recipient', $app->functions->idn_encode($recipient['email']));
 				//$tpl->setVar('action', ($data['new']['wb'] == 'W'? 'want_spam = yes;' : 'action = "reject";'));
-- 
GitLab


From f343e169a2afda4512cf64d98b074ded71fbe532 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 23 Jul 2019 19:32:22 +0200
Subject: [PATCH 067/571] Insufficient escaping of whitespace in FTP user
 paths, fixes #5350

---
 interface/web/sites/form/ftp_user.tform.php          | 5 ++++-
 server/plugins-available/ftpuser_base_plugin.inc.php | 6 ++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php
index 239bfdb858..5e77de4b5f 100644
--- a/interface/web/sites/form/ftp_user.tform.php
+++ b/interface/web/sites/form/ftp_user.tform.php
@@ -276,7 +276,10 @@ if($app->auth->is_admin()) {
 				'formtype'  => 'TEXT',
 				'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
 						'errmsg'=> 'directory_error_empty'),
-					1 => array (    'type'  => 'CUSTOM',
+											1 => array ( 	'type' => 'REGEX',
+															'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{10,128}$/',
+															'errmsg'=> 'directory_error_regex'),
+					2 => array (    'type'  => 'CUSTOM',
 						'class' => 'validate_ftpuser',
 						'function' => 'ftp_dir',
 						'errmsg' => 'directory_error_notinweb'),
diff --git a/server/plugins-available/ftpuser_base_plugin.inc.php b/server/plugins-available/ftpuser_base_plugin.inc.php
index af5870a4ba..c34371a181 100644
--- a/server/plugins-available/ftpuser_base_plugin.inc.php
+++ b/server/plugins-available/ftpuser_base_plugin.inc.php
@@ -83,8 +83,7 @@ class ftpuser_base_plugin {
 			}
 
 			$app->system->web_folder_protection($web['document_root'], false);
-			exec('mkdir -p '.escapeshellcmd($data['new']['dir']));
-			exec('chown '.escapeshellcmd($web["system_user"]).':'.escapeshellcmd($web['system_group']).' '.$data['new']['dir']);
+			$app->system->mkdirpath($data['new']['dir'], 0755, $web["system_user"], $web["system_group"]);
 			$app->system->web_folder_protection($web['document_root'], true);
 
 			$app->log("Added ftpuser_dir: ".$data['new']['dir'], LOGLEVEL_DEBUG);
@@ -109,8 +108,7 @@ class ftpuser_base_plugin {
 			}
 
 			$app->system->web_folder_protection($web['document_root'], false);
-			exec('mkdir -p '.escapeshellcmd($data['new']['dir']));
-			exec('chown '.escapeshellcmd($web["system_user"]).':'.escapeshellcmd($web['system_group']).' '.$data['new']['dir']);
+			$app->system->mkdirpath($data['new']['dir'], 0755, $web["system_user"], $web["system_group"]);
 			$app->system->web_folder_protection($web['document_root'], true);
 			
 			
-- 
GitLab


From 2d6d9eb4ffaaf5371ecfba1734ab1f86873013ea Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sat, 27 Jul 2019 21:18:24 +0200
Subject: [PATCH 068/571] - Support CRYPT-SHA512 and SHA256 for passwords,
 implements #5353

---
 .../sql/incremental/upd_dev_collection.sql    |  5 ++++
 install/sql/ispconfig3.sql                    | 10 ++++----
 interface/lib/classes/auth.inc.php            | 25 +++++++++++++++----
 interface/lib/classes/remote.d/client.inc.php | 14 ++++-------
 interface/lib/classes/remoting.inc.php        | 10 ++------
 interface/web/admin/users_edit.php            | 10 +++-----
 interface/web/client/reseller_edit.php        | 24 +++++++-----------
 7 files changed, 49 insertions(+), 49 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index e69de29bb2..d5b7b0e017 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -0,0 +1,5 @@
+ALTER TABLE `client` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `ftp_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `shell_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `sys_user` CHANGE COLUMN `passwort` `passwort` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `webdav_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 2417ef0d21..3f534eedf0 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -243,7 +243,7 @@ CREATE TABLE `client` (
   `limit_openvz_vm_template_id` int(11) NOT NULL DEFAULT '0',
   `parent_client_id` int(11) unsigned NOT NULL DEFAULT '0',
   `username` varchar(64) DEFAULT NULL,
-  `password` varchar(64) DEFAULT NULL,
+  `password` varchar(200) DEFAULT NULL,
   `language` char(2) NOT NULL DEFAULT 'en',
   `usertheme` varchar(32) NOT NULL DEFAULT 'default',
   `template_master` int(11) unsigned NOT NULL DEFAULT '0',
@@ -705,7 +705,7 @@ CREATE TABLE `ftp_user` (
   `parent_domain_id` int(11) unsigned NOT NULL default '0',
   `username` varchar(64) default NULL,
   `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) default NULL,
+  `password` varchar(200) default NULL,
   `quota_size` bigint(20) NOT NULL default '-1',
   `active` enum('n','y') NOT NULL default 'y',
   `uid` varchar(64) default NULL,
@@ -1440,7 +1440,7 @@ CREATE TABLE `shell_user` (
   `parent_domain_id` int(11) unsigned NOT NULL default '0',
   `username` varchar(64) default NULL,
   `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) default NULL,
+  `password` varchar(200) default NULL,
   `quota_size` bigint(20) NOT NULL default '-1',
   `active` enum('n','y') NOT NULL default 'y',
   `puser` varchar(255) default NULL,
@@ -1864,7 +1864,7 @@ CREATE TABLE `sys_user` (
   `sys_perm_group` varchar(5) NOT NULL default 'riud',
   `sys_perm_other` varchar(5) NOT NULL default '',
   `username` varchar(64) NOT NULL default '',
-  `passwort` varchar(64) NOT NULL default '',
+  `passwort` varchar(200) NOT NULL default '',
   `modules` varchar(255) NOT NULL default '',
   `startmodule` varchar(255) NOT NULL default '',
   `app_theme` varchar(32) NOT NULL default 'default',
@@ -1899,7 +1899,7 @@ CREATE TABLE `webdav_user` (
   `parent_domain_id` int(11) unsigned NOT NULL DEFAULT '0',
   `username` varchar(64) DEFAULT NULL,
   `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) DEFAULT NULL,
+  `password` varchar(200) DEFAULT NULL,
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   `dir` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`webdav_user_id`)
diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 6658c4c116..afe50ac692 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -231,12 +231,27 @@ class auth {
 		if($charset != 'UTF-8') {
 			$cleartext_password = mb_convert_encoding($cleartext_password, $charset, 'UTF-8');
 		}
-		$salt="$1$";
-		$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-		for ($n=0;$n<8;$n++) {
-			$salt.=$base64_alphabet[mt_rand(0, 63)];
+		
+		if(defined('CRYPT_SHA512') && CRYPT_SHA512 == 1) {
+			$salt = '$6$rounds=5000$';
+			$salt_length = 16;
+		} elseif(defined('CRYPT_SHA256') && CRYPT_SHA256 == 1) {
+			$salt = '$5$rounds=5000$';
+			$salt_length = 16;
+		} else {
+			$salt = '$1$';
+			$salt_length = 12;
+		}
+		
+		if(function_exists('openssl_random_pseudo_bytes')) {
+			$salt .= substr(bin2hex(openssl_random_pseudo_bytes($salt_length)), 0, $salt_length);
+		} else {
+			$base64_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./';
+			for($n = 0; $n < $salt_length; $n++) {
+				$salt .= $base64_alphabet[mt_rand(0, 63)];
+			}
 		}
-		$salt.="$";
+		$salt .= "$";
 		return crypt($cleartext_password, $salt);
 	}
 	
diff --git a/interface/lib/classes/remote.d/client.inc.php b/interface/lib/classes/remote.d/client.inc.php
index b91909c9d3..e07e227e60 100644
--- a/interface/lib/classes/remote.d/client.inc.php
+++ b/interface/lib/classes/remote.d/client.inc.php
@@ -604,11 +604,9 @@ class remoting_client extends remoting {
 			if($user) {
 				$saved_password = stripslashes($user['password']);
 
-				if(substr($saved_password, 0, 3) == '$1$') {
-					//* The password is crypt-md5 encrypted
-					$salt = '$1$'.substr($saved_password, 3, 8).'$';
-
-					if(crypt(stripslashes($password), $salt) != $saved_password) {
+				if(preg_match('/^\$[156]\$/', $saved_password)) {
+					//* The password is crypt encrypted
+					if(crypt(stripslashes($password), $saved_password) !== $saved_password) {
 						$user = false;
 					}
 				} else {
@@ -636,11 +634,9 @@ class remoting_client extends remoting {
 			if($user) {
 				$saved_password = stripslashes($user['passwort']);
 
-				if(substr($saved_password, 0, 3) == '$1$') {
+				if(preg_match('/^\$[156]\$/', $saved_password)) {
 					//* The password is crypt-md5 encrypted
-					$salt = '$1$'.substr($saved_password, 3, 8).'$';
-
-					if(crypt(stripslashes($password), $salt) != $saved_password) {
+					if(crypt(stripslashes($password), $saved_password) != $saved_password) {
 						$user = false;
 					}
 				} else {
diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php
index 6e551355a6..e1fc1ada86 100644
--- a/interface/lib/classes/remoting.inc.php
+++ b/interface/lib/classes/remoting.inc.php
@@ -99,28 +99,22 @@ class remoting {
 			if($user) {
 				$saved_password = stripslashes($user['passwort']);
 
-				if(substr($saved_password, 0, 3) == '$1$') {
+				if(preg_match('/^\$[156]\$/', $saved_password)) {
 					//* The password is crypt-md5 encrypted
-					$salt = '$1$'.substr($saved_password, 3, 8).'$';
-
-					if(crypt(stripslashes($password), $salt) != $saved_password) {
+					if(crypt(stripslashes($password), $saved_password) != $saved_password) {
 						throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.');
-						return false;
 					}
 				} else {
 					//* The password is md5 encrypted
 					if(md5($password) != $saved_password) {
 						throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.');
-						return false;
 					}
 				}
 			} else {
 				throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.');
-				return false;
 			}
 			if($user['active'] != 1) {
 				throw new SoapFault('client_login_failed', 'The login failed. User is blocked.');
-				return false;
 			}
 
 			// now we need the client data
diff --git a/interface/web/admin/users_edit.php b/interface/web/admin/users_edit.php
index 4c5c97409f..7f0c691c42 100644
--- a/interface/web/admin/users_edit.php
+++ b/interface/web/admin/users_edit.php
@@ -104,6 +104,8 @@ class page_action extends tform_actions {
 	function onAfterUpdate() {
 		global $app, $conf;
 
+		$app->uses('auth');
+		
 		$client = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = ?", $this->id);
 		$client_id = $app->functions->intval($client['client_id']);
 		$username = $this->dataRecord["username"];
@@ -121,13 +123,7 @@ class page_action extends tform_actions {
 		// password changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord["passwort"]) && $this->dataRecord["passwort"] != '') {
 			$password = $this->dataRecord["passwort"];
-			$salt="$1$";
-			$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-			for ($n=0;$n<8;$n++) {
-				$salt.=$base64_alphabet[mt_rand(0, 63)];
-			}
-			$salt.="$";
-			$password = crypt(stripslashes($password), $salt);
+			$password = $app->auth->crypt_password($password);
 			$sql = "UPDATE client SET password = ? WHERE client_id = ? AND username = ?";
 			$app->db->query($sql, $password, $client_id, $username);
 		}
diff --git a/interface/web/client/reseller_edit.php b/interface/web/client/reseller_edit.php
index 59699ec163..3078e01fbc 100644
--- a/interface/web/client/reseller_edit.php
+++ b/interface/web/client/reseller_edit.php
@@ -200,6 +200,9 @@ class page_action extends tform_actions {
 	*/
 	function onAfterInsert() {
 		global $app, $conf;
+		
+		$app->uses('auth');
+		
 		// Create the group for the reseller
 		$groupid = $app->db->datalogInsert('sys_group', array("name" => $this->dataRecord["username"], "description" => '', "client_id" => $this->id), 'groupid');
 		$groups = $groupid;
@@ -213,14 +216,8 @@ class page_action extends tform_actions {
 		$active = 1;
 		$language = $this->dataRecord["language"];
 
-		$salt="$1$";
-		$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-		for ($n=0;$n<8;$n++) {
-			$salt.=$base64_alphabet[mt_rand(0, 63)];
-		}
-		$salt.="$";
-		$password = crypt(stripslashes($password), $salt);
-
+		$password = $app->auth->crypt_password(stripslashes($password));
+		
 		// Create the controlpaneluser for the reseller
 		$sql = "INSERT INTO sys_user (`username`,`passwort`,`modules`,`startmodule`,`app_theme`,`typ`, `active`,`language`,`groups`,`default_group`,`client_id`)
 		VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
@@ -313,6 +310,8 @@ class page_action extends tform_actions {
 	function onAfterUpdate() {
 		global $app, $conf;
 
+		$app->uses('auth');
+		
 		// username changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['username']) && $this->dataRecord['username'] != '' && $this->oldDataRecord['username'] != $this->dataRecord['username']) {
 			$username = $this->dataRecord["username"];
@@ -329,13 +328,8 @@ class page_action extends tform_actions {
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord["password"]) && $this->dataRecord["password"] != '') {
 			$password = $this->dataRecord["password"];
 			$client_id = $this->id;
-			$salt="$1$";
-			$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-			for ($n=0;$n<8;$n++) {
-				$salt.=$base64_alphabet[mt_rand(0, 63)];
-			}
-			$salt.="$";
-			$password = crypt(stripslashes($password), $salt);
+			
+			$password = $app->auth->crypt_password(stripslashes($password));
 			$sql = "UPDATE sys_user SET passwort = ? WHERE client_id = ?";
 			$app->db->query($sql, $password, $client_id);
 		}
-- 
GitLab


From 2b60a7a979567cb8c4513553f6b78909b4046bf1 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sat, 27 Jul 2019 22:57:40 +0200
Subject: [PATCH 069/571] WIP: change system exec calls to safe variant

---
 interface/lib/app.inc.php                     |  2 +-
 interface/lib/classes/functions.inc.php       |  4 +-
 interface/lib/classes/system.inc.php          | 43 +++++++++-
 interface/lib/classes/validate_dkim.inc.php   |  5 +-
 interface/web/mail/ajax_get_json.php          | 10 ++-
 server/lib/app.inc.php                        | 16 ++++
 server/lib/classes/aps_installer.inc.php      | 19 +++--
 .../cron.d/100-monitor_email_quota.inc.php    |  5 +-
 server/lib/classes/cron.d/150-awstats.inc.php | 16 ++--
 .../lib/classes/cron.d/150-webalizer.inc.php  | 14 ++--
 .../lib/classes/cron.d/200-logfiles.inc.php   | 26 +++---
 server/lib/classes/cron.d/500-backup.inc.php  | 33 +++++---
 .../classes/cron.d/500-backup_mail.inc.php    | 30 ++++---
 .../cron.d/600-purge_mailboxes.inc.php        |  2 +-
 .../classes/cron.d/900-letsencrypt.inc.php    |  2 +-
 server/lib/classes/functions.inc.php          |  4 +-
 server/lib/classes/letsencrypt.inc.php        |  6 +-
 server/lib/classes/monitor_tools.inc.php      |  3 +-
 server/lib/classes/system.inc.php             | 82 +++++++++++++------
 .../remoteaction_core_module.inc.php          | 19 +++--
 .../plugins-available/apache2_plugin.inc.php  | 29 ++++---
 .../apps_vhost_plugin.inc.php                 |  6 +-
 22 files changed, 246 insertions(+), 130 deletions(-)

diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index b02ae8526d..46f7213240 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -78,7 +78,7 @@ class app {
 		
 		$this->uses($prop);
 		if(property_exists($this, $prop)) return $this->{$prop};
-		else return null;
+		else trigger_error('Undefined property ' . $name . ' of class app', E_USER_WARNING);
 	}
 	
 	public function __destruct() {
diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index 28ab9ce384..03e331f0f1 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -451,9 +451,9 @@ class functions {
 		if(file_exists($id_rsa_file)) unset($id_rsa_file);
 		if(file_exists($id_rsa_pub_file)) unset($id_rsa_pub_file);
 		if(!file_exists($id_rsa_file) && !file_exists($id_rsa_pub_file)) {
-			exec('ssh-keygen -t rsa -C '.$username.'-rsa-key-'.time().' -f '.$id_rsa_file.' -N ""');
+			$app->system->exec_safe('ssh-keygen -t rsa -C ? -f ? -N ""', $username.'-rsa-key-'.time(), $id_rsa_file);
 			$app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", @file_get_contents($id_rsa_file), @file_get_contents($id_rsa_pub_file), $client_id);
-			exec('rm -f '.$id_rsa_file.' '.$id_rsa_pub_file);
+			$app->system->exec_safe('rm -f ? ?', $id_rsa_file, $id_rsa_pub_file);
 		} else {
 			$app->log("Failed to create SSH keypair for ".$username, LOGLEVEL_WARN);
 		}
diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index cef9424a75..d4d9cccefe 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -31,6 +31,8 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 class system {
 
 	var $client_service = null;
+	private $_last_exec_out = null;
+	private $_last_exec_retcode = null;
 
 	public function has_service($userid, $service) {
 		global $app;
@@ -52,8 +54,43 @@ class system {
 			return false;
 		}
 	}
-} //* End Class
-
-?>
 
+	public function last_exec_out() {
+		return $this->_last_exec_out;
+	}
+	
+	public function last_exec_retcode() {
+		return $this->_last_exec_retcode;
+	}
+	
+	public function exec_safe($cmd) {
+		$arg_count = func_num_args();
+		if($arg_count > 1) {
+			$args = func_get_args();
 
+			$pos = 0;
+			$a = 0;
+			foreach($args as $value) {
+				$a++;
+				
+				$pos = strpos($cmd, '?', $pos);
+				if($pos === false) {
+					break;
+				}
+				$value = escapeshellarg($value);
+				$cmd = substr_replace($cmd, $value, $pos, 1);
+				$pos += strlen($value);
+			}
+		}
+		
+		$this->_last_exec_out = null;
+		$this->_last_exec_retcode = null;
+		return exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
+	}
+	
+	public function system_safe($cmd) {
+		call_user_func_array(array($this, 'exec_safe'), func_get_args());
+		return implode("\n", $this->_last_exec_out);
+	}	
+	
+} //* End Class
diff --git a/interface/lib/classes/validate_dkim.inc.php b/interface/lib/classes/validate_dkim.inc.php
index 443fe76d7f..3fbc28a0a1 100644
--- a/interface/lib/classes/validate_dkim.inc.php
+++ b/interface/lib/classes/validate_dkim.inc.php
@@ -49,10 +49,13 @@ class validate_dkim {
 	 * Validator function for private DKIM-Key
 	 */
 	function check_private_key($field_name, $field_value, $validator) {
+		global $app;
+		
 		$dkim_enabled=$_POST['dkim'];
 		if ($dkim_enabled == 'y') {
 			if (empty($field_value)) return $this->get_error($validator['errmsg']);
-			exec('echo '.escapeshellarg($field_value).'|openssl rsa -check', $output, $result);
+			$app->system->exec_safe('echo ?|openssl rsa -check', $field_value);
+			$result = $app->system->last_exec_retcode();
 			if($result != 0) return $this->get_error($validator['errmsg']);
 		}
 	}
diff --git a/interface/web/mail/ajax_get_json.php b/interface/web/mail/ajax_get_json.php
index 17fd4cf45a..69705ba6f7 100644
--- a/interface/web/mail/ajax_get_json.php
+++ b/interface/web/mail/ajax_get_json.php
@@ -54,8 +54,8 @@ if($type == 'create_dkim' && $domain_id != ''){
 	if ($dkim_strength=='') $dkim_strength = 2048;
 	
 	$rnd_val = $dkim_strength * 10;
-	exec('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null', $output, $result);
-	exec('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null', $privkey, $result);
+	$app->system->exec_safe('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null', $output, $result);
+	$app->system->exec_safe('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null', $privkey, $result);
 	unlink("../../temp/random-data.bin");
 	$dkim_private='';
 	foreach($privkey as $values) $dkim_private=$dkim_private.$values."\n";
@@ -79,12 +79,14 @@ if($type == 'create_dkim' && $domain_id != ''){
 			$selector = 'invalid domain or selector';
 		}
 		unset($dkim_public);
-		exec('echo '.escapeshellarg($dkim_private).'|openssl rsa -pubout -outform PEM 2> /dev/null',$pubkey,$result);
+		$app->system->exec_safe('echo ?|openssl rsa -pubout -outform PEM 2> /dev/null', $dkim_private);
+		$pubkey = $app->system->last_exec_out();
 		foreach($pubkey as $values) $dkim_public=$dkim_public.$values."\n";
 		$selector = $dkim_selector;
 	} else {
 		unset($dkim_public);
-		exec('echo '.escapeshellarg($dkim_private).'|openssl rsa -pubout -outform PEM 2> /dev/null',$pubkey,$result);
+		$app->system->exec_safe('echo ?|openssl rsa -pubout -outform PEM 2> /dev/null', $dkim_private);
+		$pubkey = $app->system->last_exec_out();
 		foreach($pubkey as $values) $dkim_public=$dkim_public.$values."\n";
 		$selector = $dkim_selector;
 	}
diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php
index 86df2a86f6..146f2465c0 100644
--- a/server/lib/app.inc.php
+++ b/server/lib/app.inc.php
@@ -69,6 +69,22 @@ class app {
 
 	}
 
+	public function __get($name) {
+		$valid_names = array('functions', 'getconf', 'letsencrypt', 'modules', 'plugins', 'services', 'system');
+		if(!in_array($name, $valid_names)) {
+			trigger_error('Undefined property ' . $name . ' of class app', E_USER_WARNING);
+		}
+		if(property_exists($this, $name)) {
+			return $this->{$name};
+		}
+		$this->uses($name);
+		if(property_exists($this, $name)) {
+			return $this->{$name};
+		} else {
+			trigger_error('Undefined property ' . $name . ' of class app', E_USER_WARNING);
+		}
+	}
+	
 	function setCaller($caller) {
 		$this->_calling_script = $caller;
 	}
diff --git a/server/lib/classes/aps_installer.inc.php b/server/lib/classes/aps_installer.inc.php
index 9b601d90b3..2995b01e07 100644
--- a/server/lib/classes/aps_installer.inc.php
+++ b/server/lib/classes/aps_installer.inc.php
@@ -395,7 +395,7 @@ class ApsInstaller extends ApsBase
 						mkdir($this->document_root, 0777, true);
 					}
 				} else {
-					exec("rm -Rf ".escapeshellarg($this->local_installpath).'*');
+					$app->system->exec_safe("rm -Rf ?*", $this->local_installpath);
 				}
 			} else {
 				mkdir($this->local_installpath, 0777, true);
@@ -412,7 +412,7 @@ class ApsInstaller extends ApsBase
 					|| ($this->extractZip($this->packages_dir.'/'.$task['path'], 'scripts', $this->local_installpath.'install_scripts/') === false) )
 				{
 					// Clean already extracted data
-					exec("rm -Rf ".escapeshellarg($this->local_installpath).'*');
+					$app->system->exec_safe("rm -Rf ?*", $this->local_installpath);
 					throw new Exception('Unable to extract the package '.$task['path']);
 				}
 
@@ -423,11 +423,11 @@ class ApsInstaller extends ApsBase
 				$owner_res = $app->db->queryOneRecord("SELECT system_user, system_group FROM web_domain WHERE domain = ?", $main_domain['value']);
 				$this->file_owner_user = $owner_res['system_user'];
 				$this->file_owner_group = $owner_res['system_group'];
-				exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
+				$app->system->exec_safe('chown -R ?:? ?', $this->file_owner_user, $this->file_owner_group, $this->local_installpath);
 
 				//* Chown stats directory back
 				if(is_dir($this->local_installpath.'stats')) {
-					exec('chown -R root:root '.escapeshellarg($this->local_installpath.'stats'));
+					$app->system->exec_safe('chown -R root:root ?', $this->local_installpath.'stats');
 				}
 			}
 		}
@@ -554,7 +554,9 @@ class ApsInstaller extends ApsBase
 
 			$shell_retcode = true;
 			$shell_ret = array();
-			exec('php '.escapeshellarg($this->local_installpath.'install_scripts/'.$cfgscript).' install 2>&1', $shell_ret, $shell_retcode);
+			$app->system->exec_safe('php ? install 2>&1', $this->local_installpath.'install_scripts/'.$cfgscript);
+			$shell_ret = $app->system->last_exec_out();
+			$shell_retcode = $app->system->last_exec_retcode();
 			$shell_ret = array_filter($shell_ret);
 			$shell_ret_str = implode("\n", $shell_ret);
 
@@ -566,11 +568,11 @@ class ApsInstaller extends ApsBase
 			else
 			{
 				// The install succeeded, chown newly created files too
-				exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
+				$app->system->exec_safe('chown -R ?:? ?', $this->file_owner_user, $this->file_owner_group, $this->local_installpath);
 
 				//* Chown stats directory back
 				if(is_dir($this->local_installpath.'stats')) {
-					exec('chown -R root:root '.escapeshellarg($this->local_installpath.'stats'));
+					$app->system->exec_safe('chown -R root:root ?', $this->local_installpath.'stats');
 				}
 
 				$app->dbmaster->query('UPDATE aps_instances SET instance_status = ? WHERE id = ?', INSTANCE_SUCCESS, $task['instance_id']);
@@ -597,8 +599,9 @@ class ApsInstaller extends ApsBase
 	 */
 	private function cleanup($task, $sxe)
 	{
+		global $app;
 		chdir($this->local_installpath);
-		exec("rm -Rf ".escapeshellarg($this->local_installpath).'install_scripts');
+		$app->system->exec_safe("rm -Rf ?", $this->local_installpath.'install_scripts');
 	}
 
 
diff --git a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
index 75014c347d..8adf7c7253 100644
--- a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
@@ -90,7 +90,7 @@ class cronjob_monitor_email_quota extends cronjob {
 				$email_parts = explode('@', $mb['email']);
 				$filename = $mb['maildir'].'/.quotausage';
 				if(!file_exists($filename) && $dovecot) {
-					exec('doveadm quota recalc -u '.$email);
+					$app->system->exec_safe('doveadm quota recalc -u ?', $email);
 				}
 				if(file_exists($filename) && !is_link($filename)) {
 					$quotafile = file($filename);
@@ -99,7 +99,8 @@ class cronjob_monitor_email_quota extends cronjob {
 					$app->log("Mail storage $email: " . $storage_value[1], LOGLEVEL_DEBUG);
 					unset($quotafile);
 				} else {
-					exec('du -s '.escapeshellcmd($mb['maildir']), $out);
+					$app->system->exec_safe('du -s ?', $mb['maildir']);
+					$out = $app->system->last_exec_out();
 					$parts = explode(' ', $out[0]);
 					$data[$email]['used'] = intval($parts[0])*1024;
 					unset($out);
diff --git a/server/lib/classes/cron.d/150-awstats.inc.php b/server/lib/classes/cron.d/150-awstats.inc.php
index 2d281c7d39..0b1cbd5a44 100644
--- a/server/lib/classes/cron.d/150-awstats.inc.php
+++ b/server/lib/classes/cron.d/150-awstats.inc.php
@@ -71,16 +71,16 @@ class cronjob_awstats extends cronjob {
 				$log_folder .= '/' . $subdomain_host;
 				unset($tmp);
 			}
-			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log');
+			$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log';
 			if(!@is_file($logfile)) {
-				$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz');
+				$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz';
 				if(!@is_file($logfile)) {
 					continue;
 				}
 			}
 			$web_folder = (($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web');
-			$domain = escapeshellcmd($rec['domain']);
-			$statsdir = escapeshellcmd($rec['document_root'].'/'.$web_folder.'/stats');
+			$domain = $rec['domain'];
+			$statsdir = $rec['document_root'].'/'.$web_folder.'/stats';
 			$awstats_pl = $web_config['awstats_pl'];
 			$awstats_buildstaticpages_pl = $web_config['awstats_buildstaticpages_pl'];
 
@@ -117,8 +117,8 @@ class cronjob_awstats extends cronjob {
 			}
 
 			if(!@is_dir($statsdir)) mkdir($statsdir);
-			$username = escapeshellcmd($rec['system_user']);
-			$groupname = escapeshellcmd($rec['system_group']);
+			$username = $rec['system_user'];
+			$groupname = $rec['system_group'];
 			chown($statsdir, $username);
 			chgrp($statsdir, $groupname);
 			if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
@@ -138,7 +138,7 @@ class cronjob_awstats extends cronjob {
 			// awstats_buildstaticpages.pl -update -config=mydomain.com -lang=en -dir=/var/www/domain.com/'.$web_folder.'/stats -awstatsprog=/path/to/awstats.pl
 			// $command = "$awstats_buildstaticpages_pl -update -config='$domain' -lang=".$conf['language']." -dir='$statsdir' -awstatsprog='$awstats_pl'";
 
-			$command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang=".$conf['language']." -dir='$statsdir' -awstatsprog='$awstats_pl'";
+			$command = escapeshellcmd($awstats_buildstaticpages_pl) . ' -month=' . escapeshellarg($awmonth) . ' -year=' . escapeshellarg($awyear) . ' -update -config=' . escapeshellarg($domain) . ' -lang=' . escapeshellarg($conf['language']) . ' -dir=' . escapeshellarg($statsdir) . ' -awstatsprog=' . escapeshellarg($awstats_pl);
 
 			if (date("d") == 2) {
 				$awmonth = date("m")-1;
@@ -178,7 +178,7 @@ class cronjob_awstats extends cronjob {
 				chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
 			}
 
-			exec('chown -R '.$username.':'.$groupname.' '.$statsdir);
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
 		}
 
 
diff --git a/server/lib/classes/cron.d/150-webalizer.inc.php b/server/lib/classes/cron.d/150-webalizer.inc.php
index 0ae05dd682..5d341cefe7 100644
--- a/server/lib/classes/cron.d/150-webalizer.inc.php
+++ b/server/lib/classes/cron.d/150-webalizer.inc.php
@@ -102,11 +102,11 @@ class cronjob_webalizer extends cronjob {
 				}
 			}
 
-			$domain = escapeshellcmd($rec['domain']);
-			$statsdir = escapeshellcmd($rec['document_root'].'/'.(($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web').'/stats');
+			$domain = $rec['domain'];
+			$statsdir = $rec['document_root'].'/'.(($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web').'/stats';
 			$webalizer = '/usr/bin/webalizer';
 			$webalizer_conf_main = '/etc/webalizer/webalizer.conf';
-			$webalizer_conf = escapeshellcmd($rec['document_root'].'/log/webalizer.conf');
+			$webalizer_conf = $rec['document_root'].'/log/webalizer.conf';
 
 			if(is_file($statsdir.'/index.php')) unlink($statsdir.'/index.php');
 
@@ -122,13 +122,13 @@ class cronjob_webalizer extends cronjob {
 
 
 			if(!@is_dir($statsdir)) mkdir($statsdir);
-			$username = escapeshellcmd($rec['system_user']);
-			$groupname = escapeshellcmd($rec['system_group']);
+			$username = $rec['system_user'];
+			$groupname = $rec['system_group'];
 			chown($statsdir, $username);
 			chgrp($statsdir, $groupname);
-			exec("$webalizer -c $webalizer_conf -n $domain -s $domain -r $domain -q -T -p -o $statsdir $logfile");
+			$app->system->exec_safe("$webalizer -c ? -n ? -s ? -r ? -q -T -p -o ? ?", $webalizer_conf, $domain, $domain, $domain, $statsdir, $logfile);
 			
-			exec('chown -R '.$username.':'.$groupname.' '.$statsdir);
+			exec('chown -R ?:? ?', $username, $groupname, $statsdir);
 		}
 
 
diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index 6f38f0b403..d1dbf94291 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -54,7 +54,7 @@ class cronjob_logfiles extends cronjob {
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		
 		if($server_config['log_retention'] > 0) {
-			$max_syslog = $server_config['log_retention'];
+			$max_syslog = $app->functions->intval($server_config['log_retention']);
 		} else {
 			$max_syslog = 10;
 		}
@@ -113,18 +113,18 @@ class cronjob_logfiles extends cronjob {
 			}
 
 			$yesterday2 = date('Ymd', time() - 86400*2);
-			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday2.'-access.log');
+			$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday2.'-access.log';
 
 			//* Compress logfile
 			if(@is_file($logfile)) {
 				// Compress yesterdays logfile
-				exec("gzip -c $logfile > $logfile.gz");
+				$app->system->exec_safe("gzip -c ? > ?", $logfile, $logfile . '.gz');
 				unlink($logfile);
 			}
 			
 			$cron_logfiles = array('cron.log', 'cron_error.log', 'cron_wget.log');
 			foreach($cron_logfiles as $cron_logfile) {
-				$cron_logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/' . $cron_logfile);
+				$cron_logfile = $rec['document_root'].'/' . $log_folder . '/' . $cron_logfile;
 				
 				// rename older files (move up by one)
 				$num = $log_retention;
@@ -135,8 +135,8 @@ class cronjob_logfiles extends cronjob {
 				
 				// compress current logfile
 				if(is_file($cron_logfile)) {
-					exec("gzip -c $cron_logfile > $cron_logfile.1.gz");
-					exec("cat /dev/null > $cron_logfile");
+					$app->system->exec_safe("gzip -c ? > ?", $cron_logfile, $cron_logfile . '.1.gz');
+					$app->system->exec_safe("cat /dev/null > ?", $cron_logfile);
 				}
 				// remove older logs
 				$num = $log_retention;
@@ -156,8 +156,8 @@ class cronjob_logfiles extends cronjob {
 			}
 			// compress current logfile
 			if(is_file($error_logfile)) {
-				exec("gzip -c $error_logfile > $error_logfile.1.gz");
-				exec("cat /dev/null > $error_logfile");
+				$app->system->exec_safe("gzip -c ? > ?", $error_logfile, $error_logfile . '.1.gz');
+				$app->system->exec_safe("cat /dev/null > ?", $error_logfile);
 			}
 
 			// delete logfiles after x days (default 10)
@@ -175,7 +175,7 @@ class cronjob_logfiles extends cronjob {
 		//* Delete old logfiles in /var/log/ispconfig/httpd/ that were created by vlogger for the hostname of the server
 		exec('hostname -f', $tmp_hostname);
 		if($tmp_hostname[0] != '' && is_dir('/var/log/ispconfig/httpd/'.$tmp_hostname[0])) {
-			exec('cd /var/log/ispconfig/httpd/'.$tmp_hostname[0]."; find . -mtime +$max_syslog -name '*.log' | xargs rm > /dev/null 2> /dev/null");
+			$app->system->exec_safe("cd ?; find . -mtime +$max_syslog -name '*.log' | xargs rm > /dev/null 2> /dev/null", '/var/log/ispconfig/httpd/'.$tmp_hostname[0]);
 		}
 		unset($tmp_hostname);
 
@@ -195,8 +195,8 @@ class cronjob_logfiles extends cronjob {
 			}
 			// compress current logfile
 			if(is_file($ispconfig_logfile)) {
-				exec("gzip -c $ispconfig_logfile > $ispconfig_logfile.1.gz");
-				exec("cat /dev/null > $ispconfig_logfile");
+				$app->system->exec_safe("gzip -c ? > ?", $ispconfig_logfile, $ispconfig_logfile . '.1.gz');
+				$app->system->exec_safe("cat /dev/null > ?", $ispconfig_logfile);
 			}
 			// remove older logs
 			$num = $max_syslog;
@@ -215,9 +215,9 @@ class cronjob_logfiles extends cronjob {
 		$app->uses('system');
 		if(is_array($records)) {
 			foreach($records as $rec){
-				$tmp_path = realpath(escapeshellcmd($rec['document_root'].'/tmp'));
+				$tmp_path = realpath($rec['document_root'].'/tmp');
 				if($tmp_path != '' && strlen($tmp_path) > 10 && is_dir($tmp_path) && $app->system->is_user($rec['system_user'])){
-					exec('cd '.$tmp_path."; find . -mtime +1 -name 'sess_*' | grep -v -w .no_delete | xargs rm > /dev/null 2> /dev/null");
+					exec("cd ?; find . -mtime +1 -name 'sess_*' | grep -v -w .no_delete | xargs rm > /dev/null 2> /dev/null", $tmp_path);
 				}
 			}
 		}
diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index 77b355fe6e..579e0174ba 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -69,9 +69,9 @@ class cronjob_backup extends cronjob {
 			}
 
 			if(!is_dir($backup_dir)) {
-				mkdir(escapeshellcmd($backup_dir), $backup_dir_permissions, true);
+				mkdir($backup_dir, $backup_dir_permissions, true);
 			} else {
-				chmod(escapeshellcmd($backup_dir), $backup_dir_permissions);
+				chmod($backup_dir, $backup_dir_permissions);
 			}
             $run_backups = true;
             //* mount backup directory, if necessary
@@ -127,16 +127,20 @@ class cronjob_backup extends cronjob {
 							if($backup_mode == 'userzip') {
 								//* Create a .zip backup as web user and include also files owned by apache / nginx user
 								$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.zip';
-								exec('cd '.escapeshellarg($web_path).' && sudo -u '.escapeshellarg($web_user).' find . -group '.escapeshellarg($web_group).' -print 2> /dev/null | zip -b '.escapeshellarg($backup_tmp).' --exclude=./backup\*'.$backup_excludes.' --symlinks '.escapeshellarg($web_backup_dir.'/'.$web_backup_file).' -@', $tmp_output, $retval);
-								if($retval == 0 || $retval == 12) exec('cd '.escapeshellarg($web_path).' && sudo -u '.escapeshellarg($web_user).' find . -user '.escapeshellarg($http_server_user).' -print 2> /dev/null | zip -b '.escapeshellarg($backup_tmp).' --exclude=./backup\*'.$backup_excludes.' --update --symlinks '.escapeshellarg($web_backup_dir.'/'.$web_backup_file).' -@', $tmp_output, $retval);
+								$app->system->exec_safe('cd ? && sudo -u ? find . -group ? -print 2> /dev/null | zip -b ? --exclude=./backup\*'.$backup_excludes.' --symlinks ? -@', $web_path, $web_user, $web_group, $backup_tmp, $web_backup_dir.'/'.$web_backup_file);
+								$retval = $app->system->last_exec_retcode();
+								if($retval == 0 || $retval == 12) $app->system->exec_safe('cd ? && sudo -u ? find . -user ? -print 2> /dev/null | zip -b ? --exclude=./backup\*'.$backup_excludes.' --update --symlinks ? -@', $web_path, $web_user, $http_server_user, $backup_tmp, $web_backup_dir.'/'.$web_backup_file);
+								$retval = $app->system->last_exec_retcode();
 							} else {
 								//* Create a tar.gz backup as root user
 								$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.tar.gz';
 								if ($use_pigz) {
-									exec('tar pcf - --directory '.escapeshellarg($web_path).' . --exclude=./backup\*'.$backup_excludes.' | pigz > '.escapeshellarg($web_backup_dir.'/'.$web_backup_file), $tmp_output, $retval);
+									$app->system->exec_safe('tar pcf - --directory ? . --exclude=./backup\*'.$backup_excludes.' | pigz > ?', $web_path, $web_backup_dir.'/'.$web_backup_file);
+									$retval = $app->system->last_exec_retcode();
 								} else {
-									exec('tar pczf '.escapeshellarg($web_backup_dir.'/'.$web_backup_file).' --exclude=./backup\*'.$backup_excludes.' --directory '.escapeshellarg($web_path).' .', $tmp_output, $retval);
-}
+									$app->system->exec_safe('tar pczf ? --exclude=./backup\*'.$backup_excludes.' --directory ? .', $web_backup_dir.'/'.$web_backup_file, $web_path);
+									$retval = $app->system->last_exec_retcode();
+								}
 							}
 							if($retval == 0 || ($backup_mode != 'userzip' && $retval == 1) || ($backup_mode == 'userzip' && $retval == 12)) { // tar can return 1, zip can return 12(due to harmless warings) and still create valid backups  
 								if(is_file($web_backup_dir.'/'.$web_backup_file)){
@@ -256,13 +260,16 @@ class cronjob_backup extends cronjob {
 							$db_id = $rec['database_id'];
 							$db_name = $rec['database_name'];
 							$db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql';
-							//$command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
-							$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." -c --add-drop-table --create-options --quick --max_allowed_packet=512M ".$mysqldump_routines." --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
-							exec($command, $tmp_output, $retval);
-
+							$command = "mysqldump -h ? -u ? -p? -c --add-drop-table --create-options --quick --max_allowed_packet=512M ".$mysqldump_routines." --result-file=? ?";
+							$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $db_backup_dir.'/'.$db_backup_file, $db_name);
+							$retval = $app->system->last_exec_retcode();
+							
 							//* Compress the backup with gzip / pigz
-							if($retval == 0) exec("$zip_cmd -c '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file)."' > '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".gz'", $tmp_output, $retval);
-
+							if($retval == 0) {
+								$app->system->exec_safe("$zip_cmd -c ? > ?", $db_backup_dir.'/'.$db_backup_file, $db_backup_dir.'/'.$db_backup_file . '.gz');
+								$retval = $app->system->last_exec_retcode();
+							}
+							
 							if($retval == 0){
 								if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')){
 									chmod($db_backup_dir.'/'.$db_backup_file.'.gz', 0750);
diff --git a/server/lib/classes/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php
index b05caf70d7..6cd689edca 100644
--- a/server/lib/classes/cron.d/500-backup_mail.inc.php
+++ b/server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -122,24 +122,28 @@ class cronjob_backup_mail extends cronjob {
 						if ($rec['maildir_format'] == 'mdbox') {
 							if (empty($this->tmp_backup_dir)) $this->tmp_backup_dir = $rec['maildir'];
 							// Create temporary backup-mailbox
-							exec("su -c 'dsync backup -u \"".$rec["email"]."\" mdbox:".$this->tmp_backup_dir."/backup'", $tmp_output, $retval);
+							exec("su -c ?", 'dsync backup -u "'.$rec["email"].'" mdbox:' . $this->tmp_backup_dir . '/backup');
 		
 							if($backup_mode == 'userzip') {
 								$mail_backup_file.='.zip';
-								exec('cd '.$this->tmp_backup_dir.' && zip '.$mail_backup_dir.'/'.$mail_backup_file.' -b '.escapeshellarg($backup_tmp).' -r backup > /dev/null && rm -rf backup', $tmp_output, $retval);
-							}
-							else {
+								$app->system->exec_safe('cd ? && zip ? -b ? -r backup > /dev/null && rm -rf backup', $this->tmp_backup_dir, $mail_backup_dir.'/'.$mail_backup_file, $backup_tmp);
+								$retval = $app->system->last_exec_retcode();
+							} else {
 								$mail_backup_file.='.tar.gz';
 								if ($use_pigz) {
-									exec('tar pcf - --directory '.escapeshellarg($this->tmp_backup_dir).' backup | pigz > '.$mail_backup_dir.'/'.$mail_backup_file.' && rm -rf '.$this->tmp_backup_dir.'/backup', $tmp_output, $retval);
+									$app->system->exec_safe('tar pcf - --directory ? backup | pigz > ? && rm -rf ?', $this->tmp_backup_dir, $mail_backup_dir.'/'.$mail_backup_file, $this->tmp_backup_dir.'/backup');
+									$retval = $app->system->last_exec_retcode();
 								} else {
-									exec(escapeshellcmd('tar pczf '.$mail_backup_dir.'/'.$mail_backup_file.' --directory '.$this->tmp_backup_dir.' backup && rm -rf '.$this->tmp_backup_dir.'/backup'), $tmp_output, $retval);
+									$app->system->exec_safe('tar pczf ? --directory ? backup && rm -rf ?', $mail_backup_dir.'/'.$mail_backup_file, $this->tmp_backup_dir, $this->tmp_backup_dir.'/backup');
+									$retval = $app->system->last_exec_retcode();
 								}
 							}
 							
 							if ($retval != 0) {
 								// Cleanup
-								if (file_exists($this->tmp_backup_dir.'/backup')) exec('rm -rf '.$this->tmp_backup_dir.'/backup');
+								if(file_exists($this->tmp_backup_dir . '/backup')) {
+									$app->system->exec_safe('rm -rf ?', $this->tmp_backup_dir . '/backup');
+								}
 							}
 						}
 						else {
@@ -154,15 +158,17 @@ class cronjob_backup_mail extends cronjob {
 							//* create archives
 							if($backup_mode == 'userzip') {
 								$mail_backup_file.='.zip';
-								exec('cd '.$domain_dir.' && zip '.$mail_backup_dir.'/'.$mail_backup_file.' -b '.escapeshellarg($backup_tmp).' -r '.$source_dir.' > /dev/null', $tmp_output, $retval);
+								$app->system->exec_safe('cd ? && zip ? -b ? -r ? > /dev/null', $domain_dir, $mail_backup_dir.'/'.$mail_backup_file, $backup_tmp, $source_dir);
+								$retval = $app->system->last_exec_retcode();
 							} else {
 								/* Create a tar.gz backup */
 								$mail_backup_file.='.tar.gz';
 								if ($use_pigz) {
-									exec('tar pcf - --directory '.escapeshellarg($domain_dir).' '.escapeshellarg($source_dir).' | pigz > '.$mail_backup_dir.'/'.$mail_backup_file, $tmp_output, $retval);
+									$app->system->exec_safe('tar pcf - --directory ? ? | pigz > ?', $domain_dir, $source_dir, $mail_backup_dir.'/'.$mail_backup_file);
 								} else {
-									exec(escapeshellcmd('tar pczf '.$mail_backup_dir.'/'.$mail_backup_file.' --directory '.$domain_dir.' '.$source_dir), $tmp_output, $retval);
+									$app->system->exec_safe('tar pczf ? --directory ? ?', $mail_backup_dir.'/'.$mail_backup_file, $domain_dir, $source_dir);
 								}
+								$retval = $app->system->last_exec_retcode();
 							}
 						}
 						
@@ -181,7 +187,9 @@ class cronjob_backup_mail extends cronjob {
 							if(is_file($mail_backup_dir.'/'.$mail_backup_file)) unlink($mail_backup_dir.'/'.$mail_backup_file);
 							// And remove backup-mdbox
 							if ($rec['maildir_format'] == 'mdbox') {
-								if(file_exists($rec['maildir'].'/backup'))  exec("su -c 'rm -rf ".$rec['maildir']."/backup'");
+								if(file_exists($rec['maildir'] . '/backup')) {
+									$app->system->exec_safe('rm -rf ?', $rec['maildir'] . '/backup');
+								}
 							}
 							$app->log($mail_backup_file.' NOK:'.implode('',$tmp_output), LOGLEVEL_WARN);
 						}
diff --git a/server/lib/classes/cron.d/600-purge_mailboxes.inc.php b/server/lib/classes/cron.d/600-purge_mailboxes.inc.php
index 59775fb7be..451eb56642 100644
--- a/server/lib/classes/cron.d/600-purge_mailboxes.inc.php
+++ b/server/lib/classes/cron.d/600-purge_mailboxes.inc.php
@@ -58,7 +58,7 @@ class cronjob_purge_mailboxes extends cronjob {
 		
 		if(is_array($records)) {
 			foreach($records as $rec){
-				exec("su -c 'doveadm purge -u \"".$rec["email"]."\"'");
+				$app->system->exec_safe("su -c ?", 'doveadm purge -u "' . $rec["email"] . '"');
 			}
 		}
 
diff --git a/server/lib/classes/cron.d/900-letsencrypt.inc.php b/server/lib/classes/cron.d/900-letsencrypt.inc.php
index 30a23fe973..3e2c9190c6 100644
--- a/server/lib/classes/cron.d/900-letsencrypt.inc.php
+++ b/server/lib/classes/cron.d/900-letsencrypt.inc.php
@@ -66,7 +66,7 @@ class cronjob_letsencrypt extends cronjob {
 					} else {
 						$marker_file = '/usr/local/ispconfig/server/le.restart';
 						$cmd = "echo '1' > " . $marker_file;
-						exec($letsencrypt . ' -n renew --post-hook ' . escapeshellarg($cmd));
+						$app->system->exec_safe($letsencrypt . ' -n renew --post-hook ?', $cmd);
 						if(file_exists($marker_file) && trim(file_get_contents($marker_file)) == '1') {
 							unlink($marker_file);
 							$app->services->restartServiceDelayed('httpd', 'force-reload');
diff --git a/server/lib/classes/functions.inc.php b/server/lib/classes/functions.inc.php
index e36ed5b04f..1d9dd67569 100644
--- a/server/lib/classes/functions.inc.php
+++ b/server/lib/classes/functions.inc.php
@@ -425,9 +425,9 @@ class functions {
 		if(file_exists($id_rsa_file)) unset($id_rsa_file);
 		if(file_exists($id_rsa_pub_file)) unset($id_rsa_pub_file);
 		if(!file_exists($id_rsa_file) && !file_exists($id_rsa_pub_file)) {
-			exec('ssh-keygen -t rsa -C '.$username.'-rsa-key-'.time().' -f '.$id_rsa_file.' -N ""');
+			$app->system->exec_safe('ssh-keygen -t rsa -C ? -f ? -N ""', $username.'-rsa-key-'.time(), $id_rsa_file);
 			$app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", $app->system->file_get_contents($id_rsa_file), $app->system->file_get_contents($id_rsa_pub_file), $client_id);
-			exec('rm -f '.$id_rsa_file.' '.$id_rsa_pub_file);
+			$app->system->exec_safe('rm -f ? ?', $id_rsa_file, $id_rsa_pub_file);
 		} else {
 			$app->log("Failed to create SSH keypair for ".$username, LOGLEVEL_WARN);
 		}
diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 583e1c25bb..62080e29b4 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -389,7 +389,7 @@ class letsencrypt {
 			}
 
 			if(@is_link($key_file)) $app->system->unlink($key_file);
-			if(@file_exists($key_tmp_file)) exec("ln -s ".escapeshellcmd($key_tmp_file)." ".escapeshellcmd($key_file));
+			if(@file_exists($key_tmp_file)) $app->system->exec_safe("ln -s ? ?", $key_tmp_file, $key_file);
 
 			if(is_file($crt_file)) {
 				$app->system->copy($crt_file, $crt_file.'.old.'.$date);
@@ -398,7 +398,7 @@ class letsencrypt {
 			}
 
 			if(@is_link($crt_file)) $app->system->unlink($crt_file);
-			if(@file_exists($crt_tmp_file))exec("ln -s ".escapeshellcmd($crt_tmp_file)." ".escapeshellcmd($crt_file));
+			if(@file_exists($crt_tmp_file))$app->system->exec_safe("ln -s ? ?", $crt_tmp_file, $crt_file);
 
 			if(is_file($bundle_file)) {
 				$app->system->copy($bundle_file, $bundle_file.'.old.'.$date);
@@ -407,7 +407,7 @@ class letsencrypt {
 			}
 
 			if(@is_link($bundle_file)) $app->system->unlink($bundle_file);
-			if(@file_exists($bundle_tmp_file)) exec("ln -s ".escapeshellcmd($bundle_tmp_file)." ".escapeshellcmd($bundle_file));
+			if(@file_exists($bundle_tmp_file)) $app->system->exec_safe("ln -s ? ?", $bundle_tmp_file, $bundle_file);
 			
 			return true;
 		} else {
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index 1d3dab290b..fefdbcd681 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -593,13 +593,12 @@ class monitor_tools {
 
 		// Getting the logfile content
 		if ($logfile != '') {
-			$logfile = escapeshellcmd($logfile);
 			if (stristr($logfile, ';') or substr($logfile, 0, 9) != '/var/log/' or stristr($logfile, '..')) {
 				$log = 'Logfile path error.';
 			} else {
 				$log = '';
 				if (is_readable($logfile)) {
-					$fd = popen('tail -n 100 ' . $logfile, 'r');
+					$fd = popen('tail -n 100 ' . escapeshellarg($logfile), 'r');
 					if ($fd) {
 						while (!feof($fd)) {
 							$log .= fgets($fd, 4096);
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 5c277ada1a..9f3e963eea 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -37,6 +37,9 @@ class system{
 	var $min_uid = 500;
 	var $min_gid = 500;
 	
+	private $_last_exec_out = null;
+	private $_last_exec_retcode = null;
+	
 	/**
 	 * Construct for this class
 	 *
@@ -716,8 +719,10 @@ class system{
 	function posix_getgrnam($group) {
 		if(!function_exists('posix_getgrnam')){
 			$group_datei = $this->server_conf['group_datei'];
-			$cmd = 'grep -m 1 "^'.$group.':" '.$group_datei;
-			exec($cmd, $output, $return_var);
+			$cmd = 'grep -m 1 ? ?';
+			$this->exec_safe($cmd, '^'.$group.':', $group_datei);
+			$output = $this->last_exec_out();
+			$return_var = $this->last_exec_retcode();
 			if($return_var != 0 || !$output[0]) return false;
 			list($f1, $f2, $f3, $f4) = explode(':', $output[0]);
 			$f2 = trim($f2);
@@ -1073,10 +1078,10 @@ class system{
 		} else { // Linux
 			if(substr($dist, 0, 4) == 'suse'){
 				if($action == 'on'){
-					exec("chkconfig --add $service &> /dev/null");
+					$this->exec_safe("chkconfig --add ? &> /dev/null", $service);
 				}
 				if($action == 'off'){
-					exec("chkconfig --del $service &> /dev/null");
+					$this->exec_safe("chkconfig --del ? &> /dev/null", $service);
 				}
 			} else {
 				$runlevels = explode(',', $rl);
@@ -1375,7 +1380,7 @@ class system{
 					if(!empty($ifconfig['IP'])){
 						foreach($ifconfig['IP'] as $key => $val){
 							if(!strstr($val, 'lo') && !strstr($val, 'lp') && strstr($val, $main_interface)){
-								exec('ifconfig '.$val.' down &> /dev/null');
+								$this->exec_safe('ifconfig ? down &> /dev/null', $val);
 								unset($ifconfig['INTERFACE'][$val]);
 							}
 						}
@@ -1391,7 +1396,7 @@ class system{
 									$i = -1;
 								}
 							}
-							exec('ifconfig '.$new_interface.' '.$to.' netmask '.$this->server_conf['server_netzmaske'].' up &> /dev/null');
+							$this->exec_safe('ifconfig ? ? netmask ? up &> /dev/null', $new_interface, $to, $this->server_conf['server_netzmaske']);
 							$ifconfig['INTERFACE'][$new_interface] = $to;
 						}
 					}
@@ -1627,15 +1632,6 @@ class system{
 
 		chmod($dir, 0700);
 
-		/*
-		if($user != '' && $this->is_user($user) && $user != 'root') {
-			$user = escapeshellcmd($user);
-			// I assume that the name of the (vmail group) is the same as the name of the mail user in ISPConfig 3
-			$group = $user;
-			exec("chown $user:$group $dir $dir_cur $dir_new $dir_tmp");
-		}
-		*/
-
 		//* Add the subfolder to the subscriptions and courierimapsubscribed files
 		if($subfolder != '') {
 			
@@ -1698,7 +1694,9 @@ class system{
 
 	//* Check if a application is installed
 	function is_installed($appname) {
-		exec('which '.escapeshellcmd($appname).' 2> /dev/null', $out, $returncode);
+		$this->exec_safe('which ? 2> /dev/null', $appname);
+		$out = $this->last_exec_out();
+		$returncode = $this->last_exec_retcode();
 		if(isset($out[0]) && stristr($out[0], $appname) && $returncode == 0) {
 			return true;
 		} else {
@@ -1720,10 +1718,10 @@ class system{
 
 		if($protect == true && $web_config['web_folder_protection'] == 'y') {
 			//* Add protection
-			if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) exec('chattr +i '.escapeshellcmd($document_root));
+			if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) $this->exec_safe('chattr +i ?', $document_root);
 		} else {
 			//* Remove protection
-			if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) exec('chattr -i '.escapeshellcmd($document_root));
+			if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) $this->exec_safe('chattr -i ?', $document_root);
 		}
 	}
 
@@ -1835,8 +1833,9 @@ class system{
 
 	function is_mounted($mountpoint){
 		//$cmd = 'df 2>/dev/null | grep " '.$mountpoint.'$"';
-		$cmd = 'mount 2>/dev/null | grep " on '.$mountpoint.' type "';
-		exec($cmd, $output, $return_var);
+		$cmd = 'mount 2>/dev/null | grep ?';
+		exec($cmd, ' on '. $mountpoint . ' type ');
+		$return_var = $this->last_exec_retcode();
 		return $return_var == 0 ? true : false;
 	}
 
@@ -1908,7 +1907,8 @@ class system{
 		// systemd
 		if(is_executable('/bin/systemd') || is_executable('/usr/bin/systemctl')){
 			if ($check_service) {
-				exec("systemctl is-enabled ".$servicename." 2>&1", $out, $ret_val);
+				$this->exec_safe("systemctl is-enabled ? 2>&1", $servicename);
+				$ret_val = $this->last_exec_retcode();
 			}
 			if ($ret_val == 0 || !$check_service) {
 				return 'systemctl '.$action.' '.$servicename.'.service';
@@ -2049,6 +2049,42 @@ class system{
 		return true;
 	}
 	
+	public function last_exec_out() {
+		return $this->_last_exec_out;
+	}
+	
+	public function last_exec_retcode() {
+		return $this->_last_exec_retcode;
+	}
+	
+	public function exec_safe($cmd) {
+		$arg_count = func_num_args();
+		if($arg_count > 1) {
+			$args = func_get_args();
+
+			$pos = 0;
+			$a = 0;
+			foreach($args as $value) {
+				$a++;
+				
+				$pos = strpos($cmd, '?', $pos);
+				if($pos === false) {
+					break;
+				}
+				$value = escapeshellarg($value);
+				$cmd = substr_replace($cmd, $value, $pos, 1);
+				$pos += strlen($value);
+			}
+		}
+		
+		$this->_last_exec_out = null;
+		$this->_last_exec_retcode = null;
+		return exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
+	}
+	
+	public function system_safe($cmd) {
+		call_user_func_array(array($this, 'exec_safe'), func_get_args());
+		return implode("\n", $this->_last_exec_out);
+	}
+	
 }
-
-?>
diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php
index 807de5060a..e0ce33a5e4 100644
--- a/server/mods-available/remoteaction_core_module.inc.php
+++ b/server/mods-available/remoteaction_core_module.inc.php
@@ -152,10 +152,10 @@ class remoteaction_core_module {
 					$template_cache_dir = '/vz/template/cache/';
 					$template_name = escapeshellcmd($parts[1]);
 					if($veid > 0 && $template_name != '' && is_dir($template_cache_dir)) {
-						$command = "vzdump --suspend --compress --stdexcludes --dumpdir $template_cache_dir $veid";
-						exec($command);
-						exec("mv ".$template_cache_dir."vzdump-openvz-".$veid."*.tgz ".$template_cache_dir.$template_name.".tar.gz");
-						exec("rm -f ".$template_cache_dir."vzdump-openvz-".$veid."*.log");
+						$command = "vzdump --suspend --compress --stdexcludes --dumpdir ? ?";
+						$app->system->exec_safe($command, $template_cache_dir, $veid);
+						$app->system->exec_safe("mv ?*.tgz ?", $template_cache_dir."vzdump-openvz-".$veid, $template_cache_dir.$template_name.".tar.gz");
+						$app->system->exec_safe("rm -f ?*.log", $template_cache_dir."vzdump-openvz-".$veid);
 					}
 					$this->_actionDone($action['action_id'], 'ok');
 					/* this action takes so much time,
@@ -191,7 +191,8 @@ class remoteaction_core_module {
 	}
 
 	private function _doIspCUpdate($action) {
-
+		global $app;
+		
 		// Ensure that this code is not executed twice as this would cause a loop in case of a failure
 		$this->_actionDone($action['action_id'], 'ok');
 
@@ -210,14 +211,14 @@ class remoteaction_core_module {
 		chdir("/tmp");
 
 		/* delete the old files (if there are any...) */
-		exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz");
+		$app->system->exec_safe("rm ?", "/tmp/ISPConfig-" . $new_version . ".tar.gz");
 		exec("rm /tmp/ispconfig3_install -R");
 
 		/* get the newest version */
-		exec("wget http://www.ispconfig.org/downloads/ISPConfig-" . $new_version . ".tar.gz");
+		$app->system->exec_safe("wget ?", "http://www.ispconfig.org/downloads/ISPConfig-" . $new_version . ".tar.gz");
 
 		/* extract the files */
-		exec("tar xvfz ISPConfig-" . $new_version . ".tar.gz");
+		$app->system->exec_safe("tar xvfz ?", "ISPConfig-" . $new_version . ".tar.gz");
 
 		/*
 		 * Initialize the automated update
@@ -229,7 +230,7 @@ class remoteaction_core_module {
 		/*
 		 * do some clean-up
 		 */
-		exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz");
+		$app->system->exec_safe("rm ?", "/tmp/ISPConfig-" . $new_version . ".tar.gz");
 
 		/*
 		 * go back to the "old path"
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 7ecbb76109..28a3c4d5d6 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -332,36 +332,38 @@ class apache2_plugin {
 			$ssl_cnf_file = $ssl_dir.'/openssl.conf';
 			$app->system->file_put_contents($ssl_cnf_file, $ssl_cnf);
 
-			$rand_file = escapeshellcmd($rand_file);
-			$key_file2 = escapeshellcmd($key_file2);
+			$rand_file = $rand_file;
+			$key_file2 = $key_file2;
 			$openssl_cmd_key_file2 = $key_file2;
 			if(substr($domain, 0, 2) == '*.' && strpos($key_file2, '/ssl/\*.') !== false) $key_file2 = str_replace('/ssl/\*.', '/ssl/*.', $key_file2); // wildcard certificate
-			$key_file = escapeshellcmd($key_file);
+			$key_file = $key_file;
 			$openssl_cmd_key_file = $key_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($key_file, '/ssl/\*.') !== false) $key_file = str_replace('/ssl/\*.', '/ssl/*.', $key_file); // wildcard certificate
 			$ssl_days = 3650;
-			$csr_file = escapeshellcmd($csr_file);
+			$csr_file = $csr_file;
 			$openssl_cmd_csr_file = $csr_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($csr_file, '/ssl/\*.') !== false) $csr_file = str_replace('/ssl/\*.', '/ssl/*.', $csr_file); // wildcard certificate
-			$config_file = escapeshellcmd($ssl_cnf_file);
-			$crt_file = escapeshellcmd($crt_file);
+			$config_file = $ssl_cnf_file;
+			$crt_file = $crt_file;
 			$openssl_cmd_crt_file = $crt_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($crt_file, '/ssl/\*.') !== false) $crt_file = str_replace('/ssl/\*.', '/ssl/*.', $crt_file); // wildcard certificate
 
 			if(is_file($ssl_cnf_file) && !is_link($ssl_cnf_file)) {
 
-				exec("openssl genrsa -des3 -rand $rand_file -passout pass:$ssl_password -out $openssl_cmd_key_file2 2048");
-				exec("openssl req -new -sha256 -passin pass:$ssl_password -passout pass:$ssl_password -key $openssl_cmd_key_file2 -out $openssl_cmd_csr_file -days $ssl_days -config $config_file");
-				exec("openssl rsa -passin pass:$ssl_password -in $openssl_cmd_key_file2 -out $openssl_cmd_key_file");
+				$app->system->exec_safe("openssl genrsa -des3 -rand ? -passout pass:? -out ? 2048", $rand_file, $ssl_password, $openssl_cmd_key_file2);
+				$app->system->exec_safe("openssl req -new -sha256 -passin pass:? -passout pass:? -key ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $ssl_days, $config_file);
+				$app->system->exec_safe("openssl rsa -passin pass:? -in ? -out ?", $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_key_file);
 
 				if(file_exists($web_config['CA_path'].'/openssl.cnf'))
 				{
-					exec("openssl ca -batch -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file");
+					$app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file);
 					$app->log("Creating CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
-					if (filesize($crt_file)==0 || !file_exists($crt_file)) $app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file", LOGLEVEL_ERROR);
+					if(filesize($crt_file) == 0 || !file_exists($crt_file)) {
+						$app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config " . $web_config['CA_path'] . "/openssl.cnf -passin pass:" . $web_config['CA_pass'] . " -in $openssl_cmd_csr_file", LOGLEVEL_ERROR);
+					}
 				};
 				if (@filesize($crt_file)==0 || !file_exists($crt_file)){
-					exec("openssl req -x509 -passin pass:$ssl_password -passout pass:$ssl_password -key $openssl_cmd_key_file2 -in $openssl_cmd_csr_file -out $openssl_cmd_crt_file -days $ssl_days -config $config_file ");
+					$app->system->exec_safe("openssl req -x509 -passin pass:? -passout pass:? -key ? -in ? -out ? -days ? -config ? ", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $openssl_cmd_crt_file, $ssl_days, $config_file);
 					$app->log("Creating self-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 				};
 
@@ -402,7 +404,8 @@ class apache2_plugin {
 		if($data["new"]["ssl_action"] == 'save') {
 			$tmp = array();
 			$crt_data = '';
-			exec('openssl x509 -noout -text -in '.escapeshellarg($crt_file),$tmp);
+			$app->system->exec_safe('openssl x509 -noout -text -in ?', $crt_file);
+			$tmp = $app->system->last_exec_out();
 			$crt_data = implode("\n",$tmp);
 			if(stristr($crt_data,'.acme.invalid')) {
 				$data["new"]["ssl_action"] = '';
diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php
index b843e3c8a4..41e3cdd82c 100644
--- a/server/plugins-available/apps_vhost_plugin.inc.php
+++ b/server/plugins-available/apps_vhost_plugin.inc.php
@@ -156,11 +156,11 @@ class apps_vhost_plugin {
 				$apps_vhost_ip = $web_config['apps_vhost_ip'].':';
 			}
 
-			$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
+			$socket_dir = $web_config['php_fpm_socket_dir'];
 			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
-			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
+			if(!is_dir($socket_dir)) $app->system->exec_safe('mkdir -p ?', $socket_dir);
 			$fpm_socket = $socket_dir.'apps.sock';
-			$cgi_socket = escapeshellcmd($web_config['nginx_cgi_socket']);
+			$cgi_socket = $web_config['nginx_cgi_socket'];
 
 			$content = str_replace('{apps_vhost_ip}', $apps_vhost_ip, $content);
 			$content = str_replace('{apps_vhost_port}', $web_config['apps_vhost_port'], $content);
-- 
GitLab


From 0c815b5661849d3755f62fd20a249e95d6b9328f Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Mon, 29 Jul 2019 09:35:06 +0200
Subject: [PATCH 070/571] add parameter-option to ispconfig_patch for
 unattended patches

---
 server/scripts/ispconfig_patch | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/server/scripts/ispconfig_patch b/server/scripts/ispconfig_patch
index 6ed2a3f5ae..a3361f507d 100644
--- a/server/scripts/ispconfig_patch
+++ b/server/scripts/ispconfig_patch
@@ -87,6 +87,13 @@ function is_installed($appname) {
 	}
 }
 
+$cmd_opt = getopt('', array('patch_id::'));
+$auto = false;
+if(isset($cmd_opt['patch_id'])) {
+	$patch_id = $cmd_opt['patch_id'];
+	$auto = true;
+}
+
 echo "\n\n".str_repeat('-',80)."\n";
 echo " _____ ___________   _____              __ _       
 |_   _/  ___| ___ \ /  __ \            / _(_)      
@@ -98,14 +105,14 @@ echo " _____ ___________   _____              __ _
                                              |___/ ";
 echo "\n".str_repeat('-',80)."\n";
 echo "\n\n>> Patch tool  \n\n";
-echo "Please enter the patch id that you want to be applied to your ISPConfig installation.\nPlease be aware that we take NO responsibility that this will work for you.\nOnly use patches if you know what you are doing.\n\n";
+if(!$auto) echo "Please enter the patch id that you want to be applied to your ISPConfig installation.\nPlease be aware that we take NO responsibility that this will work for you.\nOnly use patches if you know what you are doing.\n\n";
 
 if(!is_installed('patch')) {
 	swriteln("The program 'patch' is missing on your server. Please install it and try again.");
 	exit;
 }
 
-$patch_id = simple_query('Enter patch id', false, '');
+if(!$auto) $patch_id = simple_query('Enter patch id', false, '');
 if($patch_id == '') {
     swriteln("Patch terminated by user.\n");
     die();
@@ -122,7 +129,7 @@ if(!$patch_data) {
 
 $patch_text = @file_get_contents('http://ispconfig.org/downloads/patches/' . $patch_id . '.txt');
 if($patch_text) {
-    $ok = simple_query("Patch description:\n".str_repeat("-", 80)."\n".$patch_text."\n".str_repeat("-", 80)."\nDo you really want to apply this patch now?", array('y','n'), 'y');
+    if($auto) $ok = 'y'; else $ok = simple_query("Patch description:\n".str_repeat("-", 80)."\n".$patch_text."\n".str_repeat("-", 80)."\nDo you really want to apply this patch now?", array('y','n'), 'y');
     if($ok != 'y') {
         swriteln("Patch terminated by user.\n");
         die();
@@ -140,4 +147,4 @@ unlink($temp_file);
 
 exit;
 
-?>
\ No newline at end of file
+?>
-- 
GitLab


From e2a6024bc078e75b3e554972fd4952f42071df9a Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 30 Jul 2019 14:08:34 +0200
Subject: [PATCH 071/571] Implement a more secure way to use exec, system and
 shell_exec, fixes #5355

---
 interface/lib/classes/system.inc.php          |   4 +
 server/lib/classes/aps_installer.inc.php      |   1 -
 .../lib/classes/cron.d/150-webalizer.inc.php  |   4 +-
 .../lib/classes/cron.d/200-logfiles.inc.php   |   4 +-
 .../classes/cron.d/500-backup_mail.inc.php    |   6 +-
 server/lib/classes/system.inc.php             |  14 +-
 .../remoteaction_core_module.inc.php          |   2 +-
 .../plugins-available/apache2_plugin.inc.php  | 281 ++++++++----------
 .../apps_vhost_plugin.inc.php                 |   4 +-
 .../plugins-available/backup_plugin.inc.php   |  56 ++--
 server/plugins-available/bind_plugin.inc.php  |  37 ++-
 .../cron_jailkit_plugin.inc.php               |  72 ++---
 server/plugins-available/cron_plugin.inc.php  |  24 +-
 .../plugins-available/firewall_plugin.inc.php |  28 +-
 .../plugins-available/getmail_plugin.inc.php  |   4 +-
 server/plugins-available/mail_plugin.inc.php  | 137 +++------
 .../mail_plugin_dkim.inc.php                  |   3 +-
 .../plugins-available/mailman_plugin.inc.php  |   8 +-
 .../mysql_clientdb_plugin.inc.php             |  22 +-
 .../network_settings_plugin.inc.php           |   4 +-
 server/plugins-available/nginx_plugin.inc.php | 256 ++++++++--------
 .../nginx_reverseproxy_plugin.inc.php         |  35 +--
 .../plugins-available/openvz_plugin.inc.php   |  20 +-
 .../postfix_server_plugin.inc.php             |  12 +-
 .../plugins-available/powerdns_plugin.inc.php |  12 +-
 .../shelluser_base_plugin.inc.php             | 134 ++++-----
 .../shelluser_jailkit_plugin.inc.php          |  97 ++----
 .../software_update_plugin.inc.php            |  33 +-
 server/plugins-available/xmpp_plugin.inc.php  |  12 +-
 29 files changed, 574 insertions(+), 752 deletions(-)

diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index d4d9cccefe..ede53034d3 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -65,6 +65,10 @@ class system {
 	
 	public function exec_safe($cmd) {
 		$arg_count = func_num_args();
+		if($arg_count != substr_count($cmd, '?') + 1) {
+			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
+			return false;
+		}
 		if($arg_count > 1) {
 			$args = func_get_args();
 
diff --git a/server/lib/classes/aps_installer.inc.php b/server/lib/classes/aps_installer.inc.php
index 2995b01e07..922f32e612 100644
--- a/server/lib/classes/aps_installer.inc.php
+++ b/server/lib/classes/aps_installer.inc.php
@@ -544,7 +544,6 @@ class ApsInstaller extends ApsBase
 			chmod($this->local_installpath.'install_scripts/'.$cfgscript, 0755);
 
 			// Change to the install folder (import for the exec() below!)
-			//exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
 			chdir($this->local_installpath.'install_scripts/');
 
 			// Set the enviroment variables
diff --git a/server/lib/classes/cron.d/150-webalizer.inc.php b/server/lib/classes/cron.d/150-webalizer.inc.php
index 5d341cefe7..42aa125e0f 100644
--- a/server/lib/classes/cron.d/150-webalizer.inc.php
+++ b/server/lib/classes/cron.d/150-webalizer.inc.php
@@ -94,9 +94,9 @@ class cronjob_webalizer extends cronjob {
 				$log_folder .= '/' . $subdomain_host;
 				unset($tmp);
 			}
-			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log');
+			$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log';
 			if(!@is_file($logfile)) {
-				$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz');
+				$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz';
 				if(!@is_file($logfile)) {
 					continue;
 				}
diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index d1dbf94291..b229c76a8a 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -147,7 +147,7 @@ class cronjob_logfiles extends cronjob {
 			}
 
 			// rotate and compress the error.log 
-			$error_logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/error.log');
+			$error_logfile = $rec['document_root'].'/' . $log_folder . '/error.log';
 			// rename older files (move up by one)
 			$num = $log_retention;
 			while($num >= 1) {
@@ -187,7 +187,7 @@ class cronjob_logfiles extends cronjob {
 		$ispconfig_logfiles = array('ispconfig.log', 'cron.log', 'auth.log');
 		foreach($ispconfig_logfiles as $ispconfig_logfile) {
 			$num = $max_syslog;
-			$ispconfig_logfile = escapeshellcmd($conf['ispconfig_log_dir'].'/'.$ispconfig_logfile);
+			$ispconfig_logfile = $conf['ispconfig_log_dir'].'/'.$ispconfig_logfile;
 			// rename older files (move up by one)
 			while($num >= 1) {
 				if(is_file($ispconfig_logfile . '.' . $num . '.gz')) rename($ispconfig_logfile . '.' . $num . '.gz', $ispconfig_logfile . '.' . ($num + 1) . '.gz');
diff --git a/server/lib/classes/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php
index 6cd689edca..234f02771d 100644
--- a/server/lib/classes/cron.d/500-backup_mail.inc.php
+++ b/server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -69,9 +69,9 @@ class cronjob_backup_mail extends cronjob {
 			$records = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE server_id = ? AND maildir != ''", intval($conf['server_id']));
 			if(is_array($records) && $run_backups) {
 				if(!is_dir($backup_dir)) {
-					mkdir(escapeshellcmd($backup_dir), $backup_dir_permissions, true);
+					mkdir($backup_dir, $backup_dir_permissions, true);
 				} else {
-					chmod(escapeshellcmd($backup_dir), $backup_dir_permissions);
+					chmod($backup_dir, $backup_dir_permissions);
 				}
 				system('which pigz > /dev/null', $ret);
 				if($ret === 0) {
@@ -122,7 +122,7 @@ class cronjob_backup_mail extends cronjob {
 						if ($rec['maildir_format'] == 'mdbox') {
 							if (empty($this->tmp_backup_dir)) $this->tmp_backup_dir = $rec['maildir'];
 							// Create temporary backup-mailbox
-							exec("su -c ?", 'dsync backup -u "'.$rec["email"].'" mdbox:' . $this->tmp_backup_dir . '/backup');
+							$app->system->exec_safe("su -c ?", 'dsync backup -u "'.$rec["email"].'" mdbox:' . $this->tmp_backup_dir . '/backup');
 		
 							if($backup_mode == 'userzip') {
 								$mail_backup_file.='.zip';
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 9f3e963eea..051f3554a6 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1601,22 +1601,20 @@ class system{
 		$mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail');
 
 		if($subfolder != '') {
-			$dir = escapeshellcmd($maildir_path.'/.'.$subfolder);
+			$dir = $maildir_path.'/.'.$subfolder;
 		} else {
-			$dir = escapeshellcmd($maildir_path);
+			$dir = $maildir_path;
 		}
 
 		if(!is_dir($dir)) mkdir($dir, 0700, true);
 
 		if($user != '' && $user != 'root' && $this->is_user($user)) {
-			$user = escapeshellcmd($user);
 			if(is_dir($dir)) $this->chown($dir, $user);
 
 			$chown_mdsub = true;
 		}
 
 		if($group != '' && $group != 'root' && $this->is_group($group)) {
-			$group = escapeshellcmd($group);
 			if(is_dir($dir)) $this->chgrp($dir, $group);
 		
 			$chgrp_mdsub = true;
@@ -1638,7 +1636,7 @@ class system{
 			// Courier
 			if($mail_config['pop3_imap_daemon'] == 'courier') {
 				if(!is_file($maildir_path.'/courierimapsubscribed')) {
-					$tmp_file = escapeshellcmd($maildir_path.'/courierimapsubscribed');
+					$tmp_file = $maildir_path.'/courierimapsubscribed';
 					touch($tmp_file);
 					chmod($tmp_file, 0744);
 					chown($tmp_file, 'vmail');
@@ -1650,7 +1648,7 @@ class system{
 			// Dovecot
 			if($mail_config['pop3_imap_daemon'] == 'dovecot') {
 				if(!is_file($maildir_path.'/subscriptions')) {
-					$tmp_file = escapeshellcmd($maildir_path.'/subscriptions');
+					$tmp_file = $maildir_path.'/subscriptions';
 					touch($tmp_file);
 					chmod($tmp_file, 0744);
 					chown($tmp_file, 'vmail');
@@ -2059,6 +2057,10 @@ class system{
 	
 	public function exec_safe($cmd) {
 		$arg_count = func_num_args();
+		if($arg_count != substr_count($cmd, '?') + 1) {
+			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
+			return false;
+		}
 		if($arg_count > 1) {
 			$args = func_get_args();
 
diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php
index e0ce33a5e4..3b6bb9fb49 100644
--- a/server/mods-available/remoteaction_core_module.inc.php
+++ b/server/mods-available/remoteaction_core_module.inc.php
@@ -150,7 +150,7 @@ class remoteaction_core_module {
 					$parts = explode(':', $action['action_param']);
 					$veid = intval($parts[0]);
 					$template_cache_dir = '/vz/template/cache/';
-					$template_name = escapeshellcmd($parts[1]);
+					$template_name = $parts[1];
 					if($veid > 0 && $template_name != '' && is_dir($template_cache_dir)) {
 						$command = "vzdump --suspend --compress --stdexcludes --dumpdir ? ?";
 						$app->system->exec_safe($command, $template_cache_dir, $veid);
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 28a3c4d5d6..2183e96eb4 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -476,7 +476,7 @@ class apache2_plugin {
 		if($data['new']['ssl_action'] == 'del') {
 			if(file_exists($web_config['CA_path'].'/openssl.cnf') && !is_link($web_config['CA_path'].'/openssl.cnf'))
 			{
-				exec("openssl ca -batch -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -revoke ".escapeshellcmd($crt_file));
+				$app->system->exec_safe("openssl ca -batch -config ? -passin pass:? -revoke ?", $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $crt_file);
 				$app->log("Revoking CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 			};
 			$app->system->unlink($csr_file);
@@ -594,31 +594,31 @@ class apache2_plugin {
 
 			//* Check if a ispconfigend user and group exists and create them
 			if(!$app->system->is_group('ispconfigend')) {
-				exec('groupadd --gid '.($connect_userid_to_webid_start + 10000).' ispconfigend');
+				$app->system->exec_safe('groupadd --gid ? ispconfigend', $connect_userid_to_webid_start + 10000);
 			}
 			if(!$app->system->is_user('ispconfigend')) {
-				exec('useradd -g ispconfigend -d /usr/local/ispconfig --uid '.($connect_userid_to_webid_start + 10000).' ispconfigend');
+				$app->system->exec_safe('useradd -g ispconfigend -d /usr/local/ispconfig --uid ? ispconfigend', $connect_userid_to_webid_start + 10000);
 			}
 		} else {
 			$fixed_uid_param = '';
 			$fixed_gid_param = '';
 		}
 
-		$groupname = escapeshellcmd($data['new']['system_group']);
+		$groupname = $data['new']['system_group'];
 		if($data['new']['system_group'] != '' && !$app->system->is_group($data['new']['system_group'])) {
-			exec('groupadd '.$fixed_gid_param.' '.$groupname);
-			if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' groupadd '.$groupname);
+			$app->system->exec_safe('groupadd ? ?', $fixed_gid_param, $groupname);
+			if($apache_chrooted) $app->system->exec_safe('chroot ? groupadd ?', $web_config['website_basedir'], $groupname);
 			$app->log('Adding the group: '.$groupname, LOGLEVEL_DEBUG);
 		}
 
-		$username = escapeshellcmd($data['new']['system_user']);
+		$username = $data['new']['system_user'];
 		if($data['new']['system_user'] != '' && !$app->system->is_user($data['new']['system_user'])) {
 			if($web_config['add_web_users_to_sshusers_group'] == 'y') {
-				exec('useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param -G sshusers $username -s /bin/false");
-				if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param -G sshusers $username -s /bin/false");
+				$app->system->exec_safe('useradd -d ? -g ? ? -G sshusers ? -s /bin/false', $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
+				if($apache_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ? -G sshusers ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
 			} else {
-				exec('useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param $username -s /bin/false");
-				if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param $username -s /bin/false");
+				$app->system->exec_safe('useradd -d ? -g ? ? ? -s /bin/false', $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
+				if($apache_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ? ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
 			}
 			$app->log('Adding the user: '.$username, LOGLEVEL_DEBUG);
 		}
@@ -641,7 +641,7 @@ class apache2_plugin {
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// create the symlinks, if not exist
 					if(is_link($tmp_symlink)) {
-						exec('rm -f '.escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe('rm -f ?', $tmp_symlink);
 						$app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG);
 					}
 				}
@@ -668,13 +668,12 @@ class apache2_plugin {
 				}
 				
 				//* Unmount the old log directory bfore we move the log dir
-				//exec('fuser -km '.escapeshellcmd($old_dir.'/log'));
-				exec('umount '.escapeshellcmd($data['old']['document_root'].'/log'));
+				$app->system->exec_safe('umount ?', $data['old']['document_root'].'/log');
 
 				//* Create new base directory, if it does not exist yet
 				if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
 				$app->system->web_folder_protection($data['old']['document_root'], false);
-				exec('mv '.escapeshellarg($data['old']['document_root']).' '.escapeshellarg($new_dir));
+				$app->system->exec_safe('mv ? ?', $data['old']['document_root'], $new_dir);
 				//$app->system->rename($data['old']['document_root'],$new_dir);
 				$app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir, LOGLEVEL_DEBUG);
 
@@ -682,17 +681,17 @@ class apache2_plugin {
 				$data['new']['php_open_basedir'] = str_replace($data['old']['document_root'], $data['new']['document_root'], $data['old']['php_open_basedir']);
 
 				//* Change the owner of the website files to the new website owner
-				exec('chown --recursive --from='.escapeshellcmd($data['old']['system_user']).':'.escapeshellcmd($data['old']['system_group']).' '.escapeshellcmd($data['new']['system_user']).':'.escapeshellcmd($data['new']['system_group']).' '.$new_dir);
+				$app->system->exec_safe('chown --recursive --from=?:? ?:? ?', $data['old']['system_user'], $data['old']['system_group'], $data['new']['system_user'], $data['new']['system_group'], $new_dir);
 
 				//* Change the home directory and group of the website user
-				$command = 'killall -u '.escapeshellcmd($data['new']['system_user']).' ; usermod';
-				$command .= ' --home '.escapeshellcmd($data['new']['document_root']);
-				$command .= ' --gid '.escapeshellcmd($data['new']['system_group']);
-				$command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null';
-				exec($command);
+				$command = 'killall -u ? ; usermod';
+				$command .= ' --home ?';
+				$command .= ' --gid ?';
+				$command .= ' ? 2>/dev/null';
+				$app->system->exec_safe($command, $data['new']['system_user'], $data['new']['document_root'], $data['new']['system_group'], $data['new']['system_user']);
 			}
 
-			if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+			if($apache_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 			//* Change the log mount
 			/*
@@ -714,7 +713,7 @@ class apache2_plugin {
 				$app->system->replaceLine('/etc/fstab', $fstab_line_old, $fstab_line, 0, 1);
 			}
 			
-			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
+			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 			
 		}
 
@@ -726,7 +725,6 @@ class apache2_plugin {
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/error') and $data['new']['errordocs']) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/error');
 		if($data['new']['stats_type'] != '' && !is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/stats');
-		//if(!is_dir($data['new']['document_root'].'/'.$log_folder)) exec('mkdir -p '.$data['new']['document_root'].'/'.$log_folder);
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
 		if(!is_dir($data['new']['document_root'].'/cgi-bin')) $app->system->mkdirpath($data['new']['document_root'].'/cgi-bin');
 		if(!is_dir($data['new']['document_root'].'/tmp')) $app->system->mkdirpath($data['new']['document_root'].'/tmp');
@@ -750,7 +748,7 @@ class apache2_plugin {
 
 		// Remove the symlink for the site, if site is renamed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) exec('rm -rf /var/log/ispconfig/httpd/'.$data['old']['domain']);
+			if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) $app->system->exec_safe('rm -rf ?', '/var/log/ispconfig/httpd/'.$data['old']['domain']);
 			if(is_link($data['old']['document_root'].'/'.$old_log_folder)) $app->system->unlink($data['old']['document_root'].'/'.$old_log_folder);
 
 			//* remove old log mount
@@ -758,19 +756,18 @@ class apache2_plugin {
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 
 			//* Unmount log directory
-			//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
-			exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
+			$app->system->exec_safe('umount ?', $data['old']['document_root'].'/'.$old_log_folder);
 		}
 
 		//* Create the log dir if nescessary and mount it
 		if(!is_dir($data['new']['document_root'].'/'.$log_folder) || !is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain']) || is_link($data['new']['document_root'].'/'.$log_folder)) {
 			if(is_link($data['new']['document_root'].'/'.$log_folder)) unlink($data['new']['document_root'].'/'.$log_folder);
-			if(!is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain'])) exec('mkdir -p /var/log/ispconfig/httpd/'.$data['new']['domain']);
+			if(!is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain'])) $app->system->exec_safe('mkdir -p ?', '/var/log/ispconfig/httpd/'.$data['new']['domain']);
 			$app->system->mkdirpath($data['new']['document_root'].'/'.$log_folder);
 			$app->system->chown($data['new']['document_root'].'/'.$log_folder, 'root');
 			$app->system->chgrp($data['new']['document_root'].'/'.$log_folder, 'root');
 			$app->system->chmod($data['new']['document_root'].'/'.$log_folder, 0755);
-			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
+			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 			//* add mountpoint to fstab
 			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nobootwait';
 			$fstab_line .= @($web_config['network_filesystem'] == 'y')?',_netdev    0 0':'    0 0';
@@ -795,7 +792,7 @@ class apache2_plugin {
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// remove the symlinks, if not exist
 					if(is_link($tmp_symlink)) {
-						exec('rm -f '.escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe('rm -f ?', $tmp_symlink);
 						$app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG);
 					}
 				}
@@ -816,11 +813,10 @@ class apache2_plugin {
 				}
 				// create the symlinks, if not exist
 				if(!is_link($tmp_symlink)) {
-					//     exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
 					if ($web_config["website_symlinks_rel"] == 'y') {
-						$app->system->create_relative_link(escapeshellcmd($data["new"]["document_root"]), escapeshellcmd($tmp_symlink));
+						$app->system->create_relative_link($data["new"]["document_root"], $tmp_symlink);
 					} else {
-						exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe("ln -s ? ?", $data["new"]["document_root"]."/", $tmp_symlink);
 					}
 
 					$app->log('Creating symlink: ln -s '.$data['new']['document_root'].'/ '.$tmp_symlink, LOGLEVEL_DEBUG);
@@ -840,69 +836,67 @@ class apache2_plugin {
 
 			// Copy the error pages
 			if($data['new']['errordocs']) {
-				$error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/';
-				if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-					exec('cp ' . $conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+				$error_page_path = $data['new']['document_root'].'/' . $web_folder . '/error/';
+				if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2))) {
+					$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 				}
 				else {
 					if (file_exists($conf['rootpath'] . '/conf-custom/error/400.html')) {
-						exec('cp '. $conf['rootpath'] . '/conf-custom/error/*.html '.$error_page_path);
+						$app->system->exec_safe('cp ?*.html ?', $conf['rootpath'] . '/conf-custom/error/', $error_page_path);
 					}
 					else {
-						exec('cp ' . $conf['rootpath'] . '/conf/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+						$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 					}
 				}
-				exec('chmod -R a+r '.$error_page_path);
+				$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
 			}
 
 			//* Copy the web skeleton files only when there is no index.ph or index.html file yet
 			if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php')) {
-				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-					if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2).' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2))) {
+					if(!file_exists($data['new']['document_root'] . '/' . $web_folder . '/index.html')) {
+						$app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_' . substr($conf['language'], 0, 2), $data['new']['document_root'] . '/' . $web_folder . '/index.html');
+					}
 
 					if(is_file($conf['rootpath'] . '/conf-custom/index/favicon.ico')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/favicon.ico')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/favicon.ico '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/');
 					}
 					if(is_file($conf['rootpath'] . '/conf-custom/index/robots.txt')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/robots.txt')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/robots.txt '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/');
 					}
-					//if(is_file($conf['rootpath'] . '/conf-custom/index/.htaccess')) {
-					//	exec('cp ' . $conf['rootpath'] . '/conf-custom/index/.htaccess '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
-					//}
 				} else {
 					if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/standard_index.html '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html', $data['new']['document_root'].'/' . $web_folder . '/index.html');
 					} else {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2).' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html');
 						if(is_file($conf['rootpath'] . '/conf/index/favicon.ico')){
-							if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/favicon.ico')) exec('cp ' . $conf['rootpath'] . '/conf/index/favicon.ico '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+							if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/');
 						}
 						if(is_file($conf['rootpath'] . '/conf/index/robots.txt')){
-							if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/robots.txt')) exec('cp ' . $conf['rootpath'] . '/conf/index/robots.txt '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+							if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/');
 						}
-						//if(is_file($conf['rootpath'] . '/conf/index/.htaccess')) exec('cp ' . $conf['rootpath'] . '/conf/index/.htaccess '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
 					}
 				}
 			}
-			exec('chmod -R a+r '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+			$app->system->exec_safe('chmod -R a+r ?', $data['new']['document_root'].'/' . $web_folder . '/');
 
 			//** Copy the error documents on update when the error document checkbox has been activated and was deactivated before
 		} elseif ($this->action == 'update' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') && $data['old']['errordocs'] == 0 && $data['new']['errordocs'] == 1) {
 
-			$error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/';
-			if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-				exec('cp ' . $conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+			$error_page_path = $data['new']['document_root'].'/' . $web_folder . '/error/';
+			if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2))) {
+				$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 			}
 			else {
 				if (file_exists($conf['rootpath'] . '/conf-custom/error/400.html')) {
-					exec('cp ' . $conf['rootpath'] . '/conf-custom/error/*.html '.$error_page_path);
+					$app->system->exec_safe('cp ?*.html ?', $conf['rootpath'] . '/conf-custom/error/', $error_page_path);
 				}
 				else {
-					exec('cp ' . $conf['rootpath'] . '/conf/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+					$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 				}
 			}
-			exec('chmod -R a+r '.$error_page_path);
-			exec('chown -R '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.$error_page_path);
+			$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
+			$app->system->exec_safe('chown -R ?:? ?', $data['new']['system_user'], $data['new']['system_group'], $error_page_path);
 		}  // end copy error docs
 
 		// Set the quota for the user, but only for vhosts, not vhostsubdomains or vhostalias
@@ -917,39 +911,39 @@ class apache2_plugin {
 			}
 
 			// get the primitive folder for document_root and the filesystem, will need it later.
-			$df_output=explode(" ", exec("df -T " . escapeshellarg($data['new']['document_root']) . "|awk 'END{print \$2,\$NF}'"));
+			$df_output=explode(" ", $app->system->exec_safe("df -T ?|awk 'END{print \$2,\$NF}'", $data['new']['document_root']));
 			$file_system = $df_output[0];
 			$primitive_root = $df_output[1];
 
 			if($file_system == 'xfs') {
-				exec("xfs_quota -x -c " . escapeshellarg("limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " " . $username) . " " . escapeshellarg($primitive_root));
+				$app->system->exec_safe("xfs_quota -x -c ? ?", "limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " " . $username, $primitive_root);
 
 				// xfs only supports timers globally, not per user.
-				exec("xfs_quota -x -c 'timer -bir -i 604800' " . escapeshellarg($primitive_root));
+				$app->system->exec_safe("xfs_quota -x -c 'timer -bir -i 604800' ?", $primitive_root);
 
 				unset($project_uid, $username_position, $xfs_projects);
 				unset($primitive_root, $df_output, $mb_hard, $mb_soft);
 			} else {
 				if($app->system->is_installed('setquota')) {
-					exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
-					exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
+					$app->system->exec_safe('setquota -u ? ? ? 0 0 -a &> /dev/null', $username, $blocks_soft, $blocks_hard);
+					$app->system->exec_safe('setquota -T -u ? 604800 604800 -a &> /dev/null', $username);
 				}
 			}
 		}
 
 		if($this->action == 'insert' || $data["new"]["system_user"] != $data["old"]["system_user"]) {
 			// Chown and chmod the directories below the document root
-			$app->system->_exec('chown -R '.$username.':'.$groupname.' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder);
 			// The document root itself has to be owned by root in normal level and by the web owner in security level 20
 			if($web_config['security_level'] == 20) {
-				$app->system->_exec('chown '.$username.':'.$groupname.' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+				$app->system->exec_safe('chown ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder);
 			} else {
-				$app->system->_exec('chown root:root '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+				$app->system->exec_safe('chown root:root ?', $data['new']['document_root'].'/' . $web_folder);
 			}
 		}
 
 		//* add the Apache user to the client group if this is a vhost and security level is set to high, no matter if this is an insert or update and regardless of set_folder_permissions_on_update
-		if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, escapeshellcmd($web_config['user']));
+		if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, $web_config['user']);
 
 		//* If the security level is set to high
 		if(($this->action == 'insert' && $data['new']['type'] == 'vhost') or ($web_config['set_folder_permissions_on_update'] == 'y' && $data['new']['type'] == 'vhost')) {
@@ -978,18 +972,18 @@ class apache2_plugin {
 				if($web_config['add_web_users_to_sshusers_group'] == 'y') {
 					$command = 'usermod';
 					$command .= ' --groups sshusers';
-					$command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null';
-					$app->system->_exec($command);
+					$command .= ' ? 2>/dev/null';
+					$app->system->exec_safe($command, $data['new']['system_user']);
 				}
 
 				//* if we have a chrooted Apache environment
 				if($apache_chrooted) {
-					$app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+					$app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 					//* add the apache user to the client group in the chroot environment
 					$tmp_groupfile = $app->system->server_conf['group_datei'];
 					$app->system->server_conf['group_datei'] = $web_config['website_basedir'].'/etc/group';
-					$app->system->add_user_to_group($groupname, escapeshellcmd($web_config['user']));
+					$app->system->add_user_to_group($groupname, $web_config['user']);
 					$app->system->server_conf['group_datei'] = $tmp_groupfile;
 					unset($tmp_groupfile);
 				}
@@ -1092,7 +1086,9 @@ class apache2_plugin {
 
 		if($data['new']['type'] == 'vhost') {
 			// Change the ownership of the error log to the root user
-			if(!@is_file('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log')) exec('touch '.escapeshellcmd('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log'));
+			if(!@is_file('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log')) {
+				$app->system->exec_safe('touch ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log');
+			}
 			$app->system->chown('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 			$app->system->chgrp('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 		}
@@ -1165,7 +1161,7 @@ class apache2_plugin {
 		$vhost_data['php_open_basedir'] = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
 		$vhost_data['ssl_domain'] = $data['new']['ssl_domain'];
 		$vhost_data['has_custom_php_ini'] = $has_custom_php_ini;
-		$vhost_data['custom_php_ini_dir'] = escapeshellcmd($custom_php_ini_dir);
+		$vhost_data['custom_php_ini_dir'] = $custom_php_ini_dir;
 		$vhost_data['logging'] = $web_config['logging'];
 
 		// Custom Apache directives
@@ -1455,13 +1451,10 @@ class apache2_plugin {
 
 			if (!is_dir($fastcgi_starter_path)) {
 				$app->system->mkdirpath($fastcgi_starter_path);
-				//exec('chown '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.escapeshellcmd($fastcgi_starter_path));
-
 
 				$app->log('Creating fastcgi starter script directory: '.$fastcgi_starter_path, LOGLEVEL_DEBUG);
 			}
 
-			//exec('chown -R '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.escapeshellcmd($fastcgi_starter_path));
 			$app->system->chown($fastcgi_starter_path, $data['new']['system_user']);
 			$app->system->chgrp($fastcgi_starter_path, $data['new']['system_group']);
 			if($web_config['security_level'] == 10) {
@@ -1483,29 +1476,29 @@ class apache2_plugin {
 			}
 
 			if($has_custom_php_ini) {
-				$fcgi_tpl->setVar('php_ini_path', escapeshellcmd($custom_php_ini_dir));
+				$fcgi_tpl->setVar('php_ini_path', $custom_php_ini_dir);
 			} else {
 				if($default_fastcgi_php){
-					$fcgi_tpl->setVar('php_ini_path', escapeshellcmd($fastcgi_config['fastcgi_phpini_path']));
+					$fcgi_tpl->setVar('php_ini_path', $fastcgi_config['fastcgi_phpini_path']);
 				} else {
-					$fcgi_tpl->setVar('php_ini_path', escapeshellcmd($custom_fastcgi_php_ini_dir));
+					$fcgi_tpl->setVar('php_ini_path', $custom_fastcgi_php_ini_dir);
 				}
 			}
-			$fcgi_tpl->setVar('document_root', escapeshellcmd($data['new']['document_root']));
-			$fcgi_tpl->setVar('php_fcgi_children', escapeshellcmd($fastcgi_config['fastcgi_children']));
-			$fcgi_tpl->setVar('php_fcgi_max_requests', escapeshellcmd($fastcgi_config['fastcgi_max_requests']));
+			$fcgi_tpl->setVar('document_root', $data['new']['document_root']);
+			$fcgi_tpl->setVar('php_fcgi_children', $fastcgi_config['fastcgi_children']);
+			$fcgi_tpl->setVar('php_fcgi_max_requests', $fastcgi_config['fastcgi_max_requests']);
 			if($default_fastcgi_php){
-				$fcgi_tpl->setVar('php_fcgi_bin', escapeshellcmd($fastcgi_config['fastcgi_bin']));
+				$fcgi_tpl->setVar('php_fcgi_bin', $fastcgi_config['fastcgi_bin']);
 			} else {
-				$fcgi_tpl->setVar('php_fcgi_bin', escapeshellcmd($custom_fastcgi_php_executable));
+				$fcgi_tpl->setVar('php_fcgi_bin', $custom_fastcgi_php_executable);
 			}
 			$fcgi_tpl->setVar('security_level', intval($web_config['security_level']));
-			$fcgi_tpl->setVar('domain', escapeshellcmd($data['new']['domain']));
+			$fcgi_tpl->setVar('domain', $data['new']['domain']);
 
 			$php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
-			$fcgi_tpl->setVar('open_basedir', escapeshellcmd($php_open_basedir));
+			$fcgi_tpl->setVar('open_basedir', $php_open_basedir);
 
-			$fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : ''));
+			$fcgi_starter_script = $fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '');
 			$app->system->file_put_contents($fcgi_starter_script, $fcgi_tpl->grab());
 			unset($fcgi_tpl);
 
@@ -1565,14 +1558,13 @@ class apache2_plugin {
 		}
 
 		if($default_php_fpm){
-			$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
-		} else {
+			$pool_dir = $web_config['php_fpm_pool_dir'];
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
 		$pool_dir = trim($pool_dir);
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['new']['domain_id'];
-		$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
+		$socket_dir = $web_config['php_fpm_socket_dir'];
 		if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
 		
 		if($data['new']['php_fpm_use_socket'] == 'y'){
@@ -1625,8 +1617,8 @@ class apache2_plugin {
 
 			// This works because PHP "rewrites" a symlink to the physical path
 			$php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
-			$cgi_tpl->setVar('open_basedir', escapeshellcmd($php_open_basedir));
-			$cgi_tpl->setVar('document_root', escapeshellcmd($data['new']['document_root']));
+			$cgi_tpl->setVar('open_basedir', $php_open_basedir);
+			$cgi_tpl->setVar('document_root', $data['new']['document_root']);
 
 			// This will NOT work!
 			//$cgi_tpl->setVar('open_basedir', '/var/www/' . $data['new']['domain']);
@@ -1635,12 +1627,12 @@ class apache2_plugin {
 
 			$cgi_tpl->setVar('has_custom_php_ini', $has_custom_php_ini);
 			if($has_custom_php_ini) {
-				$cgi_tpl->setVar('php_ini_path', escapeshellcmd($custom_php_ini_dir));
+				$cgi_tpl->setVar('php_ini_path', $custom_php_ini_dir);
 			} else {
-				$cgi_tpl->setVar('php_ini_path', escapeshellcmd($fastcgi_config['fastcgi_phpini_path']));
+				$cgi_tpl->setVar('php_ini_path', $fastcgi_config['fastcgi_phpini_path']);
 			}
 
-			$cgi_starter_script = escapeshellcmd($cgi_starter_path.$cgi_config['cgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : ''));
+			$cgi_starter_script = $cgi_starter_path.$cgi_config['cgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '');
 			$app->system->file_put_contents($cgi_starter_script, $cgi_tpl->grab());
 			unset($cgi_tpl);
 
@@ -1660,7 +1652,7 @@ class apache2_plugin {
 
 		}
 
-		$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_file = $web_config['vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost';
 		//* Make a backup copy of vhost file
 		if(file_exists($vhost_file)) $app->system->copy($vhost_file, $vhost_file.'~');
 
@@ -1753,17 +1745,17 @@ class apache2_plugin {
 
 		//* Set the symlink to enable the vhost
 		//* First we check if there is a old type of symlink and remove it
-		$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost';
 		if(is_link($vhost_symlink)) $app->system->unlink($vhost_symlink);
 
 		//* Remove old or changed symlinks
 		if($data['new']['subdomain'] != $data['old']['subdomain'] or $data['new']['active'] == 'n') {
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -1772,9 +1764,9 @@ class apache2_plugin {
 
 		//* New symlink
 		if($data['new']['subdomain'] == '*') {
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost';
 		} else {
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost';
 		}
 		if($data['new']['active'] == 'y' && !is_link($vhost_symlink)) {
 			symlink($vhost_file, $vhost_symlink);
@@ -1783,22 +1775,22 @@ class apache2_plugin {
 
 		// remove old symlink and vhost file, if domain name of the site has changed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $web_config['vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 			$app->system->unlink($vhost_file);
 			$app->log('Removing file: '.$vhost_file, LOGLEVEL_DEBUG);
 		}
@@ -2032,14 +2024,10 @@ class apache2_plugin {
 		if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias'){
 			if(is_array($log_folders) && !empty($log_folders)){
 				foreach($log_folders as $log_folder){
-					//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
-					//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
-					exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
+					$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 				}
 			} else {
-				//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
-				//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
-				exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
+				$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 			}
 			
 			// remove letsencrypt if it exists (renew will always fail otherwise)
@@ -2079,19 +2067,19 @@ class apache2_plugin {
 		} else {
 			//* This is a website
 			// Deleting the vhost file, symlink and the data directory
-			$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $web_config['vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -2101,11 +2089,11 @@ class apache2_plugin {
 			$app->log('Removing vhost file: '.$vhost_file, LOGLEVEL_DEBUG);
 
 			if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') {
-				$docroot = escapeshellcmd($data['old']['document_root']);
+				$docroot = $data['old']['document_root'];
 				if($docroot != '' && !stristr($docroot, '..')) {
 					if($data['old']['type'] == 'vhost') {
 						// this is a vhost - we delete everything in here.
-						exec('rm -rf '.$docroot);
+						$app->system->exec_safe('rm -rf ?', $docroot);
 					} elseif(!stristr($data['old']['web_folder'], '..')) {
 						// this is a vhost subdomain
 						// IMPORTANT: do some folder checks before we delete this!
@@ -2155,7 +2143,7 @@ class apache2_plugin {
 							unset($used_paths);
 						}
 
-						if($do_delete === true && $delete_folder !== '') exec('rm -rf '.$docroot.'/'.$delete_folder);
+						if($do_delete === true && $delete_folder !== '') $app->system->exec_safe('rm -rf ?', $docroot.'/'.$delete_folder);
 
 						unset($delete_folder);
 						unset($path_elements);
@@ -2167,12 +2155,12 @@ class apache2_plugin {
 					$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $fastcgi_config['fastcgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($fastcgi_starter_path)) {
-							exec('rm -rf '.$fastcgi_starter_path);
+							$app->system->exec_safe('rm -rf ?', $fastcgi_starter_path);
 						}
 					} else {
 						$fcgi_starter_script = $fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].'_web'.$data['old']['domain_id'];
 						if (file_exists($fcgi_starter_script)) {
-							exec('rm -f '.$fcgi_starter_script);
+							$app->system->exec_safe('rm -f ?', $fcgi_starter_script);
 						}
 					}
 				}
@@ -2192,12 +2180,12 @@ class apache2_plugin {
 					$cgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['cgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($cgi_starter_path)) {
-							exec('rm -rf '.$cgi_starter_path);
+							$app->system->exec_safe('rm -rf ?', $cgi_starter_path);
 						}
 					} else {
 						$cgi_starter_script = $cgi_starter_path.'php-cgi-starter_web'.$data['old']['domain_id'];
 						if (file_exists($cgi_starter_script)) {
-							exec('rm -f '.$cgi_starter_script);
+							$app->system->exec_safe('rm -f ?', $cgi_starter_script);
 						}
 					}
 				}
@@ -2226,16 +2214,15 @@ class apache2_plugin {
 			}
 
 			// Delete the log file directory
-			$vhost_logfile_dir = escapeshellcmd('/var/log/ispconfig/httpd/'.$data['old']['domain']);
-			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) exec('rm -rf '.$vhost_logfile_dir);
+			$vhost_logfile_dir = '/var/log/ispconfig/httpd/'.$data['old']['domain'];
+			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) $app->system->exec_safe('rm -rf ?', $vhost_logfile_dir);
 			$app->log('Removing website logfile directory: '.$vhost_logfile_dir, LOGLEVEL_DEBUG);
 
 			if($data['old']['type'] == 'vhost') {
 				//delete the web user
-				$command = 'killall -u '.escapeshellcmd($data['old']['system_user']).' ; userdel';
-				$command .= ' '.escapeshellcmd($data['old']['system_user']);
-				exec($command);
-				if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+				$command = 'killall -u ? ; userdel ?';
+				$app->system->exec_safe($command, $data['old']['system_user'], $data['old']['system_user']);
+				if($apache_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 			}
 
@@ -2267,7 +2254,7 @@ class apache2_plugin {
 					if($mount_backup){
 						$web_backup_dir = $backup_dir.'/web'.$data_old['domain_id'];
 						//** do not use rm -rf $web_backup_dir because database(s) may exits
-						exec(escapeshellcmd('rm -f '.$web_backup_dir.'/web'.$data_old['domain_id'].'_').'*');
+						$app->system->exec_safe('rm -f ?*', $web_backup_dir.'/web'.$data_old['domain_id'].'_');
 						//* cleanup database
 						$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename LIKE ?";
 						$app->db->query($sql, $conf['server_id'], $data_old['domain_id'], "web".$data_old['domain_id']."_%");
@@ -2322,7 +2309,7 @@ class apache2_plugin {
 			$tpl->setLoop('ip_adresses', $records_out);
 		}
 
-		$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'].'/ispconfig.conf');
+		$vhost_file = $web_config['vhost_conf_dir'].'/ispconfig.conf';
 		$app->system->file_put_contents($vhost_file, $tpl->grab());
 		$app->log('Writing the conf file: '.$vhost_file, LOGLEVEL_DEBUG);
 		unset($tpl);
@@ -2355,7 +2342,7 @@ class apache2_plugin {
 		//* Get the folder path.
 		if(substr($folder['path'], 0, 1) == '/') $folder['path'] = substr($folder['path'], 1);
 		if(substr($folder['path'], -1) == '/') $folder['path'] = substr($folder['path'], 0, -1);
-		$folder_path = escapeshellcmd($website['document_root'].'/' . $web_folder . '/'.$folder['path']);
+		$folder_path = $website['document_root'].'/' . $web_folder . '/'.$folder['path'];
 		if(substr($folder_path, -1) != '/') $folder_path .= '/';
 
 		//* Check if the resulting path is inside the docroot
@@ -2501,7 +2488,7 @@ class apache2_plugin {
 
 		if(substr($data['new']['path'], 0, 1) == '/') $data['new']['path'] = substr($data['new']['path'], 1);
 		if(substr($data['new']['path'], -1) == '/') $data['new']['path'] = substr($data['new']['path'], 0, -1);
-		$new_folder_path = escapeshellcmd($website['document_root'].'/' . $web_folder . '/'.$data['new']['path']);
+		$new_folder_path = $website['document_root'].'/' . $web_folder . '/'.$data['new']['path'];
 		if(substr($new_folder_path, -1) != '/') $new_folder_path .= '/';
 
 		//* Check if the resulting path is inside the docroot
@@ -2681,8 +2668,6 @@ class apache2_plugin {
 			/*
 			 * The webdav - Root needs the group/user as owner and the apache as read and write
 			*/
-			//$app->system->_exec('chown ' . $user . ':' . $group . ' ' . escapeshellcmd($documentRoot . '/webdav/'));
-			//$app->system->_exec('chmod 770 ' . escapeshellcmd($documentRoot . '/webdav/'));
 			$app->system->chown($documentRoot . '/webdav', $user);
 			$app->system->chgrp($documentRoot . '/webdav', $group);
 			$app->system->chmod($documentRoot . '/webdav', 0770);
@@ -2691,8 +2676,6 @@ class apache2_plugin {
 			 * The webdav folder (not the webdav-root!) needs the same (not in ONE step, because the
 			 * pwd-files are owned by root)
 			*/
-			//$app->system->_exec('chown ' . $user . ':' . $group . ' ' . escapeshellcmd($webdav_user_dir.' -R'));
-			//$app->system->_exec('chmod 770 ' . escapeshellcmd($webdav_user_dir.' -R'));
 			$app->system->chown($webdav_user_dir, $user);
 			$app->system->chgrp($webdav_user_dir, $group);
 			$app->system->chmod($webdav_user_dir, 0770);
@@ -2712,7 +2695,7 @@ class apache2_plugin {
 			/*
 			 * Next step, patch the vhost - file
 			*/
-			$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'] . '/' . $domain . '.vhost');
+			$vhost_file = $web_config['vhost_conf_dir'] . '/' . $domain . '.vhost';
 			$this->_patchVhostWebdav($vhost_file, $documentRoot . '/webdav');
 
 			/*
@@ -2744,7 +2727,7 @@ class apache2_plugin {
 			/*
 			 * Next step, patch the vhost - file
 			*/
-			$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'] . '/' . $domain . '.vhost');
+			$vhost_file = $web_config['vhost_conf_dir'] . '/' . $domain . '.vhost';
 			$this->_patchVhostWebdav($vhost_file, $documentRoot . '/webdav');
 
 			/*
@@ -3004,9 +2987,9 @@ class apache2_plugin {
 
 			$content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content);
 			file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content);
-			exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1');
-			exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1');
-			exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
+			$app->system->exec_safe('chmod +x ? >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
+			$app->system->exec_safe('/usr/sbin/update-rc.d ? defaults >/dev/null 2>&1', 'hhvm_' . $data['new']['system_user']);
+			$app->system->exec_safe('? restart >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
 			
 			if(is_dir('/etc/monit/conf.d')){
 				$monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
@@ -3017,8 +3000,8 @@ class apache2_plugin {
 			
  		} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
 			if($data['old']['system_user'] != ''){
-				exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
-				exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1');
+				$app->system->exec_safe('? stop >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['old']['system_user']);
+				$app->system->exec_safe('/usr/sbin/update-rc.d ? remove >/dev/null 2>&1', 'hhvm_' . $data['old']['system_user']);
 				unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
 				if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
 			}
@@ -3117,7 +3100,7 @@ class apache2_plugin {
 		$tpl->setVar('document_root', $data['new']['document_root']);
 		$tpl->setVar('security_level', $web_config['security_level']);
 		$tpl->setVar('domain', $data['new']['domain']);
-		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
+		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
 		$tpl->setVar('php_open_basedir', $php_open_basedir);
 		if($php_open_basedir != ''){
 			$tpl->setVar('enable_php_open_basedir', '');
@@ -3204,7 +3187,7 @@ class apache2_plugin {
 		unset($tpl);
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
+		$default_pool_dir = trim($web_config['php_fpm_pool_dir']);
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -3258,7 +3241,7 @@ class apache2_plugin {
 		}
 
 		if($default_php_fpm){
-			$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+			$pool_dir = $web_config['php_fpm_pool_dir'];
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
@@ -3275,7 +3258,7 @@ class apache2_plugin {
 		}
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
+		$default_pool_dir = trim($web_config['php_fpm_pool_dir']);
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -3335,7 +3318,7 @@ class apache2_plugin {
 			}
 
 			if($app->system->is_group('client'.$client_id)){
-				$app->system->_exec('groupdel client'.$client_id);
+				$app->system->exec_safe('groupdel ?', 'client'.$client_id);
 				$app->log('Removed group client'.$client_id, LOGLEVEL_DEBUG);
 			}
 		}
diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php
index 41e3cdd82c..ea2359d602 100644
--- a/server/plugins-available/apps_vhost_plugin.inc.php
+++ b/server/plugins-available/apps_vhost_plugin.inc.php
@@ -121,7 +121,7 @@ class apps_vhost_plugin {
 			$app->system->file_put_contents("$vhost_conf_dir/apps.vhost", $content);
 
 			// enabled / disable apps-vhost
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/000-apps.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/000-apps.vhost';
 			if(is_link($vhost_symlink) && $web_config['apps_vhost_enabled'] == 'n') {
 				$app->system->unlink($vhost_symlink);
 			}
@@ -207,7 +207,7 @@ class apps_vhost_plugin {
 			file_put_contents("$vhost_conf_dir/apps.vhost", $content);
 
 			// enabled / disable apps-vhost
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/000-apps.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/000-apps.vhost';
 			if(is_link($vhost_symlink) && $web_config['apps_vhost_enabled'] == 'n') {
 				$app->system->unlink($vhost_symlink);
 			}
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index 6ce8c98939..3308289d41 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -104,13 +104,13 @@ class backup_plugin {
 						// extract tar.gz archive
 						$dump_directory = str_replace(".tar.gz", "", $backup['filename']);
 						$extracted = "/usr/local/ispconfig/server/temp";
-						exec("tar -xzvf ".escapeshellarg($backup_dir.'/'.$backup['filename'])." --directory=".escapeshellarg($extracted));
+						$app->system->exec_safe("tar -xzvf ? --directory=?", $backup_dir.'/'.$backup['filename'], $extracted);
 						$restore_directory = $extracted."/".$dump_directory."/".$db_name;
 
 						// mongorestore -h 127.0.0.1 -u root -p 123456 --authenticationDatabase admin -d c1debug --drop ./toRestore
-						$command = "mongorestore -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d ".$db_name." --drop ".escapeshellarg($restore_directory);
-						exec($command);
-						exec("rm -rf ".escapeshellarg($extracted."/".$dump_directory));
+						$command = "mongorestore -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d ? --drop ?";
+						$app->system->exec_safe($command, $db_name, $restore_directory);
+						$app->system->exec_safe("rm -rf ?", $extracted."/".$dump_directory);
 					}
 
 					unset($clientdb_host);
@@ -129,8 +129,8 @@ class backup_plugin {
 						//$db_name = $parts[1];
 						preg_match('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql\.gz$@', $backup['filename'], $matches);
 						$db_name = $matches[1];
-						$command = "gunzip --stdout ".escapeshellarg($backup_dir.'/'.$backup['filename'])." | mysql -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".escapeshellarg($db_name);
-						exec($command);
+						$command = "gunzip --stdout ? | mysql -h ? -u ? -p? ?";
+						$app->system->exec_safe($command, $backup_dir.'/'.$backup['filename'], $clientdb_host, $clientdb_user, $clientdb_password, $db_name);
 					}
 					unset($clientdb_host);
 					unset($clientdb_user);
@@ -147,8 +147,8 @@ class backup_plugin {
 							copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']);
 							chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']);
 							//chown($web['document_root'].'/backup/'.$backup['filename'],$web['system_user']);
-							$command = 'sudo -u '.escapeshellarg($web['system_user']).' unzip -qq -o  '.escapeshellarg($web['document_root'].'/backup/'.$backup['filename']).' -d '.escapeshellarg($web['document_root']).' 2> /dev/null';
-							exec($command);
+							$command = 'sudo -u ? unzip -qq -o ? -d ? 2> /dev/null';
+							$app->system->exec_safe($command, $web['system_user'], $web['document_root'].'/backup/'.$backup['filename'], $web['document_root']);
 							unlink($web['document_root'].'/backup/'.$backup['filename']);
 							if(file_exists($web['document_root'].'/backup/'.$backup['filename'].'.bak')) rename($web['document_root'].'/backup/'.$backup['filename'].'.bak', $web['document_root'].'/backup/'.$backup['filename']);
 							$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
@@ -156,8 +156,8 @@ class backup_plugin {
 					}
 					if($backup['backup_mode'] == 'rootgz') {
 						if(file_exists($backup_dir.'/'.$backup['filename']) && $web['document_root'] != '' && $web['document_root'] != '/' && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-							$command = 'tar xzf '.escapeshellarg($backup_dir.'/'.$backup['filename']).' --directory '.escapeshellarg($web['document_root']);
-							exec($command);
+							$command = 'tar xzf ? --directory ?';
+							$app->system->exec_safe($command, $backup_dir.'/'.$backup['filename'], $web['document_root']);
 							$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
 						}
 					}
@@ -237,22 +237,24 @@ class backup_plugin {
 							if($mail_backup['backup_mode'] == 'userzip') {
 								copy($mail_backup_file, $record['maildir'].'/'.$mail_backup['filename']);
 								chgrp($record['maildir'].'/'.$mail_backup['filename'], $mail_config['mailuser_group']);
-								$command = 'sudo -u '.$mail_config['mailuser_name'].' unzip -qq -o  '.escapeshellarg($record['maildir'].'/'.$mail_backup['filename']).' -d '.escapeshellarg($record['maildir']).' 2> /dev/null';
-								exec($command,$tmp_output, $retval);
+								$command = 'sudo -u ? unzip -qq -o ? -d ? 2> /dev/null';
+								$app->system->exec_safe($command, $mail_config['mailuser_name'], $record['maildir'].'/'.$mail_backup['filename'], $record['maildir']);
+								$retval = $app->system->last_exec_retcode();
 								unlink($record['maildir'].'/'.$mail_backup['filename']);
-							}
-							if($mail_backup['backup_mode'] == 'rootgz') {
-								$command='tar xfz '.escapeshellarg($mail_backup_file).' --directory '.escapeshellarg($record['maildir']);
-								exec($command,$tmp_output, $retval);
+							} elseif($mail_backup['backup_mode'] == 'rootgz') {
+								$command='tar xfz ? --directory ?';
+								$app->system->exec_safe($command, $mail_backup_file, $record['maildir']);
+								$retval = $app->system->last_exec_retcode();
 							}
 							
 							if($retval == 0) {
 								// Now import backup-mailbox into special backup-folder
 								$backupname = "backup-".date("Y-m-d", $mail_backup['tstamp']);
-								exec("doveadm mailbox create -u \"".$record["email"]."\" $backupname");
-								exec("doveadm import -u \"".$record["email"]."\" mdbox:".$record['maildir']."/backup $backupname all", $tmp_output, $retval);
-								exec("for f in `doveadm mailbox list -u \"".$record["email"]."\" $backupname*`; do doveadm mailbox subscribe -u \"".$record["email"]."\" \$f; done", $tmp_output, $retval);
-								exec('rm -rf '.$record['maildir'].'/backup');
+								$app->system->exec_safe("doveadm mailbox create -u ? ?", $record["email"], $backupname);
+								$app->system->exec_safe("doveadm import -u ? mdbox:? ? all", $record["email"], $record['maildir']."/backup", $backupname);
+								$app->system->exec_safe("for f in `doveadm mailbox list -u ? ?*`; do doveadm mailbox subscribe -u ? \$f; done", $record["email"], $backupname, $record["email"]);
+								$retval = $app->system->last_exec_retcode();
+								$app->system->exec_safe('rm -rf ?', $record['maildir'].'/backup');
 							}
 							
 							if($retval == 0){
@@ -260,7 +262,7 @@ class backup_plugin {
 							} else {
 								// cleanup
 								if (file_exists($record['maildir'].'/'.$mail_backup['filename'])) unlink($record['maildir'].'/'.$mail_backup['filename']);
-								if (file_exists($record['maildir']."/backup")) exec('rm -rf '.$record['maildir']."/backup");
+								if (file_exists($record['maildir']."/backup")) $app->system->exec_safe('rm -rf ?', $record['maildir']."/backup");
 								
 								$app->log('Unable to restore Mail backup '.$mail_backup_file.' '.$tmp_output,LOGLEVEL_ERROR);
 							}
@@ -269,8 +271,10 @@ class backup_plugin {
 							if($mail_backup['backup_mode'] == 'userzip') {
 								copy($mail_backup_file, $domain_dir.'/'.$mail_backup['filename']);
 								chgrp($domain_dir.'/'.$mail_backup['filename'], $mail_config['mailuser_group']);
-								$command = 'sudo -u '.$mail_config['mailuser_name'].' unzip -qq -o  '.escapeshellarg($domain_dir.'/'.$mail_backup['filename']).' -d '.escapeshellarg($domain_dir).' 2> /dev/null';
-								exec($command,$tmp_output, $retval);
+								$command = 'sudo -u ? unzip -qq -o ? -d ? 2> /dev/null';
+								$app->system->exec_safe($command, $mail_config['mailuser_name'], $domain_dir.'/'.$mail_backup['filename'], $domain_dir);
+								$retval = $app->system->last_exec_retcode();
+								$tmp_output = $app->system->last_exec_out();
 								unlink($domain_dir.'/'.$mail_backup['filename']);
 								if($retval == 0){
 									$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
@@ -279,8 +283,10 @@ class backup_plugin {
 								}
 							}
 							if($mail_backup['backup_mode'] == 'rootgz') {
-								$command='tar xfz '.escapeshellarg($mail_backup_file).' --directory '.escapeshellarg($domain_dir);
-								exec($command,$tmp_output, $retval);
+								$command='tar xfz ? --directory ?';
+								$app->system->exec_safe($command, $mail_backup_file, $domain_dir);
+								$retval = $app->system->last_exec_retcode();
+								$tmp_output = $app->system->last_exec_out();
 								if($retval == 0){
 									$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
 								} else {
diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index edf7b93d9f..29d841ef8a 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -114,9 +114,7 @@ class bind_plugin {
 		}
 		
 		//Do some magic...
-		exec('cd '.escapeshellcmd($dns_config['bind_zonefiles_dir']).';'.
-		'dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE '.escapeshellcmd($domain).';'.
-		'dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE '.escapeshellcmd($domain));
+		$app->system->exec_safe('cd ?; dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE ?; dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE ?', $dns_config['bind_zonefiles_dir'], $domain, $domain);
 
 		$this->soa_dnssec_sign($data); //Now sign the zone for the first time
 		$data['new']['dnssec_initialized']='Y';
@@ -148,8 +146,7 @@ class bind_plugin {
 		file_put_contents($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain, $zonefile);
 		
 		//Sign the zone and set it valid for max. 16 days
-		exec('cd '.escapeshellcmd($dns_config['bind_zonefiles_dir']).';'.
-			 'dnssec-signzone -A -e +1382400 -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N increment -o '.escapeshellcmd($domain).' -t '.$filespre.escapeshellcmd($domain));
+		$app->system->exec_safe('cd ?; dnssec-signzone -A -e +1382400 -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N increment -o ? -t ?', $dns_config['bind_zonefiles_dir'], $domain, $filespre.$domain);
 			 
 		//Write Data back ino DB
 		$dnssecdata = "DS-Records:\n".file_get_contents($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.');
@@ -187,8 +184,8 @@ class bind_plugin {
 		if (!$new && !file_exists($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.')) $this->soa_dnssec_create($data);
 		
 		$dbdata = $app->db->queryOneRecord('SELECT id,serial FROM dns_soa WHERE id=?', intval($data['new']['id']));
-		exec('cd '.escapeshellcmd($dns_config['bind_zonefiles_dir']).';'.
-			 'named-checkzone '.escapeshellcmd($domain).' '.escapeshellcmd($dns_config['bind_zonefiles_dir']).'/'.$filespre.escapeshellcmd($domain).' | egrep -ho \'[0-9]{10}\'', $serial, $retState);
+		$app->system->exec_safe('cd ?; named-checkzone ? ? | egrep -ho \'[0-9]{10}\'', $dns_config['bind_zonefiles_dir'], $domain, $dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain);
+		$retState = $app->system->last_exec_retcode();
 		if ($retState != 0) {
 			$app->log('DNSSEC Error: Error in Zonefile for '.$domain, LOGLEVEL_ERR);
 			return false;
@@ -283,20 +280,22 @@ class bind_plugin {
 
 			//TODO : change this when distribution information has been integrated into server record
 			if (file_exists('/etc/gentoo-release')) {
-				$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
+				$filename = $dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($zone['origin'], 0, -1));
 			}
 			else {
-				$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
+				$filename = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1));
 			}
 
 			$old_zonefile = @file_get_contents($filename);
 			file_put_contents($filename, $tpl->grab());
-			chown($filename, escapeshellcmd($dns_config['bind_user']));
-			chgrp($filename, escapeshellcmd($dns_config['bind_group']));
+			chown($filename, $dns_config['bind_user']);
+			chgrp($filename, $dns_config['bind_group']);
 
 			//* Check the zonefile
 			if(is_file($filename.'.err')) unlink($filename.'.err');
-			exec('named-checkzone '.escapeshellarg($zone['origin']).' '.escapeshellarg($filename), $out, $return_status);
+			$app->system->exec_safe('named-checkzone ? ?', $zone['origin'], $filename);
+			$out = $app->system->last_exec_out();
+			$return_status = $app->system->last_exec_retcode();
 			if($return_status === 0) {
 				$app->log("Writing BIND domain file: ".$filename, LOGLEVEL_DEBUG);
 			} else {
@@ -309,8 +308,8 @@ class bind_plugin {
 				if ($old_zonefile != '') {
 					rename($filename, $filename.'.err');
 					file_put_contents($filename, $old_zonefile);
-					chown($filename, escapeshellcmd($dns_config['bind_user']));
-					chgrp($filename, escapeshellcmd($dns_config['bind_group']));
+					chown($filename, $dns_config['bind_user']);
+					chgrp($filename, $dns_config['bind_group']);
 				} else {
 					rename($filename, $filename.'.err');
 				}
@@ -392,7 +391,10 @@ class bind_plugin {
 		$app->log("Deleting BIND domain file: ".$zone_file_name, LOGLEVEL_DEBUG);
 
  		//* DNSSEC-Implementation
- 		if ($data['old']['dnssec_initialized'] == 'Y') exec('/usr/local/ispconfig/server/scripts/dnssec-delete.sh '.$data['old']['origin']); //delete keys
+ 		if($data['old']['dnssec_initialized'] == 'Y') {
+			//delete keys
+			$app->system->exec_safe('/usr/local/ispconfig/server/scripts/dnssec-delete.sh ?', $data['old']['origin']);
+		}
  		
 		//* Reload bind nameserver
 		$app->services->restartServiceDelayed('bind', 'reload');
@@ -582,11 +584,6 @@ class bind_plugin {
 				'zonefile_path' => $sec_zonefiles_path.str_replace("/", "_", substr($tmp['origin'], 0, -1)),
 				'options' => $options
 			);
-
-			//   $filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/slave/sec.'.substr($tmp['origin'],0,-1));
-			//   $app->log("Writing BIND domain file: ".$filename,LOGLEVEL_DEBUG);
-
-
 		}
 
 		$tpl_sec = new tpl();
diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php
index c652f299eb..f8f6640444 100644
--- a/server/plugins-available/cron_jailkit_plugin.inc.php
+++ b/server/plugins-available/cron_jailkit_plugin.inc.php
@@ -103,20 +103,6 @@ class cron_jailkit_plugin {
 			if ($data['new']['type'] == "chrooted")
 			{
 				// load the server configuration options
-				/*
-				$app->uses("getconf");
-				$this->data = $data;
-				$this->app = $app;
-				$this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit');
-                $this->parent_domain = $parent_domain;
-
-				$this->_setup_jailkit_chroot();
-
-				//$command .= 'usermod -U '.escapeshellcmd($parent_domain['system_user']);
-				//exec($command);
-
-				$this->_add_jailkit_user();
-				*/
 				$app->uses("getconf");
 				$this->data = $data;
 				$this->app = $app;
@@ -130,8 +116,8 @@ class cron_jailkit_plugin {
 
 				$this->_add_jailkit_user();
 
-				$command .= 'usermod -U '.escapeshellcmd($parent_domain["system_user"]).' 2>/dev/null';
-				exec($command);
+				$command .= 'usermod -U ? 2>/dev/null';
+				$app->system->exec_safe($command, $parent_domain["system_user"]);
 
 				$this->_update_website_security_level();
 
@@ -231,14 +217,12 @@ class cron_jailkit_plugin {
 		if (!is_dir($this->parent_domain['document_root'].'/etc/jailkit'))
 		{
 			$command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh';
-			$command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
-			$command .= ' \''.$this->jailkit_config['jailkit_chroot_app_sections'].'\'';
-			exec($command.' 2>/dev/null');
+			$command .= ' ?';
+			$command .= ' ?';
+			$app->system->exec_safe($command.' 2>/dev/null', $this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_app_sections']);
 
 			$this->app->log("Added jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
 
-			//$this->_add_jailkit_programs(); // done later on
-
 			$this->app->load('tpl');
 
 			$tpl = new tpl();
@@ -248,7 +232,7 @@ class cron_jailkit_plugin {
 			$tpl->setVar('domain', $this->parent_domain['domain']);
 			$tpl->setVar('home_dir', $this->_get_home_dir(""));
 
-			$bashrc = escapeshellcmd($this->parent_domain['document_root']).'/etc/bash.bashrc';
+			$bashrc = $this->parent_domain['document_root'].'/etc/bash.bashrc';
 			if(@is_file($bashrc) || @is_link($bashrc)) unlink($bashrc);
 
 			$app->system->file_put_contents($bashrc, $tpl->grab());
@@ -261,7 +245,7 @@ class cron_jailkit_plugin {
 
 			$tpl->setVar('domain', $this->parent_domain['domain']);
 
-			$motd = escapeshellcmd($this->parent_domain['document_root']).'/var/run/motd';
+			$motd = $this->parent_domain['document_root'].'/var/run/motd';
 			if(@is_file($motd) || @is_link($motd)) unlink($motd);
 
 			$app->system->file_put_contents($motd, $tpl->grab());
@@ -276,16 +260,16 @@ class cron_jailkit_plugin {
 
 		//copy over further programs and its libraries
 		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
-		$command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
-		$command .= ' \''.$this->jailkit_config['jailkit_chroot_app_programs'].'\'';
-		exec($command.' 2>/dev/null');
+		$command .= ' ?';
+		$command .= ' ?';
+		$app->system->exec_safe($command.' 2>/dev/null', $this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_app_programs']);
 
 		$this->app->log("Added programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
 
 		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
-		$command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
-		$command .= ' \''.$this->jailkit_config['jailkit_chroot_cron_programs'].'\'';
-		exec($command.' 2>/dev/null');
+		$command .= ' ?';
+		$command .= ' ?';
+		$app->system->exec_safe($command.' 2>/dev/null', $this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_cron_programs']);
 
 		$this->app->log("Added cron programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
 	}
@@ -298,30 +282,30 @@ class cron_jailkit_plugin {
 		$jailkit_chroot_userhome = $this->_get_home_dir($this->parent_domain['system_user']);
 
 		if(!is_dir($this->parent_domain['document_root'].'/etc')) mkdir($this->parent_domain['document_root'].'/etc');
-		if(!is_file($this->parent_domain['document_root'].'/etc/passwd')) exec('touch '.$this->parent_domain['document_root'].'/etc/passwd');
+		if(!is_file($this->parent_domain['document_root'].'/etc/passwd')) $app->system->exec_safe('touch ?', $this->parent_domain['document_root'].'/etc/passwd');
 
 		// IMPORTANT!
 		// ALWAYS create the user. Even if the user was created before
 		// if we check if the user exists, then a update (no shell -> jailkit) will not work
 		// and the user has FULL ACCESS to the root of the server!
 		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_user.sh';
-		$command .= ' '.escapeshellcmd($this->parent_domain['system_user']);
-		$command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
-		$command .= ' '.$jailkit_chroot_userhome;
-		$command .= ' '.escapeshellcmd("/bin/bash");
-		exec($command.' 2>/dev/null');
+		$command .= ' ?';
+		$command .= ' ?';
+		$command .= ' ?';
+		$command .= ' /bin/bash';
+		$app->system->exec_safe($command.' 2>/dev/null', $this->parent_domain['system_user'], $this->parent_domain['document_root'], $jailkit_chroot_userhome);
 
 		$this->app->log("Added jailkit user to chroot with command: ".$command, LOGLEVEL_DEBUG);
 
-		$app->system->mkdir(escapeshellcmd($this->parent_domain['document_root'].$jailkit_chroot_userhome), 0755, true);
-		$app->system->chown(escapeshellcmd($this->parent_domain['document_root'].$jailkit_chroot_userhome), escapeshellcmd($this->parent_domain['system_user']));
-		$app->system->chgrp(escapeshellcmd($this->parent_domain['document_root'].$jailkit_chroot_userhome), escapeshellcmd($this->parent_domain['system_group']));
+		$app->system->mkdir($this->parent_domain['document_root'].$jailkit_chroot_userhome, 0755, true);
+		$app->system->chown($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_user']);
+		$app->system->chgrp($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_group']);
 
 	}
 
 	function _get_home_dir($username)
 	{
-		return str_replace("[username]", escapeshellcmd($username), $this->jailkit_config["jailkit_chroot_home"]);
+		return str_replace("[username]", $username, $this->jailkit_config["jailkit_chroot_home"]);
 	}
 
 	//* Update the website root directory permissions depending on the security level
@@ -345,15 +329,5 @@ class cron_jailkit_plugin {
 		}
 	}
 
-	//* Wrapper for exec function for easier debugging
-	private function _exec($command) {
-		global $app;
-		$app->log('exec: '.$command, LOGLEVEL_DEBUG);
-		exec($command);
-	}
-
-
-
 } // end class
 
-?>
diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index fb623b9213..af4e24d974 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -112,15 +112,15 @@ class cron_plugin {
 		// Create group and user, if not exist
 		$app->uses("system");
 
-		$groupname = escapeshellcmd($parent_domain["system_group"]);
+		$groupname = $parent_domain["system_group"];
 		if($parent_domain["system_group"] != '' && !$app->system->is_group($parent_domain["system_group"])) {
-			exec("groupadd $groupname");
+			$app->system->exec_safe("groupadd ?", $groupname);
 			$app->log("Adding the group: $groupname", LOGLEVEL_DEBUG);
 		}
 
-		$username = escapeshellcmd($parent_domain["system_user"]);
+		$username = $parent_domain["system_user"];
 		if($parent_domain["system_user"] != '' && !$app->system->is_user($parent_domain["system_user"])) {
-			exec("useradd -d ".escapeshellcmd($parent_domain["document_root"])." -g $groupname $username -s /bin/false");
+			$app->system->exec_safe("useradd -d ? -g ? ? -s /bin/false", $parent_domain["document_root"], $groupname, $username);
 			$app->log("Adding the user: $username", LOGLEVEL_DEBUG);
 		}
         
@@ -136,19 +136,19 @@ class cron_plugin {
             }
 
             // get the primitive folder for document_root and the filesystem, will need it later.
-            $df_output=explode(" ", exec("df -T " . escapeshellarg($parent_domain["document_root"]) . "|awk 'END{print \$2,\$NF}'"));
+            $df_output=explode(" ", $app->system->exec_safe("df -T ?|awk 'END{print \$2,\$NF}'", $parent_domain["document_root"]));
             $file_system = $df_output[0];
             $primitive_root = $df_output[1];
 
             if ( in_array($file_system , array('ext2','ext3','ext4'),true) ) {
-              exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
-              exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
+              $app->system->exec_safe('setquota -u ? ? ? 0 0 -a &> /dev/null', $username, $blocks_soft, $blocks_hard);
+              $app->system->exec_safe('setquota -T -u ? 604800 604800 -a &> /dev/null', $username);
             } elseif ($file_system == 'xfs') {
                 
-              exec("xfs_quota -x -c 'limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " $username' $primitive_root");
+              $app->system->exec_safe("xfs_quota -x -c ? ?", "limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " $username", $primitive_root);
 
               // xfs only supports timers globally, not per user.
-              exec("xfs_quota -x -c 'timer -bir -i 604800' $primitive_root");
+              $app->system->exec_safe("xfs_quota -x -c 'timer -bir -i 604800' ?", $primitive_root);
 
               unset($project_uid, $username_position, $xfs_projects);
               unset($primitive_root, $df_output, $mb_hard, $mb_soft);
@@ -164,7 +164,7 @@ class cron_plugin {
 		}
 
 		// make temp directory writable for the apache and website users
-		$app->system->chmod(escapeshellcmd($parent_domain["document_root"].'/tmp'), 0777);
+		$app->system->chmod($parent_domain["document_root"].'/tmp', 0777);
 
 		/** TODO READ CRON MASTER **/
 
@@ -272,7 +272,7 @@ class cron_plugin {
 			}
 		}
 
-		$cron_file = escapeshellcmd($cron_config["crontab_dir"].'/ispc_'.$this->parent_domain["system_user"]);
+		$cron_file = $cron_config["crontab_dir"].'/ispc_'.$this->parent_domain["system_user"];
 		//TODO : change this when distribution information has been integrated into server record
 		//* Gentoo vixie-cron requires files to end with .cron in the cron.d directory
 		if (file_exists('/etc/gentoo-release')) {
@@ -287,7 +287,7 @@ class cron_plugin {
 			$app->log("Deleted Cron file $cron_file", LOGLEVEL_DEBUG);
 		}
 
-		$cron_file = escapeshellcmd($cron_config["crontab_dir"].'/ispc_chrooted_'.$this->parent_domain["system_user"]);
+		$cron_file = $cron_config["crontab_dir"].'/ispc_chrooted_'.$this->parent_domain["system_user"];
 		if($chr_cmd_count > 0) {
 			$app->system->file_put_contents($cron_file, $chr_cron_content);
 			$app->log("Wrote Cron file $cron_file with content:\n$chr_cron_content", LOGLEVEL_DEBUG);
diff --git a/server/plugins-available/firewall_plugin.inc.php b/server/plugins-available/firewall_plugin.inc.php
index 67ed2379fb..b924f43a26 100644
--- a/server/plugins-available/firewall_plugin.inc.php
+++ b/server/plugins-available/firewall_plugin.inc.php
@@ -145,7 +145,7 @@ class firewall_plugin {
 		//* add tcp ports
 		foreach($tcp_ports_new_array as $port) {
 			if(!in_array($port, $tcp_ports_old_array) && $port > 0) {
-				exec('ufw allow '.$port.'/tcp');
+				$app->system->exec_safe('ufw allow ?', $port.'/tcp');
 				$app->log('ufw allow '.$port.'/tcp', LOGLEVEL_DEBUG);
 				sleep(1);
 			}
@@ -154,7 +154,7 @@ class firewall_plugin {
 		//* remove tcp ports
 		foreach($tcp_ports_old_array as $port) {
 			if(!in_array($port, $tcp_ports_new_array) && $port > 0) {
-				exec('ufw delete allow '.$port.'/tcp');
+				$app->system->exec_safe('ufw delete allow ?', $port.'/tcp');
 				$app->log('ufw delete allow '.$port.'/tcp', LOGLEVEL_DEBUG);
 				sleep(1);
 			}
@@ -163,7 +163,7 @@ class firewall_plugin {
 		//* add udp ports
 		foreach($udp_ports_new_array as $port) {
 			if(!in_array($port, $udp_ports_old_array) && $port > 0) {
-				exec('ufw allow '.$port.'/udp');
+				$app->system->exec_safe('ufw allow ?', $port.'/udp');
 				$app->log('ufw allow '.$port.'/udp', LOGLEVEL_DEBUG);
 				sleep(1);
 			}
@@ -172,32 +172,12 @@ class firewall_plugin {
 		//* remove udp ports
 		foreach($udp_ports_old_array as $port) {
 			if(!in_array($port, $udp_ports_new_array) && $port > 0) {
-				exec('ufw delete allow '.$port.'/udp');
+				$app->system->exec_safe('ufw delete allow ?', $port.'/udp');
 				$app->log('ufw delete allow '.$port.'/udp', LOGLEVEL_DEBUG);
 				sleep(1);
 			}
 		}
 
-		/*
-		if($tcp_ports_new != $tcp_ports_old) {
-			exec('ufw allow to any proto tcp port '.$tcp_ports_new);
-			$app->log('ufw allow to any proto tcp port '.$tcp_ports_new,LOGLEVEL_DEBUG);
-			if($event_name == 'firewall_update') {
-				exec('ufw delete allow to any proto tcp port '.$tcp_ports_old);
-				$app->log('ufw delete allow to any proto tcp port '.$tcp_ports_old,LOGLEVEL_DEBUG);
-			}
-		}
-
-		if($udp_ports_new != $udp_ports_old) {
-			exec('ufw allow to any proto udp port '.$udp_ports_new);
-			$app->log('ufw allow to any proto udp port '.$udp_ports_new,LOGLEVEL_DEBUG);
-			if($event_name == 'firewall_update') {
-				exec('ufw delete allow to any proto udp port '.$udp_ports_old);
-				$app->log('ufw delete allow to any proto udp port '.$udp_ports_old,LOGLEVEL_DEBUG);
-			}
-		}
-		*/
-
 		if($data['new']['active'] == 'y') {
 			if($data['new']['active'] == $data['old']['active']) {
 				exec('ufw reload');
diff --git a/server/plugins-available/getmail_plugin.inc.php b/server/plugins-available/getmail_plugin.inc.php
index a4481037f7..c3f4f7e1dc 100644
--- a/server/plugins-available/getmail_plugin.inc.php
+++ b/server/plugins-available/getmail_plugin.inc.php
@@ -94,7 +94,7 @@ class getmail_plugin {
 			$this->delete($event_name, $data);
 
 			// Get the new config file path
-			$config_file_path = escapeshellcmd($this->getmail_config_dir.'/'.$this->_clean_path($data["new"]["source_server"]).'_'.$this->_clean_path($data["new"]["source_username"]).'.conf');
+			$config_file_path = $this->getmail_config_dir.'/'.$this->_clean_path($data["new"]["source_server"]).'_'.$this->_clean_path($data["new"]["source_username"]).'.conf';
 			if(stristr($config_file_path, "..") or stristr($config_file_path, "|") or stristr($config_file_path, ";") or stristr($config_file_path, '$')) {
 				$app->log("Possibly faked path for getmail config file: '$config_file_path'. File is not written.", LOGLEVEL_ERROR);
 				return false;
@@ -162,7 +162,7 @@ class getmail_plugin {
 		$getmail_config = $app->getconf->get_server_config($conf["server_id"], 'getmail');
 		$this->getmail_config_dir = $getmail_config["getmail_config_dir"];
 
-		$config_file_path = escapeshellcmd($this->getmail_config_dir.'/'.$this->_clean_path($data["old"]["source_server"]).'_'.$this->_clean_path($data["old"]["source_username"]).'.conf');
+		$config_file_path = $this->getmail_config_dir.'/'.$this->_clean_path($data["old"]["source_server"]).'_'.$this->_clean_path($data["old"]["source_username"]).'.conf';
 		if(stristr($config_file_path, "..") || stristr($config_file_path, "|") || stristr($config_file_path, ";") || stristr($config_file_path, '$')) {
 			$app->log("Possibly faked path for getmail config file: '$config_file_path'. File is not written.", LOGLEVEL_ERROR);
 			return false;
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 8275696620..4d5ac826d3 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -125,23 +125,22 @@ class mail_plugin {
 		$group = $app->system->getgroup($data['new']['gid']);
 		//* Create the mail domain directory, if it does not exist
 		if(!empty($base_path) && !is_dir($base_path)) {
-			//exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']);
 			$app->system->mkdirpath($base_path, 0770, $mail_config['mailuser_name'], $mail_config['mailuser_group']); // needs group-access because users of subfolders may differ from vmail
 			$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
 		}
 
 		if ($data['new']['maildir_format'] == 'mdbox') {
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" INBOX'");
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Sent'");
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Trash'");
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Junk'");
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Drafts'");
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? INBOX'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Sent'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]);
 			
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" INBOX'");
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Sent'");
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Trash'");
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Junk'");
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Drafts'");
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Junk'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Drafts'", $data["new"]["email"]);
 		}
 		else {
 			// Dovecot uses a different mail layout with a separate 'Maildir' subdirectory.
@@ -154,53 +153,44 @@ class mail_plugin {
 			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
 				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
-				exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
-				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+				$app->system->exec_safe("su -c ? vmail", "mv -f " . $data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']);
+				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN);
 			}
 	
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!empty($maildomain_path) && !is_dir($maildomain_path)) {
 	
-				//exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
 				$app->system->maildirmake($maildomain_path, $user, '', $group);
 	
 				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
 				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
-					if(is_dir($maildomain_path)) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user); // Avoid maildirmake quota bug, see debian bug #214911
-					$app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user, LOGLEVEL_DEBUG);
+					if(is_dir($maildomain_path)) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$maildomain_path, $user); // Avoid maildirmake quota bug, see debian bug #214911
+					$app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$maildomain_path."' ".$user, LOGLEVEL_DEBUG);
 				}
 			}
 	
 			if(!is_dir($data['new']['maildir'].'/.Sent')) {
-				//exec("su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Sent: '."su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Drafts')) {
-				//exec("su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Drafts: '."su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Drafts', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Trash')) {
-				//exec("su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Trash: '."su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Trash', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Junk')) {
-				//exec("su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Junk: '."su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
 			}
 	
 			// Set permissions now recursive
-			exec('chown -R '.$user.':'.$group.' '.escapeshellcmd($data['new']['maildir']));
-			$app->log('Set ownership on '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_DEBUG);
+			$app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']);
+			$app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 	
 			//* Set the maildir quota
 			if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
 				if($data['new']['quota'] > 0) {
-					if(is_dir($data['new']['maildir'])) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user);
-					$app->log('Set Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user, LOGLEVEL_DEBUG);
+					if(is_dir($data['new']['maildir'])) $app->system->exec_safe("su -c ? ? ", "maildirmake -q ".$data['new']['quota']."S ". $data['new']['maildir'], $user);
+					$app->log('Set Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$data['new']['maildir']."' ".$user, LOGLEVEL_DEBUG);
 				}
 			}
 		}
@@ -269,19 +259,6 @@ class mail_plugin {
 		$app->uses('getconf,system');
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 
-		// convert to lower case - it could cause problems if some directory above has upper case name
-		// $data['new']['maildir'] = strtolower($data['new']['maildir']);
-
-		// Create the maildir, if it does not exist
-		/*
-		if(!is_dir($data['new']['maildir'])) {
-			mkdir(escapeshellcmd($data['new']['maildir']), 0, true);
-			chown(escapeshellcmd($data['new']['maildir']), $mail_config['mailuser_name']);
-			chgrp(escapeshellcmd($data['new']['maildir']), $mail_config['mailuser_group']);
-			$app->log('Created Maildir: '.$data['new']['maildir'],LOGLEVEL_DEBUG);
-		}
-		*/
-
 		// Maildir-Format must not be changed on this way !!
 		$data['new']['maildir_format'] = $data['old']['maildir_format'];
 		
@@ -324,7 +301,6 @@ class mail_plugin {
 
 		//* Create the mail domain directory, if it does not exist
 		if(!empty($base_path) && !is_dir($base_path)) {
-			//exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']);
 			$app->system->mkdirpath($base_path, 0770, $mail_config['mailuser_name'], $mail_config['mailuser_group']); // needs group-access because users of subfolders may differ from vmail
 			$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
 		}
@@ -333,29 +309,26 @@ class mail_plugin {
 			// Move mailbox, if domain has changed and delete old mailbox
 			if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
 				if(is_dir($data['new']['maildir'])) {
-					exec("rm -fr ".escapeshellcmd($data['new']['maildir']));
+					$app->system->exec_safe("rm -fr ?", $data['new']['maildir']);
 					//rmdir($data['new']['maildir']);
 				}
-				exec('mv -f '.escapeshellcmd($data['old']['maildir']).' '.escapeshellcmd($data['new']['maildir']));
-				// exec('mv -f '.escapeshellcmd($data['old']['maildir']).'/* '.escapeshellcmd($data['new']['maildir']));
-				// if(is_file($data['old']['maildir'].'.ispconfig_mailsize'))exec('mv -f '.escapeshellcmd($data['old']['maildir']).'.ispconfig_mailsize '.escapeshellcmd($data['new']['maildir']));
-				// rmdir($data['old']['maildir']);
+				$app->system->exec_safe('mv -f ? ?'. $data['old']['maildir'], $data['new']['maildir']);
 				$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 			}
 				
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!is_dir($data['new']['maildir'].'/mdbox')) {
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" INBOX'");
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Sent'");
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Trash'");
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Junk'");
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Drafts'");
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? INBOX'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Sent'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]);
 					
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" INBOX'");
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Sent'");
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Trash'");
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Junk'");
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Drafts'");
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Junk'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Drafts'", $data["new"]["email"]);
 			}
 		}
 		else {
@@ -369,21 +342,19 @@ class mail_plugin {
 			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
 				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
-				exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
-				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+				$app->system->exec_safe("su -c ? ?", "mv -f ".$data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 'vmail');
+				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN);
 			}
 	
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!empty($maildomain_path) && !is_dir($maildomain_path.'/new')) {
-				//exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log("Created Maildir "."su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, '', $group);
 	
 				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
 				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
 					if($data['new']['quota'] > 0) {
-						if(is_dir($maildomain_path)) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user); // Avoid maildirmake quota bug, see debian bug #214911
-						$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user, LOGLEVEL_DEBUG);
+						if(is_dir($maildomain_path)) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$maildomain_path, $user); // Avoid maildirmake quota bug, see debian bug #214911
+						$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$maildomain_path."' ".$user, LOGLEVEL_DEBUG);
 					} else {
 						if(file_exists($data['new']['maildir'].'/maildirsize')) unlink($data['new']['maildir'].'/maildirsize');
 						$app->log('Set Maildir quota to unlimited.', LOGLEVEL_DEBUG);
@@ -392,48 +363,36 @@ class mail_plugin {
 			}
 	
 			if(!is_dir($data['new']['maildir'].'/.Sent')) {
-				//exec("su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Sent: '."su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Drafts')) {
-				//exec("su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Drafts: '."su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Drafts', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Trash')) {
-				//exec("su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Trash: '."su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Trash', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Junk')) {
-				//exec("su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Junk: '."su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
 			}
 	
 			// Set permissions now recursive
-			exec('chown -R '.$user.':'.$group.' '.escapeshellcmd($data['new']['maildir']));
-			$app->log('Set ownership on '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_DEBUG);
+			$app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']);
+			$app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 	
 			// Move mailbox, if domain has changed and delete old mailbox
 			if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
 				if(is_dir($data['new']['maildir'])) {
-					exec("rm -fr ".escapeshellcmd($data['new']['maildir']));
-					//rmdir($data['new']['maildir']);
+					$app->system->exec_safe("rm -fr ?", $data['new']['maildir']);
 				}
-				exec('mv -f '.escapeshellcmd($data['old']['maildir']).' '.escapeshellcmd($data['new']['maildir']));
-				// exec('mv -f '.escapeshellcmd($data['old']['maildir']).'/* '.escapeshellcmd($data['new']['maildir']));
-				// if(is_file($data['old']['maildir'].'.ispconfig_mailsize'))exec('mv -f '.escapeshellcmd($data['old']['maildir']).'.ispconfig_mailsize '.escapeshellcmd($data['new']['maildir']));
-				// rmdir($data['old']['maildir']);
+				$app->system->exec_safe('mv -f ? ?', $data['old']['maildir'], $data['new']['maildir']);
 				$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 			}
 			//This is to fix the maildrop quota not being rebuilt after the quota is changed.
 			// Courier Layout
 			if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
 				if($data['new']['quota'] > 0) {
-					if(is_dir($data['new']['maildir'])) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user);
-					$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user, LOGLEVEL_DEBUG);
+					if(is_dir($data['new']['maildir'])) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$data['new']['maildir'], $user);
+					$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$data['new']['maildir']."' ".$user, LOGLEVEL_DEBUG);
 				} else {
 					if(file_exists($data['new']['maildir'].'/maildirsize')) unlink($data['new']['maildir'].'/maildirsize');
 					$app->log('Set Maildir quota to unlimited.', LOGLEVEL_DEBUG);
@@ -450,9 +409,9 @@ class mail_plugin {
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 
 		$maildir_path_deleted = false;
-		$old_maildir_path = escapeshellcmd($data['old']['maildir']);
+		$old_maildir_path = $data['old']['maildir'];
 		if($old_maildir_path != $mail_config['homedir_path'] && strlen($old_maildir_path) > strlen($mail_config['homedir_path']) && !stristr($old_maildir_path, '//') && !stristr($old_maildir_path, '..') && !stristr($old_maildir_path, '*') && strlen($old_maildir_path) >= 10) {
-			exec('rm -rf '.escapeshellcmd($old_maildir_path));
+			$app->system->exec_safe('rm -rf ?', $old_maildir_path);
 			$app->log('Deleted the Maildir: '.$data['old']['maildir'], LOGLEVEL_DEBUG);
 			$maildir_path_deleted = true;
 		} else {
@@ -474,7 +433,7 @@ class mail_plugin {
 				if (is_array($domain_rec)) {
 					$mail_backup_dir = $backup_dir.'/mail'.$domain_rec['domain_id'];
 					$mail_backup_files = 'mail'.$data['old']['mailuser_id'];
-					exec(escapeshellcmd('rm -f '.$mail_backup_dir.'/'.$mail_backup_files).'*');
+					$app->system->exec_safe('rm -f ?*', $mail_backup_dir.'/'.$mail_backup_files);
 					//* cleanup database
 					$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ? AND mailuser_id = ?";
 					$app->db->query($sql, $conf['server_id'], $domain_rec['domain_id'], $data['old']['mailuser_id']);
@@ -494,9 +453,9 @@ class mail_plugin {
 
 		$maildomain_path_deleted = false;
 		//* Delete maildomain path
-		$old_maildomain_path = escapeshellcmd($mail_config['homedir_path'].'/'.$data['old']['domain']);
+		$old_maildomain_path = $mail_config['homedir_path'].'/'.$data['old']['domain'];
 		if($old_maildomain_path != $mail_config['homedir_path'] && !stristr($old_maildomain_path, '//') && !stristr($old_maildomain_path, '..') && !stristr($old_maildomain_path, '*') && !stristr($old_maildomain_path, '&') && strlen($old_maildomain_path) >= 10  && !empty($data['old']['domain'])) {
-			exec('rm -rf '.escapeshellcmd($old_maildomain_path));
+			$app->system->exec_safe('rm -rf ?', $old_maildomain_path);
 			$app->log('Deleted the mail domain directory: '.$old_maildomain_path, LOGLEVEL_DEBUG);
 			$maildomain_path_deleted = true;
 		} else {
@@ -504,9 +463,9 @@ class mail_plugin {
 		}
 
 		//* Delete mailfilter path
-		$old_maildomain_path = escapeshellcmd($mail_config['homedir_path'].'/mailfilters/'.$data['old']['domain']);
+		$old_maildomain_path = $mail_config['homedir_path'].'/mailfilters/'.$data['old']['domain'];
 		if($old_maildomain_path != $mail_config['homedir_path'].'/mailfilters/' && !stristr($old_maildomain_path, '//') && !stristr($old_maildomain_path, '..') && !stristr($old_maildomain_path, '*') && !stristr($old_maildomain_path, '&') && strlen($old_maildomain_path) >= 10 && !empty($data['old']['domain'])) {
-			exec('rm -rf '.escapeshellcmd($old_maildomain_path));
+			$app->system->exec_safe('rm -rf ?', $old_maildomain_path);
 			$app->log('Deleted the mail domain mailfilter directory: '.$old_maildomain_path, LOGLEVEL_DEBUG);
 		} else {
 			$app->log('Possible security violation when deleting the mail domain mailfilter directory: '.$old_maildomain_path, LOGLEVEL_ERROR);
@@ -521,7 +480,7 @@ class mail_plugin {
 			if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $mount_backup = false;
 			if($mount_backup){
 				$mail_backup_dir = $backup_dir.'/mail'.$data['old']['domain_id'];
-				exec(escapeshellcmd('rm -rf '.$mail_backup_dir));
+				$app->system->exec_safe('rm -rf ?', $mail_backup_dir);
 				//* cleanup database
 				$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ?";
 				$app->db->query($sql, $conf['server_id'], $data['old']['domain_id']);
diff --git a/server/plugins-available/mail_plugin_dkim.inc.php b/server/plugins-available/mail_plugin_dkim.inc.php
index 6f042e9070..b54f4f56c7 100755
--- a/server/plugins-available/mail_plugin_dkim.inc.php
+++ b/server/plugins-available/mail_plugin_dkim.inc.php
@@ -192,7 +192,8 @@ class mail_plugin_dkim {
 			$app->log('Saved DKIM Private-key to '.$key_file.'.private', LOGLEVEL_DEBUG);
 			$success=true;
 			/* now we get the DKIM Public-key */
-			exec('cat '.escapeshellarg($key_file.'.private').'|openssl rsa -pubout 2> /dev/null', $pubkey, $result);
+			$app->system->exec_safe('cat ?|openssl rsa -pubout 2> /dev/null', $key_file.'.private');
+			$pubkey = $app->system->last_exec_out();
 			$public_key='';
 			foreach($pubkey as $values) $public_key=$public_key.$values."\n";
 			/* save the DKIM Public-key in dkim-dir */
diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php
index 99ac9db7d2..e6251aedf1 100644
--- a/server/plugins-available/mailman_plugin.inc.php
+++ b/server/plugins-available/mailman_plugin.inc.php
@@ -73,7 +73,7 @@ class mailman_plugin {
 
 		$this->update_config();
 
-		$pid = exec("nohup /usr/lib/mailman/bin/newlist -u ".escapeshellcmd($data["new"]["domain"])." -e ".escapeshellcmd($data["new"]["domain"])." ".escapeshellcmd($data["new"]["listname"])." ".escapeshellcmd($data["new"]["email"])." ".escapeshellcmd($data["new"]["password"])." >/dev/null 2>&1 & echo $!;");
+		$pid = $app->system->exec_safe("nohup /usr/lib/mailman/bin/newlist -u ? -e ? ? ? ? >/dev/null 2>&1 & echo $!;", $data["new"]["domain"], $data["new"]["domain"], $data["new"]["listname"], $data["new"]["email"], $data["new"]["password"]);
 		// wait for /usr/lib/mailman/bin/newlist-call
 		$running = true;
 		do {
@@ -91,7 +91,7 @@ class mailman_plugin {
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 		
 		// Fix list URL
-		exec('/usr/sbin/withlist -l -r fix_url '.escapeshellcmd($data["new"]["listname"]));
+		$app->system->exec_safe('/usr/sbin/withlist -l -r fix_url ?', $data["new"]["listname"]);
 
 		$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']);
 
@@ -104,7 +104,7 @@ class mailman_plugin {
 		$this->update_config();
 
 		if($data["new"]["password"] != $data["old"]["password"] && $data["new"]["password"] != '') {
-			exec("nohup /usr/lib/mailman/bin/change_pw -l ".escapeshellcmd($data["new"]["listname"])." -p ".escapeshellcmd($data["new"]["password"])." >/dev/null 2>&1 &");
+			$app->system->exec_safe("nohup /usr/lib/mailman/bin/change_pw -l ? -p ? >/dev/null 2>&1 &", $data["new"]["listname"], $data["new"]["password"]);
 			exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 			$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']);
 		}
@@ -118,7 +118,7 @@ class mailman_plugin {
 
 		$this->update_config();
 
-		exec("nohup /usr/lib/mailman/bin/rmlist -a ".escapeshellcmd($data["old"]["listname"])." >/dev/null 2>&1 &");
+		$app->system->exec_safe("nohup /usr/lib/mailman/bin/rmlist -a ? >/dev/null 2>&1 &", $data["old"]["listname"]);
 
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 		
diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index efe7142c8d..a26129eed9 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -344,15 +344,15 @@ class mysql_clientdb_plugin {
 							$triggers_array[] = $row;
 						}
 						$app->log('Dumping triggers from '.$old_name, LOGLEVEL_DEBUG);
-						$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".$old_name." -d -t -R -E > ".$timestamp.$old_name.'.triggers';
-						exec($command, $out, $ret);
+						$command = "mysqldump -h ? -u ? -p? ? -d -t -R -E > ?";
+						$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $old_name, $timestamp.$old_name.'.triggers');
+						$ret = $app->system->last_exec_retcode();
 						$app->system->chmod($timestamp.$old_name.'.triggers', 0600);
 						if ($ret != 0) {
 							unset($triggers_array);
 							$app->system->unlink($timestamp.$old_name.'.triggers');
 							$app->log('Unable to dump triggers from '.$old_name, LOGLEVEL_ERROR);
 						}
-						unset($out);
 					}
 
 					//* save views
@@ -366,15 +366,15 @@ class mysql_clientdb_plugin {
 						}
 						$app->log('Dumping views from '.$old_name, LOGLEVEL_DEBUG);
 						$temp_views = implode(' ', $temp);
-						$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".$old_name." ".$temp_views." > ".$timestamp.$old_name.'.views';
-						exec($command, $out, $ret);
+						$command = "mysqldump -h ? -u ? -p? ? ? > ?";
+						$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $old_name, $temp_views, $timestamp.$old_name.'.views');
+						$ret = $app->system->last_exec_retcode();
 						$app->system->chmod($timestamp.$old_name.'.views', 0600);
 						if ($ret != 0) {
 							unset($views_array);
 							$app->system->unlink($timestamp.$old_name.'.views');
 							$app->log('Unable to dump views from '.$old_name, LOGLEVEL_ERROR);
 						}
-						unset($out);
 						unset($temp);
 						unset($temp_views);
 					}
@@ -405,8 +405,9 @@ class mysql_clientdb_plugin {
 								unset($_trigger);
 							}
 							//* update triggers, routines and events
-							$command = "mysql -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".$new_name." < ".$timestamp.$old_name.'.triggers';
-							exec($command, $out, $ret);
+							$command = "mysql -h ? -u ? -p? ? < ?";
+							$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $new_name, $timestamp.$old_name.'.triggers');
+							$ret = $app->system->last_exec_retcode();
 							if ($ret != 0) {
 								$app->log('Unable to import triggers for '.$new_name, LOGLEVEL_ERROR);
 							} else {
@@ -416,8 +417,9 @@ class mysql_clientdb_plugin {
 
 						//* loading views
 						if (@is_array($views_array)) {
-							$command = "mysql -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".$new_name." < ".$timestamp.$old_name.'.views';
-							exec($command, $out, $ret);
+							$command = "mysql -h ? -u ? -p? ? < ?";
+							$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $new_name, $timestamp.$old_name.'.views');
+							$ret = $app->system->last_exec_retcode();
 							if ($ret != 0) {
 								$app->log('Unable to import views for '.$new_name, LOGLEVEL_ERROR);
 							} else {
diff --git a/server/plugins-available/network_settings_plugin.inc.php b/server/plugins-available/network_settings_plugin.inc.php
index 5ce6f934b8..1ed12f3a1c 100644
--- a/server/plugins-available/network_settings_plugin.inc.php
+++ b/server/plugins-available/network_settings_plugin.inc.php
@@ -280,8 +280,8 @@ class network_settings_plugin {
 				
 				//* Executing the postconf commands
 				foreach($postconf_commands as $cmd) {
-					$command = "postconf -e '$cmd'";
-					exec($command);
+					$command = "postconf -e ?";
+					$app->system->exec_safe($command, $cmd);
 				}
 				
 				$app->log('Changed changed myhostname and mydestination in postfix main.cf to '.$new_hostname, LOGLEVEL_DEBUG);
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 30f9501505..9913299aa5 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -105,7 +105,6 @@ class nginx_plugin {
 		//* Only vhosts can have a ssl cert
 		if($data["new"]["type"] != "vhost" && $data["new"]["type"] != "vhostsubdomain" && $data["new"]["type"] != "vhostalias") return;
 
-		// if(!is_dir($data['new']['document_root'].'/ssl')) exec('mkdir -p '.$data['new']['document_root'].'/ssl');
 		if(!is_dir($data['new']['document_root'].'/ssl') && !is_dir($data['old']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
 
 		$ssl_dir = $data['new']['document_root'].'/ssl';
@@ -170,36 +169,36 @@ class nginx_plugin {
 			$ssl_cnf_file = $ssl_dir.'/openssl.conf';
 			$app->system->file_put_contents($ssl_cnf_file, $ssl_cnf);
 
-			$rand_file = escapeshellcmd($rand_file);
-			$key_file2 = escapeshellcmd($key_file2);
+			$rand_file = $rand_file;
+			$key_file2 = $key_file2;
 			$openssl_cmd_key_file2 = $key_file2;
 			if(substr($domain, 0, 2) == '*.' && strpos($key_file2, '/ssl/\*.') !== false) $key_file2 = str_replace('/ssl/\*.', '/ssl/*.', $key_file2); // wildcard certificate
-			$key_file = escapeshellcmd($key_file);
+			$key_file = $key_file;
 			$openssl_cmd_key_file = $key_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($key_file, '/ssl/\*.') !== false) $key_file = str_replace('/ssl/\*.', '/ssl/*.', $key_file); // wildcard certificate
 			$ssl_days = 3650;
-			$csr_file = escapeshellcmd($csr_file);
+			$csr_file = $csr_file;
 			$openssl_cmd_csr_file = $csr_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($csr_file, '/ssl/\*.') !== false) $csr_file = str_replace('/ssl/\*.', '/ssl/*.', $csr_file); // wildcard certificate
-			$config_file = escapeshellcmd($ssl_cnf_file);
-			$crt_file = escapeshellcmd($crt_file);
+			$config_file = $ssl_cnf_file;
+			$crt_file = $crt_file;
 			$openssl_cmd_crt_file = $crt_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($crt_file, '/ssl/\*.') !== false) $crt_file = str_replace('/ssl/\*.', '/ssl/*.', $crt_file); // wildcard certificate
 
 			if(is_file($ssl_cnf_file) && !is_link($ssl_cnf_file)) {
 
-				exec("openssl genrsa -des3 -rand $rand_file -passout pass:$ssl_password -out $openssl_cmd_key_file2 2048");
-				exec("openssl req -new -sha256 -passin pass:$ssl_password -passout pass:$ssl_password -key $openssl_cmd_key_file2 -out $openssl_cmd_csr_file -days $ssl_days -config $config_file");
-				exec("openssl rsa -passin pass:$ssl_password -in $openssl_cmd_key_file2 -out $openssl_cmd_key_file");
+				$app->system->exec_safe("openssl genrsa -des3 -rand ? -passout pass:? -out ? 2048", $rand_file, $ssl_password, $openssl_cmd_key_file2);
+				$app->system->exec_safe("openssl req -new -sha256 -passin pass:? -passout pass:? -key ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $ssl_days, $config_file);
+				$app->system->exec_safe("openssl rsa -passin pass:? -in ? -out ?", $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_key_file);
 
 				if(file_exists($web_config['CA_path'].'/openssl.cnf'))
 				{
-					exec("openssl ca -batch -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file");
+					$app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file);
 					$app->log("Creating CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 					if (filesize($crt_file)==0 || !file_exists($crt_file)) $app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file", LOGLEVEL_ERROR);
 				};
 				if (@filesize($crt_file)==0 || !file_exists($crt_file)){
-					exec("openssl req -x509 -passin pass:$ssl_password -passout pass:$ssl_password -key $openssl_cmd_key_file2 -in $openssl_cmd_csr_file -out $openssl_cmd_crt_file -days $ssl_days -config $config_file ");
+					$app->system->exec_safe("openssl req -x509 -passin pass:? -passout pass:? -key ? -in ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $openssl_cmd_crt_file, $ssl_days, $config_file);
 					$app->log("Creating self-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 				};
 
@@ -240,7 +239,8 @@ class nginx_plugin {
 		if($data["new"]["ssl_action"] == 'save') {
 			$tmp = array();
 			$crt_data = '';
-			exec('openssl x509 -noout -text -in '.escapeshellarg($crt_file),$tmp);
+			$app->system->exec_safe('openssl x509 -noout -text -in ?', $crt_file);
+			$tmp = $app->system->last_exec_out();
 			$crt_data = implode("\n",$tmp);
 			if(stristr($crt_data,'.acme.invalid')) {
 				$data["new"]["ssl_action"] = '';
@@ -303,7 +303,7 @@ class nginx_plugin {
 		if($data['new']['ssl_action'] == 'del') {
 			if(file_exists($web_config['CA_path'].'/openssl.cnf') && !is_link($web_config['CA_path'].'/openssl.cnf'))
 			{
-				exec("openssl ca -batch -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -revoke ".escapeshellcmd($crt_file));
+				$app->system->exec_safe("openssl ca -batch -config ? -passin pass:? -revoke ?", $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $crt_file);
 				$app->log("Revoking CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 			};
 			$app->system->unlink($csr_file);
@@ -439,31 +439,31 @@ class nginx_plugin {
 
 			//* Check if a ispconfigend user and group exists and create them
 			if(!$app->system->is_group('ispconfigend')) {
-				exec('groupadd --gid '.($connect_userid_to_webid_start + 10000).' ispconfigend');
+				$app->system->exec_safe('groupadd --gid ? ispconfigend', $connect_userid_to_webid_start + 10000);
 			}
 			if(!$app->system->is_user('ispconfigend')) {
-				exec('useradd -g ispconfigend -d /usr/local/ispconfig --uid '.($connect_userid_to_webid_start + 10000).' ispconfigend');
+				$app->system->exec_safe('useradd -g ispconfigend -d /usr/local/ispconfig --uid ? ispconfigend', $connect_userid_to_webid_start + 10000);
 			}
 		} else {
 			$fixed_uid_param = '';
 			$fixed_gid_param = '';
 		}
 
-		$groupname = escapeshellcmd($data['new']['system_group']);
+		$groupname = $data['new']['system_group'];
 		if($data['new']['system_group'] != '' && !$app->system->is_group($data['new']['system_group'])) {
-			exec('groupadd '.$fixed_gid_param.' '.$groupname);
-			if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' groupadd '.$groupname);
+			$app->system->exec_safe('groupadd ? ?', $fixed_gid_param, $groupname);
+			if($nginx_chrooted) $app->system->exec_safe('chroot ? groupadd ?', $web_config['website_basedir'], $groupname);
 			$app->log('Adding the group: '.$groupname, LOGLEVEL_DEBUG);
 		}
 
-		$username = escapeshellcmd($data['new']['system_user']);
+		$username = $data['new']['system_user'];
 		if($data['new']['system_user'] != '' && !$app->system->is_user($data['new']['system_user'])) {
 			if($web_config['add_web_users_to_sshusers_group'] == 'y') {
-				exec('useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param -G sshusers $username -s /bin/false");
-				if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param -G sshusers $username -s /bin/false");
+				$app->system->exec_safe('useradd -d ? -g ? ? -G sshusers ? -s /bin/false', $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
+				if($nginx_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ? -G sshusers ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
 			} else {
-				exec('useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param $username -s /bin/false");
-				if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param $username -s /bin/false");
+				$app->system->exec_safe('useradd -d ? -g ? ? ? -s /bin/false', $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
+				if($nginx_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ? ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
 			}
 			$app->log('Adding the user: '.$username, LOGLEVEL_DEBUG);
 		}
@@ -486,7 +486,7 @@ class nginx_plugin {
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// create the symlinks, if not exist
 					if(is_link($tmp_symlink)) {
-						exec('rm -f '.escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe('rm -f ?', $tmp_symlink);
 						$app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG);
 					}
 				}
@@ -510,12 +510,12 @@ class nginx_plugin {
 				}
 				
 				//* Unmount the old log directory bfore we move the log dir
-				exec('umount '.escapeshellcmd($old_dir.'/log'));
+				$app->system->exec_safe('umount ?', $old_dir.'/log');
 
 				//* Create new base directory, if it does not exist yet
 				if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
 				$app->system->web_folder_protection($data['old']['document_root'], false);
-				exec('mv '.escapeshellarg($data['old']['document_root']).' '.escapeshellarg($new_dir));
+				$app->system->exec_safe('mv ? ?', $data['old']['document_root'], $new_dir);
 				//$app->system->rename($data['old']['document_root'],$new_dir);
 				$app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir, LOGLEVEL_DEBUG);
 
@@ -523,17 +523,17 @@ class nginx_plugin {
 				$data['new']['php_open_basedir'] = str_replace($data['old']['document_root'], $data['new']['document_root'], $data['old']['php_open_basedir']);
 
 				//* Change the owner of the website files to the new website owner
-				exec('chown --recursive --from='.escapeshellcmd($data['old']['system_user']).':'.escapeshellcmd($data['old']['system_group']).' '.escapeshellcmd($data['new']['system_user']).':'.escapeshellcmd($data['new']['system_group']).' '.$new_dir);
+				$app->system->exec_safe('chown --recursive --from=?:? ?:? ?', $data['old']['system_user'], $data['old']['system_group'], $data['new']['system_user'], $data['new']['system_group'], $new_dir);
 
 				//* Change the home directory and group of the website user
-				$command = 'killall -u '.escapeshellcmd($data['new']['system_user']).' ; usermod';
-				$command .= ' --home '.escapeshellcmd($data['new']['document_root']);
-				$command .= ' --gid '.escapeshellcmd($data['new']['system_group']);
-				$command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null';
-				exec($command);
+				$command = 'killall -u ? ; usermod';
+				$command .= ' --home ?';
+				$command .= ' --gid ?';
+				$command .= ' ? 2>/dev/null';
+				$app->system->exec_safe($command, $data['new']['system_user'], $data['new']['document_root'], $data['new']['system_group'], $data['new']['system_user']);
 			}
 
-			if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+			if($nginx_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 			//* Change the log mount
 			/*
@@ -555,7 +555,7 @@ class nginx_plugin {
 				$app->system->replaceLine('/etc/fstab', $fstab_line_old, $fstab_line, 0, 1);
 			}
 			
-			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
+			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 
 		}
 
@@ -567,11 +567,9 @@ class nginx_plugin {
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/error') and $data['new']['errordocs']) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/error');
 		if($data['new']['stats_type'] != '' && !is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/stats');
-		//if(!is_dir($data['new']['document_root'].'/'.$log_folder)) exec('mkdir -p '.$data['new']['document_root'].'/'.$log_folder);
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
 		if(!is_dir($data['new']['document_root'].'/cgi-bin')) $app->system->mkdirpath($data['new']['document_root'].'/cgi-bin');
 		if(!is_dir($data['new']['document_root'].'/tmp')) $app->system->mkdirpath($data['new']['document_root'].'/tmp');
-		//if(!is_dir($data['new']['document_root'].'/webdav')) $app->system->mkdirpath($data['new']['document_root'].'/webdav');
 		
 		if(!is_dir($data['new']['document_root'].'/.ssh')) {
 			$app->system->mkdirpath($data['new']['document_root'].'/.ssh');
@@ -591,7 +589,7 @@ class nginx_plugin {
 
 		// Remove the symlink for the site, if site is renamed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) exec('rm -rf /var/log/ispconfig/httpd/'.$data['old']['domain']);
+			if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) $app->system->exec_safe('rm -rf ?', '/var/log/ispconfig/httpd/'.$data['old']['domain']);
 			if(is_link($data['old']['document_root'].'/'.$old_log_folder)) $app->system->unlink($data['old']['document_root'].'/'.$old_log_folder);
 
 			//* remove old log mount
@@ -599,19 +597,18 @@ class nginx_plugin {
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 
 			//* Unmount log directory
-			//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
-			exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
+			$app->system->exec_safe('umount ?', $data['old']['document_root'].'/'.$old_log_folder);
 		}
 
 		//* Create the log dir if nescessary and mount it
 		if(!is_dir($data['new']['document_root'].'/'.$log_folder) || !is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain']) || is_link($data['new']['document_root'].'/'.$log_folder)) {
 			if(is_link($data['new']['document_root'].'/'.$log_folder)) unlink($data['new']['document_root'].'/'.$log_folder);
-			if(!is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain'])) exec('mkdir -p /var/log/ispconfig/httpd/'.$data['new']['domain']);
+			if(!is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain'])) $app->system->exec_safe('mkdir -p ?', '/var/log/ispconfig/httpd/'.$data['new']['domain']);
 			$app->system->mkdirpath($data['new']['document_root'].'/'.$log_folder);
 			$app->system->chown($data['new']['document_root'].'/'.$log_folder, 'root');
 			$app->system->chgrp($data['new']['document_root'].'/'.$log_folder, 'root');
 			$app->system->chmod($data['new']['document_root'].'/'.$log_folder, 0755);
-			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
+			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 			//* add mountpoint to fstab
 			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nobootwait';
 			$fstab_line .= @($web_config['network_filesystem'] == 'y')?',_netdev    0 0':'    0 0';
@@ -636,7 +633,7 @@ class nginx_plugin {
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// remove the symlinks, if not exist
 					if(is_link($tmp_symlink)) {
-						exec('rm -f '.escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe('rm -f ?', $tmp_symlink);
 						$app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG);
 					}
 				}
@@ -657,11 +654,10 @@ class nginx_plugin {
 				}
 				// create the symlinks, if not exist
 				if(!is_link($tmp_symlink)) {
-					//     exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
 					if ($web_config["website_symlinks_rel"] == 'y') {
-						$app->system->create_relative_link(escapeshellcmd($data["new"]["document_root"]), escapeshellcmd($tmp_symlink));
+						$app->system->create_relative_link($data["new"]["document_root"], $tmp_symlink);
 					} else {
-						exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe("ln -s ? ?", $data["new"]["document_root"]."/", $tmp_symlink);
 					}
 
 					$app->log('Creating symlink: ln -s '.$data['new']['document_root'].'/ '.$tmp_symlink, LOGLEVEL_DEBUG);
@@ -681,69 +677,65 @@ class nginx_plugin {
 
 			// Copy the error pages
 			if($data['new']['errordocs']) {
-				$error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/';
-				if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-					exec('cp ' . $conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+				$error_page_path = $data['new']['document_root'].'/' . $web_folder . '/error/';
+				if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2))) {
+					$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 				}
 				else {
 					if (file_exists($conf['rootpath'] . '/conf-custom/error/400.html')) {
-						exec('cp '. $conf['rootpath'] . '/conf-custom/error/*.html '.$error_page_path);
+						$app->system->exec_safe('cp ?*.html ?', $conf['rootpath'] . '/conf-custom/error/', $error_page_path);
 					}
 					else {
-						exec('cp ' . $conf['rootpath'] . '/conf/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+						$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 					}
 				}
-				exec('chmod -R a+r '.$error_page_path);
+				$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
 			}
 			
 			//* Copy the web skeleton files only when there is no index.ph or index.html file yet
 			if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php')) {
-				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-					if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2).' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language']), 0, 2)) {
+					if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html');
 
 					if(is_file($conf['rootpath'] . '/conf-custom/index/favicon.ico')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/favicon.ico')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/favicon.ico '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/');
 					}
 					if(is_file($conf['rootpath'] . '/conf-custom/index/robots.txt')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/robots.txt')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/robots.txt '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/');
 					}
-					//if(is_file($conf['rootpath'] . '/conf-custom/index/.htaccess')) {
-					//	exec('cp ' . $conf['rootpath'] . '/conf-custom/index/.htaccess '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
-					//}
 				} else {
 					if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/standard_index.html '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html', $data['new']['document_root'].'/' . $web_folder . '/index.html');
 					} else {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2).' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html');
 						if(is_file($conf['rootpath'] . '/conf/index/favicon.ico')){
-							if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/favicon.ico')) exec('cp ' . $conf['rootpath'] . '/conf/index/favicon.ico '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+							if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/');
 						}
 						if(is_file($conf['rootpath'] . '/conf/index/robots.txt')){
-							if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/robots.txt')) exec('cp ' . $conf['rootpath'] . '/conf/index/robots.txt '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+							if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/');
 						}
-						//if(is_file($conf['rootpath'] . '/conf/index/.htaccess')) exec('cp ' . $conf['rootpath'] . '/conf/index/.htaccess '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
 					}
 				}
 			}
-			exec('chmod -R a+r '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+			$app->system->exec_safe('chmod -R a+r ?', $data['new']['document_root'].'/' . $web_folder . '/');
 
 			//** Copy the error documents on update when the error document checkbox has been activated and was deactivated before
 		} elseif ($this->action == 'update' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') && $data['old']['errordocs'] == 0 && $data['new']['errordocs'] == 1) {
 
-			$error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/';
-			if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-				exec('cp ' . $conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+			$error_page_path = $data['new']['document_root'].'/' . $web_folder . '/error/';
+			if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2))) {
+				$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 			}
 			else {
 				if (file_exists($conf['rootpath'] . '/conf-custom/error/400.html')) {
-					exec('cp ' . $conf['rootpath'] . '/conf-custom/error/*.html '.$error_page_path);
+					$app->system->exec_safe('cp ?*.html ?', $conf['rootpath'] . '/conf-custom/error/', $error_page_path);
 				}
 				else {
-					exec('cp ' . $conf['rootpath'] . '/conf/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+					$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 				}
 			}
-			exec('chmod -R a+r '.$error_page_path);
-			exec('chown -R '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.$error_page_path);
+			$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
+			$app->system->exec_safe('chown -R ?:? ?', $data['new']['system_user'], $data['new']['system_group'], $error_page_path);
 		}  // end copy error docs
 
 		// Set the quota for the user, but only for vhosts, not vhostsubdomains or vhostalias
@@ -758,39 +750,39 @@ class nginx_plugin {
 			}
 
 			// get the primitive folder for document_root and the filesystem, will need it later.
-			$df_output=explode(" ", exec("df -T " . escapeshellarg($data['new']['document_root']) . "|awk 'END{print \$2,\$NF}'"));
+			$df_output=explode(" ", $app->system->exec_safe("df -T ?|awk 'END{print \$2,\$NF}'", $data['new']['document_root']));
 			$file_system = $df_output[0];
 			$primitive_root = $df_output[1];
 
 			if($file_system == 'xfs') {
-				exec("xfs_quota -x -c " . escapeshellarg("limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " " . $username) . " " . escapeshellarg($primitive_root));
+				$app->system->exec_safe("xfs_quota -x -c ? ?", "limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " " . $username, $primitive_root);
 
 				// xfs only supports timers globally, not per user.
-				exec("xfs_quota -x -c 'timer -bir -i 604800' " . escapeshellarg($primitive_root));
+				$app->system->exec_safe("xfs_quota -x -c 'timer -bir -i 604800' ?", $primitive_root);
 
 				unset($project_uid, $username_position, $xfs_projects);
 				unset($primitive_root, $df_output, $mb_hard, $mb_soft);
 			} else {
 				if($app->system->is_installed('setquota')) {
-					exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
-					exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
+					$app->system->exec_safe('setquota -u ? ? ? 0 0 -a &> /dev/null', $username, $blocks_soft, $blocks_hard);
+					$app->system->exec_safe('setquota -T -u ? 604800 604800 -a &> /dev/null', $username);
 				}
 			}
 		}
 
 		if($this->action == 'insert' || $data["new"]["system_user"] != $data["old"]["system_user"]) {
 			// Chown and chmod the directories below the document root
-			$app->system->_exec('chown -R '.$username.':'.$groupname.' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder);
 			// The document root itself has to be owned by root in normal level and by the web owner in security level 20
 			if($web_config['security_level'] == 20) {
-				$app->system->_exec('chown '.$username.':'.$groupname.' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+				$app->system->exec_safe('chown ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder);
 			} else {
-				$app->system->_exec('chown root:root '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+				$app->system->exec_safe('chown root:root ?', $data['new']['document_root'].'/' . $web_folder);
 			}
 		}
 
 		//* add the nginx user to the client group if this is a vhost and security level is set to high, no matter if this is an insert or update and regardless of set_folder_permissions_on_update
-		if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, escapeshellcmd($web_config['nginx_user']));
+		if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, $web_config['nginx_user']);
 
 		//* If the security level is set to high
 		if(($this->action == 'insert' && $data['new']['type'] == 'vhost') or ($web_config['set_folder_permissions_on_update'] == 'y' && $data['new']['type'] == 'vhost') or ($web_folder != $old_web_folder && $data['new']['type'] == 'vhost')) {
@@ -820,18 +812,18 @@ class nginx_plugin {
 				if($web_config['add_web_users_to_sshusers_group'] == 'y') {
 					$command = 'usermod';
 					$command .= ' --groups sshusers';
-					$command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null';
-					$app->system->_exec($command);
+					$command .= ' ? 2>/dev/null';
+					$app->system->exec_safe($command, $data['new']['system_user']);
 				}
 
 				//* if we have a chrooted nginx environment
 				if($nginx_chrooted) {
-					$app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+					$app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 					//* add the nginx user to the client group in the chroot environment
 					$tmp_groupfile = $app->system->server_conf['group_datei'];
 					$app->system->server_conf['group_datei'] = $web_config['website_basedir'].'/etc/group';
-					$app->system->add_user_to_group($groupname, escapeshellcmd($web_config['nginx_user']));
+					$app->system->add_user_to_group($groupname, $web_config['nginx_user']);
 					$app->system->server_conf['group_datei'] = $tmp_groupfile;
 					unset($tmp_groupfile);
 				}
@@ -945,7 +937,7 @@ class nginx_plugin {
 
 		if($data['new']['type'] == 'vhost') {
 			// Change the ownership of the error log to the root user
-			if(!@is_file('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log')) exec('touch '.escapeshellcmd('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log'));
+			if(!@is_file('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log')) $app->system->exec_safe('touch ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log');
 			$app->system->chown('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 			$app->system->chgrp('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 		}
@@ -1023,14 +1015,14 @@ class nginx_plugin {
 		}
 
 		if($default_php_fpm){
-			$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+			$pool_dir = $web_config['php_fpm_pool_dir'];
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
 		$pool_dir = trim($pool_dir);
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['new']['domain_id'];
-		$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
+		$socket_dir = $web_config['php_fpm_socket_dir'];
 		if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
 
 		if($data['new']['php_fpm_use_socket'] == 'y'){
@@ -1814,7 +1806,7 @@ class nginx_plugin {
 		$basic_auth_locations = $this->_create_web_folder_auth_configuration($data['new']);
 		if(is_array($basic_auth_locations) && !empty($basic_auth_locations)) $tpl->setLoop('basic_auth_locations', $basic_auth_locations);
 
-		$vhost_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_file = $web_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost';
 		//* Make a backup copy of vhost file
 		if(file_exists($vhost_file)) copy($vhost_file, $vhost_file.'~');
 
@@ -1825,17 +1817,17 @@ class nginx_plugin {
 
 		//* Set the symlink to enable the vhost
 		//* First we check if there is a old type of symlink and remove it
-		$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost';
 		if(is_link($vhost_symlink)) $app->system->unlink($vhost_symlink);
 
 		//* Remove old or changed symlinks
 		if($data['new']['subdomain'] != $data['old']['subdomain'] or $data['new']['active'] == 'n') {
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -1844,9 +1836,9 @@ class nginx_plugin {
 
 		//* New symlink
 		if($data['new']['subdomain'] == '*') {
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost';
 		} else {
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost';
 		}
 		if($data['new']['active'] == 'y' && !is_link($vhost_symlink)) {
 			symlink($vhost_file, $vhost_symlink);
@@ -1855,22 +1847,22 @@ class nginx_plugin {
 
 		// remove old symlink and vhost file, if domain name of the site has changed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 			$app->system->unlink($vhost_file);
 			$app->log('Removing file: '.$vhost_file, LOGLEVEL_DEBUG);
 		}
@@ -2062,14 +2054,10 @@ class nginx_plugin {
 		if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias'){
 			if(is_array($log_folders) && !empty($log_folders)){
 				foreach($log_folders as $log_folder){
-					//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
-					//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
-					exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
+					$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 				}
 			} else {
-				//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
-				//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
-				exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
+				$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 			}
 			
 			// remove letsencrypt if it exists (renew will always fail otherwise)
@@ -2109,19 +2097,19 @@ class nginx_plugin {
 		} else {
 			//* This is a website
 			// Deleting the vhost file, symlink and the data directory
-			$vhost_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -2131,11 +2119,11 @@ class nginx_plugin {
 			$app->log('Removing vhost file: '.$vhost_file, LOGLEVEL_DEBUG);
 
 			if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') {
-				$docroot = escapeshellcmd($data['old']['document_root']);
+				$docroot = $data['old']['document_root'];
 				if($docroot != '' && !stristr($docroot, '..')) {
 					if($data['old']['type'] == 'vhost') {
 						// this is a vhost - we delete everything in here.
-						exec('rm -rf '.$docroot);
+						$app->system->exec_safe('rm -rf ?', $docroot);
 					} elseif(!stristr($data['old']['web_folder'], '..')) {
 						// this is a vhost subdomain
 						// IMPORTANT: do some folder checks before we delete this!
@@ -2185,7 +2173,7 @@ class nginx_plugin {
 							unset($used_paths);
 						}
 
-						if($do_delete === true && $delete_folder !== '') exec('rm -rf '.$docroot.'/'.$delete_folder);
+						if($do_delete === true && $delete_folder !== '') $app->system->exec_safe('rm -rf ?', $docroot.'/'.$delete_folder);
 
 						unset($delete_folder);
 						unset($path_elements);
@@ -2198,12 +2186,12 @@ class nginx_plugin {
 					$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['fastcgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($fastcgi_starter_path)) {
-							exec('rm -rf '.$fastcgi_starter_path);
+							$app->system->exec_safe('rm -rf ?', $fastcgi_starter_path);
 						}
 					} else {
 						$fcgi_starter_script = $fastcgi_starter_path.$web_config['fastcgi_starter_script'].'_web'.$data['old']['domain_id'];
 						if (file_exists($fcgi_starter_script)) {
-							exec('rm -f '.$fcgi_starter_script);
+							$app->system->exec_safe('rm -f ?', $fcgi_starter_script);
 						}
 					}
 				}
@@ -2224,12 +2212,12 @@ class nginx_plugin {
 					$cgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['cgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($cgi_starter_path)) {
-							exec('rm -rf '.$cgi_starter_path);
+							$app->system->exec_safe('rm -rf ?', $cgi_starter_path);
 						}
 					} else {
 						$cgi_starter_script = $cgi_starter_path.'php-cgi-starter_web'.$data['old']['domain_id'];
 						if (file_exists($cgi_starter_script)) {
-							exec('rm -f '.$cgi_starter_script);
+							$app->system->exec_safe('rm -f ?', $cgi_starter_script);
 						}
 					}
 				}
@@ -2258,16 +2246,16 @@ class nginx_plugin {
 			}
 
 			// Delete the log file directory
-			$vhost_logfile_dir = escapeshellcmd('/var/log/ispconfig/httpd/'.$data['old']['domain']);
-			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) exec('rm -rf '.$vhost_logfile_dir);
+			$vhost_logfile_dir = '/var/log/ispconfig/httpd/'.$data['old']['domain'];
+			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) $app->system->exec_safe('rm -rf ?', $vhost_logfile_dir);
 			$app->log('Removing website logfile directory: '.$vhost_logfile_dir, LOGLEVEL_DEBUG);
 
 			if($data['old']['type'] == 'vhost') {
 				//delete the web user
-				$command = 'killall -u '.escapeshellcmd($data['old']['system_user']).' ; userdel';
-				$command .= ' '.escapeshellcmd($data['old']['system_user']);
-				exec($command);
-				if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+				$command = 'killall -u ? ; userdel';
+				$command .= ' ?';
+				$app->system->exec_safe($command, $data['old']['system_user'], $data['old']['system_user']);
+				if($nginx_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 			}
 
@@ -2288,7 +2276,7 @@ class nginx_plugin {
 					if($mount_backup){
 						$web_backup_dir = $backup_dir.'/web'.$data_old['domain_id'];
 						//** do not use rm -rf $web_backup_dir because database(s) may exits
-						exec(escapeshellcmd('rm -f '.$web_backup_dir.'/web'.$data_old['domain_id'].'_').'*');
+						$app->system->exec_safe('rm -f ?*', $web_backup_dir.'/web'.$data_old['domain_id'].'_');
 						//* cleanup database
 						$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename LIKE ?";
 						$app->db->query($sql, $conf['server_id'], $data_old['domain_id'], "web".$data_old['domain_id']."_%");
@@ -2338,7 +2326,7 @@ class nginx_plugin {
 		//* Get the folder path.
 		if(substr($folder['path'], 0, 1) == '/') $folder['path'] = substr($folder['path'], 1);
 		if(substr($folder['path'], -1) == '/') $folder['path'] = substr($folder['path'], 0, -1);
-		$folder_path = escapeshellcmd($website['document_root'].'/' . $web_folder . '/'.$folder['path']);
+		$folder_path = $website['document_root'].'/' . $web_folder . '/'.$folder['path'];
 		if(substr($folder_path, -1) != '/') $folder_path .= '/';
 
 		//* Check if the resulting path is inside the docroot
@@ -2444,7 +2432,7 @@ class nginx_plugin {
 
 		if(substr($data['new']['path'], 0, 1) == '/') $data['new']['path'] = substr($data['new']['path'], 1);
 		if(substr($data['new']['path'], -1) == '/') $data['new']['path'] = substr($data['new']['path'], 0, -1);
-		$new_folder_path = escapeshellcmd($website['document_root'].'/' . $web_folder . '/'.$data['new']['path']);
+		$new_folder_path = $website['document_root'].'/' . $web_folder . '/'.$data['new']['path'];
 		if(substr($new_folder_path, -1) != '/') $new_folder_path .= '/';
 
 		//* Check if the resulting path is inside the docroot
@@ -2491,7 +2479,7 @@ class nginx_plugin {
 		//* Create the domain.auth file which is included in the vhost configuration file
 		$app->uses('getconf');
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
-		$basic_auth_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$website['domain'].'.auth');
+		$basic_auth_file = $web_config['nginx_vhost_conf_dir'].'/'.$website['domain'].'.auth';
 		//$app->load('tpl');
 		//$tpl = new tpl();
 		//$tpl->newTemplate('nginx_http_authentication.auth.master');
@@ -2616,9 +2604,9 @@ class nginx_plugin {
 
 			$content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content);
 			file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content);
-			exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1');
-			exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1');
-			exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
+			$app->system->exec_safe('chmod +x ? >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
+			$app->system->exec_safe('/usr/sbin/update-rc.d ? defaults >/dev/null 2>&1', 'hhvm_' . $data['new']['system_user']);
+			$app->system->exec_safe('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
 			
 			if(is_dir('/etc/monit/conf.d')){
 				$monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
@@ -2630,7 +2618,7 @@ class nginx_plugin {
  		} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
 			if($data['old']['system_user'] != ''){
 				exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
-				exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1');
+				$app->system->exec_safe('/usr/sbin/update-rc.d remove >/dev/null 2>&1', 'hhvm_' . $data['old']['system_user']);
 				unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
 				if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
 			}
@@ -2743,7 +2731,7 @@ class nginx_plugin {
 		$tpl->setVar('document_root', $data['new']['document_root']);
 		$tpl->setVar('security_level', $web_config['security_level']);
 		$tpl->setVar('domain', $data['new']['domain']);
-		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
+		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
 		$tpl->setVar('php_open_basedir', $php_open_basedir);
 		if($php_open_basedir != ''){
 			$tpl->setVar('enable_php_open_basedir', '');
@@ -2830,7 +2818,7 @@ class nginx_plugin {
 		unset($tpl);
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
+		$default_pool_dir = trim($web_config['php_fpm_pool_dir']);
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -2875,7 +2863,7 @@ class nginx_plugin {
 		}
 
 		if($default_php_fpm){
-			$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+			$pool_dir = $web_config['php_fpm_pool_dir'];
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
@@ -2890,7 +2878,7 @@ class nginx_plugin {
 		}
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
+		$default_pool_dir = trim($web_config['php_fpm_pool_dir']);
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -3093,7 +3081,7 @@ class nginx_plugin {
 			}
 
 			if($app->system->is_group('client'.$client_id)){
-				$app->system->_exec('groupdel client'.$client_id);
+				$app->system->exec_safe('groupdel ?', 'client'.$client_id);
 				$app->log('Removed group client'.$client_id, LOGLEVEL_DEBUG);
 			}
 		}
diff --git a/server/plugins-available/nginx_reverseproxy_plugin.inc.php b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
index b5881dbf24..1013042254 100644
--- a/server/plugins-available/nginx_reverseproxy_plugin.inc.php
+++ b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
@@ -176,7 +176,7 @@ class nginx_reverseproxy_plugin {
 		}
 
 
-		$vhost_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_file = $nginx_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost';
 		//* Make a backup copy of vhost file
 		copy($vhost_file, $vhost_file.'~');
 
@@ -187,7 +187,7 @@ class nginx_reverseproxy_plugin {
 
 
 		// Set the symlink to enable the vhost
-		$vhost_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_symlink = $nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost';
 		if($data['new']['active'] == 'y' && !is_link($vhost_symlink)) {
 			symlink($vhost_file, $vhost_symlink);
 			$app->log('Creating symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -199,18 +199,18 @@ class nginx_reverseproxy_plugin {
 			$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 		}
 
-		if(!is_dir('/var/log/ispconfig/nginx/'.$data['new']['domain'])) exec('mkdir -p /var/log/ispconfig/nginx/'.$data['new']['domain']);
+		if(!is_dir('/var/log/ispconfig/nginx/'.$data['new']['domain'])) $app->system->exec_safe('mkdir -p ?', '/var/log/ispconfig/nginx/'.$data['new']['domain']);
 
 		// remove old symlink and vhost file, if domain name of the site has changed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			$vhost_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			unlink($vhost_symlink);
 			$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
-			$vhost_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $nginx_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 			unlink($vhost_file);
 			$app->log('Removing file: '.$vhost_file, LOGLEVEL_DEBUG);
 
-			if(is_dir('/var/log/ispconfig/nginx/'.$data['old']['domain'])) exec('rm -rf /var/log/ispconfig/nginx/'.$data['old']['domain']);
+			if(is_dir('/var/log/ispconfig/nginx/'.$data['old']['domain'])) $app->system->exec_safe('rm -rf ?', '/var/log/ispconfig/nginx/'.$data['old']['domain']);
 		}
 
 		// request a httpd reload when all records have been processed
@@ -232,7 +232,7 @@ class nginx_reverseproxy_plugin {
 	function ssl($event_name, $data) {
 		global $app, $conf;
 
-		if(!is_dir($conf['nginx']['config_dir'].'/ssl')) exec('mkdir -p '.$conf['nginx']['config_dir'].'/ssl');
+		if(!is_dir($conf['nginx']['config_dir'].'/ssl')) $app->system->exec_safe('mkdir -p ?', $conf['nginx']['config_dir'].'/ssl');
 		$ssl_dir = $conf['nginx']['config_dir'].'/ssl';
 		$domain = $data['new']['ssl_domain'];
 		$key_file = $ssl_dir.'/'.$domain.'.key.org';
@@ -250,7 +250,7 @@ class nginx_reverseproxy_plugin {
 			//$csr_file = $ssl_dir.'/'.$domain.".csr";
 			//$crt_file = $ssl_dir.'/'.$domain.".crt";
 			//$bundle_file = $ssl_dir.'/'.$domain.".bundle";
-			$this->_exec('rsync -v -e ssh root@'.$web['ip_address'].':~/$src_ssl_dir '.$ssl_dir);
+			$app->system->exec_safe('rsync -v -e ssh root@?:? ?', $web['ip_address'], '~/'.$src_ssl_dir, $ssl_dir);
 
 			$app->log('Syncing SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
 		}
@@ -284,31 +284,24 @@ class nginx_reverseproxy_plugin {
 
 			//* This is a website
 			// Deleting the vhost file, symlink and the data directory
-			$vhost_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			unlink($vhost_symlink);
 			$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 
-			$vhost_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $nginx_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 			unlink($vhost_file);
 			$app->log('Removing vhost file: '.$vhost_file, LOGLEVEL_DEBUG);
 
 
 
 			// Delete the log file directory
-			$vhost_logfile_dir = escapeshellcmd('/var/log/ispconfig/nginx/'.$data['old']['domain']);
-			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) exec('rm -rf '.$vhost_logfile_dir);
+			$vhost_logfile_dir = '/var/log/ispconfig/nginx/'.$data['old']['domain'];
+			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) $app->system->exec_safe('rm -rf ?', $vhost_logfile_dir);
 			$app->log('Removing website logfile directory: '.$vhost_logfile_dir, LOGLEVEL_DEBUG);
 
 		}
 	}
 
-	//* Wrapper for exec function for easier debugging
-	private function _exec($command) {
-		global $app;
-		$app->log('exec: '.$command, LOGLEVEL_DEBUG);
-		exec($command);
-	}
-
 	function rewrite_insert($event_name, $data) {
 		global $app, $conf;
 
@@ -329,7 +322,7 @@ class nginx_reverseproxy_plugin {
 		$tpl->newTemplate("nginx_reverseproxy_rewrites.conf.master");
 		if (!empty($rules))$tpl->setLoop('nginx_rewrite_rules', $rules);
 
-		$rewrites_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'].'/default.rewrites.conf');
+		$rewrites_file = $nginx_config['nginx_vhost_conf_dir'].'/default.rewrites.conf';
 		//* Make a backup copy of vhost file
 		copy($rewrites_file, $rewrites_file.'~');
 
@@ -340,7 +333,7 @@ class nginx_reverseproxy_plugin {
 
 
 		// Set the symlink to enable the vhost
-		$rewrite_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'].'/default.rewrites.conf');
+		$rewrite_symlink = $nginx_config['nginx_vhost_conf_enabled_dir'].'/default.rewrites.conf';
 
 		if(!is_link($rewrite_symlink)) {
 			symlink($rewrites_file, $rewrite_symlink);
diff --git a/server/plugins-available/openvz_plugin.inc.php b/server/plugins-available/openvz_plugin.inc.php
index 5cc4bf6522..f17edb7b8c 100644
--- a/server/plugins-available/openvz_plugin.inc.php
+++ b/server/plugins-available/openvz_plugin.inc.php
@@ -86,11 +86,11 @@ class openvz_plugin {
 		}
 
 		$tmp = $app->db->queryOneRecord("SELECT template_file FROM openvz_ostemplate WHERE ostemplate_id = ?", $data['new']['ostemplate_id']);
-		$ostemplate = escapeshellcmd($tmp['template_file']);
+		$ostemplate = $tmp['template_file'];
 		unset($tmp);
 
 		//* Create the virtual machine
-		exec("vzctl create $veid --ostemplate $ostemplate");
+		$app->system->exec_safe("vzctl create ? --ostemplate ?", $veid, $ostemplate);
 		$app->log("Create OpenVZ VM: vzctl create $veid --ostemplate $ostemplate", LOGLEVEL_DEBUG);
 
 		//* Write the configuration of the VM
@@ -103,7 +103,7 @@ class openvz_plugin {
 		}
 
 		//* Set the root password in the virtual machine
-		exec("vzctl set $veid --userpasswd root:".escapeshellcmd($data['new']['vm_password']));
+		$app->system->exec_safe("vzctl set ? --userpasswd root:?", $veid, $data['new']['vm_password']);
 
 	}
 
@@ -123,7 +123,7 @@ class openvz_plugin {
 
 		//* new diskspace for ploop-containers requieres "vzctl set"
 		if($data['new']['diskspace'] != $data['old']['diskspace']) {
-			exec("vzctl set ".$veid." --diskspace ".$data['new']['diskspace']."G --save");
+			escapeshell("vzctl set ? --diskspace ? --save", $veid, $data['new']['diskspace']."G");
 		}
 
 		//* Apply config changes to the VM
@@ -140,7 +140,7 @@ class openvz_plugin {
 
 		//* Set the root password in the virtual machine
 		if($data['new']['vm_password'] != $data['old']['vm_password']) {
-			exec("vzctl set $veid --userpasswd root:".escapeshellcmd($data['new']['vm_password']));
+			$app->system->exec_safe("vzctl set ? --userpasswd root:?", $veid, $data['new']['vm_password']);
 		}
 
 
@@ -193,12 +193,12 @@ class openvz_plugin {
 			$parts = explode(':', $data);
 			$veid = intval($parts[0]);
 			$template_cache_dir = '/vz/template/cache/';
-			$template_name = escapeshellcmd($parts[1]);
+			$template_name = $parts[1];
 			if($veid > 0 && $template_name != '' && is_dir($template_cache_dir)) {
-				$command = "vzdump --suspend --compress --stdexcludes --dumpdir $template_cache_dir $veid";
-				exec($command);
-				exec("mv ".$template_cache_dir."vzdump-openvz-".$veid."*.tgz ".$template_cache_dir.$template_name.".tar.gz");
-				exec("rm -f ".$template_cache_dir."vzdump-openvz-".$veid."*.log");
+				$command = "vzdump --suspend --compress --stdexcludes --dumpdir ? ?";
+				$app->system->exec_safe($command, $template_cache_dir, $veid);
+				$app->system->exec_safe("mv ?*.tgz ?", $template_cache_dir."vzdump-openvz-".$veid, $template_cache_dir.$template_name.".tar.gz");
+				$app->system->exec_safe("rm -f ?*.log", $template_cache_dir."vzdump-openvz-".$veid);
 			}
 			$app->log("Created OpenVZ OStemplate $template_name from VM $veid", LOGLEVEL_DEBUG);
 			return 'ok';
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 2b0b1ba67b..569959b84f 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -99,7 +99,7 @@ class postfix_server_plugin {
 				exec("postconf -e 'smtp_sasl_auth_enable = no'");
 			}
 			
-			exec("postconf -e 'relayhost = ".$mail_config['relayhost']."'");
+			$app->system->exec_safe("postconf -e ?", 'relayhost = '.$mail_config['relayhost']);
 			file_put_contents('/etc/postfix/sasl_passwd', $content);
 			chmod('/etc/postfix/sasl_passwd', 0600);
 			chown('/etc/postfix/sasl_passwd', 'root');
@@ -138,7 +138,7 @@ class postfix_server_plugin {
 					if($value != '') $new_options[] = "reject_rbl_client ".$value;
 				}
 			}
-			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+			$app->system->exec_safe("postconf -e ?", 'smtpd_recipient_restrictions = '.implode(", ", $new_options));
 			exec('postfix reload');
 		}
 		
@@ -157,7 +157,7 @@ class postfix_server_plugin {
 				while (isset($new_options[$i]) && substr($new_options[$i], 0, 19) == 'check_sender_access') ++$i;
 				array_splice($new_options, $i, 0, array('reject_authenticated_sender_login_mismatch'));
 			}
-			exec("postconf -e 'smtpd_sender_restrictions = ".implode(", ", $new_options)."'");
+			$app->system->exec_safe("postconf -e ?", 'smtpd_sender_restrictions = '.implode(", ", $new_options));
 			exec('postfix reload');
 		}		
 		
@@ -182,9 +182,9 @@ class postfix_server_plugin {
 			}
 		}
 
-		exec("postconf -e 'mailbox_size_limit = ".intval($mail_config['mailbox_size_limit']*1024*1024)."'"); //TODO : no reload?
-		exec("postconf -e 'message_size_limit = ".intval($mail_config['message_size_limit']*1024*1024)."'"); //TODO : no reload?
-		
+		exec("postconf -e 'mailbox_size_limit = ".intval($mail_config['mailbox_size_limit']*1024*1024)."'");
+		exec("postconf -e 'message_size_limit = ".intval($mail_config['message_size_limit']*1024*1024)."'");
+		exec('postfix reload');
 
 	}
 
diff --git a/server/plugins-available/powerdns_plugin.inc.php b/server/plugins-available/powerdns_plugin.inc.php
index 1ecdfaf501..2e44e014d5 100644
--- a/server/plugins-available/powerdns_plugin.inc.php
+++ b/server/plugins-available/powerdns_plugin.inc.php
@@ -448,16 +448,20 @@ class powerdns_plugin {
 	}
 
 	function notifySlave($data) {
+		global $app;
+		
 		$pdns_control = $this->find_pdns_control();
 		if ( $pdns_control != false ) {
-			exec($pdns_control . ' notify ' . rtrim($data["new"]["origin"],"."));
+			$app->system->exec_safe($pdns_control . ' notify ?', rtrim($data["new"]["origin"],"."));
 		}
 	}
 
 	function fetchFromMaster($data) {
+		global $app;
+		
 		$pdns_control = $this->find_pdns_control();
 		if ( $pdns_control != false ) {
-			exec($pdns_control . ' retrieve ' . rtrim($data["new"]["origin"],"."));
+			$app->system->exec_safe($pdns_control . ' retrieve ?', rtrim($data["new"]["origin"],"."));
 		}
 	}
 
@@ -693,11 +697,11 @@ class powerdns_plugin {
 		if ( $pdns_pdnssec != false ) {
 			if (isset($data["new"]["origin"])) {
 				//* data has origin field only for SOA recordtypes
-				exec($pdns_pdnssec . ' rectify-zone ' . rtrim($data["new"]["origin"],"."));
+				$app->system->exec_safe($pdns_pdnssec . ' rectify-zone ?', rtrim($data["new"]["origin"],"."));
 			} else {
 				// get origin from DB for all other recordtypes
 				$zn = $app->db->queryOneRecord("SELECT d.name AS name FROM powerdns.domains d, powerdns.records r WHERE r.ispconfig_id=? AND r.domain_id = d.id", $data["new"]["id"]);
-				exec($pdns_pdnssec . ' rectify-zone ' . trim($zn["name"]));
+				$app->system->exec_safe($pdns_pdnssec . ' rectify-zone ?', trim($zn["name"]));
 			}
 		}
 	}
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 9c4568901d..90e3293ad7 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -115,34 +115,28 @@ class shelluser_base_plugin {
 				
 				// Create home base directory if it does not exist
 				if(!is_dir($data['new']['dir'].'/home')){
-					$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0755');
+					$app->file->mkdirs($data['new']['dir'].'/home', '0755');
 				}
 				
 				// Change ownership of home base dir to root user
-				$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),'root');
-				$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),'root');
-				$app->system->chmod(escapeshellcmd($data['new']['dir'].'/home'),0755);
+				$app->system->chown($data['new']['dir'].'/home','root');
+				$app->system->chgrp($data['new']['dir'].'/home','root');
+				$app->system->chmod($data['new']['dir'].'/home',0755);
 				
 				if(!is_dir($homedir)){
-					$app->file->mkdirs(escapeshellcmd($homedir), '0750');
-					$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['puser']),false);
-					$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']),false);
+					$app->file->mkdirs($homedir, '0750');
+					$app->system->chown($homedir,$data['new']['puser'],false);
+					$app->system->chgrp($homedir,$data['new']['pgroup'],false);
 				}
-				$command = 'useradd';
-				$command .= ' -d '.escapeshellcmd($homedir);
-				$command .= ' -g '.escapeshellcmd($data['new']['pgroup']);
-				$command .= ' -o '; // non unique
-				if($data['new']['password'] != '') $command .= ' -p '.escapeshellcmd($data['new']['password']);
-				$command .= ' -s '.escapeshellcmd($data['new']['shell']);
-				$command .= ' -u '.escapeshellcmd($uid);
-				$command .= ' '.escapeshellcmd($data['new']['username']);
-
-				exec($command);
+				$command = 'useradd -d ? -g ? -o ?'; // non unique
+				if($data['new']['password'] != '') $command .= ' -p ?';
+				$command .= ' -s ? -u ? ?';
+				$app->system->exec_safe($command, $homedir, $data['new']['pgroup'], $data['new']['password'], $data['new']['shell'], $uid, $data['new']['username']);
 				$app->log("Executed command: ".$command, LOGLEVEL_DEBUG);
 				$app->log("Added shelluser: ".$data['new']['username'], LOGLEVEL_DEBUG);
 				
-				$app->system->chown(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['username']),false);
-				$app->system->chgrp(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['pgroup']),false);
+				$app->system->chown($data['new']['dir'],$data['new']['username'],false);
+				$app->system->chgrp($data['new']['dir'],$data['new']['pgroup'],false);
 				
 
 				// call the ssh-rsa update function
@@ -152,21 +146,21 @@ class shelluser_base_plugin {
 				$this->_setup_ssh_rsa();
 
 				//* Create .bash_history file
-				$app->system->touch(escapeshellcmd($homedir).'/.bash_history');
-				$app->system->chmod(escapeshellcmd($homedir).'/.bash_history', 0750);
-				$app->system->chown(escapeshellcmd($homedir).'/.bash_history', $data['new']['username']);
-				$app->system->chgrp(escapeshellcmd($homedir).'/.bash_history', $data['new']['pgroup']);
+				$app->system->touch($homedir.'/.bash_history');
+				$app->system->chmod($homedir.'/.bash_history', 0750);
+				$app->system->chown($homedir.'/.bash_history', $data['new']['username']);
+				$app->system->chgrp($homedir.'/.bash_history', $data['new']['pgroup']);
 
 				//* Create .profile file
-				$app->system->touch(escapeshellcmd($homedir).'/.profile');
-				$app->system->chmod(escapeshellcmd($homedir).'/.profile', 0644);
-				$app->system->chown(escapeshellcmd($homedir).'/.profile', $data['new']['username']);
-				$app->system->chgrp(escapeshellcmd($homedir).'/.profile', $data['new']['pgroup']);
+				$app->system->touch($homedir.'/.profile');
+				$app->system->chmod($homedir.'/.profile', 0644);
+				$app->system->chown($homedir.'/.profile', $data['new']['username']);
+				$app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']);
 
 				//* Disable shell user temporarily if we use jailkit
 				if($data['new']['chroot'] == 'jailkit') {
-					$command = 'usermod -s /bin/false -L '.escapeshellcmd($data['new']['username']).' 2>/dev/null';
-					exec($command);
+					$command = 'usermod -s /bin/false -L ? 2>/dev/null';
+					$app->system->exec_safe($command, $data['new']['username']);
 					$app->log("Disabling shelluser temporarily: ".$command, LOGLEVEL_DEBUG);
 				}
 
@@ -233,55 +227,32 @@ class shelluser_base_plugin {
 				if($app->system->is_user($data['old']['username'])) {
 					//* Remove webfolder protection
 					$app->system->web_folder_protection($web['document_root'], false);
-					
-					/*
-					$command = 'usermod';
-					$command .= ' --home '.escapeshellcmd($data['new']['dir']);
-					$command .= ' --gid '.escapeshellcmd($data['new']['pgroup']);
-					// $command .= ' --non-unique ';
-					$command .= ' --password '.escapeshellcmd($data['new']['password']);
-					if($data['new']['chroot'] != 'jailkit') $command .= ' --shell '.escapeshellcmd($data['new']['shell']);
-					// $command .= ' --uid '.escapeshellcmd($uid);
-					$command .= ' --login '.escapeshellcmd($data['new']['username']);
-					$command .= ' '.escapeshellcmd($data['old']['username']);
-
-					exec($command);
-					$app->log("Executed command: $command ",LOGLEVEL_DEBUG);
-					*/
-					//$groupinfo = $app->system->posix_getgrnam($data['new']['pgroup']);
+
 					if($homedir != $homedir_old){
 						$app->system->web_folder_protection($web['document_root'], false);
 						// Rename dir, in case the new directory exists already.
 						if(is_dir($homedir)) {
 							$app->log("New Homedir exists, renaming it to ".$homedir.'_bak', LOGLEVEL_DEBUG);
-							$app->system->rename(escapeshellcmd($homedir),escapeshellcmd($homedir.'_bak'));
+							$app->system->rename($homedir,$homedir.'_bak');
 						}
-						/*if(!is_dir($data['new']['dir'].'/home')){
-							$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0750');
-							$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['puser']));
-							$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['pgroup']));
-						}
-						$app->file->mkdirs(escapeshellcmd($homedir), '0755');
-						$app->system->chown(escapeshellcmd($homedir),'root');
-						$app->system->chgrp(escapeshellcmd($homedir),'root');*/
 						
 						// Move old directory to new path
-						$app->system->rename(escapeshellcmd($homedir_old),escapeshellcmd($homedir));
-						$app->file->mkdirs(escapeshellcmd($homedir), '0750');
-						$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['puser']));
-						$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']));
+						$app->system->rename($homedir_old,$homedir);
+						$app->file->mkdirs($homedir, '0750');
+						$app->system->chown($homedir,$data['new']['puser']);
+						$app->system->chgrp($homedir,$data['new']['pgroup']);
 						$app->system->web_folder_protection($web['document_root'], true);
 					} else {
 						if(!is_dir($homedir)){
 							$app->system->web_folder_protection($web['document_root'], false);
 							if(!is_dir($data['new']['dir'].'/home')){
-								$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0755');
-								$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),'root');
-								$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),'root');
+								$app->file->mkdirs($data['new']['dir'].'/home', '0755');
+								$app->system->chown($data['new']['dir'].'/home','root');
+								$app->system->chgrp($data['new']['dir'].'/home','root');
 							}
-							$app->file->mkdirs(escapeshellcmd($homedir), '0750');
-							$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['puser']));
-							$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']));
+							$app->file->mkdirs($homedir, '0750');
+							$app->system->chown($homedir,$data['new']['puser']);
+							$app->system->chgrp($homedir,$data['new']['pgroup']);
 							$app->system->web_folder_protection($web['document_root'], true);
 						}
 					}
@@ -296,18 +267,18 @@ class shelluser_base_plugin {
 
 					//* Create .bash_history file
 					if(!is_file($data['new']['dir']).'/.bash_history') {
-						$app->system->touch(escapeshellcmd($homedir).'/.bash_history');
-						$app->system->chmod(escapeshellcmd($homedir).'/.bash_history', 0750);
-						$app->system->chown(escapeshellcmd($homedir).'/.bash_history', escapeshellcmd($data['new']['username']));
-						$app->system->chgrp(escapeshellcmd($homedir).'/.bash_history', escapeshellcmd($data['new']['pgroup']));
+						$app->system->touch($homedir.'/.bash_history');
+						$app->system->chmod($homedir.'/.bash_history', 0750);
+						$app->system->chown($homedir.'/.bash_history', $data['new']['username']);
+						$app->system->chgrp($homedir.'/.bash_history', $data['new']['pgroup']);
 					}
 					
 					//* Create .profile file
 					if(!is_file($data['new']['dir']).'/.profile') {
-						$app->system->touch(escapeshellcmd($homedir).'/.profile');
-						$app->system->chmod(escapeshellcmd($homedir).'/.profile', 0644);
-						$app->system->chown(escapeshellcmd($homedir).'/.profile', escapeshellcmd($data['new']['username']));
-						$app->system->chgrp(escapeshellcmd($homedir).'/.profile', escapeshellcmd($data['new']['pgroup']));
+						$app->system->touch($homedir.'/.profile');
+						$app->system->chmod($homedir.'/.profile', 0644);
+						$app->system->chown($homedir.'/.profile', $data['new']['username']);
+						$app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']);
 					}
 
 					//* Add webfolder protection again
@@ -362,7 +333,7 @@ class shelluser_base_plugin {
 						if(is_file($homedir . $delfile) && fileowner($homedir . $delfile) == $userid) unlink($homedir . $delfile);
 					}
 					foreach($dirs as $deldir) {
-						if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) exec('rm -rf ' . escapeshellarg($homedir . $deldir));
+						if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) $app->system->exec_safe('rm -rf ?', $homedir . $deldir);
 					}
 					$empty = true;
 					$dirres = opendir($homedir);
@@ -401,9 +372,8 @@ class shelluser_base_plugin {
 							$app->services->restartService('php-fpm', 'stop:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 						}
 					}
-					$command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; userdel -f';
-					$command .= ' '.escapeshellcmd($data['old']['username']).' &> /dev/null';
-					exec($command);
+					$command = 'killall -u ? ; userdel -f ? &> /dev/null';
+					$app->system->exec_safe($command, $data['old']['username'], $data['old']['username']);
 					$app->log("Deleted shelluser: ".$data['old']['username'], LOGLEVEL_DEBUG);
 					// start PHP-FPM again
 					if($web['php'] == 'php-fpm'){
@@ -447,12 +417,10 @@ class shelluser_base_plugin {
 			}
 		}
 		$sshrsa = trim($sshrsa);
-		$usrdir = escapeshellcmd($this->data['new']['dir']);
+		$usrdir = $this->data['new']['dir'];
 		//* Home directory of the new shell user
-		if($this->data['new']['chroot'] == 'jailkit') {
-			$usrdir = escapeshellcmd($this->data['new']['dir']);
-		} else {
-			$usrdir = escapeshellcmd($this->data['new']['dir'].'/home/'.$this->data['new']['username']);
+		if($this->data['new']['chroot'] != 'jailkit') {
+			$usrdir = $this->data['new']['dir'].'/home/'.$this->data['new']['username'];
 		}
 		$sshdir = $usrdir.'/.ssh';
 		$sshkeys= $usrdir.'/.ssh/authorized_keys';
@@ -528,8 +496,8 @@ class shelluser_base_plugin {
 		$this->app->log("ssh-rsa key updated in ".$sshkeys, LOGLEVEL_DEBUG);
 
 		// set proper file permissions
-		exec("chown -R ".escapeshellcmd($this->data['new']['puser']).":".escapeshellcmd($this->data['new']['pgroup'])." ".$sshdir);
-		exec("chmod 600 '$sshkeys'");
+		$app->system->exec_safe("chown -R ?:? ?", $this->data['new']['puser'], $this->data['new']['pgroup'], $sshdir);
+		$app->system->exec_safe("chmod 600 ?", $sshkeys);
 
 	}
 
diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php
index c7112c497a..1f3a08face 100755
--- a/server/plugins-available/shelluser_jailkit_plugin.inc.php
+++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -121,13 +121,11 @@ class shelluser_jailkit_plugin {
 						//* call the ssh-rsa update function
 						$this->_setup_ssh_rsa();
 
-						//$command .= 'usermod -s /usr/sbin/jk_chrootsh -U '.escapeshellcmd($data['new']['username']);
-						//exec($command);
 						$app->system->usermod($data['new']['username'], 0, 0, '', '/usr/sbin/jk_chrootsh', '', '');
 
 						//* Unlock user
-						$command = 'usermod -U '.escapeshellcmd($data['new']['username']).' 2>/dev/null';
-						exec($command);
+						$command = 'usermod -U ? 2>/dev/null';
+						$app->system->exec_safe($command, $data['new']['username']);
 
 						$this->_update_website_security_level();
 						$app->system->web_folder_protection($web['document_root'], true);
@@ -242,15 +240,12 @@ class shelluser_jailkit_plugin {
 
 			$jailkit_chroot_userhome = $this->_get_home_dir($data['old']['username']);
 
-			//commented out proved to be dangerous on config errors
-			//exec('rm -rf '.$data['old']['dir'].$jailkit_chroot_userhome);
-
 			$app->system->web_folder_protection($web['document_root'], false);
 			
 			$userid = intval($app->system->getuid($data['old']['username']));
-			$command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; ';
-			$command .= 'userdel -f '.escapeshellcmd($data['old']['username']).' &> /dev/null';
-			exec($command);
+			$command = 'killall -u ? ; ';
+			$command .= 'userdel -f ? &> /dev/null';
+			$app->system->exec_safe($command, $data['old']['username'], $data['old']['username']);
 			
 			// Remove the jailed user from passwd and shadow file inside the jail
 			$app->system->removeLine($data['old']['dir'].'/etc/passwd', $data['old']['username']);
@@ -278,10 +273,8 @@ class shelluser_jailkit_plugin {
 		//check if the chroot environment is created yet if not create it with a list of program sections from the config
 		if (!is_dir($this->data['new']['dir'].'/etc/jailkit'))
 		{
-			$command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh';
-			$command .= ' '.escapeshellcmd($this->data['new']['dir']);
-			$command .= ' \''.$this->jailkit_config['jailkit_chroot_app_sections'].'\'';
-			exec($command.' 2>/dev/null');
+			$command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh ? ?';
+			$app->system->exec_safe($command.' 2>/dev/null', $this->data['new']['dir'], $this->jailkit_config['jailkit_chroot_app_sections']);
 
 			$this->app->log("Added jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
 
@@ -300,7 +293,7 @@ class shelluser_jailkit_plugin {
 			$tpl->setVar('domain', $web['domain']);
 			$tpl->setVar('home_dir', $this->_get_home_dir(""));
 
-			$bashrc = escapeshellcmd($this->data['new']['dir']).'/etc/bash.bashrc';
+			$bashrc = $this->data['new']['dir'].'/etc/bash.bashrc';
 			if(@is_file($bashrc) || @is_link($bashrc)) unlink($bashrc);
 
 			file_put_contents($bashrc, $tpl->grab());
@@ -313,7 +306,7 @@ class shelluser_jailkit_plugin {
 
 			$tpl->setVar('domain', $web['domain']);
 
-			$motd = escapeshellcmd($this->data['new']['dir']).'/var/run/motd';
+			$motd = $this->data['new']['dir'].'/var/run/motd';
 			if(@is_file($motd) || @is_link($motd)) unlink($motd);
 
 			$app->system->file_put_contents($motd, $tpl->grab());
@@ -323,16 +316,15 @@ class shelluser_jailkit_plugin {
 
 	function _add_jailkit_programs()
 	{
+		global $app;
 		$jailkit_chroot_app_programs = preg_split("/[\s,]+/", $this->jailkit_config['jailkit_chroot_app_programs']);
 		if(is_array($jailkit_chroot_app_programs) && !empty($jailkit_chroot_app_programs)){
 			foreach($jailkit_chroot_app_programs as $jailkit_chroot_app_program){
 				$jailkit_chroot_app_program = trim($jailkit_chroot_app_program);
 				if(is_file($jailkit_chroot_app_program) || is_dir($jailkit_chroot_app_program)){			
 					//copy over further programs and its libraries
-					$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
-					$command .= ' '.escapeshellcmd($this->data['new']['dir']);
-					$command .= ' '.$jailkit_chroot_app_program;
-					exec($command.' 2>/dev/null');
+					$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh ? ?';
+					$app->system->exec_safe($command.' 2>/dev/null', $this->data['new']['dir'], $jailkit_chroot_app_program);
 
 					$this->app->log("Added programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
 				}
@@ -342,7 +334,7 @@ class shelluser_jailkit_plugin {
 
 	function _get_home_dir($username)
 	{
-		return str_replace("[username]", escapeshellcmd($username), $this->jailkit_config['jailkit_chroot_home']);
+		return str_replace("[username]", $username, $this->jailkit_config['jailkit_chroot_home']);
 	}
 
 	function _add_jailkit_user()
@@ -365,36 +357,8 @@ class shelluser_jailkit_plugin {
 		// ALWAYS create the user. Even if the user was created before
 		// if we check if the user exists, then a update (no shell -> jailkit) will not work
 		// and the user has FULL ACCESS to the root of the server!
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_user.sh';
-		$command .= ' '.escapeshellcmd($this->data['new']['username']);
-		$command .= ' '.escapeshellcmd($this->data['new']['dir']);
-		$command .= ' '.$jailkit_chroot_userhome;
-		$command .= ' '.escapeshellcmd($this->data['new']['shell']);
-		$command .= ' '.$this->data['new']['puser'];
-		$command .= ' '.$jailkit_chroot_puserhome;
-		exec($command.' 2>/dev/null');
-
-		//* Change the homedir of the shell user and parent user
-		//* We have to do this manually as the usermod command fails
-		//* when the user is logged in or a command is running under that user
-		/*
-			$passwd_file_array = file('/etc/passwd');
-			$passwd_out = '';
-			if(is_array($passwd_file_array)) {
-				foreach($passwd_file_array as $line) {
-					$line = trim($line);
-					$parts = explode(':',$line);
-					if($parts[0] == $this->data['new']['username']) {
-						$parts[5] = escapeshellcmd($this->data['new']['dir'].'/.'.$jailkit_chroot_userhome);
-						$parts[6] = escapeshellcmd('/usr/sbin/jk_chrootsh');
-						$new_line = implode(':',$parts);
-						copy('/etc/passwd','/etc/passwd~');
-						chmod('/etc/passwd~',0600);
-						$app->uses('system');
-						$app->system->replaceLine('/etc/passwd',$line,$new_line,1,0);
-					}
-				}
-			}*/
+		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_user.sh ? ? ? ? ? ?';
+		$app->system->exec_safe($command.' 2>/dev/null', $this->data['new']['username'], $this->data['new']['dir'], $jailkit_chroot_userhome, $this->data['new']['shell'], $this->data['new']['puser'], $jailkit_chroot_puserhome);
 
 		$shell = '/usr/sbin/jk_chrootsh';
 		if($this->data['new']['active'] != 'y') $shell = '/bin/false';
@@ -406,19 +370,19 @@ class shelluser_jailkit_plugin {
 
 		if(!is_dir($this->data['new']['dir'].$jailkit_chroot_userhome)) {
 			if(is_dir($this->data['old']['dir'].$jailkit_chroot_userhome_old)) {
-				$app->system->rename(escapeshellcmd($this->data['old']['dir'].$jailkit_chroot_userhome_old),escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_userhome));
+				$app->system->rename($this->data['old']['dir'].$jailkit_chroot_userhome_old,$this->data['new']['dir'].$jailkit_chroot_userhome);
 			} else {
-				mkdir(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_userhome), 0750, true);
+				mkdir($this->data['new']['dir'].$jailkit_chroot_userhome, 0750, true);
 			}
 		}
-		$app->system->chown(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_userhome), $this->data['new']['username']);
-		$app->system->chgrp(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_userhome), $this->data['new']['pgroup']);
+		$app->system->chown($this->data['new']['dir'].$jailkit_chroot_userhome, $this->data['new']['username']);
+		$app->system->chgrp($this->data['new']['dir'].$jailkit_chroot_userhome, $this->data['new']['pgroup']);
 
 		$this->app->log("Added created jailkit user home in : ".$this->data['new']['dir'].$jailkit_chroot_userhome, LOGLEVEL_DEBUG);
 
-		if(!is_dir($this->data['new']['dir'].$jailkit_chroot_puserhome)) mkdir(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_puserhome), 0750, true);
-		$app->system->chown(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_puserhome), $this->data['new']['puser']);
-		$app->system->chgrp(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_puserhome), $this->data['new']['pgroup']);
+		if(!is_dir($this->data['new']['dir'].$jailkit_chroot_puserhome)) mkdir($this->data['new']['dir'].$jailkit_chroot_puserhome, 0750, true);
+		$app->system->chown($this->data['new']['dir'].$jailkit_chroot_puserhome, $this->data['new']['puser']);
+		$app->system->chgrp($this->data['new']['dir'].$jailkit_chroot_puserhome, $this->data['new']['pgroup']);
 
 		$this->app->log("Added jailkit parent user home in : ".$this->data['new']['dir'].$jailkit_chroot_puserhome, LOGLEVEL_DEBUG);
 
@@ -447,13 +411,6 @@ class shelluser_jailkit_plugin {
 
 	}
 
-	//* Wrapper for exec function for easier debugging
-	private function _exec($command) {
-		global $app;
-		$app->log('exec: '.$command, LOGLEVEL_DEBUG);
-		exec($command);
-	}
-
 	private function _setup_ssh_rsa() {
 		global $app;
 		$this->app->log("ssh-rsa setup shelluser_jailkit", LOGLEVEL_DEBUG);
@@ -469,7 +426,7 @@ class shelluser_jailkit_plugin {
 
 		// ssh-rsa authentication variables
 		$sshrsa = $this->data['new']['ssh_rsa'];
-		$usrdir = escapeshellcmd($this->data['new']['dir']).'/'.$this->_get_home_dir($this->data['new']['username']);
+		$usrdir = $this->data['new']['dir'].'/'.$this->_get_home_dir($this->data['new']['username']);
 		$sshdir = $usrdir.'/.ssh';
 		$sshkeys= $usrdir.'/.ssh/authorized_keys';
 
@@ -545,9 +502,9 @@ class shelluser_jailkit_plugin {
 		$this->app->log("ssh-rsa key updated in ".$sshkeys, LOGLEVEL_DEBUG);
 
 		// set proper file permissions
-		exec("chown -R ".escapeshellcmd($this->data['new']['puser']).":".escapeshellcmd($this->data['new']['pgroup'])." ".$sshdir);
-		exec("chmod 700 ".$sshdir);
-		exec("chmod 600 '$sshkeys'");
+		$app->system->exec_safe("chown -R ?:? ?", $this->data['new']['puser'], $this->data['new']['pgroup'], $sshdir);
+		$app->system->exec_safe("chmod 700 ?", $sshdir);
+		$app->system->exec_safe("chmod 600 ?", $sshkeys);
 
 	}
 	
@@ -569,7 +526,7 @@ class shelluser_jailkit_plugin {
 						if(is_file($homedir . $delfile) && fileowner($homedir . $delfile) == $userid) unlink($homedir . $delfile);
 					}
 					foreach($dirs as $deldir) {
-						if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) exec('rm -rf ' . escapeshellarg($homedir . $deldir));
+						if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) $app->system->exec_safe('rm -rf ?', $homedir . $deldir);
 					}
 					$empty = true;
 					$dirres = opendir($homedir);
diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php
index 587bd4f09a..2626d1e756 100644
--- a/server/plugins-available/software_update_plugin.inc.php
+++ b/server/plugins-available/software_update_plugin.inc.php
@@ -111,11 +111,12 @@ class software_update_plugin {
 		$software_update["update_url"] = str_replace('{key}', $software_package['package_key'], $software_update["update_url"]);
 
 		//* Download the update package
-		$cmd = "cd $temp_dir && wget ".$software_update["update_url"];
 		if($installuser == '') {
-			exec($cmd);
+			$cmd = "cd ? && wget ?";
+			$app->system->exec_safe($cmd, $temp_dir, $software_update["update_url"]);
 		} else {
-			exec("su -c ".escapeshellarg($cmd)." $installuser");
+			$cmd = "cd $temp_dir && wget ".$software_update["update_url"];
+			$app->system->exec_safe("su -c ? ?", $cmd, $installuser);
 		}
 		$app->log("Downloading the update file from: ".$software_update["update_url"], LOGLEVEL_DEBUG);
 
@@ -135,7 +136,7 @@ class software_update_plugin {
 
 		if($update_filename == '') {
 			$app->log("No package file found. Download failed? Installation aborted.", LOGLEVEL_WARN);
-			exec("rm -rf $temp_dir");
+			$app->system->exec_safe("rm -rf ?", $temp_dir);
 			$app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG);
 			$this->set_install_status($data["new"]["software_update_inst_id"], "failed");
 			return false;
@@ -148,7 +149,7 @@ class software_update_plugin {
 			//* Checking the md5sum
 			if(md5_file($temp_dir.'/'.$update_filename) != $software_update["update_md5"]) {
 				$app->log("The md5 sum of the downloaded file is incorrect. Update aborted.", LOGLEVEL_WARN);
-				exec("rm -rf $temp_dir");
+				$app->system->exec_safe("rm -rf ", $temp_dir);
 				$app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG);
 				$this->set_install_status($data["new"]["software_update_inst_id"], "failed");
 				return false;
@@ -158,11 +159,13 @@ class software_update_plugin {
 
 
 			//* unpacking the update
-			$cmd = "cd $temp_dir && unzip $update_filename";
+			
 			if($installuser == '') {
-				exec($cmd);
+				$cmd = "cd ? && unzip ?";
+				$app->system->exec_safe($cmd, $temp_dir, $update_filename);
 			} else {
-				exec("su -c ".escapeshellarg($cmd)." $installuser");
+				$cmd = "cd $temp_dir && unzip $update_filename";
+				$app->system->exec_safe("su -c ? ?", $cmd, $installuser);
 			}
 
 			//* Create a database, if the package requires one
@@ -181,7 +184,7 @@ class software_update_plugin {
 						$db_config['database_password'] != '' &&
 						$db_config['database_name'] != '' &&
 						$db_config['database_host'] != '') {
-						system("mysql --default-character-set=utf8 --force -h '".$db_config['database_host']."' -u '".$db_config['database_user']."' ".$db_config['database_name']." < ".escapeshellcmd($temp_dir.'/setup.sql'));
+						$app->system->exec_safe("mysql --default-character-set=utf8 --force -h ? -u ? ? < ?", $db_config['database_host'], $db_config['database_user'], $db_config['database_name'], $temp_dir.'/setup.sql');
 						$app->log("Loading setup.sql dump into the app db.", LOGLEVEL_DEBUG);
 					}
 				}
@@ -196,13 +199,15 @@ class software_update_plugin {
 
 			if(is_file($temp_dir.'/setup.sh')) {
 				// Execute the setup script
-				exec('chmod +x '.$temp_dir.'/setup.sh');
+				$app->system->exec_safe('chmod +x ?', $temp_dir.'/setup.sh');
 				$app->log("Executing setup.sh file in directory $temp_dir", LOGLEVEL_DEBUG);
-				$cmd = 'cd '.$temp_dir.' && ./setup.sh > package_install.log';
+				
 				if($installuser == '') {
-					exec($cmd);
+					$cmd = 'cd ? && ./setup.sh > package_install.log';
+					$app->system->exec_safe($cmd, $temp_dir);
 				} else {
-					exec("su -c ".escapeshellarg($cmd)." $installuser");
+					$cmd = 'cd '.$temp_dir.' && ./setup.sh > package_install.log';
+					$app->system->exec_safe("su -c ? ?", $cmd, $installuser);
 				}
 
 				$log_data = @file_get_contents("{$temp_dir}/package_install.log");
@@ -223,7 +228,7 @@ class software_update_plugin {
 			$this->set_install_status($data["new"]["software_update_inst_id"], "failed");
 		}
 
-		if($temp_dir != '' && $temp_dir != '/') exec("rm -rf $temp_dir");
+		if($temp_dir != '' && $temp_dir != '/') $app->system->exec_safe("rm -rf ?", $temp_dir);
 		$app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG);
 	}
 
diff --git a/server/plugins-available/xmpp_plugin.inc.php b/server/plugins-available/xmpp_plugin.inc.php
index 128a88ebb4..c680e62f0e 100644
--- a/server/plugins-available/xmpp_plugin.inc.php
+++ b/server/plugins-available/xmpp_plugin.inc.php
@@ -240,8 +240,8 @@ class xmpp_plugin {
         $app->system->unlink("/etc/metronome/certs/$domain.csr");
         // Remove all stored data
         var_dump('rm -rf /var/lib/metronome/'.$folder);
-        exec('rm -rf /var/lib/metronome/'.$folder);
-        exec('rm -rf /var/lib/metronome/*%2e'.$folder);
+        $app->system->exec_safe('rm -rf ?', '/var/lib/metronome/'.$folder);
+        $app->system->exec_safe('rm -rf ?*?', '/var/lib/metronome/', '%2e'.$folder);
 
         $app->services->restartServiceDelayed('metronome', 'reload');
     }
@@ -264,7 +264,7 @@ class xmpp_plugin {
         // Don't allow manual user deletion for mailaccount controlled domains
 
         // Remove account from metronome
-        exec('metronomectl deluser '.$data['old']['jid']);
+        $app->system->exec_safe('metronomectl deluser ?', $data['old']['jid']);
     }
 
     // Handle the creation of SSL certificates
@@ -311,9 +311,9 @@ class xmpp_plugin {
             $app->system->file_put_contents($cnf_file, $tpl->grab());
 
             // Generate new key, csr and cert
-            exec("(cd /etc/metronome/certs && make $domain.key)");
-            exec("(cd /etc/metronome/certs && make $domain.csr)");
-            exec("(cd /etc/metronome/certs && make $domain.cert)");
+            $app->system->exec_safe("(cd /etc/metronome/certs && make ?)", "$domain.key");
+            $app->system->exec_safe("(cd /etc/metronome/certs && make ?)", "$domain.csr");
+            $app->system->exec_safe("(cd /etc/metronome/certs && make ?)", "$domain.cert");
 
             $ssl_key = $app->system->file_get_contents($key_file);
             $app->system->chmod($key_file, 0400);
-- 
GitLab


From 709638f18ed87b5df3703c8d879001dfb05a10e3 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 30 Jul 2019 14:10:11 +0200
Subject: [PATCH 072/571] - Coding guidelines

---
 server/scripts/ispconfig_patch | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/server/scripts/ispconfig_patch b/server/scripts/ispconfig_patch
index a3361f507d..4470552c13 100644
--- a/server/scripts/ispconfig_patch
+++ b/server/scripts/ispconfig_patch
@@ -79,7 +79,9 @@ function simple_query($query, $answers, $default)
 }
 
 function is_installed($appname) {
-	exec('which '.escapeshellcmd($appname).' 2> /dev/null',$out,$returncode);
+	$out = array();
+	$returncode = null;
+	exec('which '.escapeshellarg($appname).' 2> /dev/null',$out,$returncode);
 	if(isset($out[0]) && stristr($out[0],$appname) && $returncode == 0) {
 		return true;
 	} else {
@@ -105,14 +107,18 @@ echo " _____ ___________   _____              __ _
                                              |___/ ";
 echo "\n".str_repeat('-',80)."\n";
 echo "\n\n>> Patch tool  \n\n";
-if(!$auto) echo "Please enter the patch id that you want to be applied to your ISPConfig installation.\nPlease be aware that we take NO responsibility that this will work for you.\nOnly use patches if you know what you are doing.\n\n";
+if(!$auto) {
+	echo "Please enter the patch id that you want to be applied to your ISPConfig installation.\nPlease be aware that we take NO responsibility that this will work for you.\nOnly use patches if you know what you are doing.\n\n";
+}
 
 if(!is_installed('patch')) {
 	swriteln("The program 'patch' is missing on your server. Please install it and try again.");
 	exit;
 }
 
-if(!$auto) $patch_id = simple_query('Enter patch id', false, '');
+if(!$auto) {
+	$patch_id = simple_query('Enter patch id', false, '');
+}
 if($patch_id == '') {
     swriteln("Patch terminated by user.\n");
     die();
@@ -129,8 +135,12 @@ if(!$patch_data) {
 
 $patch_text = @file_get_contents('http://ispconfig.org/downloads/patches/' . $patch_id . '.txt');
 if($patch_text) {
-    if($auto) $ok = 'y'; else $ok = simple_query("Patch description:\n".str_repeat("-", 80)."\n".$patch_text."\n".str_repeat("-", 80)."\nDo you really want to apply this patch now?", array('y','n'), 'y');
-    if($ok != 'y') {
+    if($auto) {
+		$ok = 'y';
+	} else {
+		$ok = simple_query("Patch description:\n" . str_repeat("-", 80) . "\n" . $patch_text . "\n" . str_repeat("-", 80) . "\nDo you really want to apply this patch now?", array('y', 'n'), 'y');
+	}
+	if($ok != 'y') {
         swriteln("Patch terminated by user.\n");
         die();
     }
@@ -146,5 +156,3 @@ passthru('patch -p0 < ' . escapeshellarg($temp_file));
 unlink($temp_file);
 
 exit;
-
-?>
-- 
GitLab


From 0c5140ab1f60f13e5e1b8e2fae9cf4115b34d66c Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 30 Jul 2019 15:16:22 +0200
Subject: [PATCH 073/571] - fixed syntax error from previous commits

---
 server/lib/classes/system.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 051f3554a6..dafae52c85 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1832,7 +1832,7 @@ class system{
 	function is_mounted($mountpoint){
 		//$cmd = 'df 2>/dev/null | grep " '.$mountpoint.'$"';
 		$cmd = 'mount 2>/dev/null | grep ?';
-		exec($cmd, ' on '. $mountpoint . ' type ');
+		$this->exec_safe($cmd, ' on '. $mountpoint . ' type ');
 		$return_var = $this->last_exec_retcode();
 		return $return_var == 0 ? true : false;
 	}
-- 
GitLab


From c7e0c3fc89a6024b4b6fa1101475ba59f6a38f17 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 30 Jul 2019 17:37:17 +0200
Subject: [PATCH 074/571] - implemented rspamd version of "global
 black/whitelist"

---
 server/conf/rspamd_wblist.inc.conf.master     |  12 +-
 .../plugins-available/rspamd_plugin.inc.php   | 103 ++++++++++++++----
 2 files changed, 94 insertions(+), 21 deletions(-)

diff --git a/server/conf/rspamd_wblist.inc.conf.master b/server/conf/rspamd_wblist.inc.conf.master
index aaa7d06f67..b614244515 100644
--- a/server/conf/rspamd_wblist.inc.conf.master
+++ b/server/conf/rspamd_wblist.inc.conf.master
@@ -1,7 +1,17 @@
-spamfilter_wblist-<tmpl_var name='record_id'> {
+<tmpl_var name='list_scope'>_wblist-<tmpl_var name='record_id'> {
 	priority = <tmpl_var name='priority'>;
+<tmpl_if name="from">
 	from = "<tmpl_var name='from'>";
+</tmpl_if>
+<tmpl_if name="recipient">
 	rcpt = "<tmpl_var name='recipient'>";
+</tmpl_if>
+<tmpl_if name="ip">
+	ip = "<tmpl_var name='ip'>";
+</tmpl_if>
+<tmpl_if name="hostname">
+	hostname = "<tmpl_var name='hostname'>";
+</tmpl_if>
 <tmpl_if name='wblist' op='==' value='W'>
 	want_spam = yes;
 	apply {
diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index b6eddc401f..7fd3ebf773 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -71,11 +71,14 @@ class rspamd_plugin {
 		$app->plugins->registerEvent('server_ip_insert', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_ip_update', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_ip_delete', $this->plugin_name, 'server_ip');
+		
+		//* global mail access filters
+		$app->plugins->registerEvent('mail_access_insert', $this->plugin_name, 'spamfilter_wblist_insert');
+		$app->plugins->registerEvent('mail_access_update', $this->plugin_name, 'spamfilter_wblist_update');
+		$app->plugins->registerEvent('mail_access_delete', $this->plugin_name, 'spamfilter_wblist_delete');
 	}
 
 	function spamfilter_users_insert($event_name, $data) {
-		global $app, $conf;
-
 		$this->action = 'insert';
 		// just run the spamfilter_users_update function
 		$this->spamfilter_users_update($event_name, $data);
@@ -161,8 +164,6 @@ class rspamd_plugin {
 	}
 
 	function spamfilter_wblist_insert($event_name, $data) {
-		global $app, $conf;
-		
 		$this->action = 'insert';
 		// just run the spamfilter_wblist_update function
 		$this->spamfilter_wblist_update($event_name, $data);
@@ -175,34 +176,78 @@ class rspamd_plugin {
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 		
 		if(is_dir('/etc/rspamd')) {
-			$recipient = $app->db->queryOneRecord("SELECT email FROM spamfilter_users WHERE id = ?", intval($data['new']['rid']));
+			$global_filter = false;
 			//* Create the config file
-			$wblist_file = $this->users_config_dir.'spamfilter_wblist_'.intval($data['new']['wblist_id']).'.conf';
+			$filter = null;
+			if($event_name === 'mail_access_insert' || $event_name === 'mail_access_update') {
+				$global_filter = true;
+				$record_id = intval($data['new']['access_id']);
+				$wblist_file = $this->users_config_dir.'global_wblist_'.$record_id.'.conf';
+				$filter = array(
+					'wb' => ($data['new']['access'] === 'OK' ? 'W' : 'B'),
+					'from' => ($data['new']['type'] === 'sender' ? $app->functions->idn_encode($data['new']['source']) : ''),
+					'rcpt' => ($data['new']['type'] === 'recipient' ? $app->functions->idn_encode($data['new']['source']) : ''),
+					'ip' => ($data['new']['type'] === 'client' && $this->_is_valid_ip_address($data['new']['source']) ? $data['new']['source'] : ''),
+					'hostname' => ($data['new']['type'] === 'client' && !$this->_is_valid_ip_address($data['new']['source']) ? $data['new']['source'] : '')
+				);
+			} else {
+				$record_id = intval($data['new']['wblist_id']);
+				$wblist_file = $this->users_config_dir.'spamfilter_wblist_'.$record_id.'.conf';
+				$tmp = $app->db->queryOneRecord("SELECT email FROM spamfilter_users WHERE id = ?", intval($data['new']['rid']));
+				if($tmp && !empty($tmp)) {
+					$filter = array(
+						'wb' => $data['new']['wb'],
+						'from' => $app->functions->idn_encode($data['new']['email']),
+						'rcpt' => $app->functions->idn_encode($tmp['email']),
+						'ip' => '',
+						'hostname' => ''
+					);
+				}
+			}
 		
-			if($data['new']['active'] == 'y' && is_array($recipient) && !empty($recipient)){
+			if($data['new']['active'] == 'y' && is_array($filter) && !empty($filter)){
 				if(!is_dir($this->users_config_dir)){
 					$app->system->mkdirpath($this->users_config_dir);
 				}
 		
 				$app->load('tpl');
 
+				$filter_from = $filter['from'];
+				if($filter_from != '') {
+					if(strpos($filter_from, '@') === false) {
+						$filter_from = '@' . $filter_from;
+					} elseif(substr($filter_from, 0, 2) === '*@') {
+						$filter_from = substr($filter_from, 1);
+					}
+				}
+				$filter_rcpt = $filter['rcpt'];
+				if($filter_rcpt != '') {
+					if(strpos($filter_rcpt, '@') === false) {
+						$filter_rcpt = '@' . $filter_rcpt;
+					} elseif(substr($filter_rcpt, 0, 2) === '*@') {
+						$filter_rcpt = substr($filter_rcpt, 1);
+					}
+				}
+				
 				$tpl = new tpl();
 				$tpl->newTemplate('rspamd_wblist.inc.conf.master');
-				$tpl->setVar('record_id', intval($data['new']['wblist_id']));
+				$tpl->setVar('list_scope', ($global_filter ? 'global' : 'spamfilter'));
+				$tpl->setVar('record_id', $record_id);
 				// we need to add 10 to priority to avoid mailbox/domain spamfilter settings overriding white/blacklists
-				$tpl->setVar('priority', intval($data['new']['priority']) + 10);
-				$tpl->setVar('from', $app->functions->idn_encode($data['new']['email']));
-				$tpl->setVar('recipient', $app->functions->idn_encode($recipient['email']));
-				//$tpl->setVar('action', ($data['new']['wb'] == 'W'? 'want_spam = yes;' : 'action = "reject";'));
-				$tpl->setVar('wblist', $data['new']['wb']);
+				$tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 20 : 10));
+				$tpl->setVar('from', $filter_from);
+				$tpl->setVar('recipient', $filter_rcpt);
+				$tpl->setVar('hostname', $filter['hostname']);
+				$tpl->setVar('ip', $filter['ip']);
+				$tpl->setVar('wblist', $filter['wb']);
 		
 				$app->system->file_put_contents($wblist_file, $tpl->grab());
-			} else {
-				if(is_file($wblist_file)) unlink($wblist_file);
+			} elseif(is_file($wblist_file)) {
+				unlink($wblist_file);
 			}
 			
-			if($mail_config['content_filter'] == 'rspamd'){
-				if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
+			if($mail_config['content_filter'] == 'rspamd' && is_file('/etc/init.d/rspamd')) {
+				$app->services->restartServiceDelayed('rspamd', 'reload');
 			}
 		}
 	}
@@ -215,9 +260,15 @@ class rspamd_plugin {
 
 		if(is_dir('/etc/rspamd')) {
 			//* delete the config file
-			$wblist_file = $this->users_config_dir.'spamfilter_wblist_'.intval($data['old']['wblist_id']).'.conf';
-			if(is_file($wblist_file)) unlink($wblist_file);
-			
+			if($event_name === 'mail_access_delete') {
+				$wblist_file = $this->users_config_dir.'global_wblist_'.intval($data['old']['access_id']).'.conf';
+			} else {
+				$wblist_file = $this->users_config_dir.'spamfilter_wblist_'.intval($data['old']['wblist_id']).'.conf';
+			}
+			if(is_file($wblist_file)) {
+				unlink($wblist_file);
+			}
+
 			if($mail_config['content_filter'] == 'rspamd'){
 				if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
 			}
@@ -253,4 +304,16 @@ class rspamd_plugin {
 		}
 	}
 	
+	private function _is_valid_ip_address($ip) {
+		if(function_exists('filter_var')) {
+			if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6)) {
+				return false;
+			} else {
+				return true;
+			}
+		} else {
+			return false;
+		}
+	}
+	
 } // end class
-- 
GitLab


From c5bdf04515c2db52ccad6e887b1d2966954164a6 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 30 Jul 2019 22:22:21 +0200
Subject: [PATCH 075/571] - removed ENGINE=MyISAM from sql files, fixes #5342

---
 install/sql/incremental/upd_0002.sql |   2 +-
 install/sql/incremental/upd_0004.sql |   4 +-
 install/sql/incremental/upd_0007.sql |   2 +-
 install/sql/incremental/upd_0009.sql |   6 +-
 install/sql/incremental/upd_0012.sql |  10 +-
 install/sql/incremental/upd_0013.sql |   2 +-
 install/sql/incremental/upd_0019.sql |   8 +-
 install/sql/incremental/upd_0028.sql |   2 +-
 install/sql/incremental/upd_0031.sql |   2 +-
 install/sql/incremental/upd_0033.sql |   2 +-
 install/sql/incremental/upd_0034.sql |   8 +-
 install/sql/incremental/upd_0035.sql |   2 +-
 install/sql/incremental/upd_0039.sql |   2 +-
 install/sql/incremental/upd_0040.sql |   2 +-
 install/sql/incremental/upd_0050.sql |   2 +-
 install/sql/incremental/upd_0056.sql |   2 +-
 install/sql/incremental/upd_0057.sql |   2 +-
 install/sql/incremental/upd_0062.sql |   2 +-
 install/sql/incremental/upd_0063.sql |   2 +-
 install/sql/incremental/upd_0075.sql |   2 +-
 install/sql/incremental/upd_0081.sql |   8 +-
 install/sql/incremental/upd_0087.sql |   2 +-
 install/sql/ispconfig3.sql           | 160 +++++++++++++--------------
 23 files changed, 118 insertions(+), 118 deletions(-)

diff --git a/install/sql/incremental/upd_0002.sql b/install/sql/incremental/upd_0002.sql
index e71e111826..7802dfa160 100644
--- a/install/sql/incremental/upd_0002.sql
+++ b/install/sql/incremental/upd_0002.sql
@@ -5,4 +5,4 @@ CREATE TABLE IF NOT EXISTS `sys_session` (
   `session_data` longtext,
   PRIMARY KEY  (`session_id`),
   KEY `last_updated` (`last_updated`)
-) ENGINE=MyISAM;
\ No newline at end of file
+);
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0004.sql b/install/sql/incremental/upd_0004.sql
index 3bba2461a6..6153fc7732 100644
--- a/install/sql/incremental/upd_0004.sql
+++ b/install/sql/incremental/upd_0004.sql
@@ -11,7 +11,7 @@ CREATE TABLE `help_faq_sections` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hfs_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1;
+) AUTO_INCREMENT=1;
 
 INSERT INTO `help_faq_sections` VALUES (1,'General',0,NULL,NULL,NULL,NULL,NULL);
 
@@ -27,7 +27,7 @@ CREATE TABLE `help_faq` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hf_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1;
+) AUTO_INCREMENT=1;
 
 INSERT INTO `help_faq` VALUES (1,1,0,'I\'d like to know ...','Yes, of course.',1,1,'riud','riud','r');
 
diff --git a/install/sql/incremental/upd_0007.sql b/install/sql/incremental/upd_0007.sql
index cea3813229..0cdf99e2bc 100644
--- a/install/sql/incremental/upd_0007.sql
+++ b/install/sql/incremental/upd_0007.sql
@@ -14,6 +14,6 @@ CREATE TABLE IF NOT EXISTS `mail_mailinglist` (
   `email` varchar(255) NOT NULL,
   `password` varchar(255) NOT NULL,
   PRIMARY KEY  (`mailinglist_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1;
+) AUTO_INCREMENT=1;
 
 DROP TABLE `mail_mailman_domain`;
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0009.sql b/install/sql/incremental/upd_0009.sql
index 5be069c735..43262d65b9 100644
--- a/install/sql/incremental/upd_0009.sql
+++ b/install/sql/incremental/upd_0009.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `proxy_reverse` (
   `rewrite_url_dst` varchar(100) NOT NULL,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`rewrite_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
 
 CREATE TABLE IF NOT EXISTS `firewall_filter` (
@@ -38,7 +38,7 @@ CREATE TABLE IF NOT EXISTS `firewall_filter` (
   `active` enum('n','y') NOT NULL default 'y',
   `client_id` int(11) NOT NULL,
   PRIMARY KEY  (`firewall_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `firewall_forward` (
   `firewall_id` int(11) unsigned NOT NULL auto_increment,
@@ -59,7 +59,7 @@ CREATE TABLE IF NOT EXISTS `firewall_forward` (
   `active` enum('n','y') NOT NULL default 'y',
   `client_id` int(11) NOT NULL,
   PRIMARY KEY  (`firewall_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
 
 alter table `server` add column `proxy_server` tinyint(1) not null after `vserver_server`;
 alter table `server` add column `firewall_server` tinyint(1) not null after `proxy_server`;
diff --git a/install/sql/incremental/upd_0012.sql b/install/sql/incremental/upd_0012.sql
index 2ba957f8d9..1fd355160c 100644
--- a/install/sql/incremental/upd_0012.sql
+++ b/install/sql/incremental/upd_0012.sql
@@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS `openvz_ip` (
   `vm_id` int(11) NOT NULL DEFAULT '0',
   `reserved` varchar(255) NOT NULL DEFAULT 'n',
   PRIMARY KEY (`ip_address_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_ip`
@@ -40,7 +40,7 @@ CREATE TABLE IF NOT EXISTS `openvz_ostemplate` (
   `active` varchar(255) NOT NULL DEFAULT 'y',
   `description` text,
   PRIMARY KEY (`ostemplate_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_ostemplate`
@@ -100,7 +100,7 @@ CREATE TABLE IF NOT EXISTS `openvz_template` (
   `create_dns` varchar(1) NOT NULL DEFAULT 'n',
   `capability` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`template_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_template`
@@ -119,7 +119,7 @@ CREATE TABLE IF NOT EXISTS `openvz_traffic` (
   `traffic_date` date NOT NULL,
   `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY (`veid`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
 
 --
 -- Dumping data for table `openvz_traffic`
@@ -164,7 +164,7 @@ CREATE TABLE IF NOT EXISTS `openvz_vm` (
   `capability` text NOT NULL,
   `config` mediumtext NOT NULL,
   PRIMARY KEY (`vm_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_vm`
diff --git a/install/sql/incremental/upd_0013.sql b/install/sql/incremental/upd_0013.sql
index 9b43d33616..bc38241bb4 100644
--- a/install/sql/incremental/upd_0013.sql
+++ b/install/sql/incremental/upd_0013.sql
@@ -16,5 +16,5 @@ CREATE TABLE `iptables` (
   `target` varchar(10) DEFAULT NULL COMMENT 'ACCEPT DROP REJECT LOG',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`iptables_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
diff --git a/install/sql/incremental/upd_0019.sql b/install/sql/incremental/upd_0019.sql
index 60c464cea7..1bd990c5d0 100644
--- a/install/sql/incremental/upd_0019.sql
+++ b/install/sql/incremental/upd_0019.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `help_faq` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hf_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 CREATE TABLE IF NOT EXISTS `help_faq_sections` (
   `hfs_id` int(11) NOT NULL AUTO_INCREMENT,
@@ -22,7 +22,7 @@ CREATE TABLE IF NOT EXISTS `help_faq_sections` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hfs_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 CREATE TABLE IF NOT EXISTS `web_folder` (
   `web_folder_id` bigint(20) NOT NULL AUTO_INCREMENT,
@@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS `web_folder` (
   `path` varchar(255) DEFAULT NULL,
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`web_folder_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 CREATE TABLE IF NOT EXISTS `web_folder_user` (
   `web_folder_user_id` bigint(20) NOT NULL AUTO_INCREMENT,
@@ -50,7 +50,7 @@ CREATE TABLE IF NOT EXISTS `web_folder_user` (
   `password` varchar(255) DEFAULT NULL,
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`web_folder_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 DROP TABLE `mail_greylist`;
 DROP TABLE `firewall_filter`;
diff --git a/install/sql/incremental/upd_0028.sql b/install/sql/incremental/upd_0028.sql
index 0020cdd9ac..67023de067 100644
--- a/install/sql/incremental/upd_0028.sql
+++ b/install/sql/incremental/upd_0028.sql
@@ -9,4 +9,4 @@ CREATE TABLE `web_backup` (
   `tstamp` int(10) unsigned NOT NULL,
   `filename` varchar(255) NOT NULL,
   PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/install/sql/incremental/upd_0031.sql b/install/sql/incremental/upd_0031.sql
index 0fb25a5d40..7ebdef95c0 100644
--- a/install/sql/incremental/upd_0031.sql
+++ b/install/sql/incremental/upd_0031.sql
@@ -14,5 +14,5 @@ CREATE TABLE `server_php` (
   `php_fpm_ini_dir` varchar(255) DEFAULT NULL,
   `php_fpm_pool_dir` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`server_php_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 ALTER TABLE `web_domain` ADD `fastcgi_php_version` VARCHAR( 255 ) NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0033.sql b/install/sql/incremental/upd_0033.sql
index d4b3c0d6a2..5d2b93cdba 100644
--- a/install/sql/incremental/upd_0033.sql
+++ b/install/sql/incremental/upd_0033.sql
@@ -10,4 +10,4 @@ CREATE TABLE IF NOT EXISTS `client_circle` (
   `description` text,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY (`circle_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
\ No newline at end of file
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0034.sql b/install/sql/incremental/upd_0034.sql
index 8ae098c011..85e49f70bb 100644
--- a/install/sql/incremental/upd_0034.sql
+++ b/install/sql/incremental/upd_0034.sql
@@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS `aps_instances` (
   `package_id` int(4) NOT NULL,
   `instance_status` int(4) NOT NULL,
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -31,7 +31,7 @@ CREATE TABLE IF NOT EXISTS `aps_instances_settings` (
   `name` varchar(255) NOT NULL,
   `value` text NOT NULL,
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -49,7 +49,7 @@ CREATE TABLE IF NOT EXISTS `aps_packages` (
   `package_url` TEXT NOT NULL,
   `package_status` int(1) NOT NULL DEFAULT '2',
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -63,7 +63,7 @@ CREATE TABLE IF NOT EXISTS `aps_settings` (
   `value` text NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `name` (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
diff --git a/install/sql/incremental/upd_0035.sql b/install/sql/incremental/upd_0035.sql
index 5f8031c514..1a453e5875 100644
--- a/install/sql/incremental/upd_0035.sql
+++ b/install/sql/incremental/upd_0035.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `sys_theme` (
   `username` varchar(64) NOT NULL,
   `logo_url` varchar(255) NOT NULL,
   PRIMARY KEY (`var_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
diff --git a/install/sql/incremental/upd_0039.sql b/install/sql/incremental/upd_0039.sql
index af8a5afc5a..b090db4f74 100644
--- a/install/sql/incremental/upd_0039.sql
+++ b/install/sql/incremental/upd_0039.sql
@@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS `web_database_user` (
   `database_user` varchar(64) DEFAULT NULL,
   `database_password` varchar(64) DEFAULT NULL,
   PRIMARY KEY (`database_user_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
diff --git a/install/sql/incremental/upd_0040.sql b/install/sql/incremental/upd_0040.sql
index b39e8f11ff..f572a6e73b 100644
--- a/install/sql/incremental/upd_0040.sql
+++ b/install/sql/incremental/upd_0040.sql
@@ -21,4 +21,4 @@ CREATE TABLE IF NOT EXISTS `directive_snippets` (
   `snippet` mediumtext,
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`directive_snippets_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/install/sql/incremental/upd_0050.sql b/install/sql/incremental/upd_0050.sql
index bc31868a70..0ce01b9b45 100644
--- a/install/sql/incremental/upd_0050.sql
+++ b/install/sql/incremental/upd_0050.sql
@@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS `dns_slave` (
   PRIMARY KEY  (`id`),
   KEY `origin` (`origin`),
   KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `dns_slave` DROP INDEX `origin`;
 ALTER TABLE `dns_slave` ADD CONSTRAINT `slave` UNIQUE (`origin`,`server_id`);
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0056.sql b/install/sql/incremental/upd_0056.sql
index c7cb5285ce..d9e1e02289 100644
--- a/install/sql/incremental/upd_0056.sql
+++ b/install/sql/incremental/upd_0056.sql
@@ -4,7 +4,7 @@ CREATE TABLE `client_template_assigned` (
   `client_template_id` int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY (`assigned_template_id`),
   KEY `client_id` (`client_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `client` ADD `gender` enum('','m','f') NOT NULL DEFAULT '' AFTER `company_id`,
   ADD `locked` enum('n','y') NOT NULL DEFAULT 'n' AFTER `created_at`,
diff --git a/install/sql/incremental/upd_0057.sql b/install/sql/incremental/upd_0057.sql
index b8452fe6e9..01b2c58de0 100644
--- a/install/sql/incremental/upd_0057.sql
+++ b/install/sql/incremental/upd_0057.sql
@@ -4,4 +4,4 @@ CREATE TABLE IF NOT EXISTS `sys_cron` (
   `next_run` datetime NULL DEFAULT NULL,
   `running` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
   PRIMARY KEY (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
diff --git a/install/sql/incremental/upd_0062.sql b/install/sql/incremental/upd_0062.sql
index cee5ff93cc..039a0bd005 100644
--- a/install/sql/incremental/upd_0062.sql
+++ b/install/sql/incremental/upd_0062.sql
@@ -8,7 +8,7 @@ CREATE TABLE `mail_backup` (
   `filename` varchar(255) NOT NULL,
   `filesize` VARCHAR(10) NOT NULL,
   PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `mail_user` ADD `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none';
 ALTER TABLE `mail_user` ADD `backup_copies` INT NOT NULL DEFAULT '1';
diff --git a/install/sql/incremental/upd_0063.sql b/install/sql/incremental/upd_0063.sql
index fc2534ac24..08e2f04f93 100644
--- a/install/sql/incremental/upd_0063.sql
+++ b/install/sql/incremental/upd_0063.sql
@@ -12,7 +12,7 @@ CREATE TABLE `client_message_template` (
   `subject` varchar(255) DEFAULT NULL,
   `message` text,
   PRIMARY KEY (`client_message_template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 ALTER TABLE  `spamfilter_policy` ADD  `policyd_quota_in` int(11) NOT NULL DEFAULT  '-1',
 ADD  `policyd_quota_in_period` int(11) NOT NULL DEFAULT  '24',
 ADD  `policyd_quota_out` int(11) NOT NULL DEFAULT  '-1',
diff --git a/install/sql/incremental/upd_0075.sql b/install/sql/incremental/upd_0075.sql
index acca4e6ac8..ce1bacf2d1 100644
--- a/install/sql/incremental/upd_0075.sql
+++ b/install/sql/incremental/upd_0075.sql
@@ -77,4 +77,4 @@ CREATE TABLE IF NOT EXISTS `dns_slave` (
   PRIMARY KEY  (`id`),
   UNIQUE KEY `slave` (`origin`,`server_id`),
   KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/install/sql/incremental/upd_0081.sql b/install/sql/incremental/upd_0081.sql
index 69236784c7..d24ce19ce9 100644
--- a/install/sql/incremental/upd_0081.sql
+++ b/install/sql/incremental/upd_0081.sql
@@ -126,7 +126,7 @@ CREATE TABLE `xmpp_domain` (
   PRIMARY KEY  (`domain_id`),
   KEY `server_id` (`server_id`,`domain`),
   KEY `domain_active` (`domain`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Table structure for table  `xmpp_user`
@@ -146,7 +146,7 @@ CREATE TABLE `xmpp_user` (
   PRIMARY KEY  (`xmppuser_id`),
   KEY `server_id` (`server_id`,`jid`),
   KEY `jid_active` (`jid`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -176,7 +176,7 @@ CREATE TABLE `server_ip_map` (
   `destination_ip` varchar(35) DEFAULT '',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`server_ip_map_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `web_domain` ADD COLUMN `rewrite_to_https` ENUM('y','n') NOT NULL DEFAULT 'n' AFTER `seo_redirect`;
 
@@ -199,7 +199,7 @@ CREATE TABLE `ftp_traffic` (
 	`in_bytes` bigint(32) unsigned NOT NULL,
 	`out_bytes` bigint(32) unsigned NOT NULL, 
 	UNIQUE KEY (`hostname`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `mail_forwarding` ADD COLUMN `allow_send_as` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `active`;
 UPDATE `mail_forwarding` SET `allow_send_as` = 'y' WHERE `type` = 'alias';
diff --git a/install/sql/incremental/upd_0087.sql b/install/sql/incremental/upd_0087.sql
index 55e3b846d7..4d392cc441 100644
--- a/install/sql/incremental/upd_0087.sql
+++ b/install/sql/incremental/upd_0087.sql
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
   `ca_critical` tinyint(1) NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`),
   UNIQUE KEY (`ca_issue`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`);
 
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 3f534eedf0..c7e170ca58 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -69,7 +69,7 @@ CREATE TABLE IF NOT EXISTS `aps_instances` (
   `package_id` int(4) NOT NULL DEFAULT '0',
   `instance_status` int(4) NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -84,7 +84,7 @@ CREATE TABLE IF NOT EXISTS `aps_instances_settings` (
   `name` varchar(255) NOT NULL DEFAULT '',
   `value` text,
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -102,7 +102,7 @@ CREATE TABLE IF NOT EXISTS `aps_packages` (
   `package_url` TEXT,
   `package_status` int(1) NOT NULL DEFAULT '2',
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -116,7 +116,7 @@ CREATE TABLE IF NOT EXISTS `aps_settings` (
   `value` text,
   PRIMARY KEY (`id`),
   UNIQUE KEY `name` (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -128,7 +128,7 @@ CREATE TABLE `attempts_login` (
   `ip` varchar(39) NOT NULL DEFAULT '',
   `times` int(11) DEFAULT NULL,
   `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -264,7 +264,7 @@ CREATE TABLE `client` (
   `risk_score` int(10) unsigned NOT NULL DEFAULT '0',
   `activation_code` varchar(10) NOT NULL DEFAULT '',
   PRIMARY KEY (`client_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -284,7 +284,7 @@ CREATE TABLE `client_circle` (
   `description` text,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY (`circle_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -369,7 +369,7 @@ CREATE TABLE `client_template` (
   `limit_openvz_vm` int(11) NOT NULL DEFAULT '0',
   `limit_openvz_vm_template_id` int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY  (`template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -383,7 +383,7 @@ CREATE TABLE `client_template_assigned` (
   `client_template_id` int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY (`assigned_template_id`),
   KEY `client_id` (`client_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 -- --------------------------------------------------------
 
 --
@@ -402,7 +402,7 @@ CREATE TABLE `client_message_template` (
   `subject` varchar(255) DEFAULT NULL,
   `message` text,
   PRIMARY KEY (`client_message_template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Dumping data for table `invoice_message_template`
@@ -422,7 +422,7 @@ CREATE TABLE `country` (
   `numcode` smallint(6) DEFAULT NULL,
   `eu` enum('n','y') NOT NULL DEFAULT 'n',
   PRIMARY KEY (`iso`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -448,7 +448,7 @@ CREATE TABLE `cron` (
   `log` enum('n','y') NOT NULL default 'n',
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -471,7 +471,7 @@ CREATE TABLE IF NOT EXISTS `directive_snippets` (
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   `master_directive_snippets_id` int(11) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY (`directive_snippets_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -497,7 +497,7 @@ CREATE TABLE `dns_rr` (
   `serial` int(10) unsigned default NULL,
   PRIMARY KEY  (`id`),
   KEY `rr` (`zone`,`type`,`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -520,7 +520,7 @@ CREATE TABLE `dns_slave` (
   PRIMARY KEY  (`id`),
   UNIQUE KEY `slave` (`origin`,`server_id`),
   KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -543,7 +543,7 @@ CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
   `ca_critical` tinyint(1) NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`),
   UNIQUE KEY (`ca_issue`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`);
 
@@ -630,7 +630,7 @@ CREATE TABLE `dns_soa` (
   PRIMARY KEY  (`id`),
   UNIQUE KEY `origin` (`origin`),
   KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -650,7 +650,7 @@ CREATE TABLE `dns_template` (
   `template` text,
   `visible` enum('N','Y') NOT NULL default 'Y',
   PRIMARY KEY  (`template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Table structure for table  `domain`
@@ -666,7 +666,7 @@ CREATE TABLE `domain` (
   `domain` varchar(255) NOT NULL default '',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `domain` (`domain`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -686,7 +686,7 @@ CREATE TABLE `firewall` (
   `udp_port` text,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`firewall_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -724,7 +724,7 @@ CREATE TABLE `ftp_user` (
   KEY `server_id` (`server_id`),
   KEY `username` (`username`),
   KEY `quota_files` (`quota_files`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -738,7 +738,7 @@ CREATE TABLE `ftp_traffic` (
   `in_bytes` bigint(32) unsigned NOT NULL,
   `out_bytes` bigint(32) unsigned NOT NULL,
   UNIQUE KEY (`hostname`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -758,7 +758,7 @@ CREATE TABLE `help_faq` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hf_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -776,7 +776,7 @@ CREATE TABLE `help_faq_sections` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hfs_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -797,7 +797,7 @@ CREATE TABLE `iptables` (
   `target` varchar(10) DEFAULT NULL COMMENT 'ACCEPT DROP REJECT LOG',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`iptables_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
 -- --------------------------------------------------------
 
@@ -819,7 +819,7 @@ CREATE TABLE `mail_access` (
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`access_id`),
   KEY `server_id` (`server_id`,`source`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -837,7 +837,7 @@ CREATE TABLE `mail_backup` (
   `filename` varchar(255) NOT NULL DEFAULT '',
   `filesize` VARCHAR(20) NOT NULL DEFAULT '',
   PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -859,7 +859,7 @@ CREATE TABLE `mail_content_filter` (
   `action` varchar(255) default NULL,
   `active` varchar(255) NOT NULL default 'y',
   PRIMARY KEY  (`content_filter_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -884,7 +884,7 @@ CREATE TABLE `mail_domain` (
   PRIMARY KEY  (`domain_id`),
   KEY `server_id` (`server_id`,`domain`),
   KEY `domain_active` (`domain`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -909,7 +909,7 @@ CREATE TABLE `mail_forwarding` (
   PRIMARY KEY  (`forwarding_id`),
   KEY `server_id` (`server_id`,`source`),
   KEY `type` (`type`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -934,7 +934,7 @@ CREATE TABLE `mail_get` (
   `destination` varchar(255) default NULL,
   `active` varchar(255) NOT NULL default 'y',
   PRIMARY KEY  (`mailget_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -955,7 +955,7 @@ CREATE TABLE `mail_mailinglist` (
   `email` varchar(255) NOT NULL DEFAULT '',
   `password` varchar(255) NOT NULL DEFAULT '',
   PRIMARY KEY  (`mailinglist_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -975,7 +975,7 @@ CREATE TABLE IF NOT EXISTS `mail_relay_recipient` (
   `access` varchar(255) NOT NULL DEFAULT 'OK',
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`relay_recipient_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -990,7 +990,7 @@ CREATE TABLE `mail_traffic` (
   `traffic` bigint(20) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY  (`traffic_id`),
   KEY `mailuser_id` (`mailuser_id`,`month`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1013,7 +1013,7 @@ CREATE TABLE `mail_transport` (
   PRIMARY KEY  (`transport_id`),
   KEY `server_id` (`server_id`,`transport`),
   KEY `server_id_2` (`server_id`,`domain`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1066,7 +1066,7 @@ CREATE TABLE `mail_user` (
   PRIMARY KEY  (`mailuser_id`),
   KEY `server_id` (`server_id`,`email`),
   KEY `email_access` (`email`,`access`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1090,7 +1090,7 @@ CREATE TABLE `mail_user_filter` (
   `target` varchar(255) default NULL,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`filter_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1105,7 +1105,7 @@ CREATE TABLE `monitor_data` (
   `data` mediumtext,
   `state` enum('no_state','unknown','ok','info','warning','critical','error') NOT NULL DEFAULT 'unknown',
   PRIMARY KEY (`server_id`,`type`,`created`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -1126,7 +1126,7 @@ CREATE TABLE IF NOT EXISTS `openvz_ip` (
   `reserved` varchar(255) NOT NULL DEFAULT 'n',
   `additional` varchar(255) NOT NULL DEFAULT 'n',
   PRIMARY KEY (`ip_address_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_ip`
@@ -1152,7 +1152,7 @@ CREATE TABLE IF NOT EXISTS `openvz_ostemplate` (
   `active` varchar(255) NOT NULL DEFAULT 'y',
   `description` text,
   PRIMARY KEY (`ostemplate_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_ostemplate`
@@ -1215,7 +1215,7 @@ CREATE TABLE IF NOT EXISTS `openvz_template` (
   `iptables` varchar(255) DEFAULT NULL,
   `custom` text,
   PRIMARY KEY (`template_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_template`
@@ -1234,7 +1234,7 @@ CREATE TABLE IF NOT EXISTS `openvz_traffic` (
   `traffic_date` date NULL DEFAULT NULL,
   `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
   UNIQUE KEY (`veid`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
 
 --
 -- Dumping data for table `openvz_traffic`
@@ -1283,7 +1283,7 @@ CREATE TABLE IF NOT EXISTS `openvz_vm` (
   `config` mediumtext,
   `custom` text,
   PRIMARY KEY (`vm_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_vm`
@@ -1302,7 +1302,7 @@ CREATE TABLE `remote_session` (
   `client_login` tinyint(1) unsigned NOT NULL default '0',
   `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY  (`remote_session`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -1323,7 +1323,7 @@ CREATE TABLE `remote_user` (
   `remote_ips` TEXT,
   `remote_functions` text,
   PRIMARY KEY  (`remote_userid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1354,7 +1354,7 @@ CREATE TABLE `server` (
   `dbversion` int(11) unsigned NOT NULL default '1',
   `active` tinyint(1) NOT NULL default '1',
   PRIMARY KEY  (`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1376,7 +1376,7 @@ CREATE TABLE `server_ip` (
   `virtualhost` enum('n','y') NOT NULL default 'y',
   `virtualhost_port` varchar(255) default '80,443',
   PRIMARY KEY  (`server_ip_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1396,7 +1396,7 @@ CREATE TABLE `server_ip_map` (
   `destination_ip` varchar(35) DEFAULT '',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`server_ip_map_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1421,7 +1421,7 @@ CREATE TABLE `server_php` (
   `php_fpm_pool_dir` varchar(255) DEFAULT NULL,
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`server_php_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1450,7 +1450,7 @@ CREATE TABLE `shell_user` (
   `chroot` varchar(255) NOT NULL DEFAULT '',
   `ssh_rsa` text,
   PRIMARY KEY  (`shell_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1473,7 +1473,7 @@ CREATE TABLE `software_package` (
   `package_config` text,
   PRIMARY KEY  (`package_id`),
   UNIQUE KEY `package_name` (`package_name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1494,7 +1494,7 @@ CREATE TABLE `software_repo` (
   `repo_password` varchar(64) default NULL,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`software_repo_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1516,7 +1516,7 @@ CREATE TABLE `software_update` (
   `v4` tinyint(1) NOT NULL default '0',
   `type` enum('full','update') NOT NULL default 'full',
   PRIMARY KEY  (`software_update_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1532,7 +1532,7 @@ CREATE TABLE `software_update_inst` (
   `status` enum('none','installing','installed','deleting','deleted','failed') NOT NULL default 'none',
   PRIMARY KEY  (`software_update_inst_id`),
   UNIQUE KEY `software_update_id` (`software_update_id`,`package_name`,`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1590,7 +1590,7 @@ CREATE TABLE `spamfilter_policy` (
   `policyd_quota_out_period` int(11) NOT NULL DEFAULT  '24',
   `policyd_greylist` ENUM(  'Y',  'N' ) NOT NULL DEFAULT  'N',
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1613,7 +1613,7 @@ CREATE TABLE `spamfilter_users` (
   `local` varchar(1) default NULL,
   PRIMARY KEY  (`id`),
   UNIQUE KEY `email` (`email`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1635,7 +1635,7 @@ CREATE TABLE `spamfilter_wblist` (
   `priority` tinyint(3) unsigned NOT NULL DEFAULT '0',
   `active` enum('y','n') NOT NULL default 'y',
   PRIMARY KEY  (`wblist_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1656,7 +1656,7 @@ CREATE TABLE `support_message` (
   `message` text default NULL,
   `tstamp` int(11) NOT NULL default '0',
   PRIMARY KEY  (`support_message_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1669,7 +1669,7 @@ CREATE TABLE `sys_config` (
   `name` varchar(64) NOT NULL DEFAULT '',
   `value` varchar(255) NOT NULL DEFAULT '',
   PRIMARY KEY (`group`, `name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
 
 
 -- --------------------------------------------------------
@@ -1684,7 +1684,7 @@ CREATE TABLE IF NOT EXISTS `sys_cron` (
   `next_run` datetime NULL DEFAULT NULL,
   `running` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
   PRIMARY KEY (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
 
 
 -- --------------------------------------------------------
@@ -1707,7 +1707,7 @@ CREATE TABLE `sys_datalog` (
   `session_id` varchar(64) NOT NULL DEFAULT '',
   PRIMARY KEY  (`datalog_id`),
   KEY `server_id` (`server_id`,`status`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1731,7 +1731,7 @@ CREATE TABLE `sys_dbsync` (
   `last_datalog_id` int(11) unsigned NOT NULL default '0',
   PRIMARY KEY  (`id`),
   KEY `last_datalog_id` (`last_datalog_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1751,7 +1751,7 @@ CREATE TABLE `sys_filesync` (
   `wput_options` varchar(255) NOT NULL default '--timestamping --reupload --dont-continue',
   `active` tinyint(1) NOT NULL default '1',
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1765,7 +1765,7 @@ CREATE TABLE `sys_group` (
   `description` text,
   `client_id` int(11) unsigned NOT NULL default '0',
   PRIMARY KEY  (`groupid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1779,7 +1779,7 @@ CREATE TABLE `sys_ini` (
   `default_logo` text NOT NULL,
   `custom_logo` text NOT NULL,
   PRIMARY KEY  (`sysini_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1795,7 +1795,7 @@ CREATE TABLE `sys_log` (
   `tstamp` int(11) unsigned NOT NULL DEFAULT '0',
   `message` text,
   PRIMARY KEY  (`syslog_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1813,7 +1813,7 @@ CREATE TABLE `sys_remoteaction` (
   `response` mediumtext,
   PRIMARY KEY (`action_id`),
   KEY `server_id` (`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1829,7 +1829,7 @@ CREATE TABLE `sys_session` (
   `session_data` longtext,
   PRIMARY KEY (`session_id`),
   KEY `last_updated` (`last_updated`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -1848,7 +1848,7 @@ CREATE TABLE IF NOT EXISTS `sys_theme` (
   `username` varchar(64) NOT NULL DEFAULT '',
   `logo_url` varchar(255) NOT NULL DEFAULT '',
   PRIMARY KEY (`var_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -1880,7 +1880,7 @@ CREATE TABLE `sys_user` (
   `lost_password_hash` VARCHAR(50) NOT NULL default '',
   `lost_password_reqtime` DATETIME NULL default NULL,
   PRIMARY KEY  (`userid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1903,7 +1903,7 @@ CREATE TABLE `webdav_user` (
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   `dir` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`webdav_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1921,7 +1921,7 @@ CREATE TABLE `web_backup` (
   `filename` varchar(255) NOT NULL DEFAULT '',
   `filesize` VARCHAR(20) NOT NULL DEFAULT '',
   PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1955,7 +1955,7 @@ CREATE TABLE `web_database` (
   PRIMARY KEY (`database_id`),
   KEY `database_user_id` (`database_user_id`),
   KEY `database_ro_user_id` (`database_ro_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1976,7 +1976,7 @@ CREATE TABLE IF NOT EXISTS `web_database_user` (
   `database_password` varchar(64) DEFAULT NULL,
   `database_password_mongo` varchar(32) DEFAULT NULL,
   PRIMARY KEY (`database_user_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -2068,7 +2068,7 @@ CREATE TABLE `web_domain` (
   `log_retention` int(11) NOT NULL DEFAULT '10',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -2088,7 +2088,7 @@ CREATE TABLE IF NOT EXISTS `web_folder` (
   `path` varchar(255) DEFAULT NULL,
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`web_folder_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Dumping data for table `web_folder`
@@ -2114,7 +2114,7 @@ CREATE TABLE IF NOT EXISTS `web_folder_user` (
   `password` varchar(255) DEFAULT NULL,
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`web_folder_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Dumping data for table `web_folder_user`
@@ -2131,7 +2131,7 @@ CREATE TABLE `web_traffic` (
   `traffic_date` date NULL DEFAULT NULL,
   `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
   UNIQUE KEY  (`hostname`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -2190,7 +2190,7 @@ CREATE TABLE `xmpp_domain` (
   PRIMARY KEY  (`domain_id`),
   KEY `server_id` (`server_id`,`domain`),
   KEY `domain_active` (`domain`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -2212,7 +2212,7 @@ CREATE TABLE `xmpp_user` (
   PRIMARY KEY  (`xmppuser_id`),
   KEY `server_id` (`server_id`,`jid`),
   KEY `jid_active` (`jid`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
-- 
GitLab


From 3c2f3189ce3f56cc1c6d48b285b748df50a40d05 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 30 Jul 2019 22:23:26 +0200
Subject: [PATCH 076/571] - removed files from failed patches (orig/rej)

---
 install/dist/conf/debiantesting.conf.php.orig |  234 --
 install/lib/installer_base.lib.php.orig       | 2962 -----------------
 .../incremental/upd_dev_collection.sql.orig   |    0
 .../incremental/upd_dev_collection.sql.rej    |   40 -
 install/sql/ispconfig3.sql.orig               | 2570 --------------
 install/sql/ispconfig3.sql.rej                |   23 -
 .../admin/form/server_config.tform.php.orig   | 1956 -----------
 .../admin/lib/lang/de_server_config.lng.orig  |  299 --
 .../admin/lib/lang/de_server_config.lng.rej   |   11 -
 .../admin/lib/lang/en_server_config.lng.orig  |  300 --
 .../admin/lib/lang/en_server_config.lng.rej   |   11 -
 .../form/spamfilter_policy.tform.php.orig     |  496 ---
 12 files changed, 8902 deletions(-)
 delete mode 100644 install/dist/conf/debiantesting.conf.php.orig
 delete mode 100644 install/lib/installer_base.lib.php.orig
 delete mode 100644 install/sql/incremental/upd_dev_collection.sql.orig
 delete mode 100644 install/sql/incremental/upd_dev_collection.sql.rej
 delete mode 100644 install/sql/ispconfig3.sql.orig
 delete mode 100644 install/sql/ispconfig3.sql.rej
 delete mode 100644 interface/web/admin/form/server_config.tform.php.orig
 delete mode 100644 interface/web/admin/lib/lang/de_server_config.lng.orig
 delete mode 100644 interface/web/admin/lib/lang/de_server_config.lng.rej
 delete mode 100644 interface/web/admin/lib/lang/en_server_config.lng.orig
 delete mode 100644 interface/web/admin/lib/lang/en_server_config.lng.rej
 delete mode 100644 interface/web/mail/form/spamfilter_policy.tform.php.orig

diff --git a/install/dist/conf/debiantesting.conf.php.orig b/install/dist/conf/debiantesting.conf.php.orig
deleted file mode 100644
index 5e5e32f474..0000000000
--- a/install/dist/conf/debiantesting.conf.php.orig
+++ /dev/null
@@ -1,234 +0,0 @@
-<?php
-
-/*
-Copyright (c) 2016, Till Brehm, ISPConfig UG
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-//***  Debian Testing default settings
-
-//* Main
-$conf['language'] = 'en';
-$conf['distname'] = 'debian100';
-$conf['hostname'] = 'server1.domain.tld'; // Full hostname
-$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
-$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
-$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
-$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
-$conf['server_id'] = 1;
-$conf['init_scripts'] = '/etc/init.d';
-$conf['runlevel'] = '/etc';
-$conf['shells'] = '/etc/shells';
-$conf['pam'] = '/etc/pam.d';
-
-//* Services provided by this server, this selection will be overridden by the expert mode
-$conf['services']['mail'] = true;
-$conf['services']['web'] = true;
-$conf['services']['dns'] = true;
-$conf['services']['file'] = true;
-$conf['services']['db'] = true;
-$conf['services']['vserver'] = true;
-$conf['services']['proxy'] = false;
-$conf['services']['firewall'] = false;
-
-//* MySQL
-$conf['mysql']['installed'] = false; // will be detected automatically during installation
-$conf['mysql']['init_script'] = 'mysql';
-$conf['mysql']['host'] = 'localhost';
-$conf['mysql']['ip'] = '127.0.0.1';
-$conf['mysql']['port'] = '3306';
-$conf['mysql']['database'] = 'dbispconfig';
-$conf['mysql']['admin_user'] = 'root';
-$conf['mysql']['admin_password'] = '';
-$conf['mysql']['charset'] = 'utf8';
-$conf['mysql']['ispconfig_user'] = 'ispconfig';
-$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
-$conf['mysql']['master_slave_setup'] = 'n';
-$conf['mysql']['master_host'] = '';
-$conf['mysql']['master_database'] = 'dbispconfig';
-$conf['mysql']['master_admin_user'] = 'root';
-$conf['mysql']['master_admin_password'] = '';
-$conf['mysql']['master_ispconfig_user'] = '';
-$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
-
-//* Apache
-$conf['apache']['installed'] = false; // will be detected automatically during installation
-$conf['apache']['user'] = 'www-data';
-$conf['apache']['group'] = 'www-data';
-$conf['apache']['init_script'] = 'apache2';
-$conf['apache']['version'] = '2.4';
-$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
-$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
-$conf['apache']['vhost_port'] = '8080';
-$conf['apache']['php_ini_path_apache'] = '/etc/php/7.3/apache2/php.ini';
-$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.3/cgi/php.ini';
-
-//* Website base settings
-$conf['web']['website_basedir'] = '/var/www';
-$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
-$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
-
-//* Apps base settings
-$conf['web']['apps_vhost_ip'] = '_default_';
-$conf['web']['apps_vhost_port'] = '8081';
-$conf['web']['apps_vhost_servername'] = '';
-$conf['web']['apps_vhost_user'] = 'ispapps';
-$conf['web']['apps_vhost_group'] = 'ispapps';
-
-//* Fastcgi
-$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.3/cgi/';
-$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
-$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
-
-//* Postfix
-$conf['postfix']['installed'] = false; // will be detected automatically during installation
-$conf['postfix']['config_dir'] = '/etc/postfix';
-$conf['postfix']['init_script'] = 'postfix';
-$conf['postfix']['user'] = 'postfix';
-$conf['postfix']['group'] = 'postfix';
-$conf['postfix']['vmail_userid'] = '5000';
-$conf['postfix']['vmail_username'] = 'vmail';
-$conf['postfix']['vmail_groupid'] = '5000';
-$conf['postfix']['vmail_groupname'] = 'vmail';
-$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
-
-//* Mailman
-$conf['mailman']['installed'] = false; // will be detected automatically during installation
-$conf['mailman']['config_dir'] = '/etc/mailman';
-$conf['mailman']['init_script'] = 'mailman';
-
-//* mlmmj
-$conf['mlmmj']['installed'] = false; // will be detected automatically during installation
-$conf['mlmmj']['config_dir'] = '/etc/mlmmj';
-
-//* Getmail
-$conf['getmail']['installed'] = false; // will be detected automatically during installation
-$conf['getmail']['config_dir'] = '/etc/getmail';
-$conf['getmail']['program'] = '/usr/bin/getmail';
-
-//* Courier
-$conf['courier']['installed'] = false; // will be detected automatically during installation
-$conf['courier']['config_dir'] = '/etc/courier';
-$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
-$conf['courier']['courier-imap'] = 'courier-imap';
-$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
-$conf['courier']['courier-pop'] = 'courier-pop';
-$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
-
-//* Dovecot
-$conf['dovecot']['installed'] = false; // will be detected automatically during installation
-$conf['dovecot']['config_dir'] = '/etc/dovecot';
-$conf['dovecot']['init_script'] = 'dovecot';
-
-//* SASL
-$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
-$conf['saslauthd']['config'] = '/etc/default/saslauthd';
-$conf['saslauthd']['init_script'] = 'saslauthd';
-
-//* Amavisd
-$conf['amavis']['installed'] = false; // will be detected automatically during installation
-$conf['amavis']['config_dir'] = '/etc/amavis';
-$conf['amavis']['init_script'] = 'amavis';
-
-//* ClamAV
-$conf['clamav']['installed'] = false; // will be detected automatically during installation
-$conf['clamav']['init_script'] = 'clamav-daemon';
-
-//* Pureftpd
-$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
-$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
-$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
-
-//* MyDNS
-$conf['mydns']['installed'] = false; // will be detected automatically during installation
-$conf['mydns']['config_dir'] = '/etc';
-$conf['mydns']['init_script'] = 'mydns';
-
-//* PowerDNS
-$conf['powerdns']['installed'] = false; // will be detected automatically during installation
-$conf['powerdns']['database'] = 'powerdns';
-$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
-$conf['powerdns']['init_script'] = 'pdns';
-
-//* BIND DNS Server
-$conf['bind']['installed'] = false; // will be detected automatically during installation
-$conf['bind']['bind_user'] = 'root';
-$conf['bind']['bind_group'] = 'bind';
-$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
-$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
-$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
-$conf['bind']['init_script'] = 'bind9';
-
-//* Jailkit
-$conf['jailkit']['installed'] = false; // will be detected automatically during installation
-$conf['jailkit']['config_dir'] = '/etc/jailkit';
-$conf['jailkit']['jk_init'] = 'jk_init.ini';
-$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
-$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch';
-$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
-
-//* Squid
-$conf['squid']['installed'] = false; // will be detected automatically during installation
-$conf['squid']['config_dir'] = '/etc/squid';
-$conf['squid']['init_script'] = 'squid';
-
-//* Nginx
-$conf['nginx']['installed'] = false; // will be detected automatically during installation
-$conf['nginx']['user'] = 'www-data';
-$conf['nginx']['group'] = 'www-data';
-$conf['nginx']['config_dir'] = '/etc/nginx';
-$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
-$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
-$conf['nginx']['init_script'] = 'nginx';
-$conf['nginx']['vhost_port'] = '8080';
-$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
-$conf['nginx']['php_fpm_init_script'] = 'php7.3-fpm';
-$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.3/fpm/php.ini';
-$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.3/fpm/pool.d';
-$conf['nginx']['php_fpm_start_port'] = 9010;
-$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.3-fpm';
-
-//* OpenVZ
-$conf['openvz']['installed'] = false;
-
-//*Bastille-Firwall
-$conf['bastille']['installed'] = false;
-$conf['bastille']['config_dir'] = '/etc/Bastille';
-
-//* vlogger
-$conf['vlogger']['config_dir'] = '/etc';
-
-//* cron
-$conf['cron']['init_script'] = 'cron';
-$conf['cron']['crontab_dir'] = '/etc/cron.d';
-$conf['cron']['wget'] = '/usr/bin/wget';
-
-//* Metronome XMPP
-$conf['xmpp']['installed'] = false;
-$conf['xmpp']['init_script'] = 'metronome';
-
-
-?>
diff --git a/install/lib/installer_base.lib.php.orig b/install/lib/installer_base.lib.php.orig
deleted file mode 100644
index 8d0456ef5b..0000000000
--- a/install/lib/installer_base.lib.php.orig
+++ /dev/null
@@ -1,2962 +0,0 @@
-<?php
-
-/*
-Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-class installer_base {
-
-	var $wb = array();
-	var $language = 'en';
-	var $db;
-	public $conf;
-	public $install_ispconfig_interface = true;
-	public $is_update = false; // true if it is an update, falsi if it is a new install
-	public $min_php = '5.3.3'; // minimal php-version for update / install
-	protected $mailman_group = 'list';
-
-
-	public function __construct() {
-		global $conf; //TODO: maybe $conf  should be passed to constructor
-		//$this->conf = $conf;
-	}
-
-	//: TODO  Implement the translation function and language files for the installer.
-	public function lng($text) {
-		return $text;
-	}
-
-	public function error($msg) {
-		die('ERROR: '.$msg."\n");
-	}
-
-	public function warning($msg) {
-		echo 'WARNING: '.$msg."\n";
-	}
-
-	public function simple_query($query, $answers, $default, $name = '') {
-		global $autoinstall, $autoupdate;
-		$finished = false;
-		do {
-			if($name != '' && $autoinstall[$name] != '') {
-				if($autoinstall[$name] == 'default') {
-					$input = $default;
-				} else {
-					$input = $autoinstall[$name];
-				}
-			} elseif($name != '' && $autoupdate[$name] != '') {
-				if($autoupdate[$name] == 'default') {
-					$input = $default;
-				} else {
-					$input = $autoupdate[$name];
-				}
-			} else {
-				$answers_str = implode(',', $answers);
-				swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
-				$input = sread();
-			}
-
-			//* Stop the installation
-			if($input == 'quit') {
-				swriteln($this->lng("Installation terminated by user.\n"));
-				die();
-			}
-
-			//* Select the default
-			if($input == '') {
-				$answer = $default;
-				$finished = true;
-			}
-
-			//* Set answer id valid
-			if(in_array($input, $answers)) {
-				$answer = $input;
-				$finished = true;
-			}
-
-		} while ($finished == false);
-		swriteln();
-		return $answer;
-	}
-
-	public function free_query($query, $default, $name = '') {
-		global $autoinstall, $autoupdate;
-		if($name != '' && $autoinstall[$name] != '') {
-			if($autoinstall[$name] == 'default') {
-				$input = $default;
-			} else {
-				$input = $autoinstall[$name];
-			}
-		} elseif($name != '' && $autoupdate[$name] != '') {
-			if($autoupdate[$name] == 'default') {
-				$input = $default;
-			} else {
-				$input = $autoupdate[$name];
-			}
-		} else {
-			swrite($this->lng($query).' ['.$default.']: ');
-			$input = sread();
-		}
-
-		//* Stop the installation
-		if($input == 'quit') {
-			swriteln($this->lng("Installation terminated by user.\n"));
-			die();
-		}
-
-		$answer =  ($input == '') ? $default : $input;
-		swriteln();
-		return $answer;
-	}
-
-	/*
-	// TODO: this function is not used atmo I think - pedro
-	function request_language(){
-
-		swriteln(lng('Enter your language'));
-		swriteln(lng('de, en'));
-
-	}
-	*/
-
-	//** Detect PHP-Version
-	public function get_php_version() {
-		if(version_compare(PHP_VERSION, $this->min_php, '<')) return false;
-		else return true;
-	}
-
-	//** Detect installed applications
-	public function find_installed_apps() {
-		global $conf;
-
-		if(is_installed('mysql') || is_installed('mysqld')) $conf['mysql']['installed'] = true;
-		if(is_installed('postfix')) $conf['postfix']['installed'] = true;
-		if(is_installed('postgrey')) $conf['postgrey']['installed'] = true;
-		if(is_installed('mailman') || is_installed('mmsitepass')) $conf['mailman']['installed'] = true;
-		if(is_installed('apache') || is_installed('apache2') || is_installed('httpd') || is_installed('httpd2')) $conf['apache']['installed'] = true;
-		if(is_installed('getmail')) $conf['getmail']['installed'] = true;
-		if(is_installed('courierlogger')) $conf['courier']['installed'] = true;
-		if(is_installed('dovecot')) $conf['dovecot']['installed'] = true;
-		if(is_installed('saslauthd')) $conf['saslauthd']['installed'] = true;
-		if(is_installed('amavisd-new') || is_installed('amavisd')) $conf['amavis']['installed'] = true;
-		if(is_installed('clamdscan')) $conf['clamav']['installed'] = true;
-		if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true;
-		if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true;
-		if(is_installed('jk_chrootsh')) $conf['jailkit']['installed'] = true;
-		if(is_installed('pdns_server') || is_installed('pdns_control')) $conf['powerdns']['installed'] = true;
-		if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true;
-		if(is_installed('squid')) $conf['squid']['installed'] = true;
-		if(is_installed('nginx')) $conf['nginx']['installed'] = true;
-		if(is_installed('iptables') && is_installed('ufw')) {
-			$conf['ufw']['installed'] = true;
-		} elseif(is_installed('iptables')) {
-			$conf['firewall']['installed'] = true;
-		}
-		if(is_installed('fail2ban-server')) $conf['fail2ban']['installed'] = true;
-		if(is_installed('vzctl')) $conf['openvz']['installed'] = true;
-		if(is_installed('metronome') && is_installed('metronomectl')) $conf['xmpp']['installed'] = true;
-		if(is_installed('spamassassin')) $conf['spamassassin']['installed'] = true;
-		// if(is_installed('vlogger')) $conf['vlogger']['installed'] = true;
-		// ISPConfig ships with vlogger, so it is always installed.
-		$conf['vlogger']['installed'] = true;
-		if(is_installed('cron') || is_installed('anacron')) $conf['cron']['installed'] = true;
-
-		if (($conf['apache']['installed'] && is_file($conf['apache']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")) || ($conf['nginx']['installed'] && is_file($conf['nginx']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost"))) $this->ispconfig_interface_installed = true;
-	}
-
-    public function force_configure_app($service, $enable_force=true) {
-		$force = false;
-		if(AUTOINSTALL == true) return false;
-		if($enable_force == true) {
-			swriteln("[WARN] autodetect for $service failed");
-		} else {
-			swriteln("[INFO] service $service not detected");
-		}
-		if($enable_force) {
-	        if(strtolower($this->simple_query("Force configure $service", array('y', 'n'), 'n') ) == 'y') {
-	            $force = true;
-			} else swriteln("Skipping $service\n");
-		}
-		return $force;
-    }
-
-	public function reconfigure_app($service, $reconfigure_services_answer) {
-		$reconfigure = false;
-		if ($reconfigure_services_answer != 'selected') {
-			$reconfigure = true;
-		} else {
-			if(strtolower($this->simple_query("Reconfigure $service", array('y', 'n'), 'y') ) == 'y') {
-				$reconfigure = true;
-			} else {
-				swriteln("Skip reconfigure $service\n");
-			}
-		}
-		return $reconfigure;
-	}
-
-	/** Create the database for ISPConfig */
-
-
-	public function configure_database() {
-		global $conf;
-
-		//* check sql-mode
-		/*$check_sql_mode = $this->db->queryOneRecord("SELECT @@sql_mode");
-
-		if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') {
-			echo "Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION. Add\n\n";
-			echo "    sql-mode=\"NO_ENGINE_SUBSTITUTION\"\n\n";
-			echo"to the mysqld-section in your mysql-config on this server and restart mysqld afterwards\n";
-			die();
-		}*/
-
-		$unwanted_sql_plugins = array('validate_password');		
-		$sql_plugins = $this->db->queryAllRecords("SELECT plugin_name FROM information_schema.plugins WHERE plugin_status='ACTIVE' AND plugin_name IN ?", $unwanted_sql_plugins);
-		if(is_array($sql_plugins) && !empty($sql_plugins)) {
-			foreach ($sql_plugins as $plugin) echo "Login in to MySQL and disable $plugin[plugin_name] with:\n\n    UNINSTALL PLUGIN $plugin[plugin_name];";
-			die();
-		}
-
-		//** Create the database
-		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['mysql']['database'], $conf['mysql']['charset'])) {
-			$this->error('Unable to create MySQL database: '.$conf['mysql']['database'].'.');
-		}
-
-		//* Set the database name in the DB library
-		$this->db->setDBName($conf['mysql']['database']);
-
-		//* Load the database dump into the database, if database contains no tables
-		$db_tables = $this->db->getTables();
-		if(count($db_tables) > 0) {
-			$this->error('Stopped: Database already contains some tables.');
-		} else {
-			if($conf['mysql']['admin_password'] == '') {
-				caselog("mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -P ".escapeshellarg($conf['mysql']['port'])." ".escapeshellarg($conf['mysql']['database'])." < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null",
-					__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
-			} else {
-				caselog("mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." -P ".escapeshellarg($conf['mysql']['port'])." ".escapeshellarg($conf['mysql']['database'])." < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null",
-					__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
-			}
-			$db_tables = $this->db->getTables();
-			if(count($db_tables) == 0) {
-				$this->error('Unable to load SQL-Dump into database table.');
-			}
-
-			//* Load system.ini into the sys_ini table
-			$system_ini = rf('tpl/system.ini.master');
-			$this->db->query("UPDATE sys_ini SET config = ? WHERE sysini_id = 1", $system_ini);
-
-		}
-	}
-
-	//** Create the server record in the database
-	public function add_database_server_record() {
-
-		global $conf;
-
-		if($conf['mysql']['host'] == 'localhost') {
-			$from_host = 'localhost';
-		} else {
-			$from_host = $conf['hostname'];
-		}
-
-		// Delete ISPConfig user in the local database, in case that it exists
-		$this->db->query("DROP USER ?@?", $conf['mysql']['ispconfig_user'], $from_host);
-		$this->db->query("DROP DATABASE IF EXISTS ?", $conf['mysql']['database']);
-
-		//* Create the ISPConfig database user and grant permissions in the local database
-		$query = 'CREATE USER ?@? IDENTIFIED BY ?';
-		if(!$this->db->query($query, $conf['mysql']['ispconfig_user'], $from_host, $conf['mysql']['ispconfig_password'])) {
-			$this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
-		}
-		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON ?? TO ?@?';
-		if(!$this->db->query($query, $conf['mysql']['database'] . ".*", $conf['mysql']['ispconfig_user'], $from_host)) {
-			$this->error('Unable to grant databse permissions to user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
-		}
-
-		//* Set the database name in the DB library
-		$this->db->setDBName($conf['mysql']['database']);
-
-		$tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));
-
-		//* Update further distribution specific parameters for server config here
-		//* HINT: Every line added here has to be added in update.lib.php too!!
-		$tpl_ini_array['web']['vhost_conf_dir'] = $conf['apache']['vhost_conf_dir'];
-		$tpl_ini_array['web']['vhost_conf_enabled_dir'] = $conf['apache']['vhost_conf_enabled_dir'];
-		$tpl_ini_array['jailkit']['jailkit_chroot_app_programs'] = $conf['jailkit']['jailkit_chroot_app_programs'];
-		$tpl_ini_array['fastcgi']['fastcgi_phpini_path'] = $conf['fastcgi']['fastcgi_phpini_path'];
-		$tpl_ini_array['fastcgi']['fastcgi_starter_path'] = $conf['fastcgi']['fastcgi_starter_path'];
-		$tpl_ini_array['fastcgi']['fastcgi_bin'] = $conf['fastcgi']['fastcgi_bin'];
-		$tpl_ini_array['server']['hostname'] = $conf['hostname'];
-		$tpl_ini_array['server']['ip_address'] = @gethostbyname($conf['hostname']);
-		$tpl_ini_array['server']['firewall'] = ($conf['ufw']['installed'] == true)?'ufw':'bastille';
-		$tpl_ini_array['web']['website_basedir'] = $conf['web']['website_basedir'];
-		$tpl_ini_array['web']['website_path'] = $conf['web']['website_path'];
-		$tpl_ini_array['web']['website_symlinks'] = $conf['web']['website_symlinks'];
-		$tpl_ini_array['cron']['crontab_dir'] = $conf['cron']['crontab_dir'];
-		$tpl_ini_array['web']['security_level'] = 20;
-		$tpl_ini_array['web']['user'] = $conf['apache']['user'];
-		$tpl_ini_array['web']['group'] = $conf['apache']['group'];
-		$tpl_ini_array['web']['php_ini_path_apache'] = $conf['apache']['php_ini_path_apache'];
-		$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
-		$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
-		$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
-		$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
-		$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
-		$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
-		$tpl_ini_array['dns']['named_conf_path'] = $conf['bind']['named_conf_path'];
-		$tpl_ini_array['dns']['named_conf_local_path'] = $conf['bind']['named_conf_local_path'];
-
-		$tpl_ini_array['web']['nginx_vhost_conf_dir'] = $conf['nginx']['vhost_conf_dir'];
-		$tpl_ini_array['web']['nginx_vhost_conf_enabled_dir'] = $conf['nginx']['vhost_conf_enabled_dir'];
-		$tpl_ini_array['web']['nginx_user'] = $conf['nginx']['user'];
-		$tpl_ini_array['web']['nginx_group'] = $conf['nginx']['group'];
-		$tpl_ini_array['web']['nginx_cgi_socket'] = $conf['nginx']['cgi_socket'];
-		$tpl_ini_array['web']['php_fpm_init_script'] = $conf['nginx']['php_fpm_init_script'];
-		$tpl_ini_array['web']['php_fpm_ini_path'] = $conf['nginx']['php_fpm_ini_path'];
-		$tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir'];
-		$tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port'];
-		$tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir'];
-
-		if ($conf['nginx']['installed'] == true) {
-			$tpl_ini_array['web']['server_type'] = 'nginx';
-			$tpl_ini_array['global']['webserver'] = 'nginx';
-		}
-
-		if (array_key_exists('awstats', $conf)) {
-			foreach ($conf['awstats'] as $aw_sett => $aw_value) {
-				$tpl_ini_array['web']['awstats_'.$aw_sett] = $aw_value;
-			}
-		}
-
-		$server_ini_content = array_to_ini($tpl_ini_array);
-		
-		$mail_server_enabled = ($conf['services']['mail'])?1:0;
-		$web_server_enabled = ($conf['services']['web'])?1:0;
-		$dns_server_enabled = ($conf['services']['dns'])?1:0;
-		$file_server_enabled = ($conf['services']['file'])?1:0;
-		$db_server_enabled = ($conf['services']['db'])?1:0;
-		$vserver_server_enabled = ($conf['openvz']['installed'])?1:0;
-		$proxy_server_enabled = (isset($conf['services']['proxy']) && $conf['services']['proxy'])?1:0;
-		$firewall_server_enabled = (isset($conf['services']['firewall']) && $conf['services']['firewall'])?1:0;
-
-		//** Get the database version number based on the patchfiles
-		$found = true;
-		$current_db_version = 1;
-		while($found == true) {
-			$next_db_version = intval($current_db_version + 1);
-			$patch_filename = realpath(dirname(__FILE__).'/../').'/sql/incremental/upd_'.str_pad($next_db_version, 4, '0', STR_PAD_LEFT).'.sql';
-			if(is_file($patch_filename)) {
-				$current_db_version = $next_db_version;
-			} else {
-				$found = false;
-			}
-		}
-		$current_db_version = intval($current_db_version);
-
-
-		if($conf['mysql']['master_slave_setup'] == 'y') {
-
-			//* Insert the server record in master DB
-			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`,`firewall_server`,`proxy_server`) VALUES (1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
-			$this->dbmaster->query($sql, $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
-			$conf['server_id'] = $this->dbmaster->insertID();
-			$conf['server_id'] = $conf['server_id'];
-
-			//* Insert the same record in the local DB
-			$sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`,`firewall_server`,`proxy_server`) VALUES (?,1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
-			$this->db->query($sql, $conf['server_id'], $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
-
-			//* username for the ispconfig user
-			$conf['mysql']['master_ispconfig_user'] = 'ispcsrv'.$conf['server_id'];
-
-			$this->grant_master_database_rights();
-
-		} else {
-			//* Insert the server, if its not a mster / slave setup
-			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`,`firewall_server`,`proxy_server`) VALUES (1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
-			$this->db->query($sql, $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
-			$conf['server_id'] = $this->db->insertID();
-			$conf['server_id'] = $conf['server_id'];
-		}
-
-
-	}
-	
-	public function detect_ips(){
-		global $conf;
-
-		exec("ip addr show | awk '/global/ { print $2 }' | cut -d '/' -f 1", $output, $retval);
-		
-		if($retval == 0){
-			if(is_array($output) && !empty($output)){
-				foreach($output as $line){
-					$line = trim($line);
-					$ip_type = '';
-					if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
-						$ip_type = 'IPv4';
-					}
-					if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
-						$ip_type = 'IPv6';
-					}
-					if($ip_type == '') continue;
-					if($this->db->dbHost != $this->dbmaster->dbHost){
-						$this->dbmaster->query('INSERT INTO server_ip (
-							sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
-							sys_perm_other, server_id, client_id, ip_type, ip_address,
-							virtualhost, virtualhost_port
-						) VALUES (
-							1,
-							1,
-							"riud",
-							"riud",
-							"",
-							?,
-							0,
-							?,
-							?,
-							"y",
-							"80,443"
-						)', $conf['server_id'], $ip_type, $line);
-						$server_ip_id = $this->dbmaster->insertID();
-						$this->db->query('INSERT INTO server_ip (
-							server_php_id, sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
-							sys_perm_other, server_id, client_id, ip_type, ip_address,
-							virtualhost, virtualhost_port
-						) VALUES (
-							?,
-							1,
-							1,
-							"riud",
-							"riud",
-							"",
-							?,
-							0,
-							?,
-							?,
-							"y",
-							"80,443"
-						)', $server_ip_id, $conf['server_id'], $ip_type, $line);
-					} else {
-						$this->db->query('INSERT INTO server_ip (
-							sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
-							sys_perm_other, server_id, client_id, ip_type, ip_address,
-							virtualhost, virtualhost_port
-						) VALUES (
-							1,
-							1,
-							"riud",
-							"riud",
-							"",
-							?,
-							0,
-							?,
-							?,
-							"y",
-							"80,443"
-						)', $conf['server_id'], $ip_type, $line);
-					}
-				}
-			}
-		}
-	}
-
-	public function grant_master_database_rights($verbose = false) {
-		global $conf;
-
-		/*
-		 * The following code is a little bit tricky:
-		 * * If we HAVE a master-slave - Setup then the client has to grant the rights for himself
-		 *   at the master.
-		 * * If we DO NOT have a master-slave - Setup then we have two possibilities
-		 *   1) it is a single server
-		 *   2) it is the MASTER of n clients
-		*/
-		$hosts = array();
-
-		if($conf['mysql']['master_slave_setup'] == 'y') {
-			/*
-			 * it is a master-slave - Setup so the slave has to grant its rights in the master
-			 * database
-			 */
-
-			//* insert the ispconfig user in the remote server
-			$from_host = $conf['hostname'];
-			$from_ip = gethostbyname($conf['hostname']);
-
-			$hosts[$from_host]['user'] = $conf['mysql']['master_ispconfig_user'];
-			$hosts[$from_host]['db'] = $conf['mysql']['master_database'];
-			$hosts[$from_host]['pwd'] = $conf['mysql']['master_ispconfig_password'];
-
-			$hosts[$from_ip]['user'] = $conf['mysql']['master_ispconfig_user'];
-			$hosts[$from_ip]['db'] = $conf['mysql']['master_database'];
-			$hosts[$from_ip]['pwd'] = $conf['mysql']['master_ispconfig_password'];
-		} else{
-			/*
-			 * it is NOT a master-slave - Setup so we have to find out all clients and their
-			 * host
-			 */
-			$query = "SELECT Host, User FROM mysql.user WHERE User like 'ispcsrv%' ORDER BY User, Host";
-			$data = $this->dbmaster->queryAllRecords($query);
-			if($data === false) {
-				$this->error('Unable to get the user rights: '.$value['db'].' Error: '.$this->dbmaster->errorMessage);
-			}
-			foreach ($data as $item){
-				$hosts[$item['Host']]['user'] = $item['User'];
-				$hosts[$item['Host']]['db'] = $conf['mysql']['master_database'];
-				$hosts[$item['Host']]['pwd'] = ''; // the user already exists, so we need no pwd!
-			}
-		}
-
-		if(count($hosts) > 0) {
-			foreach($hosts as $host => $value) {
-				/*
-			 * If a pwd exists, this means, we have to add the new user (and his pwd).
-			 * if not, the user already exists and we do not need the pwd
-			 */
-				if ($value['pwd'] != ''){
-					$query = "CREATE USER ?@? IDENTIFIED BY ?";
-					if ($verbose){
-						echo "\n\n" . $query ."\n";
-					}
-					$this->dbmaster->query($query, $value['user'], $host, $value['pwd']); // ignore the error
-				}
-
-				/*
-			 *  Try to delete all rights of the user in case that it exists.
-			 *  In Case that it will not exist, do nothing (ignore the error!)
-			 */
-				$query = "REVOKE ALL PRIVILEGES, GRANT OPTION FROM ?@?";
-				if ($verbose){
-					echo "\n\n" . $query ."\n";
-				}
-				$this->dbmaster->query($query, $value['user'], $host); // ignore the error
-
-				//* Create the ISPConfig database user in the remote database
-				$query = "GRANT SELECT ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.server', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, INSERT ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.sys_log', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, UPDATE(`status`, `error`) ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.sys_datalog', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, UPDATE(`status`) ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.software_update_inst', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, UPDATE(`updated`) ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.server', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, UPDATE (`ssl`, `ssl_letsencrypt`, `ssl_request`, `ssl_cert`, `ssl_action`, `ssl_key`) ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.web_domain', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.sys_group', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, UPDATE (`action_state`, `response`) ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.sys_remoteaction', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, INSERT , DELETE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.monitor_data', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.mail_traffic', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.web_traffic', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, UPDATE, DELETE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.aps_instances', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-				
-				$query = "GRANT SELECT, DELETE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.aps_instances_settings', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, INSERT, DELETE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.web_backup', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-				$query = "GRANT SELECT, INSERT, DELETE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.mail_backup', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-				
-				$query = "GRANT SELECT, UPDATE(`dnssec_initialized`, `dnssec_info`, `dnssec_last_signed`) ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.dns_soa', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-				
-				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.ftp_traffic', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
-			}
-
-		}
-
-	}
-
-	//** writes postfix configuration files
-	public function process_postfix_config($configfile) {
-		global $conf;
-
-		$config_dir = $conf['postfix']['config_dir'].'/';
-		$full_file_name = $config_dir.$configfile;
-		//* Backup exiting file
-		if(is_file($full_file_name)) {
-			copy($full_file_name, $config_dir.$configfile.'~');
-		}
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		wf($full_file_name, $content);
-	}
-
-	public function configure_jailkit() {
-		global $conf;
-
-		$cf = $conf['jailkit'];
-		$config_dir = $cf['config_dir'];
-		$jk_init = $cf['jk_init'];
-		$jk_chrootsh = $cf['jk_chrootsh'];
-
-		if (is_dir($config_dir)) {
-			if(is_file($config_dir.'/'.$jk_init)) copy($config_dir.'/'.$jk_init, $config_dir.'/'.$jk_init.'~');
-			if(is_file($config_dir.'/'.$jk_chrootsh.'.master')) copy($config_dir.'/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh.'~');
-
-			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_init.'.master')) {
-				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_init.'.master', $config_dir.'/'.$jk_init);
-			} else {
-				copy('tpl/'.$jk_init.'.master', $config_dir.'/'.$jk_init);
-			}
-			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_chrootsh.'.master')) {
-				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh);
-			} else {
-				copy('tpl/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh);
-			}
-		}
-
-		//* help jailkit fo find its ini files
-		if(!is_link('/usr/jk_socketd.ini')) exec('ln -s /etc/jailkit/jk_socketd.ini /usr/jk_socketd.ini');
-		if(!is_link('/usr/jk_init.ini')) exec('ln -s /etc/jailkit/jk_init.ini /usr/jk_init.ini');
-
-	}
-
-	public function configure_mailman($status = 'insert') {
-		global $conf;
-
-		$config_dir = $conf['mailman']['config_dir'].'/';
-		$full_file_name = $config_dir.'mm_cfg.py';
-		//* Backup exiting file
-		if(is_file($full_file_name)) {
-			copy($full_file_name, $config_dir.'mm_cfg.py~');
-		}
-
-		// load files
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mm_cfg.py.master', 'tpl/mm_cfg.py.master');
-		$old_file = rf($full_file_name);
-
-		$old_options = array();
-		$lines = explode("\n", $old_file);
-		foreach ($lines as $line)
-		{
-			if (trim($line) != '' && substr($line, 0, 1) != '#')
-			{
-				@list($key, $value) = @explode("=", $line);
-				if (isset($value) && $value !== '')
-				{
-					$key = rtrim($key);
-					$old_options[$key] = trim($value);
-				}
-			}
-		}
-
-		$virtual_domains = '';
-		if($status == 'update')
-		{
-			// create virtual_domains list
-			$domainAll = $this->db->queryAllRecords("SELECT domain FROM mail_mailinglist GROUP BY domain");
-
-			if(is_array($domainAll)) {
-				foreach($domainAll as $domain)
-				{
-					if ($domainAll[0]['domain'] == $domain['domain'])
-						$virtual_domains .= "'".$domain['domain']."'";
-					else
-						$virtual_domains .= ", '".$domain['domain']."'";
-				}
-			}
-		}
-		else
-			$virtual_domains = "' '";
-
-		$content = str_replace('{hostname}', $conf['hostname'], $content);
-		if(!isset($old_options['DEFAULT_SERVER_LANGUAGE']) || $old_options['DEFAULT_SERVER_LANGUAGE'] == '') $old_options['DEFAULT_SERVER_LANGUAGE'] = "'en'";
-		$content = str_replace('{default_language}', $old_options['DEFAULT_SERVER_LANGUAGE'], $content);
-		$content = str_replace('{virtual_domains}', $virtual_domains, $content);
-
-		wf($full_file_name, $content);
-
-		//* Write virtual_to_transport.sh script
-		$config_dir = $conf['mailman']['config_dir'].'/';
-		$full_file_name = $config_dir.'virtual_to_transport.sh';
-
-		//* Backup exiting virtual_to_transport.sh script
-		if(is_file($full_file_name)) {
-			copy($full_file_name, $config_dir.'virtual_to_transport.sh~');
-		}
-
-		if(is_dir('/etc/mailman')) {
-			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/mailman-virtual_to_transport.sh')) {
-				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/mailman-virtual_to_transport.sh', $full_file_name);
-			} else {
-				copy('tpl/mailman-virtual_to_transport.sh', $full_file_name);
-			}
-			chgrp($full_file_name, $this->mailman_group);
-			chmod($full_file_name, 0755);
-		}
-
-		//* Create aliasaes
-		if($status == 'install') exec('/usr/lib/mailman/bin/genaliases 2>/dev/null');
-
-		if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman');
-		exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
-	}
-
-	public function get_postfix_service($service, $type) {
-		global $conf;
-
-		exec("postconf -M 2> /dev/null", $out, $ret);
-
-		if ($ret === 0) { //* with postfix >= 2.9 we can detect configured services with postconf
-			unset($out);
-			exec ("postconf -M $service/$type 2> /dev/null", $out, $ret); //* Postfix >= 2.11
-			if (!isset($out[0])) { //* try Postfix 2.9
-				exec ("postconf -M $service.$type 2> /dev/null", $out, $ret);
-			}
-			$postfix_service = @($out[0]=='')?false:true;
-        } else { //* fallback - Postfix < 2.9
-			$content = rf($conf['postfix']['config_dir'].'/master.cf');
-			$regex = "/^((?!#)".$service.".*".$type.".*)$/m"; 
-			$postfix_service = @(preg_match($regex, $content))?true:false;
-		}
-
-		return $postfix_service;
-	}
-
-	public function configure_postfix($options = '') {
-		global $conf,$autoinstall;
-		$cf = $conf['postfix'];
-		$config_dir = $cf['config_dir'];
-
-		if(!is_dir($config_dir)) {
-			$this->error("The postfix configuration directory '$config_dir' does not exist.");
-		}
-
-		//* mysql-virtual_domains.cf
-		$this->process_postfix_config('mysql-virtual_domains.cf');
-
-		//* mysql-virtual_forwardings.cf
-		$this->process_postfix_config('mysql-virtual_forwardings.cf');
-
-		//* mysql-virtual_mailboxes.cf
-		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
-
-		//* mysql-virtual_email2email.cf
-		$this->process_postfix_config('mysql-virtual_email2email.cf');
-
-		//* mysql-virtual_transports.cf
-		$this->process_postfix_config('mysql-virtual_transports.cf');
-
-		//* mysql-virtual_recipient.cf
-		$this->process_postfix_config('mysql-virtual_recipient.cf');
-
-		//* mysql-virtual_sender.cf
-		$this->process_postfix_config('mysql-virtual_sender.cf');
-
-		//* mysql-virtual_sender_login_maps.cf
-		$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
-
-		//* mysql-virtual_client.cf
-		$this->process_postfix_config('mysql-virtual_client.cf');
-
-		//* mysql-virtual_relaydomains.cf
-		$this->process_postfix_config('mysql-virtual_relaydomains.cf');
-
-		//* mysql-virtual_relayrecipientmaps.cf
-		$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
-		
-		//* mysql-virtual_outgoing_bcc.cf
-		$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
-
-		//* mysql-virtual_policy_greylist.cf
-		$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
-
-		//* mysql-virtual_gids.cf.master
-		$this->process_postfix_config('mysql-virtual_gids.cf');
-
-		//* mysql-virtual_uids.cf
-		$this->process_postfix_config('mysql-virtual_uids.cf');
-
-		//* postfix-dkim
-		$filename='tag_as_originating.re';
-		$full_file_name=$config_dir.'/'.$filename;
-		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
-		wf($full_file_name, $content);
-
-		$filename='tag_as_foreign.re';
-		$full_file_name=$config_dir.'/'.$filename;
-		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
-		wf($full_file_name, $content);
-
-		//* Changing mode and group of the new created config files.
-		caselog('chmod u=rw,g=r,o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
-
-		//* Creating virtual mail user and group
-		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
-		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
-		if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* These postconf commands will be executed on installation and update
-		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
-		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
-		unset($server_ini_rec);
-
-		//* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update
-		$rbl_list = '';
-		if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') {
-			$rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list']));
-			foreach ($rbl_hosts as $key => $value) {
-				$rbl_list .= ", reject_rbl_client ". $value;
-			}
-		}
-		unset($rbl_hosts);
-
-		//* If Postgrey is installed, configure it
-		$greylisting = '';
-		if($conf['postgrey']['installed'] == true) {
-			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
-		}
-		
-		$reject_sender_login_mismatch = '';
-		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
-			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
-		}
-		unset($server_ini_array);
-		
-		$tmp = str_replace('.','\.',$conf['hostname']);
-
-		$postconf_placeholders = array('{config_dir}' => $config_dir,
-			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
-			'{vmail_userid}' => $cf['vmail_userid'],
-			'{vmail_groupid}' => $cf['vmail_groupid'],
-			'{rbl_list}' => $rbl_list,
-			'{greylisting}' => $greylisting,
-			'{reject_slm}' => $reject_sender_login_mismatch,
-			'{myhostname}' => $tmp,
-		);
-
-		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_postfix.conf.master', 'tpl/debian_postfix.conf.master');
-		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
-		$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
-
-		//* These postconf commands will be executed on installation only
-		if($this->is_update == false) {
-			$postconf_commands = array_merge($postconf_commands, array(
-					'myhostname = '.$conf['hostname'],
-					'mydestination = '.$conf['hostname'].', localhost, localhost.localdomain',
-					'mynetworks = 127.0.0.0/8 [::1]/128'
-				));
-		}
-
-		//* Create the header and body check files
-		touch($config_dir.'/header_checks');
-		touch($config_dir.'/mime_header_checks');
-		touch($config_dir.'/nested_header_checks');
-		touch($config_dir.'/body_checks');
-
-		//* Create the mailman files
-		if(!is_dir('/var/lib/mailman/data')) exec('mkdir -p /var/lib/mailman/data');
-		if(!is_file('/var/lib/mailman/data/aliases')) touch('/var/lib/mailman/data/aliases');
-		exec('postalias /var/lib/mailman/data/aliases');
-		if(!is_file('/var/lib/mailman/data/virtual-mailman')) touch('/var/lib/mailman/data/virtual-mailman');
-		exec('postmap /var/lib/mailman/data/virtual-mailman');
-		if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman');
-		exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
-
-		//* Create auxillary postfix conf files
-		$configfile = 'helo_access';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-			chmod($config_dir.'/'.$configfile.'~', 0400);
-		}
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = strtr($content, $postconf_placeholders);
-		# todo: look up this server's ip addrs and loop through each
-		# todo: look up domains hosted on this server and loop through each
-		wf($config_dir.'/'.$configfile, $content);
-
-		$configfile = 'blacklist_helo';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-			chmod($config_dir.'/'.$configfile.'~', 0400);
-		}
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = strtr($content, $postconf_placeholders);
-		wf($config_dir.'/'.$configfile, $content);
-
-		//* Make a backup copy of the main.cf file
-		copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
-
-		//* Executing the postconf commands
-		foreach($postconf_commands as $cmd) {
-			$command = "postconf -e '$cmd'";
-			caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
-		}
-
-		if(!stristr($options, 'dont-create-certs')) {
-			//* Create the SSL certificate
-			if(AUTOINSTALL){
-				$command = 'cd '.$config_dir.'; '
-					."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
-			} else {
-				$command = 'cd '.$config_dir.'; '
-					.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
-			}
-			exec($command);
-
-			$command = 'chmod o= '.$config_dir.'/smtpd.key';
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
-		}
-
-		//** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
-		$command = 'chmod 755  /var/run/courier/authdaemon/';
-		if(is_file('/var/run/courier/authdaemon/')) caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
-
-		//* Check maildrop service in posfix master.cf
-		$regex = "/^maildrop   unix.*pipe flags=DRhu user=vmail argv=\\/usr\\/bin\\/maildrop -d ".$cf['vmail_username']." \\$\{extension} \\$\{recipient} \\$\{user} \\$\{nexthop} \\$\{sender}/";
-		$configfile = $config_dir.'/master.cf';
-		if($this->get_postfix_service('maildrop', 'unix')) {
-			exec ("postconf -M maildrop.unix 2> /dev/null", $out, $ret);
-			$change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true;
-		} else {
-			$change_maildrop_flags = @(preg_match($regex, $configfile))?false:true;
-		}
-		if ($change_maildrop_flags) {
-			//* Change maildrop service in posfix master.cf
-			if(is_file($config_dir.'/master.cf')) {
-				copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-			}
-			if(is_file($config_dir.'/master.cf~')) {
-				chmod($config_dir.'/master.cf~', 0400);
- 			}
-			$configfile = $config_dir.'/master.cf';
-			$content = rf($configfile);
-			$content =	str_replace('flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
-						'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
-						$content);
-			wf($configfile, $content);
-		}
-
-		//* Writing the Maildrop mailfilter file
-		$configfile = 'mailfilter';
-		if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)) {
-			copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~');
-		}
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content);
-		wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content);
-
-		//* Create the directory for the custom mailfilters
-		if(!is_dir($cf['vmail_mailbox_base'].'/mailfilters')) {
-			$command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters';
-			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		//* Chmod and chown the .mailfilter file
-		$command = 'chown '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
-		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = 'chmod 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
-		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-	}
-	
-	public function configure_saslauthd() {
-		global $conf;
-
-		//* Get saslsauthd version
-		exec('saslauthd -v 2>&1', $out);
-		$parts = explode(' ', $out[0]);
-		$saslversion = $parts[1];
-		unset($parts);
-		unset($out);
-
-		if(version_compare($saslversion , '2.1.23', '<=')) {
-			//* Configfile for saslauthd versions up to 2.1.23
-			$configfile = 'sasl_smtpd.conf';
-		} else {
-			//* Configfile for saslauthd versions 2.1.24 and newer
-			$configfile = 'sasl_smtpd2.conf';
-		}
-
-		if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf')) copy($conf['postfix']['config_dir'].'/sasl/smtpd.conf', $conf['postfix']['config_dir'].'/sasl/smtpd.conf~');
-		if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf~')) chmod($conf['postfix']['config_dir'].'/sasl/smtpd.conf~', 0400);
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
-		wf($conf['postfix']['config_dir'].'/sasl/smtpd.conf', $content);
-
-		// TODO: Chmod and chown on the config file
-
-
-		// Recursively create the spool directory
-		if(!@is_dir('/var/spool/postfix/var/run/saslauthd')) mkdir('/var/spool/postfix/var/run/saslauthd', 0755, true);
-
-		// Edit the file /etc/default/saslauthd
-		$configfile = $conf['saslauthd']['config'];
-		if(is_file($configfile)) copy($configfile, $configfile.'~');
-		if(is_file($configfile.'~')) chmod($configfile.'~', 0400);
-		$content = rf($configfile);
-		$content = str_replace('START=no', 'START=yes', $content);
-		// Debian
-		$content = str_replace('OPTIONS="-c"', 'OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"', $content);
-		// Ubuntu
-		$content = str_replace('OPTIONS="-c -m /var/run/saslauthd"', 'OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"', $content);
-		wf($configfile, $content);
-
-		// Edit the file /etc/init.d/saslauthd
-		$configfile = $conf['init_scripts'].'/'.$conf['saslauthd']['init_script'];
-		$content = rf($configfile);
-		$content = str_replace('PIDFILE=$RUN_DIR/saslauthd.pid', 'PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"', $content);
-		wf($configfile, $content);
-
-		// add the postfix user to the sasl group (at least necessary for Ubuntu 8.04 and most likely Debian Lenny as well.
-		exec('adduser postfix sasl');
-
-
-	}
-
-	public function configure_pam() {
-		global $conf;
-		$pam = $conf['pam'];
-		//* configure pam for SMTP authentication agains the ispconfig database
-		$configfile = 'pamd_smtp';
-		if(is_file($pam.'/smtp'))    copy($pam.'/smtp', $pam.'/smtp~');
-		if(is_file($pam.'/smtp~'))   chmod($pam.'/smtp~', 0400);
-
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
-		wf($pam.'/smtp', $content);
-		// On some OSes smtp is world readable which allows for reading database information.  Removing world readable rights should have no effect.
-		if(is_file($pam.'/smtp'))    exec("chmod o= $pam/smtp");
-		chmod($pam.'/smtp', 0660);
-		chown($pam.'/smtp', 'daemon');
-		chgrp($pam.'/smtp', 'daemon');
-
-	}
-
-	public function configure_courier() {
-		global $conf;
-		$config_dir = $conf['courier']['config_dir'];
-		//* authmysqlrc
-		$configfile = 'authmysqlrc';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-		}
-		chmod($config_dir.'/'.$configfile.'~', 0400);
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
-		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
-		wf($config_dir.'/'.$configfile, $content);
-
-		chmod($config_dir.'/'.$configfile, 0660);
-		chown($config_dir.'/'.$configfile, 'daemon');
-		chgrp($config_dir.'/'.$configfile, 'daemon');
-
-		//* authdaemonrc
-		$configfile = $config_dir.'/authdaemonrc';
-		if(is_file($configfile)) {
-			copy($configfile, $configfile.'~');
-		}
-		if(is_file($configfile.'~')) {
-			chmod($configfile.'~', 0400);
-		}
-		$content = rf($configfile);
-		$content = str_replace('authmodulelist="authpam"', 'authmodulelist="authmysql"', $content);
-		wf($configfile, $content);
-	}
-
-	public function configure_dovecot() {
-		global $conf;
-		
-		$virtual_transport = 'dovecot';
-
-		$configure_lmtp = false;
-		
-		// check if virtual_transport must be changed
-		if ($this->is_update) {
-			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
-			$ini_array = ini_to_array(stripslashes($tmp['config']));
-			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
-			
-			if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
-				$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
-				$configure_lmtp = true;
-			}
-		}
-
-		$config_dir = $conf['postfix']['config_dir'];
-
-		//* Configure master.cf and add a line for deliver
-		if(!$this->get_postfix_service('dovecot', 'unix')) {
- 			//* backup
-			if(is_file($config_dir.'/master.cf')){
-				copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
-			}
-			if(is_file($config_dir.'/master.cf~')){
-				chmod($config_dir.'/master.cf~2', 0400);
-			}
-			//* Configure master.cf and add a line for deliver
-			$content = rf($conf["postfix"]["config_dir"].'/master.cf');
-			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
-			af($config_dir.'/master.cf', $deliver_content);
-			unset($content);
-			unset($deliver_content);
-		}
-
-		//* Reconfigure postfix to use dovecot authentication
-		// Adding the amavisd commands to the postfix configuration
-		$postconf_commands = array (
-			'dovecot_destination_recipient_limit = 1',
-			'virtual_transport = '.$virtual_transport,
-			'smtpd_sasl_type = dovecot',
-			'smtpd_sasl_path = private/auth'
-		);
-
-		// Make a backup copy of the main.cf file
-		copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~3');
-
-		// Executing the postconf commands
-		foreach($postconf_commands as $cmd) {
-			$command = "postconf -e '$cmd'";
-			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		//* backup dovecot.conf
-		$config_dir = $conf['dovecot']['config_dir'];
-		$configfile = 'dovecot.conf';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-		}
-
-		//* Get the dovecot version
-		exec('dovecot --version', $tmp);
-		$dovecot_version = $tmp[0];
-		unset($tmp);
-
-		//* Copy dovecot configuration file
-		if(version_compare($dovecot_version,1, '<=')) {	//* Dovecot 1.x
-			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master')) {
-				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master', $config_dir.'/'.$configfile);
-			} else {
-				copy('tpl/debian_dovecot.conf.master', $config_dir.'/'.$configfile);
-			}
-		} else {	//* Dovecot 2.x
-			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot2.conf.master')) {
-				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot2.conf.master', $config_dir.'/'.$configfile);
-			} else {
-				copy('tpl/debian_dovecot2.conf.master', $config_dir.'/'.$configfile);
-			}
-			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
-			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = webmaster@localhost', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
-			if(version_compare($dovecot_version, 2.1, '<')) {
-				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
-			}
-			if(version_compare($dovecot_version,2.2) >= 0) {
-				// Dovecot > 2.2 does not recognize !SSLv2 anymore on Debian 9
-				$content = file_get_contents($config_dir.'/'.$configfile);
-				$content = str_replace('!SSLv2','',$content);
-				file_put_contents($config_dir.'/'.$configfile,$content);
-				unset($content);
-			}
-		}
-
-		//* dovecot-lmtpd
-		if($configure_lmtp) {
-			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
-		}
-
-		//* dovecot-sql.conf
-		$configfile = 'dovecot-sql.conf';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-		}
-		if(is_file($config_dir.'/'.$configfile.'~')) chmod($config_dir.'/'.$configfile.'~', 0400);
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot-sql.conf.master', 'tpl/debian_dovecot-sql.conf.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
-		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		# enable iterate_query for dovecot2
-		if(version_compare($dovecot_version,2, '>=')) {
-			$content = str_replace('# iterate_query', 'iterate_query', $content);
-		}
-		wf($config_dir.'/'.$configfile, $content);
-
-		chmod($config_dir.'/'.$configfile, 0600);
-		chown($config_dir.'/'.$configfile, 'root');
-		chgrp($config_dir.'/'.$configfile, 'root');
-		
-		// Dovecot shall ignore mounts in website directory
-		if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null");
-
-	}
-
-	public function configure_amavis() {
-		global $conf;
-
-		// amavisd user config file
-		$configfile = 'amavisd_user_config';
-		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) copy($conf['amavis']['config_dir'].'/conf.d/50-user', $conf['amavis']['config_dir'].'/50-user~');
-		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
-		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
-		wf($conf['amavis']['config_dir'].'/conf.d/50-user', $content);
-		chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
-
-		// TODO: chmod and chown on the config file
-
-
-		// Adding the amavisd commands to the postfix configuration
-		// Add array for no error in foreach and maybe future options
-		$postconf_commands = array ();
-
-		// Check for amavisd -> pure webserver with postfix for mailing without antispam
-		if ($conf['amavis']['installed']) {
-			$postconf_commands[] = 'content_filter = amavis:[127.0.0.1]:10024';
-			$postconf_commands[] = 'receive_override_options = no_address_mappings';
-		}
-
-		// Make a backup copy of the main.cf file
-		copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~2');
-
-		// Executing the postconf commands
-		foreach($postconf_commands as $cmd) {
-			$command = "postconf -e '$cmd'";
-			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		$config_dir = $conf['postfix']['config_dir'];
-
-		// Adding amavis-services to the master.cf file if the service does not already exists
-		$add_amavis = !$this->get_postfix_service('amavis','unix');
-		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
-		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
-		//*TODO: check templates against existing postfix-services to make sure we use the template
-
-		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
-			//* backup master.cf
-			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-			// adjust amavis-config
-			if($add_amavis) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10025) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10027) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-    		}
-		}
-
-		// Add the clamav user to the amavis group
-		exec('adduser clamav amavis');
-		// get shell-group for amavis
-		$amavis_group=exec('grep -o "^amavis:\|^vscan:" /etc/group');
-		if(!empty($amavis_group)) {
-			$amavis_group=rtrim($amavis_group, ":");
-		}
-		// get shell-user for amavis
-		$amavis_user=exec('grep -o "^amavis:\|^vscan:" /etc/passwd');
-		if(!empty($amavis_user)) {
-			$amavis_user=rtrim($amavis_user, ":");
-		}
-
-		// Create the director for DKIM-Keys
-		if(!is_dir('/var/lib/amavis')) mkdir('/var/lib/amavis', 0750, true);
-		if(!empty($amavis_user)) exec('chown '.$amavis_user.' /var/lib/amavis');
-		if(!empty($amavis_group)) exec('chgrp '.$amavis_group.' /var/lib/amavis');
-		if(!is_dir('/var/lib/amavis/dkim')) mkdir('/var/lib/amavis/dkim', 0750);
-		if(!empty($amavis_user)) exec('chown -R '.$amavis_user.' /var/lib/amavis/dkim');
-		if(!empty($amavis_group)) exec('chgrp -R '.$amavis_group.' /var/lib/amavis/dkim');
-
-	}
-
-	public function configure_spamassassin() {
-		global $conf;
-
-		//* Enable spamasasssin on debian and ubuntu
-		$configfile = '/etc/default/spamassassin';
-		if(is_file($configfile)) {
-			copy($configfile, $configfile.'~');
-		}
-		$content = rf($configfile);
-		$content = str_replace('ENABLED=0', 'ENABLED=1', $content);
-		wf($configfile, $content);
-	}
-
-	public function configure_getmail() {
-		global $conf;
-
-		$config_dir = $conf['getmail']['config_dir'];
-
-		if(!@is_dir($config_dir)) mkdir(escapeshellcmd($config_dir), 0700, true);
-
-		$command = 'useradd -d '.$config_dir.' getmail';
-		if(!is_user('getmail')) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = "chown -R getmail $config_dir";
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = "chmod -R 700 $config_dir";
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-	}
-
-
-	public function configure_pureftpd() {
-		global $conf;
-
-		$config_dir = $conf['pureftpd']['config_dir'];
-
-		//* configure pure-ftpd for MySQL authentication against the ispconfig database
-		$configfile = 'db/mysql.conf';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-		}
-		if(is_file($config_dir.'/'.$configfile.'~')) {
-			chmod($config_dir.'/'.$configfile.'~', 0400);
-		}
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/pureftpd_mysql.conf.master', 'tpl/pureftpd_mysql.conf.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		wf($config_dir.'/'.$configfile, $content);
-		chmod($config_dir.'/'.$configfile, 0600);
-		chown($config_dir.'/'.$configfile, 'root');
-		chgrp($config_dir.'/'.$configfile, 'root');
-		// **enable chrooting
-		//exec('mkdir -p '.$config_dir.'/conf/ChrootEveryone');
-		exec('echo "yes" > '.$config_dir.'/conf/ChrootEveryone');
-		exec('echo "yes" > '.$config_dir.'/conf/BrokenClientsCompatibility');
-		exec('echo "yes" > '.$config_dir.'/conf/DisplayDotFiles');
-
-		if(is_file('/etc/default/pure-ftpd-common')) {
-			replaceLine('/etc/default/pure-ftpd-common', 'STANDALONE_OR_INETD=inetd', 'STANDALONE_OR_INETD=standalone', 1, 0);
-			replaceLine('/etc/default/pure-ftpd-common', 'VIRTUALCHROOT=false', 'VIRTUALCHROOT=true', 1, 0);
-		}
-
-		if(is_file('/etc/inetd.conf')) {
-			replaceLine('/etc/inetd.conf', '/usr/sbin/pure-ftpd-wrapper', '#ftp     stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper', 0, 0);
-			exec($this->getinitcommand('openbsd-inetd', 'restart'));
-			//if(is_file($conf['init_scripts'].'/'.'openbsd-inetd')) exec($conf['init_scripts'].'/'.'openbsd-inetd restart');
-		}
-
-		if(!is_file('/etc/pure-ftpd/conf/DontResolve')) exec('echo "yes" > /etc/pure-ftpd/conf/DontResolve');
-	}
-
-	public function configure_mydns() {
-		global $conf;
-
-		// configure pam for SMTP authentication agains the ispconfig database
-		$configfile = 'mydns.conf';
-		if(is_file($conf['mydns']['config_dir'].'/'.$configfile)) copy($conf['mydns']['config_dir'].'/'.$configfile, $conf['mydns']['config_dir'].'/'.$configfile.'~');
-		if(is_file($conf['mydns']['config_dir'].'/'.$configfile.'~')) chmod($conf['mydns']['config_dir'].'/'.$configfile.'~', 0400);
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
-		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		wf($conf['mydns']['config_dir'].'/'.$configfile, $content);
-		chmod($conf['mydns']['config_dir'].'/'.$configfile, 0600);
-		chown($conf['mydns']['config_dir'].'/'.$configfile, 'root');
-		chgrp($conf['mydns']['config_dir'].'/'.$configfile, 'root');
-
-	}
-
-	public function configure_powerdns() {
-		global $conf;
-
-		//* Create the database
-		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['powerdns']['database'], $conf['mysql']['charset'])) {
-			$this->error('Unable to create MySQL database: '.$conf['powerdns']['database'].'.');
-		}
-
-		//* Create the ISPConfig database user in the local database
-		$query = "GRANT ALL ON ?? TO ?@'localhost'";
-		if(!$this->db->query($query, $conf['powerdns']['database'] . '.*', $conf['mysql']['ispconfig_user'])) {
-			$this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage);
-		}
-
-		//* load the powerdns databse dump
-		if($conf['mysql']['admin_password'] == '') {
-			caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null",
-				__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql');
-		} else {
-			caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null",
-				__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql');
-		}
-
-		//* Create the powerdns config file
-		$configfile = 'pdns.local';
-		if(is_file($conf['powerdns']['config_dir'].'/'.$configfile)) copy($conf['powerdns']['config_dir'].'/'.$configfile, $conf['powerdns']['config_dir'].'/'.$configfile.'~');
-		if(is_file($conf['powerdns']['config_dir'].'/'.$configfile.'~')) chmod($conf['powerdns']['config_dir'].'/'.$configfile.'~', 0400);
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{powerdns_database}', $conf['powerdns']['database'], $content);
-		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
-		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
-		wf($conf['powerdns']['config_dir'].'/'.$configfile, $content);
-		chmod($conf['powerdns']['config_dir'].'/'.$configfile, 0600);
-		chown($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
-		chgrp($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
-
-
-	}
-	
-	//** writes bind configuration files
-	public function process_bind_file($configfile, $target='/', $absolute=false) {
-		global $conf;
-
-		if ($absolute) $full_file_name = $target.$configfile;
-		else $full_file_name = $conf['ispconfig_install_dir'].$target.$configfile;
-		
-		//* Backup exiting file
-		if(is_file($full_file_name)) {
-			copy($full_file_name, $config_dir.$configfile.'~');
-		}
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_ispconfig_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
-		$content = str_replace('{ispconfig_install_dir}', $conf['ispconfig_install_dir'], $content);
-		$content = str_replace('{dnssec_conffile}', $conf['ispconfig_install_dir'].'/server/scripts/dnssec-config.sh', $content);
-		wf($full_file_name, $content);
-	}
-
-	public function configure_bind() {
-		global $conf;
-
-		//* Check if the zonefile directory has a slash at the end
-		$content=$conf['bind']['bind_zonefiles_dir'];
-		if(substr($content, -1, 1) != '/') {
-			$content .= '/';
-		}
-
-		//* Create the slave subdirectory
-		$content .= 'slave';
-		if(!@is_dir($content)) mkdir($content, 02770, true);
-
-		//* Chown the slave subdirectory to $conf['bind']['bind_user']
-		chown($content, $conf['bind']['bind_user']);
-		chgrp($content, $conf['bind']['bind_group']);
-		chmod($content, 02770);
-		
-		//* Install scripts for dnssec implementation
-		$this->process_bind_file('named.conf.options', '/etc/bind/', true); //TODO replace hardcoded path
-	}
-
-
-    public function configure_xmpp($options = '') {
-        global $conf;
-
-        if($conf['xmpp']['installed'] == false) return;
-        //* Create the logging directory for xmpp server
-        if(!@is_dir('/var/log/metronome')) mkdir('/var/log/metronome', 0755, true);
-        chown('/var/log/metronome', 'metronome');
-        if(!@is_dir('/var/run/metronome')) mkdir('/var/run/metronome', 0755, true);
-        chown('/var/run/metronome', 'metronome');
-        if(!@is_dir('/var/lib/metronome')) mkdir('/var/lib/metronome', 0755, true);
-        chown('/var/lib/metronome', 'metronome');
-        if(!@is_dir('/etc/metronome/hosts')) mkdir('/etc/metronome/hosts', 0755, true);
-        if(!@is_dir('/etc/metronome/status')) mkdir('/etc/metronome/status', 0755, true);
-        unlink('/etc/metronome/metronome.cfg.lua');
-
-        $row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $conf["server_id"]);
-        $server_name = $row["server_name"];
-
-        $tpl = new tpl('metronome_conf_main.master');
-        wf('/etc/metronome/metronome.cfg.lua', $tpl->grab());
-        unset($tpl);
-
-        $tpl = new tpl('metronome_conf_global.master');
-        $tpl->setVar('xmpp_admins','');
-        wf('/etc/metronome/global.cfg.lua', $tpl->grab());
-        unset($tpl);
-
-        // Copy isp libs
-        if(!@is_dir('/usr/lib/metronome/isp-modules')) mkdir('/usr/lib/metronome/isp-modules', 0755, true);
-        caselog('cp -rf apps/metronome_libs/* /usr/lib/metronome/isp-modules/', __FILE__, __LINE__);
-        caselog('chmod 755 /usr/lib/metronome/isp-modules/mod_auth_external/authenticate_isp.sh', __FILE__, __LINE__);
-        // Process db config
-        $full_file_name = '/usr/lib/metronome/isp-modules/mod_auth_external/db_conf.inc.php';
-        $content = rf($full_file_name);
-        $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-        $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-        $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-        $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
-        $content = str_replace('{server_id}', $conf['server_id'], $content);
-        wf($full_file_name, $content);
-
-        if(!stristr($options, 'dont-create-certs')){
-            // Create SSL Certificate for localhost
-            // Ensure no line is left blank
-			echo "writing new private key to 'localhost.key'\n-----\n";
-			$ssl_country = $this->free_query('Country Name (2 letter code)', 'AU','ssl_cert_country');
-            $ssl_locality = $this->free_query('Locality Name (eg, city)', 'City Name','ssl_cert_locality');
-            $ssl_organisation = $this->free_query('Organization Name (eg, company)', 'Internet Widgits Pty Ltd','ssl_cert_organisation');
-            $ssl_organisation_unit = $this->free_query('Organizational Unit Name (eg, section)', 'Infrastructure','ssl_cert_organisation_unit');
-            $ssl_domain = $this->free_query('Common Name (e.g. server FQDN or YOUR name)', $conf['hostname'],'ssl_cert_common_name');
-            $ssl_email = $this->free_query('Email Address', 'hostmaster@'.$conf['hostname'],'ssl_cert_email');
-
-            $tpl = new tpl('metronome_conf_ssl.master');
-            $tpl->setVar('ssl_country',$ssl_country);
-            $tpl->setVar('ssl_locality',$ssl_locality);
-            $tpl->setVar('ssl_organisation',$ssl_organisation);
-            $tpl->setVar('ssl_organisation_unit',$ssl_organisation_unit);
-            $tpl->setVar('domain',$ssl_domain);
-            $tpl->setVar('ssl_email',$ssl_email);
-            wf('/etc/metronome/certs/localhost.cnf', $tpl->grab());
-            unset($tpl);
-            // Generate new key, csr and cert
-            exec("(cd /etc/metronome/certs && make localhost.key)");
-            exec("(cd /etc/metronome/certs && make localhost.csr)");
-            exec("(cd /etc/metronome/certs && make localhost.cert)");
-            exec('chmod 0400 /etc/metronome/certs/localhost.key');
-            exec('chown metronome /etc/metronome/certs/localhost.key');
-
-			echo "IMPORTANT:\n";
-			echo "Localhost Key, Csr and a self-signed Cert have been saved to /etc/metronome/certs\n";
-			echo "In order to work with all clients, the server must have a trusted certificate, so use the Csr\n";
-			echo "to get a trusted certificate from your CA or replace Key and Cert with already signed files for\n";
-			echo "your domain. Clients like Pidgin dont allow to use untrusted self-signed certificates.\n";
-			echo "\n";
-
-        }else{
-            /*
-			echo "-----\n";
-            echo "Metronome XMPP SSL server certificate is not renewed. Run the following command manual as root to recreate it:\n";
-            echo "# (cd /etc/metronome/certs && make localhost.key && make localhost.csr && make localhost.cert && chmod 0400 localhost.key && chown metronome localhost.key)\n";
-            echo "-----\n";
-			*/
-        }
-
-        // Copy init script
-        caselog('cp -f apps/metronome-init /etc/init.d/metronome', __FILE__, __LINE__);
-        caselog('chmod u+x /etc/init.d/metronome', __FILE__, __LINE__);
-        caselog('update-rc.d metronome defaults', __FILE__, __LINE__);
-
-        exec($this->getinitcommand($conf['xmpp']['init_script'], 'restart'));
-    }
-
-
-	public function configure_apache() {
-		global $conf;
-
-		if($conf['apache']['installed'] == false) return;
-		//* Create the logging directory for the vhost logfiles
-		if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
-
-		if(is_file('/etc/suphp/suphp.conf')) {
-			replaceLine('/etc/suphp/suphp.conf', 'php="php:/usr/bin', 'x-httpd-suphp="php:/usr/bin/php-cgi"', 0);
-			//replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0);
-			replaceLine('/etc/suphp/suphp.conf', 'umask=00', 'umask=0022', 0);
-		}
-
-		if(is_file('/etc/apache2/sites-enabled/000-default')) {
-			replaceLine('/etc/apache2/sites-available/000-default', 'NameVirtualHost *', 'NameVirtualHost *:80', 1, 0);
-			replaceLine('/etc/apache2/sites-available/000-default', '<VirtualHost *>', '<VirtualHost *:80>', 1, 0);
-		}
-
-		if(is_file('/etc/apache2/ports.conf')) {
-			// add a line "Listen 443" to ports conf if line does not exist
-			replaceLine('/etc/apache2/ports.conf', 'Listen 443', 'Listen 443', 1);
-			
-			// Comment out the namevirtualhost lines, as they were added by ispconfig in ispconfig.conf file again
-			replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:80', '# NameVirtualHost *:80', 1);
-			replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:443', '# NameVirtualHost *:443', 1);
-		}
-		
-		if(is_file('/etc/apache2/mods-available/fcgid.conf')) {
-			// add or modify the parameters for fcgid.conf
-			replaceLine('/etc/apache2/mods-available/fcgid.conf','MaxRequestLen','MaxRequestLen 15728640',1);
-		}
-
-		if(is_file('/etc/apache2/apache.conf')) {
-			if(hasLine('/etc/apache2/apache.conf', 'Include sites-enabled/', 1) == false) {
-				if(hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.conf', 1) == false && hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/', 1) == false) {
-					replaceLine('/etc/apache2/apache.conf', 'Include sites-enabled/', 'Include sites-enabled/', 1, 1);
-				} elseif(hasLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.vhost', 1) == false) {
-					replaceLine('/etc/apache2/apache.conf', 'IncludeOptional sites-enabled/*.vhost', 'IncludeOptional sites-enabled/', 1, 1);
-				}
-			}
-		}
-		
-		if(is_file('/etc/apache2/apache2.conf')) {
-			if(hasLine('/etc/apache2/apache2.conf', 'Include sites-enabled/', 1) == false && hasLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/', 1) == false) {
-				if(hasLine('/etc/apache2/apache2.conf', 'Include sites-enabled/*.conf', 1) == true) {
-					replaceLine('/etc/apache2/apache2.conf', 'Include sites-enabled/*.conf', 'Include sites-enabled/', 1, 1);
-				} elseif(hasLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/*.conf', 1) == true) {
-					replaceLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/*.conf', 'IncludeOptional sites-enabled/', 1, 1);
-				}
-			}
-		}
-
-		//* Copy the ISPConfig configuration include
-		$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
-		$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
-
-		$tpl = new tpl('apache_ispconfig.conf.master');
-		$tpl->setVar('apache_version',getapacheversion());
-		
-		if($this->is_update == true) {
-			$tpl->setVar('logging',get_logging_state());
-		} else {
-			$tpl->setVar('logging','yes');
-		}
-		
-		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
-		$ip_addresses = array();
-		
-		if(is_array($records) && count($records) > 0) {
-			foreach($records as $rec) {
-				if($rec['ip_type'] == 'IPv6') {
-					$ip_address = '['.$rec['ip_address'].']';
-				} else {
-					$ip_address = $rec['ip_address'];
-				}
-				$ports = explode(',', $rec['virtualhost_port']);
-				if(is_array($ports)) {
-					foreach($ports as $port) {
-						$port = intval($port);
-						if($port > 0 && $port < 65536 && $ip_address != '') {
-							$ip_addresses[] = array('ip_address' => $ip_address, 'port' => $port);
-						}
-					}
-				}
-			}
-		}
-		
-		if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses);
-		
-		wf($vhost_conf_dir.'/ispconfig.conf', $tpl->grab());
-		unset($tpl);
-
-		if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.conf')) {
-			symlink($vhost_conf_dir.'/ispconfig.conf', $vhost_conf_enabled_dir.'/000-ispconfig.conf');
-		}
-
-		//* make sure that webalizer finds its config file when it is directly in /etc
-		if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
-			mkdir('/etc/webalizer');
-			symlink('/etc/webalizer.conf', '/etc/webalizer/webalizer.conf');
-		}
-
-		if(is_file('/etc/webalizer/webalizer.conf')) {
-			// Change webalizer mode to incremental
-			replaceLine('/etc/webalizer/webalizer.conf', '#IncrementalName', 'IncrementalName webalizer.current', 0, 0);
-			replaceLine('/etc/webalizer/webalizer.conf', '#Incremental', 'Incremental     yes', 0, 0);
-			replaceLine('/etc/webalizer/webalizer.conf', '#HistoryName', 'HistoryName     webalizer.hist', 0, 0);
-		}
-
-		// Check the awsatst script
-		if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
-		if(!file_exists('/usr/share/awstats/tools/awstats_buildstaticpages.pl') && file_exists('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl')) symlink('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl', '/usr/share/awstats/tools/awstats_buildstaticpages.pl');
-		if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local', 'LogFormat=4', 'LogFormat=1', 0, 1);
-
-		//* add a sshusers group
-		$command = 'groupadd sshusers';
-		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-	}
-
-	public function configure_nginx(){
-		global $conf;
-
-		if($conf['nginx']['installed'] == false) return;
-		//* Create the logging directory for the vhost logfiles
-		if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
-
-		//* make sure that webalizer finds its config file when it is directly in /etc
-		if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
-			mkdir('/etc/webalizer');
-			symlink('/etc/webalizer.conf', '/etc/webalizer/webalizer.conf');
-		}
-
-		if(is_file('/etc/webalizer/webalizer.conf')) {
-			// Change webalizer mode to incremental
-			replaceLine('/etc/webalizer/webalizer.conf', '#IncrementalName', 'IncrementalName webalizer.current', 0, 0);
-			replaceLine('/etc/webalizer/webalizer.conf', '#Incremental', 'Incremental     yes', 0, 0);
-			replaceLine('/etc/webalizer/webalizer.conf', '#HistoryName', 'HistoryName     webalizer.hist', 0, 0);
-		}
-
-		// Check the awsatst script
-		if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
-		if(!file_exists('/usr/share/awstats/tools/awstats_buildstaticpages.pl') && file_exists('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl')) symlink('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl', '/usr/share/awstats/tools/awstats_buildstaticpages.pl');
-		if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local', 'LogFormat=4', 'LogFormat=1', 0, 1);
-
-		//* add a sshusers group
-		$command = 'groupadd sshusers';
-		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		// add anonymized log option to nginxx.conf file
-		$nginx_conf_file = $conf['nginx']['config_dir'].'/nginx.conf';
-		if(is_file($nginx_conf_file)) {
-			$tmp = file_get_contents($nginx_conf_file);
-			if(!stristr($tmp, 'log_format anonymized')) {
-				copy($nginx_conf_file,$nginx_conf_file.'~');
-				replaceLine($nginx_conf_file, 'http {', "http {\n\n".file_get_contents('tpl/nginx_anonlog.master'), 0, 0);
-			}
-		}
-		
-	}
-
-	public function configure_fail2ban() {
-		// To Do
-	}
-
-	public function configure_squid()
-	{
-		global $conf;
-		$row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $conf["server_id"]);
-		$ip_address = gethostbyname($row["server_name"]);
-		$server_name = $row["server_name"];
-
-		$configfile = 'squid.conf';
-		if(is_file($conf["squid"]["config_dir"].'/'.$configfile)) copy($conf["squid"]["config_dir"].'/'.$configfile, $conf["squid"]["config_dir"].'/'.$configfile.'~');
-		if(is_file($conf["squid"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["squid"]["config_dir"].'/'.$configfile.'~');
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/".$configfile.".master");
-		$content = str_replace('{server_name}', $server_name, $content);
-		$content = str_replace('{ip_address}', $ip_address, $content);
-		$content = str_replace('{config_dir}', $conf['squid']['config_dir'], $content);
-		wf($conf["squid"]["config_dir"].'/'.$configfile, $content);
-		exec('chmod 600 '.$conf["squid"]["config_dir"].'/'.$configfile);
-		exec('chown root:root '.$conf["squid"]["config_dir"].'/'.$configfile);
-	}
-
-	public function configure_ufw_firewall()
-	{
-		if($this->is_update == false) {
-			$configfile = 'ufw.conf';
-			if(is_file('/etc/ufw/ufw.conf')) copy('/etc/ufw/ufw.conf', '/etc/ufw/ufw.conf~');
-			$content = rf("tpl/".$configfile.".master");
-			wf('/etc/ufw/ufw.conf', $content);
-			exec('chmod 600 /etc/ufw/ufw.conf');
-			exec('chown root:root /etc/ufw/ufw.conf');
-		}
-	}
-
-	public function configure_bastille_firewall() {
-		global $conf;
-
-		$dist_init_scripts = $conf['init_scripts'];
-
-		if(is_dir('/etc/Bastille.backup')) caselog('rm -rf /etc/Bastille.backup', __FILE__, __LINE__);
-		if(is_dir('/etc/Bastille')) caselog('mv -f /etc/Bastille /etc/Bastille.backup', __FILE__, __LINE__);
-		@mkdir('/etc/Bastille', 0700);
-		if(is_dir('/etc/Bastille.backup/firewall.d')) caselog('cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/', __FILE__, __LINE__);
-		if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/bastille-firewall.cfg.master')) {
-			caselog('cp -f ' . $conf['ispconfig_install_dir'].'/server/conf-custom/install/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
-		} else {
-			caselog('cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
-		}
-		caselog('chmod 644 /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
-		$content = rf('/etc/Bastille/bastille-firewall.cfg');
-		$content = str_replace('{DNS_SERVERS}', '', $content);
-
-		$tcp_public_services = '';
-		$udp_public_services = '';
-
-		$row = $this->db->queryOneRecord('SELECT * FROM ?? WHERE server_id = ?', $conf["mysql"]["database"] . '.firewall', $conf['server_id']);
-
-		if(trim($row['tcp_port']) != '' || trim($row['udp_port']) != '') {
-			$tcp_public_services = trim(str_replace(',', ' ', $row['tcp_port']));
-			$udp_public_services = trim(str_replace(',', ' ', $row['udp_port']));
-		} else {
-			$tcp_public_services = '21 22 25 53 80 110 143 443 3306 8080 10000';
-			$udp_public_services = '53';
-		}
-
-		if(!stristr($tcp_public_services, $conf['apache']['vhost_port'])) {
-			$tcp_public_services .= ' '.intval($conf['apache']['vhost_port']);
-			if($row['tcp_port'] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ? WHERE server_id = ?", ',' . intval($conf['apache']['vhost_port']), $conf['server_id']);
-		}
-
-		$content = str_replace('{TCP_PUBLIC_SERVICES}', $tcp_public_services, $content);
-		$content = str_replace('{UDP_PUBLIC_SERVICES}', $udp_public_services, $content);
-
-		wf('/etc/Bastille/bastille-firewall.cfg', $content);
-
-		if(is_file($dist_init_scripts.'/bastille-firewall')) caselog('mv -f '.$dist_init_scripts.'/bastille-firewall '.$dist_init_scripts.'/bastille-firewall.backup', __FILE__, __LINE__);
-		caselog('cp -f apps/bastille-firewall '.$dist_init_scripts, __FILE__, __LINE__);
-		caselog('chmod 700 '.$dist_init_scripts.'/bastille-firewall', __FILE__, __LINE__);
-
-		if(is_file('/sbin/bastille-ipchains')) caselog('mv -f /sbin/bastille-ipchains /sbin/bastille-ipchains.backup', __FILE__, __LINE__);
-		caselog('cp -f apps/bastille-ipchains /sbin', __FILE__, __LINE__);
-		caselog('chmod 700 /sbin/bastille-ipchains', __FILE__, __LINE__);
-
-		if(is_file('/sbin/bastille-netfilter')) caselog('mv -f /sbin/bastille-netfilter /sbin/bastille-netfilter.backup', __FILE__, __LINE__);
-		caselog('cp -f apps/bastille-netfilter /sbin', __FILE__, __LINE__);
-		caselog('chmod 700 /sbin/bastille-netfilter', __FILE__, __LINE__);
-
-		if(!@is_dir('/var/lock/subsys')) caselog('mkdir /var/lock/subsys', __FILE__, __LINE__);
-
-		exec('which ipchains &> /dev/null', $ipchains_location, $ret_val);
-		if(!is_file('/sbin/ipchains') && !is_link('/sbin/ipchains') && $ret_val == 0) phpcaselog(@symlink(shell_exec('which ipchains'), '/sbin/ipchains'), 'create symlink', __FILE__, __LINE__);
-		unset($ipchains_location);
-		exec('which iptables &> /dev/null', $iptables_location, $ret_val);
-		if(!is_file('/sbin/iptables') && !is_link('/sbin/iptables') && $ret_val == 0) phpcaselog(@symlink(trim(shell_exec('which iptables')), '/sbin/iptables'), 'create symlink', __FILE__, __LINE__);
-		unset($iptables_location);
-
-	}
-
-	public function configure_vlogger() {
-		global $conf;
-
-		//** Configure vlogger to use traffic logging to mysql (master) db
-		$configfile = 'vlogger-dbi.conf';
-		if(is_file($conf['vlogger']['config_dir'].'/'.$configfile)) copy($conf['vlogger']['config_dir'].'/'.$configfile, $conf['vlogger']['config_dir'].'/'.$configfile.'~');
-		if(is_file($conf['vlogger']['config_dir'].'/'.$configfile.'~')) chmod($conf['vlogger']['config_dir'].'/'.$configfile.'~', 0400);
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
-			$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
-			$content = str_replace('{mysql_server_database}', $conf['mysql']['master_database'], $content);
-			$content = str_replace('{mysql_server_ip}', $conf['mysql']['master_host'], $content);
-		} else {
-			$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-			$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-			$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-			$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
-		}
-		wf($conf['vlogger']['config_dir'].'/'.$configfile, $content);
-		chmod($conf['vlogger']['config_dir'].'/'.$configfile, 0600);
-		chown($conf['vlogger']['config_dir'].'/'.$configfile, 'root');
-		chgrp($conf['vlogger']['config_dir'].'/'.$configfile, 'root');
-
-	}
-
-	public function configure_apps_vhost() {
-		global $conf;
-
-		//* Create the ispconfig apps vhost user and group
-		if($conf['apache']['installed'] == true){
-			$apps_vhost_user = escapeshellcmd($conf['web']['apps_vhost_user']);
-			$apps_vhost_group = escapeshellcmd($conf['web']['apps_vhost_group']);
-			$install_dir = escapeshellcmd($conf['web']['website_basedir'].'/apps');
-
-			$command = 'groupadd '.$apps_vhost_user;
-			if(!is_group($apps_vhost_group)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-			$command = 'useradd -g '.$apps_vhost_group.' -d '.$install_dir.' '.$apps_vhost_group;
-			if(!is_user($apps_vhost_user)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-
-			//$command = 'adduser '.$conf['apache']['user'].' '.$apps_vhost_group;
-			$command = 'usermod -a -G '.$apps_vhost_group.' '.$conf['apache']['user'];
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-			if(!@is_dir($install_dir)){
-				mkdir($install_dir, 0755, true);
-			} else {
-				chmod($install_dir, 0755);
-			}
-			chown($install_dir, $apps_vhost_user);
-			chgrp($install_dir, $apps_vhost_group);
-
-			//* Copy the apps vhost file
-			$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
-			$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
-			$apps_vhost_servername = ($conf['web']['apps_vhost_servername'] == '')?'':'ServerName '.$conf['web']['apps_vhost_servername'];
-			
-			//* Get the apps vhost port
-			if($this->is_update == true) {
-				$conf['web']['apps_vhost_port'] = get_apps_vhost_port_number();
-			}
-
-			// Dont just copy over the virtualhost template but add some custom settings
-			$tpl = new tpl('apache_apps.vhost.master');
-			$tpl->setVar('apps_vhost_ip',$conf['web']['apps_vhost_ip']);
-			$tpl->setVar('apps_vhost_port',$conf['web']['apps_vhost_port']);
-			$tpl->setVar('apps_vhost_dir',$conf['web']['website_basedir'].'/apps');
-			$tpl->setVar('apps_vhost_basedir',$conf['web']['website_basedir']);
-			$tpl->setVar('apps_vhost_servername',$apps_vhost_servername);
-			$tpl->setVar('apache_version',getapacheversion());
-			if($this->is_update == true) {
-				$tpl->setVar('logging',get_logging_state());
-			} else {
-				$tpl->setVar('logging','yes');
-			}
-
-
-			// comment out the listen directive if port is 80 or 443
-			if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) {
-				$tpl->setVar('vhost_port_listen','#');
-			} else {
-				$tpl->setVar('vhost_port_listen','');
-			}
-
-			wf($vhost_conf_dir.'/apps.vhost', $tpl->grab());
-			unset($tpl);
-
-			//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
-			//* and create the symlink
-			if(@is_link($vhost_conf_enabled_dir.'/apps.vhost')) unlink($vhost_conf_enabled_dir.'/apps.vhost');
-			if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost') && @is_file($vhost_conf_dir.'/apps.vhost')) {
-				@symlink($vhost_conf_dir.'/apps.vhost', $vhost_conf_enabled_dir.'/000-apps.vhost');
-			}
-
-			if(!is_file($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter')) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_apps_fcgi_starter.master', 'tpl/apache_apps_fcgi_starter.master');
-				$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
-				$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
-				mkdir($conf['web']['website_basedir'].'/php-fcgi-scripts/apps', 0755, true);
-				//copy('tpl/apache_apps_fcgi_starter.master',$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
-				wf($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter', $content);
-				exec('chmod +x '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
-				exec('chown -R ispapps:ispapps '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps');
-
-			}
-		}
-		if($conf['nginx']['installed'] == true){
-			$apps_vhost_user = escapeshellcmd($conf['web']['apps_vhost_user']);
-			$apps_vhost_group = escapeshellcmd($conf['web']['apps_vhost_group']);
-			$install_dir = escapeshellcmd($conf['web']['website_basedir'].'/apps');
-
-			$command = 'groupadd '.$apps_vhost_user;
-			if(!is_group($apps_vhost_group)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-			$command = 'useradd -g '.$apps_vhost_group.' -d '.$install_dir.' '.$apps_vhost_group;
-			if(!is_user($apps_vhost_user)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-
-			//$command = 'adduser '.$conf['nginx']['user'].' '.$apps_vhost_group;
-			$command = 'usermod -a -G '.$apps_vhost_group.' '.$conf['nginx']['user'];
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-			if(!@is_dir($install_dir)){
-				mkdir($install_dir, 0755, true);
-			} else {
-				chmod($install_dir, 0755);
-			}
-			chown($install_dir, $apps_vhost_user);
-			chgrp($install_dir, $apps_vhost_group);
-
-			//* Copy the apps vhost file
-			$vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
-			$vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
-			$apps_vhost_servername = ($conf['web']['apps_vhost_servername'] == '')?'_':$conf['web']['apps_vhost_servername'];
-
-			// Dont just copy over the virtualhost template but add some custom settings
-			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_apps.vhost.master', 'tpl/nginx_apps.vhost.master');
-
-			if($conf['web']['apps_vhost_ip'] == '_default_'){
-				$apps_vhost_ip = '';
-			} else {
-				$apps_vhost_ip = $conf['web']['apps_vhost_ip'].':';
-			}
-
-			$socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
-			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
-			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
-			$fpm_socket = $socket_dir.'apps.sock';
-			$cgi_socket = escapeshellcmd($conf['nginx']['cgi_socket']);
-
-			$content = str_replace('{apps_vhost_ip}', $apps_vhost_ip, $content);
-			$content = str_replace('{apps_vhost_port}', $conf['web']['apps_vhost_port'], $content);
-			$content = str_replace('{apps_vhost_dir}', $conf['web']['website_basedir'].'/apps', $content);
-			$content = str_replace('{apps_vhost_servername}', $apps_vhost_servername, $content);
-			//$content = str_replace('{fpm_port}', ($conf['nginx']['php_fpm_start_port']+1), $content);
-			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
-			$content = str_replace('{cgi_socket}', $cgi_socket, $content);
-
-			if(	file_exists('/var/run/php5-fpm.sock')
-				|| file_exists('/var/run/php/php7.0-fpm.sock')
-				|| file_exists('/var/run/php/php7.1-fpm.sock')
-				|| file_exists('/var/run/php/php7.2-fpm.sock')
-				|| file_exists('/var/run/php/php7.3-fpm.sock')
-			){
-				$use_tcp = '#';
-				$use_socket = '';
-			} else {
-				$use_tcp = '';
-				$use_socket = '#';
-			}
-			$content = str_replace('{use_tcp}', $use_tcp, $content);
-			$content = str_replace('{use_socket}', $use_socket, $content);
-			
-			// SSL in apps vhost is off by default. Might change later.
-			$content = str_replace('{ssl_on}', '', $content);
-			$content = str_replace('{ssl_comment}', '#', $content);
-			
-			// Fix socket path on PHP 7 systems
-			if(file_exists('/var/run/php/php7.0-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
-			if(file_exists('/var/run/php/php7.1-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content);
-			if(file_exists('/var/run/php/php7.2-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.2-fpm.sock', $content);
-
-			wf($vhost_conf_dir.'/apps.vhost', $content);
-
-			// PHP-FPM
-			// Dont just copy over the php-fpm pool template but add some custom settings
-			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apps_php_fpm_pool.conf.master', 'tpl/apps_php_fpm_pool.conf.master');
-			$content = str_replace('{fpm_pool}', 'apps', $content);
-			//$content = str_replace('{fpm_port}', ($conf['nginx']['php_fpm_start_port']+1), $content);
-			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
-			$content = str_replace('{fpm_user}', $apps_vhost_user, $content);
-			$content = str_replace('{fpm_group}', $apps_vhost_group, $content);
-			wf($conf['nginx']['php_fpm_pool_dir'].'/apps.conf', $content);
-
-			//copy('tpl/nginx_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
-			//* and create the symlink
-			if(@is_link($vhost_conf_enabled_dir.'/apps.vhost')) unlink($vhost_conf_enabled_dir.'/apps.vhost');
-			if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost')) {
-				symlink($vhost_conf_dir.'/apps.vhost', $vhost_conf_enabled_dir.'/000-apps.vhost');
-			}
-
-		}
-	}
-
-	public function make_ispconfig_ssl_cert() {
-		global $conf,$autoinstall;
-
-		$install_dir = $conf['ispconfig_install_dir'];
-
-		$ssl_crt_file = $install_dir.'/interface/ssl/ispserver.crt';
-		$ssl_csr_file = $install_dir.'/interface/ssl/ispserver.csr';
-		$ssl_key_file = $install_dir.'/interface/ssl/ispserver.key';
-
-		if(!@is_dir($install_dir.'/interface/ssl')) mkdir($install_dir.'/interface/ssl', 0755, true);
-
-		$ssl_pw = substr(md5(mt_rand()), 0, 6);
-		exec("openssl genrsa -des3 -passout pass:$ssl_pw -out $ssl_key_file 4096");
-		if(AUTOINSTALL){
-			exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -key $ssl_key_file -out $ssl_csr_file");
-		} else {
-			exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file");
-		}
-		exec("openssl req -x509 -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -in $ssl_csr_file -out $ssl_crt_file -days 3650");
-		exec("openssl rsa -passin pass:$ssl_pw -in $ssl_key_file -out $ssl_key_file.insecure");
-		rename($ssl_key_file, $ssl_key_file.'.secure');
-		rename($ssl_key_file.'.insecure', $ssl_key_file);
-		
-		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
-
-	}
-
-	public function install_ispconfig() {
-		global $conf;
-
-		$install_dir = $conf['ispconfig_install_dir'];
-
-		//* Create the ISPConfig installation directory
-		if(!@is_dir($install_dir)) {
-			$command = "mkdir $install_dir";
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		//* Create a ISPConfig user and group
-		$command = 'groupadd ispconfig';
-		if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = 'useradd -g ispconfig -d '.$install_dir.' ispconfig';
-		if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* copy the ISPConfig interface part
-		$command = 'cp -rf ../interface '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* copy the ISPConfig server part
-		$command = 'cp -rf ../server '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		//* Make a backup of the security settings
-		if(is_file('/usr/local/ispconfig/security/security_settings.ini')) copy('/usr/local/ispconfig/security/security_settings.ini','/usr/local/ispconfig/security/security_settings.ini~');
-		
-		//* copy the ISPConfig security part
-		$command = 'cp -rf ../security '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		//* Apply changed security_settings.ini values to new security_settings.ini file
-		if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) {
-			$security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~'));
-			$security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini'));
-			if(is_array($security_settings_new) && is_array($security_settings_old)) {
-				foreach($security_settings_new as $section => $sval) {
-					if(is_array($sval)) {
-						foreach($sval as $key => $val) {
-							if(isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) {
-								$security_settings_new[$section][$key] = $security_settings_old[$section][$key];
-							}
-						}
-					}
-				}
-				file_put_contents('/usr/local/ispconfig/security/security_settings.ini',array_to_ini($security_settings_new));
-			}
-		}
-
-		//* Create a symlink, so ISPConfig is accessible via web
-		// Replaced by a separate vhost definition for port 8080
-		// $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
-		// caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* Create the config file for ISPConfig interface
-		$configfile = 'config.inc.php';
-		if(is_file($install_dir.'/interface/lib/'.$configfile)) {
-			copy($install_dir.'/interface/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
-		}
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
-		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
-
-		$content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
-		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
-		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
-		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
-		$content = str_replace('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
-
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
-		$content = str_replace('{language}', $conf['language'], $content);
-		$content = str_replace('{timezone}', $conf['timezone'], $content);
-		$content = str_replace('{theme}', $conf['theme'], $content);
-		$content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
-
-		wf($install_dir.'/interface/lib/'.$configfile, $content);
-
-		//* Create the config file for ISPConfig server
-		$configfile = 'config.inc.php';
-		if(is_file($install_dir.'/server/lib/'.$configfile)) {
-			copy($install_dir.'/server/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
-		}
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
-		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
-		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
-
-		$content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
-		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
-		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
-		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
-		$content = str_replace('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
-
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
-		$content = str_replace('{language}', $conf['language'], $content);
-		$content = str_replace('{timezone}', $conf['timezone'], $content);
-		$content = str_replace('{theme}', $conf['theme'], $content);
-		$content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
-
-		wf($install_dir.'/server/lib/'.$configfile, $content);
-
-		//* Create the config file for remote-actions (but only, if it does not exist, because
-		//  the value is a autoinc-value and so changed by the remoteaction_core_module
-		if (!file_exists($install_dir.'/server/lib/remote_action.inc.php')) {
-			$content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>';
-			wf($install_dir.'/server/lib/remote_action.inc.php', $content);
-		}
-
-		//* Enable the server modules and plugins.
-		// TODO: Implement a selector which modules and plugins shall be enabled.
-		$dir = $install_dir.'/server/mods-available/';
-		if (is_dir($dir)) {
-			if ($dh = opendir($dir)) {
-				while (($file = readdir($dh)) !== false) {
-					if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
-						include_once $install_dir.'/server/mods-available/'.$file;
-						$module_name = substr($file, 0, -8);
-						$tmp = new $module_name;
-						if($tmp->onInstall()) {
-							if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) {
-								@symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
-								// @symlink($install_dir.'/server/mods-available/'.$file, '../mods-enabled/'.$file);
-							}
-							if (strpos($file, '_core_module') !== false) {
-								if(!@is_link($install_dir.'/server/mods-core/'.$file)) {
-									@symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
-									// @symlink($install_dir.'/server/mods-available/'.$file, '../mods-core/'.$file);
-								}
-							}
-						}
-						unset($tmp);
-					}
-				}
-				closedir($dh);
-			}
-		}
-
-		$dir = $install_dir.'/server/plugins-available/';
-		if (is_dir($dir)) {
-			if ($dh = opendir($dir)) {
-				while (($file = readdir($dh)) !== false) {
-					if($conf['apache']['installed'] == true && $file == 'nginx_plugin.inc.php') continue;
-					if($conf['nginx']['installed'] == true && $file == 'apache2_plugin.inc.php') continue;
-					if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
-						include_once $install_dir.'/server/plugins-available/'.$file;
-						$plugin_name = substr($file, 0, -8);
-						$tmp = new $plugin_name;
-						if(method_exists($tmp, 'onInstall') && $tmp->onInstall()) {
-							if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) {
-								@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
-								//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-enabled/'.$file);
-							}
-							if (strpos($file, '_core_plugin') !== false) {
-								if(!@is_link($install_dir.'/server/plugins-core/'.$file)) {
-									@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
-									//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-core/'.$file);
-								}
-							}
-						}
-						unset($tmp);
-					}
-				}
-				closedir($dh);
-			}
-		}
-
-		// Update the server config
-		$mail_server_enabled = ($conf['services']['mail'])?1:0;
-		$web_server_enabled = ($conf['services']['web'])?1:0;
-		$dns_server_enabled = ($conf['services']['dns'])?1:0;
-		$file_server_enabled = ($conf['services']['file'])?1:0;
-		$db_server_enabled = ($conf['services']['db'])?1:0;
-		$vserver_server_enabled = ($conf['openvz']['installed'])?1:0;
-		$proxy_server_enabled = ($conf['services']['proxy'])?1:0;
-		$firewall_server_enabled = ($conf['services']['firewall'])?1:0;
-		$xmpp_server_enabled = ($conf['services']['xmpp'])?1:0;
-
-		$sql = "UPDATE `server` SET mail_server = '$mail_server_enabled', web_server = '$web_server_enabled', dns_server = '$dns_server_enabled', file_server = '$file_server_enabled', db_server = '$db_server_enabled', vserver_server = '$vserver_server_enabled', proxy_server = '$proxy_server_enabled', firewall_server = '$firewall_server_enabled', xmpp_server = '$xmpp_server_enabled' WHERE server_id = ?";
-
-		$this->db->query($sql, $conf['server_id']);
-		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$this->dbmaster->query($sql, $conf['server_id']);
-		}
-
-
-		// chown install dir to root and chmod 755
-		$command = 'chown root:root '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		$command = 'chmod 755 '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* Chmod the files and directories in the install dir
-		$command = 'chmod -R 750 '.$install_dir.'/*';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* chown the interface files to the ispconfig user and group
-		$command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* Chmod the files and directories in the acme dir
-		$command = 'chmod -R 755 '.$install_dir.'/interface/acme';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		//* chown the server files to the root user and group
-		$command = 'chown -R root:root '.$install_dir.'/server';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		//* chown the security files to the root user and group
-		$command = 'chown -R root:root '.$install_dir.'/security';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		//* chown the security directory and security_settings.ini to root:ispconfig
-		$command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		$command = 'chown root:ispconfig '.$install_dir.'/security';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		$command = 'chown root:ispconfig '.$install_dir.'/security/ids.whitelist';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		$command = 'chown root:ispconfig '.$install_dir.'/security/ids.htmlfield';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		$command = 'chown root:ispconfig '.$install_dir.'/security/apache_directives.blacklist';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		$command = 'chown root:ispconfig '.$install_dir.'/security/nginx_directives.blacklist';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		//* Make the global language file directory group writable
-		exec("chmod -R 770 $install_dir/interface/lib/lang");
-
-		//* Make the temp directory for language file exports writable
-		if(is_dir($install_dir.'/interface/web/temp')) exec("chmod -R 770 $install_dir/interface/web/temp");
-
-		//* Make all interface language file directories group writable
-		$handle = @opendir($install_dir.'/interface/web');
-		while ($file = @readdir($handle)) {
-			if ($file != '.' && $file != '..') {
-				if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
-					$handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
-					chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang', 0770);
-					while ($lang_file = @readdir($handle2)) {
-						if ($lang_file != '.' && $lang_file != '..') {
-							chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file, 0770);
-						}
-					}
-				}
-			}
-		}
-
-		//* Make the APS directories group writable
-		exec("chmod -R 770 $install_dir/interface/web/sites/aps_meta_packages");
-		exec("chmod -R 770 $install_dir/server/aps_packages");
-
-		//* make sure that the server config file (not the interface one) is only readable by the root user
-		chmod($install_dir.'/server/lib/config.inc.php', 0600);
-		chown($install_dir.'/server/lib/config.inc.php', 'root');
-		chgrp($install_dir.'/server/lib/config.inc.php', 'root');
-
-		//* Make sure thet the interface config file is readable by user ispconfig only
-		chmod($install_dir.'/interface/lib/config.inc.php', 0600);
-		chown($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
-		chgrp($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
-
-		chmod($install_dir.'/server/lib/remote_action.inc.php', 0600);
-		chown($install_dir.'/server/lib/remote_action.inc.php', 'root');
-		chgrp($install_dir.'/server/lib/remote_action.inc.php', 'root');
-
-		if(@is_file($install_dir.'/server/lib/mysql_clientdb.conf')) {
-			chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
-			chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
-			chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
-		}
-
-		if(is_dir($install_dir.'/interface/invoices')) {
-			exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
-			exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
-		}
-		
-		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
-
-		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
-		// and must be fixed as this will allow the apache user to read the ispconfig files.
-		// Later this must run as own apache server or via suexec!
-		if($conf['apache']['installed'] == true){
-			$command = 'adduser '.$conf['apache']['user'].' ispconfig';
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-			if(is_group('ispapps')){
-				$command = 'adduser '.$conf['apache']['user'].' ispapps';
-				caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-			}
-		}
-		if($conf['nginx']['installed'] == true){
-			$command = 'adduser '.$conf['nginx']['user'].' ispconfig';
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-			if(is_group('ispapps')){
-				$command = 'adduser '.$conf['nginx']['user'].' ispapps';
-				caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-			}
-		}
-
-		//* Make the shell scripts executable
-		$command = "chmod +x $install_dir/server/scripts/*.sh";
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		if ($this->install_ispconfig_interface == true && isset($conf['interface_password']) && $conf['interface_password']!='admin') {
-			$sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';";
-			$this->db->query($sql, $conf['interface_password']);
-		}
-
-		if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
-			//* Copy the ISPConfig vhost for the controlpanel
-			$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
-			$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
-
-			// Dont just copy over the virtualhost template but add some custom settings
-			$tpl = new tpl('apache_ispconfig.vhost.master');
-			$tpl->setVar('vhost_port',$conf['apache']['vhost_port']);
-
-			// comment out the listen directive if port is 80 or 443
-			if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
-				$tpl->setVar('vhost_port_listen','#');
-			} else {
-				$tpl->setVar('vhost_port_listen','');
-			}
-
-			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-				$tpl->setVar('ssl_comment','');
-			} else {
-				$tpl->setVar('ssl_comment','#');
-			}
-			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key') && is_file($install_dir.'/interface/ssl/ispserver.bundle')) {
-				$tpl->setVar('ssl_bundle_comment','');
-			} else {
-				$tpl->setVar('ssl_bundle_comment','#');
-			}
-			
-			$tpl->setVar('apache_version',getapacheversion());
-
-			wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
-
-			//* and create the symlink
-			if($this->is_update == false) {
-				if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
-				if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
-					symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
-				}
-			}
-			//if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
-			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
-			$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
-			$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
-			@mkdir('/var/www/php-fcgi-scripts/ispconfig', 0755, true);
-			wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
-			exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
-			@symlink($install_dir.'/interface/web', '/var/www/ispconfig');
-			exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
-			//}
-		}
-
-		if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
-			//* Copy the ISPConfig vhost for the controlpanel
-			$vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
-			$vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
-
-			// Dont just copy over the virtualhost template but add some custom settings
-			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master');
-			$content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
-
-			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-				$content = str_replace('{ssl_on}', 'ssl', $content);
-				$content = str_replace('{ssl_comment}', '', $content);
-				$content = str_replace('{fastcgi_ssl}', 'on', $content);
-			} else {
-				$content = str_replace('{ssl_on}', '', $content);
-				$content = str_replace('{ssl_comment}', '#', $content);
-				$content = str_replace('{fastcgi_ssl}', 'off', $content);
-			}
-
-			$socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
-			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
-			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
-			$fpm_socket = $socket_dir.'ispconfig.sock';
-
-			//$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
-			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
-
-			wf($vhost_conf_dir.'/ispconfig.vhost', $content);
-
-			unset($content);
-
-			// PHP-FPM
-			// Dont just copy over the php-fpm pool template but add some custom settings
-			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master');
-			$content = str_replace('{fpm_pool}', 'ispconfig', $content);
-			//$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
-			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
-			$content = str_replace('{fpm_user}', 'ispconfig', $content);
-			$content = str_replace('{fpm_group}', 'ispconfig', $content);
-			wf($conf['nginx']['php_fpm_pool_dir'].'/ispconfig.conf', $content);
-
-			//copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
-			//* and create the symlink
-			if($this->is_update == false) {
-				if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
-				if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
-					symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
-				}
-			}
-		}
-
-		//* Install the update script
-		if(is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
-		chown($install_dir.'/server/scripts/update_from_dev.sh', 'root');
-		chmod($install_dir.'/server/scripts/update_from_dev.sh', 0700);
-//		chown($install_dir.'/server/scripts/update_from_tgz.sh', 'root');
-//		chmod($install_dir.'/server/scripts/update_from_tgz.sh', 0700);
-		chown($install_dir.'/server/scripts/ispconfig_update.sh', 'root');
-		chmod($install_dir.'/server/scripts/ispconfig_update.sh', 0700);
-		if(!is_link('/usr/local/bin/ispconfig_update_from_dev.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update_from_dev.sh');
-		if(!is_link('/usr/local/bin/ispconfig_update.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update.sh');
-
-		//* Make the logs readable for the ispconfig user
-		if(@is_file('/var/log/mail.log')) exec('chmod +r /var/log/mail.log');
-		if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
-		if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
-		if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
-		if(@is_file('/var/log/clamav/clamav.log')) exec('chmod +r /var/log/clamav/clamav.log');
-		if(@is_file('/var/log/clamav/freshclam.log')) exec('chmod +r /var/log/clamav/freshclam.log');
-
-		//* Create the ispconfig log file and directory
-		if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) {
-			if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir'], 0755);
-			touch($conf['ispconfig_log_dir'].'/ispconfig.log');
-		}
-
-		//* Create the ispconfig auth log file and set uid/gid
-		if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) {
-			touch($conf['ispconfig_log_dir'].'/auth.log');
-		}
-		exec('chown ispconfig:ispconfig '. $conf['ispconfig_log_dir'].'/auth.log');
-		exec('chmod 660 '. $conf['ispconfig_log_dir'].'/auth.log');
-
-		if(is_user('getmail')) {
-			rename($install_dir.'/server/scripts/run-getmail.sh', '/usr/local/bin/run-getmail.sh');
-			if(is_user('getmail')) chown('/usr/local/bin/run-getmail.sh', 'getmail');
-			chmod('/usr/local/bin/run-getmail.sh', 0744);
-		}
-
-		//* Add Log-Rotation
-		if (is_dir('/etc/logrotate.d')) {
-			@unlink('/etc/logrotate.d/logispc3'); // ignore, if the file is not there
-			/* We rotate these logs in cron_daily.php
-			$fh = fopen('/etc/logrotate.d/logispc3', 'w');
-			fwrite($fh,
-					"$conf['ispconfig_log_dir']/ispconfig.log { \n" .
-					"	weekly \n" .
-					"	missingok \n" .
-					"	rotate 4 \n" .
-					"	compress \n" .
-					"	delaycompress \n" .
-					"} \n" .
-					"$conf['ispconfig_log_dir']/cron.log { \n" .
-					"	weekly \n" .
-					"	missingok \n" .
-					"	rotate 4 \n" .
-					"	compress \n" .
-					"	delaycompress \n" .
-					"}");
-			fclose($fh);
-			*/
-		}
-
-		//* Remove Domain module as its functions are available in the client module now
-		if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
-		
-		//* Disable rkhunter run and update in debian cronjob as ispconfig is running and updating rkhunter
-		if(is_file('/etc/default/rkhunter')) {
-			replaceLine('/etc/default/rkhunter', 'CRON_DAILY_RUN="yes"', 'CRON_DAILY_RUN="no"', 1, 0);
-			replaceLine('/etc/default/rkhunter', 'CRON_DB_UPDATE="yes"', 'CRON_DB_UPDATE="no"', 1, 0);
-		}
-		
-		// Add symlink for patch tool
-		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
-		
-		// Change mode of a few files from amavisd
-		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
-		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
-		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
-		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
-	}
-
-	public function configure_dbserver() {
-		global $conf;
-
-		//* If this server shall act as database server for client DB's, we configure this here
-		$install_dir = $conf['ispconfig_install_dir'];
-
-		// Create a file with the database login details which
-		// are used to create the client databases.
-
-		if(!is_dir($install_dir.'/server/lib')) {
-			$command = "mkdir $install_dir/server/lib";
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mysql_clientdb.conf.master', 'tpl/mysql_clientdb.conf.master');
-		$content = str_replace('{hostname}', $conf['mysql']['host'], $content);
-		$content = str_replace('{username}', $conf['mysql']['admin_user'], $content);
-		$content = str_replace('{password}', addslashes($conf['mysql']['admin_password']), $content);
-		wf($install_dir.'/server/lib/mysql_clientdb.conf', $content);
-		chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
-		chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
-		chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
-
-	}
-
-	public function install_crontab() {
-		global $conf;
-
-		$install_dir = $conf['ispconfig_install_dir'];
-
-		//* Root Crontab
-		exec('crontab -u root -l > crontab.txt');
-		$existing_root_cron_jobs = file('crontab.txt');
-
-		// remove existing ispconfig cronjobs, in case the syntax has changed
-		foreach($existing_root_cron_jobs as $key => $val) {
-			if(stristr($val, $install_dir)) unset($existing_root_cron_jobs[$key]);
-		}
-
-		$root_cron_jobs = array(
-			"* * * * * ".$install_dir."/server/server.sh 2>&1 | while read line; do echo `/bin/date` \"\$line\" >> ".$conf['ispconfig_log_dir']."/cron.log; done",
-			"* * * * * ".$install_dir."/server/cron.sh 2>&1 | while read line; do echo `/bin/date` \"\$line\" >> ".$conf['ispconfig_log_dir']."/cron.log; done"
-		);
-
-		if ($conf['nginx']['installed'] == true) {
-			$root_cron_jobs[] = "0 0 * * * ".$install_dir."/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
-		}
-
-		foreach($root_cron_jobs as $cron_job) {
-			if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
-				$existing_root_cron_jobs[] = $cron_job."\n";
-			}
-		}
-		file_put_contents('crontab.txt', $existing_root_cron_jobs);
-		exec('crontab -u root crontab.txt &> /dev/null');
-		unlink('crontab.txt');
-
-		//* Getmail crontab
-		if(is_user('getmail')) {
-			$cf = $conf['getmail'];
-			exec('crontab -u getmail -l > crontab.txt');
-			$existing_cron_jobs = file('crontab.txt');
-
-			$cron_jobs = array(
-				'*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null'
-			);
-
-			// remove existing ispconfig cronjobs, in case the syntax has changed
-			foreach($existing_cron_jobs as $key => $val) {
-				if(stristr($val, 'getmail')) unset($existing_cron_jobs[$key]);
-			}
-
-			foreach($cron_jobs as $cron_job) {
-				if(!in_array($cron_job."\n", $existing_cron_jobs)) {
-					$existing_cron_jobs[] = $cron_job."\n";
-				}
-			}
-			file_put_contents('crontab.txt', $existing_cron_jobs);
-			exec('crontab -u getmail crontab.txt &> /dev/null');
-			unlink('crontab.txt');
-		}
-
-		touch($conf['ispconfig_log_dir'].'/cron.log');
-		chmod($conf['ispconfig_log_dir'].'/cron.log', 0660);
-
-	}
-	
-	public function create_mount_script(){
-		global $app, $conf;
-		$mount_script = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh';
-		$mount_command = '';
-		
-		if(is_file($mount_script)) return;
-		if(is_file('/etc/rc.local')){
-			$rc_local = file('/etc/rc.local');
-			if(is_array($rc_local) && !empty($rc_local)){
-				foreach($rc_local as $line){
-					$line = trim($line);
-					if(substr($line, 0, 1) == '#') continue;
-					if(strpos($line, 'sshfs') !== false && strpos($line, '/var/backup') !== false){
-						$mount_command = "#!/bin/sh\n\n";
-						$mount_command .= $line."\n\n";
-						file_put_contents($mount_script, $mount_command);
-						chmod($mount_script, 0755);
-						chown($mount_script, 'root');
-						chgrp($mount_script, 'root');
-						break;
-					}
-				}
-			}
-		}
-	}
-	
-	// This function is called at the end of the update process and contains code to clean up parts of old ISPCONfig releases
-	public function cleanup_ispconfig() {
-		global $app,$conf;
-		
-		// Remove directories recursively
-		if(is_dir('/usr/local/ispconfig/interface/web/designer')) exec('rm -rf /usr/local/ispconfig/interface/web/designer');
-		if(is_dir('/usr/local/ispconfig/interface/web/themes/default-304')) exec('rm -rf /usr/local/ispconfig/interface/web/themes/default-304');
-		
-		// Remove files
-		if(is_file('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php');
-		if(is_file('/usr/local/ispconfig/interface/lib/classes/form.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/form.inc.php');
-		
-		// Change mode of a few files from amavisd
-		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
-		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
-		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
-		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
-		
-	}
-
-	public function getinitcommand($servicename, $action, $init_script_directory = ''){
-		global $conf;
-		// upstart
-		if(is_executable('/sbin/initctl')){
-			exec('/sbin/initctl version 2>/dev/null | /bin/grep -q upstart', $retval['output'], $retval['retval']);
-			if(intval($retval['retval']) == 0) return 'service '.$servicename.' '.$action;
-		}
-		// systemd
-		if(is_executable('/bin/systemd') || is_executable('/usr/bin/systemctl')){
-			return 'systemctl '.$action.' '.$servicename.'.service';
-		}
-		// sysvinit
-		if($init_script_directory == '') $init_script_directory = $conf['init_scripts'];
-		if(substr($init_script_directory, -1) === '/') $init_script_directory = substr($init_script_directory, 0, -1);
-		return $init_script_directory.'/'.$servicename.' '.$action;
-	}
-
-	/**
-	 * Helper function - get the path to a template file based on
-	 * the local part of the filename. Checks first for the existence
-	 * of a distribution specific file and if not found looks in the
-	 * base template folder. Optionally the behaviour can be changed
-	 * by setting the 2nd parameter which will fetch the contents
-	 * of the template file and return it instead of the path. The 3rd
-	 * parameter further extends this behaviour by filtering the contents
-	 * by inserting the ispconfig database credentials using the {} placeholders.
-	 *
-	 * @param string $tLocal local part of filename
-	 * @param bool $tRf
-	 * @param bool $tDBCred
-	 * @return string Relative path to the chosen template file
-	 */
-	protected function get_template_file($tLocal, $tRf=false, $tDBCred=false) {
-		global $conf, $dist;
-
-		$final_path = '';
-		$dist_template = $conf['ispconfig_install_dir'] . '/server/conf-custom/install/' . $tLocal . '.master';
-		if (file_exists($dist_template)) {
-			$final_path = $dist_template;
-		} else {
-			$dist_template = 'dist/tpl/'.strtolower($dist['name'])."/$tLocal.master";
-			if (file_exists($dist_template)) {
-				$final_path = $dist_template;
-			} else {
-				$final_path = "tpl/$tLocal.master";
-			}
-		}
-
-		if (!$tRf) {
-			return $final_path;
-		} else {
-			return (!$tDBCred) ? rf($final_path) : $this->insert_db_credentials(rf($final_path));
-		}
-	}
-
-	/**
-	 * Helper function - writes the contents to a config file
-	 * and performs a backup if the file exist. Additionally
-	 * if the file exists the new file will be given the
-	 * same rights and ownership as the original. Optionally the
-	 * rights and/or ownership can be overriden by appending umask,
-	 * user and group to the parameters. Providing only uid and gid
-	 * values will result in only a chown.
-	 *
-	 * @param $tConf
-	 * @param $tContents
-	 * @return bool
-	 */
-	protected function write_config_file($tConf, $tContents) {
-		// Backup config file before writing new contents and stat file
-		if ( is_file($tConf) ) {
-			$stat = exec('stat -c \'%a %U %G\' '.escapeshellarg($tConf), $output, $res);
-			if ($res == 0) { // stat successfull
-				list($access, $user, $group) = explode(" ", $stat);
-			}
-
-			if ( copy($tConf, $tConf.'~') ) {
-				chmod($tConf.'~', 0400);
-			}
-		}
-
-		wf($tConf, $tContents); // write file
-
-		if (func_num_args() >= 4) // override rights and/or ownership
-			{
-			$args = func_get_args();
-			$output = array_slice($args, 2);
-
-			switch (sizeof($output)) {
-			case 3:
-				$umask = array_shift($output);
-				if (is_numeric($umask) && preg_match('/^0?[0-7]{3}$/', $umask)) {
-					$access = $umask;
-				}
-			case 2:
-				if (is_user($output[0]) && is_group($output[1])) {
-					list($user, $group) = $output;
-				}
-				break;
-			}
-		}
-
-		if (!empty($user) && !empty($group)) {
-			chown($tConf, $user);
-			chgrp($tConf, $group);
-		}
-
-		if (!empty($access)) {
-			exec("chmod $access $tConf");
-		}
-	}
-
-	/**
-	 * Helper function - filter the contents of a config
-	 * file by inserting the common ispconfig database
-	 * credentials.
-	 *
-	 * @param $tContents
-	 * @return string
-	 */
-	protected function insert_db_credentials($tContents) {
-		global $conf;
-
-		$tContents = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $tContents);
-		$tContents = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $tContents);
-		$tContents = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $tContents);
-		$tContents = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $tContents);
-		$tContents = str_replace('{mysql_server_host}', $conf['mysql']['host'], $tContents);
-		$tContents = str_replace('{mysql_server_port}', $conf['mysql']['port'], $tContents);
-		$tContents = str_replace('{mysql_server_port}', $conf["mysql"]["port"], $tContents);
-
-		return $tContents;
-	}
-
-}
-
-?>
diff --git a/install/sql/incremental/upd_dev_collection.sql.orig b/install/sql/incremental/upd_dev_collection.sql.orig
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/install/sql/incremental/upd_dev_collection.sql.rej b/install/sql/incremental/upd_dev_collection.sql.rej
deleted file mode 100644
index 4c57d840ab..0000000000
--- a/install/sql/incremental/upd_dev_collection.sql.rej
+++ /dev/null
@@ -1,40 +0,0 @@
---- install/sql/incremental/upd_dev_collection.sql
-+++ install/sql/incremental/upd_dev_collection.sql
-@@ -80,4 +80,37 @@ INSERT IGNORE INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_us
- 
- ALTER TABLE `dns_soa` CHANGE `xfer` `xfer` TEXT NULL;
- ALTER TABLE `dns_soa` CHANGE `also_notify` `also_notify` TEXT NULL;
--ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;+ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;
-+
-+-- rspamd
-+ALTER TABLE `spamfilter_policy` ADD `rspamd_greylisting` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `policyd_greylist`;
-+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_greylisting_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_greylisting`;
-+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_greylisting_level`;
-+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_method` ENUM('add_header','rewrite_subject') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'rewrite_subject' AFTER `rspamd_spam_tag_level`;
-+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_kill_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_tag_method`;
-+
-+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 4;
-+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 5;
-+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 6;
-+
-+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '4.00';
-+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '6.00' WHERE id = 1;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 2;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 3;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '2.00' WHERE id = 6;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '7.00' WHERE id = 7;
-+
-+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '6.00';
-+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '8.00' WHERE id = 1;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 2;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 3;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '4.00' WHERE id = 6;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '10.00' WHERE id = 7;
-+
-+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '10.00';
-+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '12.00' WHERE id = 1;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 2;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 3;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '8.00' WHERE id = 6;
-+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '20.00' WHERE id = 7;
-+-- end of rspamd
diff --git a/install/sql/ispconfig3.sql.orig b/install/sql/ispconfig3.sql.orig
deleted file mode 100644
index 2417ef0d21..0000000000
--- a/install/sql/ispconfig3.sql.orig
+++ /dev/null
@@ -1,2570 +0,0 @@
-/*
-Copyright (c) 2007-2012, Till Brehm, projektfarm Gmbh
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
--- Includes 
--- 
--- iso_country_list.sql
--- 
--- This will create and then populate a MySQL table with a list of the names and
--- ISO 3166 codes for countries in existence as of the date below.
--- 
--- For updates to this file, see http://27.org/isocountrylist/
--- For more about ISO 3166, see http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
--- 
--- Created by getisocountrylist.pl on Sun Nov  2 14:59:20 2003.
--- Wm. Rhodes <iso_country_list@27.org>
--- 
-
--- 
--- ISPConfig 3
--- DB-Version: 3.0.0.9
--- 
-
-SET FOREIGN_KEY_CHECKS = 0;
-
--- --------------------------------------------------------
--- --------------------------------------------------------
--- DB-STRUCTURE
--- --------------------------------------------------------
--- --------------------------------------------------------
-
---
--- Table structure for table `aps_instances`
---
-
-CREATE TABLE IF NOT EXISTS `aps_instances` (
-  `id` int(4) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) NOT NULL DEFAULT '0',
-  `customer_id` int(4) NOT NULL DEFAULT '0',
-  `package_id` int(4) NOT NULL DEFAULT '0',
-  `instance_status` int(4) NOT NULL DEFAULT '0',
-  PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `aps_instances_settings`
---
-
-CREATE TABLE IF NOT EXISTS `aps_instances_settings` (
-  `id` int(4) NOT NULL AUTO_INCREMENT,
-  `server_id` int(11) NOT NULL DEFAULT '0',
-  `instance_id` int(4) NOT NULL DEFAULT '0',
-  `name` varchar(255) NOT NULL DEFAULT '',
-  `value` text,
-  PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `aps_packages`
---
-
-CREATE TABLE IF NOT EXISTS `aps_packages` (
-  `id` int(4) NOT NULL AUTO_INCREMENT,
-  `path` varchar(255) NOT NULL DEFAULT '',
-  `name` varchar(255) NOT NULL DEFAULT '',
-  `category` varchar(255) NOT NULL DEFAULT '',
-  `version` varchar(20) NOT NULL DEFAULT '',
-  `release` int(4) NOT NULL DEFAULT '0',
-  `package_url` TEXT,
-  `package_status` int(1) NOT NULL DEFAULT '2',
-  PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `aps_settings`
---
-
-CREATE TABLE IF NOT EXISTS `aps_settings` (
-  `id` int(4) NOT NULL AUTO_INCREMENT,
-  `name` varchar(255) NOT NULL DEFAULT '',
-  `value` text,
-  PRIMARY KEY (`id`),
-  UNIQUE KEY `name` (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `attempts_login`
---
-
-CREATE TABLE `attempts_login` (
-  `ip` varchar(39) NOT NULL DEFAULT '',
-  `times` int(11) DEFAULT NULL,
-  `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `client`
---
-
-CREATE TABLE `client` (
-  `client_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `company_name` varchar(64) DEFAULT NULL,
-  `company_id` varchar(255) DEFAULT NULL,
-  `gender` enum('','m','f') NOT NULL DEFAULT '',
-  `contact_firstname` varchar( 64 ) NOT NULL DEFAULT '',
-  `contact_name` varchar(64) DEFAULT NULL,
-  `customer_no` varchar(64) DEFAULT NULL,
-  `vat_id` varchar(64) DEFAULT NULL,
-  `street` varchar(255) DEFAULT NULL,
-  `zip` varchar(32) DEFAULT NULL,
-  `city` varchar(64) DEFAULT NULL,
-  `state` varchar(32) DEFAULT NULL,
-  `country` char(2) DEFAULT NULL,
-  `telephone` varchar(32) DEFAULT NULL,
-  `mobile` varchar(32) DEFAULT NULL,
-  `fax` varchar(32) DEFAULT NULL,
-  `email` varchar(255) DEFAULT NULL,
-  `internet` varchar(255) NOT NULL DEFAULT '',
-  `icq` varchar(16) DEFAULT NULL,
-  `notes` text,
-  `bank_account_owner` varchar(255) DEFAULT NULL,
-  `bank_account_number` varchar(255) DEFAULT NULL,
-  `bank_code` varchar(255) DEFAULT NULL,
-  `bank_name` varchar(255) DEFAULT NULL,
-  `bank_account_iban` varchar(255) DEFAULT NULL,
-  `bank_account_swift` varchar(255) DEFAULT NULL,
-  `paypal_email` varchar(255) DEFAULT NULL,
-  `default_mailserver` int(11) unsigned NOT NULL DEFAULT '1',
-  `mail_servers` text,
-  `limit_maildomain` int(11) NOT NULL DEFAULT '-1',
-  `limit_mailbox` int(11) NOT NULL DEFAULT '-1',
-  `limit_mailalias` int(11) NOT NULL DEFAULT '-1',
-  `limit_mailaliasdomain` int(11) NOT NULL DEFAULT '-1',
-  `limit_mailforward` int(11) NOT NULL DEFAULT '-1',
-  `limit_mailcatchall` int(11) NOT NULL DEFAULT '-1',
-  `limit_mailrouting` int(11) NOT NULL DEFAULT '0',
-  `limit_mailfilter` int(11) NOT NULL DEFAULT '-1',
-  `limit_fetchmail` int(11) NOT NULL DEFAULT '-1',
-  `limit_mailquota` int(11) NOT NULL DEFAULT '-1',
-  `limit_spamfilter_wblist` int(11) NOT NULL DEFAULT '0',
-  `limit_spamfilter_user` int(11) NOT NULL DEFAULT '0',
-  `limit_spamfilter_policy` int(11) NOT NULL DEFAULT '0',
-  `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
-  `xmpp_servers` text,
-  `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
-  `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
-  `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_anon` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_auth_options` varchar(255) NOT NULL DEFAULT 'plain,hashed,isp',
-  `limit_xmpp_vjud` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_proxy` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `default_webserver` int(11) unsigned NOT NULL DEFAULT '1',
-  `web_servers` text,
-  `limit_web_ip` text,
-  `limit_web_domain` int(11) NOT NULL DEFAULT '-1',
-  `limit_web_quota` int(11) NOT NULL DEFAULT '-1',
-  `web_php_options` varchar(255) NOT NULL DEFAULT 'no,fast-cgi,cgi,mod,suphp,php-fpm,hhvm',
-  `limit_cgi` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_ssi` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_perl` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_ruby` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_python` enum('n','y') NOT NULL DEFAULT 'n',
-  `force_suexec` enum('n','y') NOT NULL DEFAULT 'y',
-  `limit_hterror` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_wildcard` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_ssl` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_ssl_letsencrypt` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_web_subdomain` int(11) NOT NULL DEFAULT '-1',
-  `limit_web_aliasdomain` int(11) NOT NULL DEFAULT '-1',
-  `limit_ftp_user` int(11) NOT NULL DEFAULT '-1',
-  `limit_shell_user` int(11) NOT NULL DEFAULT '0',
-  `ssh_chroot` varchar(255) NOT NULL DEFAULT 'no,jailkit,ssh-chroot',
-  `limit_webdav_user` int(11) NOT NULL DEFAULT '0',
-  `limit_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y',
-  `limit_directive_snippets` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n',
-  `limit_aps` int(11) NOT NULL DEFAULT '-1',
-  `default_dnsserver` int(11) unsigned NOT NULL DEFAULT '1',
-  `db_servers` text,
-  `limit_dns_zone` int(11) NOT NULL DEFAULT '-1',
-  `default_slave_dnsserver` int(11) unsigned NOT NULL DEFAULT '1',
-  `limit_dns_slave_zone` int(11) NOT NULL DEFAULT '-1',
-  `limit_dns_record` int(11) NOT NULL DEFAULT '-1',
-  `default_dbserver` int(11) NOT NULL DEFAULT '1',
-  `dns_servers` text,
-  `limit_database` int(11) NOT NULL DEFAULT '-1',
-  `limit_database_user` int(11) NOT NULL DEFAULT '-1',
-  `limit_database_quota` int(11) NOT NULL default '-1',
-  `limit_cron` int(11) NOT NULL DEFAULT '0',
-  `limit_cron_type` enum('url','chrooted','full') NOT NULL DEFAULT 'url',
-  `limit_cron_frequency` int(11) NOT NULL DEFAULT '5',
-  `limit_traffic_quota` int(11) NOT NULL DEFAULT '-1',
-  `limit_client` int(11) NOT NULL DEFAULT '0',
-  `limit_domainmodule` int(11) NOT NULL DEFAULT '0',
-  `limit_mailmailinglist` int(11) NOT NULL DEFAULT '-1',
-  `limit_openvz_vm` int(11) NOT NULL DEFAULT '0',
-  `limit_openvz_vm_template_id` int(11) NOT NULL DEFAULT '0',
-  `parent_client_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `username` varchar(64) DEFAULT NULL,
-  `password` varchar(64) DEFAULT NULL,
-  `language` char(2) NOT NULL DEFAULT 'en',
-  `usertheme` varchar(32) NOT NULL DEFAULT 'default',
-  `template_master` int(11) unsigned NOT NULL DEFAULT '0',
-  `template_additional` text,
-  `created_at` bigint(20) DEFAULT NULL,
-  `locked` enum('n','y') NOT NULL DEFAULT 'n',
-  `canceled` enum('n','y') NOT NULL DEFAULT 'n',
-  `can_use_api` enum('n','y') NOT NULL DEFAULT 'n',
-  `tmp_data` mediumblob,
-  `id_rsa` varchar(2000) NOT NULL DEFAULT '',
-  `ssh_rsa` varchar(600) NOT NULL DEFAULT '',
-  `customer_no_template` varchar(255) DEFAULT 'R[CLIENTID]C[CUSTOMER_NO]',
-  `customer_no_start` int(11) NOT NULL DEFAULT '1',
-  `customer_no_counter` int(11) NOT NULL DEFAULT '0',
-  `added_date` date NULL DEFAULT NULL,
-  `added_by` varchar(255) DEFAULT NULL,
-  `validation_status` enum('accept','review','reject') NOT NULL DEFAULT 'accept',
-  `risk_score` int(10) unsigned NOT NULL DEFAULT '0',
-  `activation_code` varchar(10) NOT NULL DEFAULT '',
-  PRIMARY KEY (`client_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `client_circle`
---
-
-CREATE TABLE `client_circle` (
-  `circle_id` int(11) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `circle_name` varchar(64) DEFAULT NULL,
-  `client_ids` text,
-  `description` text,
-  `active` enum('n','y') NOT NULL default 'y',
-  PRIMARY KEY (`circle_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `client_template`
--- 
-
-CREATE TABLE `client_template` (
-  `template_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `template_name` varchar(64) NOT NULL DEFAULT '',
-  `template_type` varchar(1) NOT NULL default 'm',
-  `mail_servers` text,
-  `limit_maildomain` int(11) NOT NULL default '-1',
-  `limit_mailbox` int(11) NOT NULL default '-1',
-  `limit_mailalias` int(11) NOT NULL default '-1',
-  `limit_mailaliasdomain` int(11) NOT NULL default '-1',
-  `limit_mailforward` int(11) NOT NULL default '-1',
-  `limit_mailcatchall` int(11) NOT NULL default '-1',
-  `limit_mailrouting` int(11) NOT NULL default '0',
-  `limit_mailfilter` int(11) NOT NULL default '-1',
-  `limit_fetchmail` int(11) NOT NULL default '-1',
-  `limit_mailquota` int(11) NOT NULL default '-1',
-  `limit_spamfilter_wblist` int(11) NOT NULL default '0',
-  `limit_spamfilter_user` int(11) NOT NULL default '0',
-  `limit_spamfilter_policy` int(11) NOT NULL default '0',
-  `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
-  `xmpp_servers` text,
-  `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
-  `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
-  `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_anon` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_vjud` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_proxy` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `web_servers` text,
-  `limit_web_ip` text,
-  `limit_web_domain` int(11) NOT NULL default '-1',
-  `limit_web_quota` int(11) NOT NULL default '-1',
-  `web_php_options` varchar(255) NOT NULL DEFAULT 'no',
-  `limit_cgi` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_ssi` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_perl` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_ruby` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_python` enum('n','y') NOT NULL DEFAULT 'n',
-  `force_suexec` enum('n','y') NOT NULL DEFAULT 'y',
-  `limit_hterror` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_wildcard` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_ssl` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_ssl_letsencrypt` enum('n','y') NOT NULL DEFAULT 'n',
-  `limit_web_subdomain` int(11) NOT NULL default '-1',
-  `limit_web_aliasdomain` int(11) NOT NULL default '-1',
-  `limit_ftp_user` int(11) NOT NULL default '-1',
-  `limit_shell_user` int(11) NOT NULL default '0',
-  `ssh_chroot` varchar(255) NOT NULL DEFAULT 'no',
-  `limit_webdav_user` int(11) NOT NULL default '0',
-  `limit_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y',
-  `limit_directive_snippets` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n',
-  `limit_aps` int(11) NOT NULL DEFAULT '-1',
-  `dns_servers` text,
-  `limit_dns_zone` int(11) NOT NULL default '-1',
-  `default_slave_dnsserver` int(11) NOT NULL DEFAULT '0',
-  `limit_dns_slave_zone` int(11) NOT NULL default '-1',
-  `limit_dns_record` int(11) NOT NULL default '-1',
-  `db_servers` text,
-  `limit_database` int(11) NOT NULL default '-1',
-  `limit_database_user` int(11) NOT NULL DEFAULT '-1',
-  `limit_database_quota` int(11) NOT NULL default '-1',
-  `limit_cron` int(11) NOT NULL default '0',
-  `limit_cron_type` enum('url','chrooted','full') NOT NULL default 'url',
-  `limit_cron_frequency` int(11) NOT NULL default '5',
-  `limit_traffic_quota` int(11) NOT NULL default '-1',
-  `limit_client` int(11) NOT NULL default '0',
-  `limit_domainmodule` int(11) NOT NULL DEFAULT '0',
-  `limit_mailmailinglist` int(11) NOT NULL default '-1',
-  `limit_openvz_vm` int(11) NOT NULL DEFAULT '0',
-  `limit_openvz_vm_template_id` int(11) NOT NULL DEFAULT '0',
-  PRIMARY KEY  (`template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `client_template_assigned`
--- 
-
-CREATE TABLE `client_template_assigned` (
-  `assigned_template_id` bigint(20) NOT NULL auto_increment,
-  `client_id` bigint(11) NOT NULL DEFAULT '0',
-  `client_template_id` int(11) NOT NULL DEFAULT '0',
-  PRIMARY KEY (`assigned_template_id`),
-  KEY `client_id` (`client_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--- --------------------------------------------------------
-
---
--- Table structure for table `invoice_message_template`
---
-
-CREATE TABLE `client_message_template` (
-  `client_message_template_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `template_type` varchar(255) DEFAULT NULL,
-  `template_name` varchar(255) DEFAULT NULL,
-  `subject` varchar(255) DEFAULT NULL,
-  `message` text,
-  PRIMARY KEY (`client_message_template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
---
--- Dumping data for table `invoice_message_template`
---
-
--- --------------------------------------------------------
-
---
--- Table structure for table `country`
---
-
-CREATE TABLE `country` (
-  `iso` char(2) NOT NULL DEFAULT '',
-  `name` varchar(64) NOT NULL DEFAULT '',
-  `printable_name` varchar(64) NOT NULL DEFAULT '',
-  `iso3` char(3) DEFAULT NULL,
-  `numcode` smallint(6) DEFAULT NULL,
-  `eu` enum('n','y') NOT NULL DEFAULT 'n',
-  PRIMARY KEY (`iso`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `cron`
--- 
-CREATE TABLE `cron` (
-  `id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NULL default NULL,
-  `sys_perm_group` varchar(5) NULL default NULL,
-  `sys_perm_other` varchar(5) NULL default NULL,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `parent_domain_id` int(11) unsigned NOT NULL default '0',
-  `type` enum('url','chrooted','full') NOT NULL default 'url',
-  `command` TEXT,
-  `run_min` varchar(100) NULL,
-  `run_hour` varchar(100) NULL,
-  `run_mday` varchar(100) NULL,
-  `run_month` varchar(100) NULL,
-  `run_wday` varchar(100) NULL,
-  `log` enum('n','y') NOT NULL default 'n',
-  `active` enum('n','y') NOT NULL default 'y',
-  PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `directive_snippets`
--- 
-
-CREATE TABLE IF NOT EXISTS `directive_snippets` (
-  `directive_snippets_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `name` varchar(255) DEFAULT NULL,
-  `type` varchar(255) DEFAULT NULL,
-  `snippet` mediumtext,
-  `customer_viewable` ENUM('n','y') NOT NULL DEFAULT 'n',
-  `required_php_snippets` varchar(255) NOT NULL DEFAULT '',
-  `active` enum('n','y') NOT NULL DEFAULT 'y',
-  `master_directive_snippets_id` int(11) unsigned NOT NULL DEFAULT '0',
-  PRIMARY KEY (`directive_snippets_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `dns_rr`
--- 
-CREATE TABLE `dns_rr` (
-  `id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `server_id` int(11) NOT NULL default '1',
-  `zone` int(11) unsigned NOT NULL DEFAULT '0',
-  `name` varchar(255) NOT NULL DEFAULT '',
-  `type` enum('A','AAAA','ALIAS','CNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') default NULL,
-  `data` TEXT NOT NULL,
-  `aux` int(11) unsigned NOT NULL default '0',
-  `ttl` int(11) unsigned NOT NULL default '3600',
-  `active` enum('N','Y') NOT NULL default 'Y',
-  `stamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
-  `serial` int(10) unsigned default NULL,
-  PRIMARY KEY  (`id`),
-  KEY `rr` (`zone`,`type`,`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table  `dns_slave`
---
-
-CREATE TABLE `dns_slave` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `server_id` int(11) NOT NULL default '1',
-  `origin` varchar(255) NOT NULL DEFAULT '',
-  `ns` varchar(255) NOT NULL DEFAULT '',
-  `active` enum('N','Y') NOT NULL DEFAULT 'N',
-  `xfer` TEXT NULL,
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `slave` (`origin`,`server_id`),
-  KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `dns_ssl_ca`
--- 
-
-CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
-  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `active` enum('N','Y') NOT NULL DEFAULT 'N',
-  `ca_name` varchar(255) NOT NULL DEFAULT '',
-  `ca_issue` varchar(255) NOT NULL DEFAULT '',
-  `ca_wildcard` enum('Y','N') NOT NULL DEFAULT 'N',
-  `ca_iodef` text NOT NULL,
-  `ca_critical` tinyint(1) NOT NULL DEFAULT '0',
-  PRIMARY KEY (`id`),
-  UNIQUE KEY (`ca_issue`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
-ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`);
-
-INSERT INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `active`, `ca_name`, `ca_issue`, `ca_wildcard`, `ca_iodef`, `ca_critical`) VALUES
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'AC Camerfirma', 'camerfirma.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'ACCV', 'accv.es', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Actalis', 'actalis.it', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Amazon', 'amazon.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Asseco', 'certum.pl', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Buypass', 'buypass.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CA Disig', 'disig.sk', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CATCert', 'aoc.cat', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certinomis', 'www.certinomis.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certizen', 'hongkongpost.gov.hk', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodoca.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'e-tugra', 'e-tugra.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'EDICOM', 'edicomgroup.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Firmaprofesional', 'firmaprofesional.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'FNMT', 'fnmt.es', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GlobalSign', 'globalsign.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GoDaddy', 'godaddy.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Google Trust Services', 'pki.goog', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GRCA', 'gca.nat.gov.tw', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'HARICA', 'harica.gr', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'IdenTrust', 'identrust.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Kamu SM', 'kamusm.gov.tr', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Microsec e-Szigno', 'e-szigno.hu', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'NetLock', 'netlock.hu', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PKIoverheid', 'www.pkioverheid.nl', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PROCERT', 'procert.net.ve', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'QuoVadis', 'quovadisglobal.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SECOM', 'secomtrust.net', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sertifitseerimiskeskuse', 'sk.ee', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'StartCom', 'startcomca.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SwissSign', 'swisssign.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec / Thawte / GeoTrust', 'symantec.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'T-Systems', 'telesec.de', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Telia', 'telia.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Trustwave', 'trustwave.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Web.com', 'web.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0);
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `dns_soa`
--- 
-
-CREATE TABLE `dns_soa` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `server_id` int(11) NOT NULL default '1',
-  `origin` varchar(255) NOT NULL DEFAULT '',
-  `ns` varchar(255) NOT NULL DEFAULT '',
-  `mbox` varchar(255) NOT NULL DEFAULT '',
-  `serial` int(11) unsigned NOT NULL default '1',
-  `refresh` int(11) unsigned NOT NULL default '28800',
-  `retry` int(11) unsigned NOT NULL default '7200',
-  `expire` int(11) unsigned NOT NULL default '604800',
-  `minimum` int(11) unsigned NOT NULL default '3600',
-  `ttl` int(11) unsigned NOT NULL default '3600',
-  `active` enum('N','Y') NOT NULL DEFAULT 'N',
-  `xfer` TEXT NULL,
-  `also_notify` TEXT NULL,
-  `update_acl` varchar(255) default NULL,
-  `dnssec_initialized` ENUM('Y','N') NOT NULL DEFAULT 'N',
-  `dnssec_wanted` ENUM('Y','N') NOT NULL DEFAULT 'N',
-  `dnssec_last_signed` BIGINT NOT NULL DEFAULT '0',
-  `dnssec_info` TEXT NULL,
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `origin` (`origin`),
-  KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `dns_template`
--- 
-
-CREATE TABLE `dns_template` (
-  `template_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `name` varchar(64) default NULL,
-  `fields` varchar(255) default NULL,
-  `template` text,
-  `visible` enum('N','Y') NOT NULL default 'Y',
-  PRIMARY KEY  (`template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
---
--- Table structure for table  `domain`
---
-
-CREATE TABLE `domain` (
-  `domain_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `domain` varchar(255) NOT NULL default '',
-  PRIMARY KEY  (`domain_id`),
-  UNIQUE KEY `domain` (`domain`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `firewall`
--- 
-
-CREATE TABLE `firewall` (
-  `firewall_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `tcp_port` text,
-  `udp_port` text,
-  `active` enum('n','y') NOT NULL default 'y',
-  PRIMARY KEY  (`firewall_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `ftp_user`
--- 
-
-CREATE TABLE `ftp_user` (
-  `ftp_user_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `parent_domain_id` int(11) unsigned NOT NULL default '0',
-  `username` varchar(64) default NULL,
-  `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) default NULL,
-  `quota_size` bigint(20) NOT NULL default '-1',
-  `active` enum('n','y') NOT NULL default 'y',
-  `uid` varchar(64) default NULL,
-  `gid` varchar(64) default NULL,
-  `dir` varchar(255) default NULL,
-  `quota_files` bigint(20) NOT NULL default '-1',
-  `ul_ratio` int(11) NOT NULL default '-1',
-  `dl_ratio` int(11) NOT NULL default '-1',
-  `ul_bandwidth` int(11) NOT NULL default '-1',
-  `dl_bandwidth` int(11) NOT NULL default '-1',
-  `expires` datetime NULL DEFAULT NULL,
-  `user_type` set('user','system') NOT NULL DEFAULT 'user',
-  `user_config` text,
-  PRIMARY KEY  (`ftp_user_id`),
-  KEY `active` (`active`),
-  KEY `server_id` (`server_id`),
-  KEY `username` (`username`),
-  KEY `quota_files` (`quota_files`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `ftp_traffic`
--- 
-
-CREATE TABLE `ftp_traffic` (
-  `hostname` varchar(255) NOT NULL,
-  `traffic_date` date NOT NULL,
-  `in_bytes` bigint(32) unsigned NOT NULL,
-  `out_bytes` bigint(32) unsigned NOT NULL,
-  UNIQUE KEY (`hostname`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `help_faq`
---
-
-CREATE TABLE `help_faq` (
-  `hf_id` int(11) NOT NULL AUTO_INCREMENT,
-  `hf_section` int(11) DEFAULT NULL,
-  `hf_order` int(11) DEFAULT '0',
-  `hf_question` text,
-  `hf_answer` text,
-  `sys_userid` int(11) DEFAULT NULL,
-  `sys_groupid` int(11) DEFAULT NULL,
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  PRIMARY KEY (`hf_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `help_faq_sections`
---
-
-CREATE TABLE `help_faq_sections` (
-  `hfs_id` int(11) NOT NULL AUTO_INCREMENT,
-  `hfs_name` varchar(255) DEFAULT NULL,
-  `hfs_order` int(11) DEFAULT '0',
-  `sys_userid` int(11) DEFAULT NULL,
-  `sys_groupid` int(11) DEFAULT NULL,
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  PRIMARY KEY (`hfs_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- Table structure for table `iptables`
---
-
-DROP TABLE IF EXISTS `iptables`;
-CREATE TABLE `iptables` (
-  `iptables_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-  `server_id` int(10) unsigned NOT NULL DEFAULT '0',
-  `table` varchar(10) DEFAULT NULL COMMENT 'INPUT OUTPUT FORWARD',
-  `source_ip` varchar(16) DEFAULT NULL,
-  `destination_ip` varchar(16) DEFAULT NULL,
-  `protocol` varchar(10) DEFAULT 'TCP' COMMENT 'TCP UDP GRE',
-  `singleport` varchar(10) DEFAULT NULL,
-  `multiport` varchar(40) DEFAULT NULL,
-  `state` varchar(20) DEFAULT NULL COMMENT 'NEW ESTABLISHED RECNET etc',
-  `target` varchar(10) DEFAULT NULL COMMENT 'ACCEPT DROP REJECT LOG',
-  `active` enum('n','y') NOT NULL DEFAULT 'y',
-  PRIMARY KEY (`iptables_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_access`
--- 
-
-CREATE TABLE `mail_access` (
-  `access_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `server_id` int(11) NOT NULL default '0',
-  `source` varchar(255) NOT NULL DEFAULT '',
-  `access` varchar(255) NOT NULL DEFAULT '',
-  `type` set('recipient','sender','client') NOT NULL DEFAULT 'recipient',
-  `active` enum('n','y') NOT NULL default 'y',
-  PRIMARY KEY  (`access_id`),
-  KEY `server_id` (`server_id`,`source`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table  `mail_backup`
---
-
-CREATE TABLE `mail_backup` (
-  `backup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-  `server_id` int(10) unsigned NOT NULL DEFAULT '0',
-  `parent_domain_id` int(10) unsigned NOT NULL DEFAULT '0',
-  `mailuser_id` int(10) unsigned NOT NULL DEFAULT '0',
-  `backup_mode` varchar(64) NOT NULL DEFAULT  '',
-  `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
-  `filename` varchar(255) NOT NULL DEFAULT '',
-  `filesize` VARCHAR(20) NOT NULL DEFAULT '',
-  PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_content_filter`
--- 
-
-CREATE TABLE `mail_content_filter` (
-  `content_filter_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `server_id` int(11) NOT NULL default '0',
-  `type` varchar(255) default NULL,
-  `pattern` varchar(255) default NULL,
-  `data` varchar(255) default NULL,
-  `action` varchar(255) default NULL,
-  `active` varchar(255) NOT NULL default 'y',
-  PRIMARY KEY  (`content_filter_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_domain`
--- 
-
-CREATE TABLE `mail_domain` (
-  `domain_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `domain` varchar(255) NOT NULL default '',
-  `dkim` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `dkim_selector` varchar(63) NOT NULL DEFAULT 'default',
-  `dkim_private` mediumtext NULL,
-  `dkim_public` mediumtext NULL,
-  `active` enum('n','y') NOT NULL DEFAULT 'n',
-  PRIMARY KEY  (`domain_id`),
-  KEY `server_id` (`server_id`,`domain`),
-  KEY `domain_active` (`domain`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_forwarding`
--- 
-
-CREATE TABLE `mail_forwarding` (
-  `forwarding_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `source` varchar(255) NOT NULL DEFAULT '',
-  `destination` text,
-  `type` enum('alias','aliasdomain','forward','catchall') NOT NULL default 'alias',
-  `active` enum('n','y') NOT NULL DEFAULT 'n',
-  `allow_send_as` ENUM('n','y') NOT NULL DEFAULT 'n',
-  `greylisting` enum('n','y' ) NOT NULL DEFAULT 'n',
-  PRIMARY KEY  (`forwarding_id`),
-  KEY `server_id` (`server_id`,`source`),
-  KEY `type` (`type`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_get`
--- 
-
-CREATE TABLE `mail_get` (
-  `mailget_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `type` varchar(255) default NULL,
-  `source_server` varchar(255) default NULL,
-  `source_username` varchar(255) default NULL,
-  `source_password` varchar(64) default NULL,
-  `source_delete` varchar(255) NOT NULL default 'y',
-  `source_read_all` varchar(255) NOT NULL default 'y',
-  `destination` varchar(255) default NULL,
-  `active` varchar(255) NOT NULL default 'y',
-  PRIMARY KEY  (`mailget_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `mail_mailinglist`
---
-
-CREATE TABLE `mail_mailinglist` (
-  `mailinglist_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `domain` varchar(255) NOT NULL DEFAULT '',
-  `listname` varchar(255) NOT NULL DEFAULT '',
-  `email` varchar(255) NOT NULL DEFAULT '',
-  `password` varchar(255) NOT NULL DEFAULT '',
-  PRIMARY KEY  (`mailinglist_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for Table `mail_relay_recipient`
---
-
-CREATE TABLE IF NOT EXISTS `mail_relay_recipient` (
-  `relay_recipient_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) NOT NULL DEFAULT '0',
-  `source` varchar(255) DEFAULT NULL,
-  `access` varchar(255) NOT NULL DEFAULT 'OK',
-  `active` varchar(255) NOT NULL DEFAULT 'y',
-  PRIMARY KEY (`relay_recipient_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_traffic`
--- 
-
-CREATE TABLE `mail_traffic` (
-  `traffic_id` int(11) unsigned NOT NULL auto_increment,
-  `mailuser_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `month` char(7) NOT NULL DEFAULT '',
-  `traffic` bigint(20) unsigned NOT NULL DEFAULT '0',
-  PRIMARY KEY  (`traffic_id`),
-  KEY `mailuser_id` (`mailuser_id`,`month`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_transport`
--- 
-
-CREATE TABLE `mail_transport` (
-  `transport_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `domain` varchar(255) NOT NULL default '',
-  `transport` varchar(255) NOT NULL DEFAULT '',
-  `sort_order` int(11) unsigned NOT NULL default '5',
-  `active` enum('n','y') NOT NULL DEFAULT 'n',
-  PRIMARY KEY  (`transport_id`),
-  KEY `server_id` (`server_id`,`transport`),
-  KEY `server_id_2` (`server_id`,`domain`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_user`
--- 
-
-CREATE TABLE `mail_user` (
-  `mailuser_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `email` varchar(255) NOT NULL default '',
-  `login` varchar(255) NOT NULL default '',
-  `password` varchar(255) NOT NULL default '',
-  `name` varchar(255) NOT NULL default '',
-  `uid` int(11) NOT NULL default '5000',
-  `gid` int(11) NOT NULL default '5000',
-  `maildir` varchar(255) NOT NULL default '',
-  `maildir_format` varchar(255) NOT NULL default 'maildir',
-  `quota` bigint(20) NOT NULL default '-1',
-  `cc` varchar(255) NOT NULL default '',
-  `sender_cc` varchar(255) NOT NULL default '',
-  `homedir` varchar(255) NOT NULL default '',
-  `autoresponder` enum('n','y') NOT NULL default 'n',
-  `autoresponder_start_date` datetime NULL default NULL,
-  `autoresponder_end_date` datetime NULL default NULL,
-  `autoresponder_subject` varchar(255) NOT NULL default 'Out of office reply',
-  `autoresponder_text` mediumtext NULL,
-  `move_junk` enum('n','y') NOT NULL default 'n',
-  `custom_mailfilter` mediumtext,
-  `postfix` enum('n','y') NOT NULL default 'y',
-  `greylisting` enum('n','y' ) NOT NULL DEFAULT 'n',
-  `access` enum('n','y') NOT NULL default 'y',
-  `disableimap` enum('n','y') NOT NULL default 'n',
-  `disablepop3` enum('n','y') NOT NULL default 'n',
-  `disabledeliver` enum('n','y') NOT NULL default 'n',
-  `disablesmtp` enum('n','y') NOT NULL default 'n',
-  `disablesieve` enum('n','y') NOT NULL default 'n',
-  `disablesieve-filter` enum('n','y') NOT NULL default 'n',
-  `disablelda` enum('n','y') NOT NULL default 'n',
-  `disablelmtp` enum('n','y') NOT NULL default 'n',
-  `disabledoveadm` enum('n','y') NOT NULL default 'n',
-  `last_quota_notification` date NULL default NULL,
-  `backup_interval` VARCHAR( 255 ) NOT NULL default 'none',
-  `backup_copies` INT NOT NULL DEFAULT '1',
-  PRIMARY KEY  (`mailuser_id`),
-  KEY `server_id` (`server_id`,`email`),
-  KEY `email_access` (`email`,`access`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `mail_user_filter`
--- 
-
-CREATE TABLE `mail_user_filter` (
-  `filter_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `mailuser_id` int(11) unsigned NOT NULL default '0',
-  `rulename` varchar(64) default NULL,
-  `source` varchar(255) default NULL,
-  `searchterm` varchar(255) default NULL,
-  `op` varchar(255) default NULL,
-  `action` varchar(255) default NULL,
-  `target` varchar(255) default NULL,
-  `active` enum('n','y') NOT NULL default 'y',
-  PRIMARY KEY  (`filter_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `monitor_data`
---
-
-CREATE TABLE `monitor_data` (
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `type` varchar(255) NOT NULL default '',
-  `created` int(11) unsigned NOT NULL default '0',
-  `data` mediumtext,
-  `state` enum('no_state','unknown','ok','info','warning','critical','error') NOT NULL DEFAULT 'unknown',
-  PRIMARY KEY (`server_id`,`type`,`created`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `openvz_ip`
---
-
-CREATE TABLE IF NOT EXISTS `openvz_ip` (
-  `ip_address_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) NOT NULL DEFAULT '0',
-  `ip_address` varchar(39) DEFAULT NULL,
-  `vm_id` int(11) NOT NULL DEFAULT '0',
-  `reserved` varchar(255) NOT NULL DEFAULT 'n',
-  `additional` varchar(255) NOT NULL DEFAULT 'n',
-  PRIMARY KEY (`ip_address_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
-
---
--- Dumping data for table `openvz_ip`
---
-
--- --------------------------------------------------------
-
---
--- Table structure for table `openvz_ostemplate`
---
-
-CREATE TABLE IF NOT EXISTS `openvz_ostemplate` (
-  `ostemplate_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `template_name` varchar(255) DEFAULT NULL,
-  `template_file` varchar(255) NOT NULL DEFAULT '',
-  `server_id` int(11) NOT NULL DEFAULT '0',
-  `allservers` varchar(255) NOT NULL DEFAULT 'y',
-  `active` varchar(255) NOT NULL DEFAULT 'y',
-  `description` text,
-  PRIMARY KEY (`ostemplate_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
-
---
--- Dumping data for table `openvz_ostemplate`
---
-
-INSERT INTO `openvz_ostemplate` (`ostemplate_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `template_file`, `server_id`, `allservers`, `active`, `description`) VALUES(1, 1, 1, 'riud', 'riud', '', 'Debian minimal', 'debian-minimal-x86', 1, 'y', 'y', 'Debian minimal image.');
-
--- --------------------------------------------------------
-
---
--- Table structure for table `openvz_template`
---
-
-CREATE TABLE IF NOT EXISTS `openvz_template` (
-  `template_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `template_name` varchar(255) DEFAULT NULL,
-  `diskspace` int(11) NOT NULL DEFAULT '0',
-  `traffic` int(11) NOT NULL DEFAULT '-1',
-  `bandwidth` int(11) NOT NULL DEFAULT '-1',
-  `ram` int(11) NOT NULL DEFAULT '0',
-  `ram_burst` int(11) NOT NULL DEFAULT '0',
-  `cpu_units` int(11) NOT NULL DEFAULT '1000',
-  `cpu_num` int(11) NOT NULL DEFAULT '4',
-  `cpu_limit` int(11) NOT NULL DEFAULT '400',
-  `io_priority` int(11) NOT NULL DEFAULT '4',
-  `active` varchar(255) NOT NULL DEFAULT 'y',
-  `description` text,
-  `numproc` varchar(255) DEFAULT NULL,
-  `numtcpsock` varchar(255) DEFAULT NULL,
-  `numothersock` varchar(255) DEFAULT NULL,
-  `vmguarpages` varchar(255) DEFAULT NULL,
-  `kmemsize` varchar(255) DEFAULT NULL,
-  `tcpsndbuf` varchar(255) DEFAULT NULL,
-  `tcprcvbuf` varchar(255) DEFAULT NULL,
-  `othersockbuf` varchar(255) DEFAULT NULL,
-  `dgramrcvbuf` varchar(255) DEFAULT NULL,
-  `oomguarpages` varchar(255) DEFAULT NULL,
-  `privvmpages` varchar(255) DEFAULT NULL,
-  `lockedpages` varchar(255) DEFAULT NULL,
-  `shmpages` varchar(255) DEFAULT NULL,
-  `physpages` varchar(255) DEFAULT NULL,
-  `numfile` varchar(255) DEFAULT NULL,
-  `avnumproc` varchar(255) DEFAULT NULL,
-  `numflock` varchar(255) DEFAULT NULL,
-  `numpty` varchar(255) DEFAULT NULL,
-  `numsiginfo` varchar(255) DEFAULT NULL,
-  `dcachesize` varchar(255) DEFAULT NULL,
-  `numiptent` varchar(255) DEFAULT NULL,
-  `swappages` varchar(255) DEFAULT NULL,
-  `hostname` varchar(255) DEFAULT NULL,
-  `nameserver` varchar(255) DEFAULT NULL,
-  `create_dns` varchar(1) NOT NULL DEFAULT 'n',
-  `capability` varchar(255) DEFAULT NULL,
-  `features` varchar(255) DEFAULT NULL,
-  `iptables` varchar(255) DEFAULT NULL,
-  `custom` text,
-  PRIMARY KEY (`template_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
-
---
--- Dumping data for table `openvz_template`
---
-
-INSERT INTO `openvz_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `diskspace`, `traffic`, `bandwidth`, `ram`, `ram_burst`, `cpu_units`, `cpu_num`, `cpu_limit`, `io_priority`, `active`, `description`, `numproc`, `numtcpsock`, `numothersock`, `vmguarpages`, `kmemsize`, `tcpsndbuf`, `tcprcvbuf`, `othersockbuf`, `dgramrcvbuf`, `oomguarpages`, `privvmpages`, `lockedpages`, `shmpages`, `physpages`, `numfile`, `avnumproc`, `numflock`, `numpty`, `numsiginfo`, `dcachesize`, `numiptent`, `swappages`, `hostname`, `nameserver`, `create_dns`, `capability`, `features`, `iptables`, `custom`) VALUES(1, 1, 1, 'riud', 'riud', '', 'small', 10, -1, -1, 256, 512, 1000, 4, 400, 4, 'y', '', '999999:999999', '7999992:7999992', '7999992:7999992', '65536:unlimited', '2147483646:2147483646', '214748160:396774400', '214748160:396774400', '214748160:396774400', '214748160:396774400', '65536:65536', '131072:139264', '999999:999999', '65536:65536', '0:2147483647', '23999976:23999976', '180:180', '999999:999999', '500000:500000', '999999:999999', '2147483646:2147483646', '999999:999999', '256000:256000', 'v{VEID}.test.tld', '8.8.8.8 8.8.4.4', 'n', '', '', '', '');
-
--- --------------------------------------------------------
-
---
--- Table structure for table `openvz_traffic`
---
-
-CREATE TABLE IF NOT EXISTS `openvz_traffic` (
-  `veid` int(11) NOT NULL DEFAULT '0',
-  `traffic_date` date NULL DEFAULT NULL,
-  `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
-  UNIQUE KEY (`veid`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
---
--- Dumping data for table `openvz_traffic`
---
-
-
--- --------------------------------------------------------
-
---
--- Table structure for table `openvz_vm`
---
-
-CREATE TABLE IF NOT EXISTS `openvz_vm` (
-  `vm_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) NOT NULL DEFAULT '0',
-  `veid` int(10) unsigned NOT NULL DEFAULT '0',
-  `ostemplate_id` int(11) NOT NULL DEFAULT '0',
-  `template_id` int(11) NOT NULL DEFAULT '0',
-  `ip_address` varchar(255) NOT NULL DEFAULT '',
-  `hostname` varchar(255) DEFAULT NULL,
-  `vm_password` varchar(255) DEFAULT NULL,
-  `start_boot` varchar(255) NOT NULL DEFAULT 'y',
-  `bootorder` int(11) NOT NULL DEFAULT '1',
-  `active` varchar(255) NOT NULL DEFAULT 'y',
-  `active_until_date` date NULL DEFAULT NULL,
-  `description` text,
-  `diskspace` int(11) NOT NULL DEFAULT '0',
-  `traffic` int(11) NOT NULL DEFAULT '-1',
-  `bandwidth` int(11) NOT NULL DEFAULT '-1',
-  `ram` int(11) NOT NULL DEFAULT '0',
-  `ram_burst` int(11) NOT NULL DEFAULT '0',
-  `cpu_units` int(11) NOT NULL DEFAULT '1000',
-  `cpu_num` int(11) NOT NULL DEFAULT '4',
-  `cpu_limit` int(11) NOT NULL DEFAULT '400',
-  `io_priority` int(11) NOT NULL DEFAULT '4',
-  `nameserver` varchar(255) NOT NULL DEFAULT '8.8.8.8 8.8.4.4',
-  `create_dns` varchar(1) NOT NULL DEFAULT 'n',
-  `capability` text,
-  `features` text,
-  `iptabless` text,
-  `config` mediumtext,
-  `custom` text,
-  PRIMARY KEY (`vm_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
-
---
--- Dumping data for table `openvz_vm`
---
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `remote_session`
--- 
-
-CREATE TABLE `remote_session` (
-  `remote_session` varchar(64) NOT NULL DEFAULT '',
-  `remote_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `remote_functions` text,
-  `client_login` tinyint(1) unsigned NOT NULL default '0',
-  `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
-  PRIMARY KEY  (`remote_session`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `remote_user`
--- 
-
-CREATE TABLE `remote_user` (
-  `remote_userid` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `remote_username` varchar(64) NOT NULL DEFAULT '',
-  `remote_password` varchar(64) NOT NULL DEFAULT '',
-  `remote_access` enum('y','n') NOT NULL DEFAULT 'y',
-  `remote_ips` TEXT,
-  `remote_functions` text,
-  PRIMARY KEY  (`remote_userid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `server`
--- 
-
-CREATE TABLE `server` (
-  `server_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `server_name` varchar(255) NOT NULL default '',
-  `mail_server` tinyint(1) NOT NULL default '0',
-  `web_server` tinyint(1) NOT NULL default '0',
-  `dns_server` tinyint(1) NOT NULL default '0',
-  `file_server` tinyint(1) NOT NULL default '0',
-  `db_server` tinyint(1) NOT NULL default '0',
-  `vserver_server` tinyint(1) NOT NULL default '0',
-  `proxy_server` tinyint(1) NOT NULL default '0',
-  `firewall_server` tinyint(1) NOT NULL default '0',
-  `xmpp_server` tinyint(1) NOT NULL default '0',
-  `config` text,
-  `updated` bigint(20) unsigned NOT NULL default '0',
-  `mirror_server_id` int(11) unsigned NOT NULL default '0',
-  `dbversion` int(11) unsigned NOT NULL default '1',
-  `active` tinyint(1) NOT NULL default '1',
-  PRIMARY KEY  (`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `server_ip`
--- 
-
-CREATE TABLE `server_ip` (
-  `server_ip_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `client_id` int(11) unsigned NOT NULL default '0',
-  `ip_type` enum(  'IPv4',  'IPv6' ) NOT NULL DEFAULT  'IPv4',
-  `ip_address` varchar(39) default NULL,
-  `virtualhost` enum('n','y') NOT NULL default 'y',
-  `virtualhost_port` varchar(255) default '80,443',
-  PRIMARY KEY  (`server_ip_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `server_ip_map`
--- 
-
-CREATE TABLE `server_ip_map` (
-  `server_ip_map_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `source_ip` varchar(15) DEFAULT NULL,
-  `destination_ip` varchar(35) DEFAULT '',
-  `active` enum('n','y') NOT NULL DEFAULT 'y',
-  PRIMARY KEY (`server_ip_map_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table  `server_php`
---
-
-CREATE TABLE `server_php` (
-  `server_php_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `client_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `name` varchar(255) DEFAULT NULL,
-  `php_fastcgi_binary` varchar(255) DEFAULT NULL,
-  `php_fastcgi_ini_dir` varchar(255) DEFAULT NULL,
-  `php_fpm_init_script` varchar(255) DEFAULT NULL,
-  `php_fpm_ini_dir` varchar(255) DEFAULT NULL,
-  `php_fpm_pool_dir` varchar(255) DEFAULT NULL,
-  `active` enum('n','y') NOT NULL DEFAULT 'y',
-  PRIMARY KEY (`server_php_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `shell_user`
---
-
-CREATE TABLE `shell_user` (
-  `shell_user_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `parent_domain_id` int(11) unsigned NOT NULL default '0',
-  `username` varchar(64) default NULL,
-  `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) default NULL,
-  `quota_size` bigint(20) NOT NULL default '-1',
-  `active` enum('n','y') NOT NULL default 'y',
-  `puser` varchar(255) default NULL,
-  `pgroup` varchar(255) default NULL,
-  `shell` varchar(255) NOT NULL default '/bin/bash',
-  `dir` varchar(255) default NULL,
-  `chroot` varchar(255) NOT NULL DEFAULT '',
-  `ssh_rsa` text,
-  PRIMARY KEY  (`shell_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `software_package`
--- 
-
-CREATE TABLE `software_package` (
-  `package_id` int(11) unsigned NOT NULL auto_increment,
-  `software_repo_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `package_name` varchar(64) NOT NULL DEFAULT '',
-  `package_title` varchar(64) NOT NULL DEFAULT '',
-  `package_description` text,
-  `package_version` varchar(8) default NULL,
-  `package_type` enum('ispconfig','app','web') NOT NULL default 'app',
-  `package_installable` enum('yes','no','key') NOT NULL default 'yes',
-  `package_requires_db` enum('no','mysql') NOT NULL default 'no',
-  `package_remote_functions` text,
-  `package_key` varchar(255) NOT NULL DEFAULT '',
-  `package_config` text,
-  PRIMARY KEY  (`package_id`),
-  UNIQUE KEY `package_name` (`package_name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `software_repo`
--- 
-
-CREATE TABLE `software_repo` (
-  `software_repo_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `repo_name` varchar(64) default NULL,
-  `repo_url` varchar(255) default NULL,
-  `repo_username` varchar(64) default NULL,
-  `repo_password` varchar(64) default NULL,
-  `active` enum('n','y') NOT NULL default 'y',
-  PRIMARY KEY  (`software_repo_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `software_update`
--- 
-
-CREATE TABLE `software_update` (
-  `software_update_id` int(11) unsigned NOT NULL auto_increment,
-  `software_repo_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `package_name` varchar(64) NOT NULL DEFAULT '',
-  `update_url` varchar(255) NOT NULL DEFAULT '',
-  `update_md5` varchar(255) NOT NULL DEFAULT '',
-  `update_dependencies` varchar(255) NOT NULL DEFAULT '',
-  `update_title` varchar(64) NOT NULL DEFAULT '',
-  `v1` tinyint(1) NOT NULL default '0',
-  `v2` tinyint(1) NOT NULL default '0',
-  `v3` tinyint(1) NOT NULL default '0',
-  `v4` tinyint(1) NOT NULL default '0',
-  `type` enum('full','update') NOT NULL default 'full',
-  PRIMARY KEY  (`software_update_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `software_update_inst`
--- 
-
-CREATE TABLE `software_update_inst` (
-  `software_update_inst_id` int(11) unsigned NOT NULL auto_increment,
-  `software_update_id` int(11) unsigned NOT NULL default '0',
-  `package_name` varchar(64) NOT NULL DEFAULT '',
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `status` enum('none','installing','installed','deleting','deleted','failed') NOT NULL default 'none',
-  PRIMARY KEY  (`software_update_inst_id`),
-  UNIQUE KEY `software_update_id` (`software_update_id`,`package_name`,`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `spamfilter_policy`
--- 
-
-CREATE TABLE `spamfilter_policy` (
-  `id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `policy_name` varchar(64) default NULL,
-  `virus_lover` enum('N','Y') default 'N',
-  `spam_lover` enum('N','Y') default 'N',
-  `banned_files_lover` enum('N','Y') default 'N',
-  `bad_header_lover` enum('N','Y') default 'N',
-  `bypass_virus_checks` enum('N','Y') default 'N',
-  `bypass_spam_checks` enum('N','Y') default 'N',
-  `bypass_banned_checks` enum('N','Y') default 'N',
-  `bypass_header_checks` enum('N','Y') default 'N',
-  `spam_modifies_subj` enum('N','Y') default 'N',
-  `virus_quarantine_to` varchar(255) default NULL,
-  `spam_quarantine_to` varchar(255) default NULL,
-  `banned_quarantine_to` varchar(255) default NULL,
-  `bad_header_quarantine_to` varchar(255) default NULL,
-  `clean_quarantine_to` varchar(255) default NULL,
-  `other_quarantine_to` varchar(255) default NULL,
-  `spam_tag_level` DECIMAL(5,2) default NULL,
-  `spam_tag2_level` DECIMAL(5,2) default NULL,
-  `spam_kill_level` DECIMAL(5,2) default NULL,
-  `spam_dsn_cutoff_level` DECIMAL(5,2) default NULL,
-  `spam_quarantine_cutoff_level` DECIMAL(5,2) default NULL,
-  `addr_extension_virus` varchar(64) default NULL,
-  `addr_extension_spam` varchar(64) default NULL,
-  `addr_extension_banned` varchar(64) default NULL,
-  `addr_extension_bad_header` varchar(64) default NULL,
-  `warnvirusrecip` enum('N','Y') default 'N',
-  `warnbannedrecip` enum('N','Y') default 'N',
-  `warnbadhrecip` enum('N','Y') default 'N',
-  `newvirus_admin` varchar(64) default NULL,
-  `virus_admin` varchar(64) default NULL,
-  `banned_admin` varchar(64) default NULL,
-  `bad_header_admin` varchar(64) default NULL,
-  `spam_admin` varchar(64) default NULL,
-  `spam_subject_tag` varchar(64) default NULL,
-  `spam_subject_tag2` varchar(64) default NULL,
-  `message_size_limit` int(11) unsigned default NULL,
-  `banned_rulenames` varchar(64) default NULL,
-  `policyd_quota_in` int(11) NOT NULL DEFAULT  '-1',
-  `policyd_quota_in_period` int(11) NOT NULL DEFAULT  '24',
-  `policyd_quota_out` int(11) NOT NULL DEFAULT  '-1',
-  `policyd_quota_out_period` int(11) NOT NULL DEFAULT  '24',
-  `policyd_greylist` ENUM(  'Y',  'N' ) NOT NULL DEFAULT  'N',
-  PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `spamfilter_users`
--- 
-
-CREATE TABLE `spamfilter_users` (
-  `id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `priority` tinyint(3) unsigned NOT NULL default '7',
-  `policy_id` int(11) unsigned NOT NULL default '1',
-  `email` varchar(255) NOT NULL DEFAULT '',
-  `fullname` varchar(64) default NULL,
-  `local` varchar(1) default NULL,
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `email` (`email`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `spamfilter_wblist`
--- 
-
-CREATE TABLE `spamfilter_wblist` (
-  `wblist_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
-  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `wb` enum('W','B') NOT NULL default 'W',
-  `rid` int(11) unsigned NOT NULL DEFAULT '0',
-  `email` varchar(255) NOT NULL DEFAULT '',
-  `priority` tinyint(3) unsigned NOT NULL DEFAULT '0',
-  `active` enum('y','n') NOT NULL default 'y',
-  PRIMARY KEY  (`wblist_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `support_message`
--- 
-
-CREATE TABLE `support_message` (
-  `support_message_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `recipient_id` int(11) unsigned NOT NULL default '0',
-  `sender_id` int(11) unsigned NOT NULL default '0',
-  `subject` varchar(255) default NULL,
-  `message` text default NULL,
-  `tstamp` int(11) NOT NULL default '0',
-  PRIMARY KEY  (`support_message_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `sys_config`
---
-
-CREATE TABLE `sys_config` (
-  `group` varchar(64) NOT NULL DEFAULT '',
-  `name` varchar(64) NOT NULL DEFAULT '',
-  `value` varchar(255) NOT NULL DEFAULT '',
-  PRIMARY KEY (`group`, `name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
-
--- --------------------------------------------------------
-
---
--- Table structure for table `sys_cron`
---
-
-CREATE TABLE IF NOT EXISTS `sys_cron` (
-  `name` varchar(50) NOT NULL DEFAULT '',
-  `last_run` datetime NULL DEFAULT NULL,
-  `next_run` datetime NULL DEFAULT NULL,
-  `running` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
-  PRIMARY KEY (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
-
--- --------------------------------------------------------
-
---
--- Table structure for table  `sys_datalog`
---
-
-CREATE TABLE `sys_datalog` (
-  `datalog_id` int(11) unsigned NOT NULL auto_increment,
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `dbtable` varchar(255) NOT NULL default '',
-  `dbidx` varchar(255) NOT NULL default '',
-  `action` char(1) NOT NULL default '',
-  `tstamp` int(11) NOT NULL default '0',
-  `user` varchar(255) NOT NULL default '',
-  `data` longtext,
-  `status` set('pending','ok','warning','error') NOT NULL default 'ok',
-  `error` mediumtext,
-  `session_id` varchar(64) NOT NULL DEFAULT '',
-  PRIMARY KEY  (`datalog_id`),
-  KEY `server_id` (`server_id`,`status`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `sys_dbsync`
--- 
-
-CREATE TABLE `sys_dbsync` (
-  `id` int(11) unsigned NOT NULL auto_increment,
-  `jobname` varchar(64) NOT NULL default '',
-  `sync_interval_minutes` int(11) unsigned NOT NULL default '0',
-  `db_type` varchar(16) NOT NULL default '',
-  `db_host` varchar(255) NOT NULL default '',
-  `db_name` varchar(64) NOT NULL default '',
-  `db_username` varchar(64) NOT NULL default '',
-  `db_password` varchar(64) NOT NULL default '',
-  `db_tables` varchar(255) NOT NULL default 'admin,forms',
-  `empty_datalog` int(11) unsigned NOT NULL default '0',
-  `sync_datalog_external` int(11) unsigned NOT NULL default '0',
-  `active` tinyint(1) NOT NULL default '1',
-  `last_datalog_id` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  KEY `last_datalog_id` (`last_datalog_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `sys_filesync`
--- 
-
-CREATE TABLE `sys_filesync` (
-  `id` int(11) unsigned NOT NULL auto_increment,
-  `jobname` varchar(64) NOT NULL default '',
-  `sync_interval_minutes` int(11) unsigned NOT NULL default '0',
-  `ftp_host` varchar(255) NOT NULL default '',
-  `ftp_path` varchar(255) NOT NULL default '',
-  `ftp_username` varchar(64) NOT NULL default '',
-  `ftp_password` varchar(64) NOT NULL default '',
-  `local_path` varchar(255) NOT NULL default '',
-  `wput_options` varchar(255) NOT NULL default '--timestamping --reupload --dont-continue',
-  `active` tinyint(1) NOT NULL default '1',
-  PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `sys_group`
--- 
-
-CREATE TABLE `sys_group` (
-  `groupid` int(11) unsigned NOT NULL auto_increment,
-  `name` varchar(64) NOT NULL default '',
-  `description` text,
-  `client_id` int(11) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`groupid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `sys_ini`
--- 
-
-CREATE TABLE `sys_ini` (
-  `sysini_id` int(11) unsigned NOT NULL auto_increment,
-  `config` longtext,
-  `default_logo` text NOT NULL,
-  `custom_logo` text NOT NULL,
-  PRIMARY KEY  (`sysini_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `sys_log`
--- 
-
-CREATE TABLE `sys_log` (
-  `syslog_id` int(11) unsigned NOT NULL auto_increment,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `datalog_id` int(11) unsigned NOT NULL default '0',
-  `loglevel` tinyint(4) NOT NULL default '0',
-  `tstamp` int(11) unsigned NOT NULL DEFAULT '0',
-  `message` text,
-  PRIMARY KEY  (`syslog_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `sys_remoteaction`
---
-
-CREATE TABLE `sys_remoteaction` (
-  `action_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `tstamp` int(11) NOT NULL DEFAULT '0',
-  `action_type` varchar(20) NOT NULL DEFAULT '',
-  `action_param` mediumtext,
-  `action_state` enum('pending','ok','warning','error') NOT NULL DEFAULT 'pending',
-  `response` mediumtext,
-  PRIMARY KEY (`action_id`),
-  KEY `server_id` (`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `sys_session`
---
-
-CREATE TABLE `sys_session` (
-  `session_id` varchar(64) NOT NULL DEFAULT '',
-  `date_created` datetime NULL DEFAULT NULL,
-  `last_updated` datetime NULL DEFAULT NULL,
-  `permanent` enum('n','y') NOT NULL DEFAULT 'n',
-  `session_data` longtext,
-  PRIMARY KEY (`session_id`),
-  KEY `last_updated` (`last_updated`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `sys_theme`
---
-
-CREATE TABLE IF NOT EXISTS `sys_theme` (
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `var_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `tpl_name` varchar(32) NOT NULL DEFAULT '',
-  `username` varchar(64) NOT NULL DEFAULT '',
-  `logo_url` varchar(255) NOT NULL DEFAULT '',
-  PRIMARY KEY (`var_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `sys_user`
--- 
-
-CREATE TABLE `sys_user` (
-  `userid` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '1' COMMENT 'Created by userid',
-  `sys_groupid` int(11) unsigned NOT NULL default '1' COMMENT 'Created by groupid',
-  `sys_perm_user` varchar(5) NOT NULL default 'riud',
-  `sys_perm_group` varchar(5) NOT NULL default 'riud',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `username` varchar(64) NOT NULL default '',
-  `passwort` varchar(64) NOT NULL default '',
-  `modules` varchar(255) NOT NULL default '',
-  `startmodule` varchar(255) NOT NULL default '',
-  `app_theme` varchar(32) NOT NULL default 'default',
-  `typ` varchar(16) NOT NULL default 'user',
-  `active` tinyint(1) NOT NULL default '1',
-  `language` varchar(2) NOT NULL default 'en',
-  `groups` TEXT,
-  `default_group` int(11) unsigned NOT NULL default '0',
-  `client_id` int(11) unsigned NOT NULL default '0',
-  `id_rsa` VARCHAR( 2000 ) NOT NULL default '',
-  `ssh_rsa` VARCHAR( 600 ) NOT NULL default '',
-  `lost_password_function` tinyint(1) NOT NULL default '1',
-  `lost_password_hash` VARCHAR(50) NOT NULL default '',
-  `lost_password_reqtime` DATETIME NULL default NULL,
-  PRIMARY KEY  (`userid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `webdav_user`
---
-
-CREATE TABLE `webdav_user` (
-  `webdav_user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `parent_domain_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `username` varchar(64) DEFAULT NULL,
-  `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) DEFAULT NULL,
-  `active` enum('n','y') NOT NULL DEFAULT 'y',
-  `dir` varchar(255) DEFAULT NULL,
-  PRIMARY KEY (`webdav_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `web_backup`
---
-
-CREATE TABLE `web_backup` (
-  `backup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-  `server_id` int(10) unsigned NOT NULL DEFAULT '0',
-  `parent_domain_id` int(10) unsigned NOT NULL DEFAULT '0',
-  `backup_type` enum('web','mysql','mongodb') NOT NULL DEFAULT 'web',
-  `backup_mode` varchar(64) NOT NULL DEFAULT  '',
-  `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
-  `filename` varchar(255) NOT NULL DEFAULT '',
-  `filesize` VARCHAR(20) NOT NULL DEFAULT '',
-  PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `web_database`
---
-
-CREATE TABLE `web_database` (
-  `database_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) unsigned NOT NULL DEFAULT '0',
-  `parent_domain_id` int(11) unsigned NOT NULL DEFAULT  '0',
-  `type` varchar(16) NOT NULL DEFAULT 'y',
-  `database_name` varchar(64) DEFAULT NULL,
-  `database_name_prefix` varchar(50) NOT NULL default '',
-  `database_quota` int(11) DEFAULT NULL,
-  `quota_exceeded` enum('n','y') NOT NULL DEFAULT 'n',
-  `last_quota_notification` date NULL default NULL,
-  `database_user_id` int(11) unsigned DEFAULT NULL,
-  `database_ro_user_id` int(11) unsigned DEFAULT NULL,
-  `database_charset` varchar(64) DEFAULT NULL,
-  `remote_access` enum('n','y') NOT NULL DEFAULT 'y',
-  `remote_ips` text,
-  `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
-  `backup_copies` INT NOT NULL DEFAULT '1',
-  `active` enum('n','y') NOT NULL DEFAULT 'y',
-  PRIMARY KEY (`database_id`),
-  KEY `database_user_id` (`database_user_id`),
-  KEY `database_ro_user_id` (`database_ro_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `web_database_user`
---
-
-CREATE TABLE IF NOT EXISTS `web_database_user` (
-  `database_user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) UNSIGNED NOT NULL DEFAULT '0',
-  `database_user` varchar(64) DEFAULT NULL,
-  `database_user_prefix` varchar(50) NOT NULL default '',
-  `database_password` varchar(64) DEFAULT NULL,
-  `database_password_mongo` varchar(32) DEFAULT NULL,
-  PRIMARY KEY (`database_user_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table  `web_domain`
--- 
-
-CREATE TABLE `web_domain` (
-  `domain_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) default NULL,
-  `sys_perm_group` varchar(5) default NULL,
-  `sys_perm_other` varchar(5) default NULL,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `ip_address` varchar(39) default NULL,
-  `ipv6_address` VARCHAR( 255 ) default NULL,
-  `domain` varchar(255) default NULL,
-  `type` varchar(32) default NULL,
-  `parent_domain_id` int(11) unsigned NOT NULL default '0',
-  `vhost_type` varchar(32) default NULL,
-  `document_root` varchar(255) default NULL,
-  `web_folder` varchar(100) default NULL,
-  `system_user` varchar(255) default NULL,
-  `system_group` varchar(255) default NULL,
-  `hd_quota` bigint(20) NOT NULL default '0',
-  `traffic_quota` bigint(20) NOT NULL default '-1',
-  `cgi` enum('n','y') NOT NULL default 'y',
-  `ssi` enum('n','y') NOT NULL default 'y',
-  `suexec` enum('n','y') NOT NULL default 'y',
-  `errordocs` tinyint(1) NOT NULL default '1',
-  `is_subdomainwww` tinyint(1) NOT NULL default '1',
-  `subdomain` enum('none','www','*') NOT NULL default 'none',
-  `php` varchar(32) NOT NULL default 'y',
-  `ruby` enum('n','y') NOT NULL default 'n',
-  `python` enum('n','y') NOT NULL default 'n',
-  `perl` enum('n','y') NOT NULL default 'n',
-  `redirect_type` varchar(255) default NULL,
-  `redirect_path` varchar(255) default NULL,
-  `seo_redirect` varchar(255) default NULL,
-  `rewrite_to_https` ENUM('y','n') NOT NULL DEFAULT 'n',
-  `ssl` enum('n','y') NOT NULL default 'n',
-  `ssl_letsencrypt` enum('n','y') NOT NULL DEFAULT 'n',
-  `ssl_letsencrypt_exclude` enum('n','y') NOT NULL DEFAULT 'n',
-  `ssl_state` varchar(255) NULL,
-  `ssl_locality` varchar(255) NULL,
-  `ssl_organisation` varchar(255) NULL,
-  `ssl_organisation_unit` varchar(255) NULL,
-  `ssl_country` varchar(255) NULL,
-  `ssl_domain` varchar(255) NULL,
-  `ssl_request` mediumtext NULL,
-  `ssl_cert` mediumtext NULL,
-  `ssl_bundle` mediumtext NULL,
-  `ssl_key` mediumtext NULL,
-  `ssl_action` varchar(16) NULL,
-  `stats_password` varchar(255) default NULL,
-  `stats_type` varchar(255) default 'awstats',
-  `allow_override` varchar(255) NOT NULL default 'All',
-  `apache_directives` mediumtext,
-  `nginx_directives` mediumtext,
-  `php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'y',
-  `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n',
-  `pm` enum('static','dynamic','ondemand') NOT NULL DEFAULT 'dynamic',
-  `pm_max_children` int(11) NOT NULL DEFAULT '10',
-  `pm_start_servers` int(11) NOT NULL DEFAULT '2',
-  `pm_min_spare_servers` int(11) NOT NULL DEFAULT '1',
-  `pm_max_spare_servers` int(11) NOT NULL DEFAULT '5',
-  `pm_process_idle_timeout` int(11) NOT NULL DEFAULT '10',
-  `pm_max_requests` int(11) NOT NULL DEFAULT '0',
-  `php_open_basedir` mediumtext,
-  `custom_php_ini` mediumtext,
-  `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
-  `backup_copies` INT NOT NULL DEFAULT '1',
-  `backup_excludes` mediumtext,
-  `active` enum('n','y') NOT NULL default 'y',
-  `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
-  `fastcgi_php_version` varchar(255) DEFAULT NULL,
-  `proxy_directives` mediumtext,
-  `enable_spdy` ENUM('y','n') NULL DEFAULT 'n',
-  `last_quota_notification` date NULL default NULL,
-  `rewrite_rules` mediumtext,
-  `added_date` date NULL DEFAULT NULL,
-  `added_by` varchar(255) DEFAULT NULL,
-  `directive_snippets_id` int(11) unsigned NOT NULL default '0',
-  `enable_pagespeed` ENUM('y','n') NOT NULL DEFAULT 'n',
-  `http_port` int(11) unsigned NOT NULL DEFAULT '80',
-  `https_port` int(11) unsigned NOT NULL DEFAULT '443',
-  `folder_directive_snippets` text,
-  `log_retention` int(11) NOT NULL DEFAULT '10',
-  PRIMARY KEY  (`domain_id`),
-  UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `web_folder`
---
-
-CREATE TABLE IF NOT EXISTS `web_folder` (
-  `web_folder_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) NOT NULL DEFAULT '0',
-  `parent_domain_id` int(11) NOT NULL DEFAULT '0',
-  `path` varchar(255) DEFAULT NULL,
-  `active` varchar(255) NOT NULL DEFAULT 'y',
-  PRIMARY KEY (`web_folder_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
---
--- Dumping data for table `web_folder`
---
-
-
--- --------------------------------------------------------
-
---
--- Table structure for table `web_folder_user`
---
-
-CREATE TABLE IF NOT EXISTS `web_folder_user` (
-  `web_folder_user_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `sys_userid` int(11) NOT NULL DEFAULT '0',
-  `sys_groupid` int(11) NOT NULL DEFAULT '0',
-  `sys_perm_user` varchar(5) DEFAULT NULL,
-  `sys_perm_group` varchar(5) DEFAULT NULL,
-  `sys_perm_other` varchar(5) DEFAULT NULL,
-  `server_id` int(11) NOT NULL DEFAULT '0',
-  `web_folder_id` int(11) NOT NULL DEFAULT '0',
-  `username` varchar(255) DEFAULT NULL,
-  `password` varchar(255) DEFAULT NULL,
-  `active` varchar(255) NOT NULL DEFAULT 'y',
-  PRIMARY KEY (`web_folder_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
---
--- Dumping data for table `web_folder_user`
---
-
--- --------------------------------------------------------
-
---
--- Table structure for table  `web_traffic`
---
-
-CREATE TABLE `web_traffic` (
-  `hostname` varchar(255) NOT NULL DEFAULT '',
-  `traffic_date` date NULL DEFAULT NULL,
-  `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
-  UNIQUE KEY  (`hostname`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `xmpp_domain`
---
-
-CREATE TABLE `xmpp_domain` (
-  `domain_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `domain` varchar(255) NOT NULL default '',
-
-  `management_method` ENUM( 'normal', 'maildomain' ) NOT NULL default 'normal',
-  `public_registration` ENUM( 'n', 'y' ) NOT NULL default 'n',
-  `registration_url` varchar(255) NOT NULL DEFAULT '',
-  `registration_message` varchar(255) NOT NULL DEFAULT '',
-  `domain_admins` text,
-
-  `use_pubsub` enum('n','y') NOT NULL DEFAULT 'n',
-  `use_proxy` enum('n','y') NOT NULL DEFAULT 'n',
-  `use_anon_host` enum('n','y') NOT NULL DEFAULT 'n',
-
-  `use_vjud` enum('n','y') NOT NULL DEFAULT 'n',
-  `vjud_opt_mode` enum('in', 'out') NOT NULL DEFAULT 'in',
-
-  `use_muc_host` enum('n','y') NOT NULL DEFAULT 'n',
-  `muc_name` varchar(30) NOT NULL DEFAULT '',
-  `muc_restrict_room_creation` enum('n', 'y', 'm') NOT NULL DEFAULT 'm',
-  `muc_admins` text,
-  `use_pastebin` enum('n','y') NOT NULL DEFAULT 'n',
-  `pastebin_expire_after` int(3) NOT NULL DEFAULT 48,
-  `pastebin_trigger` varchar(10) NOT NULL DEFAULT '!paste',
-  `use_http_archive` enum('n','y') NOT NULL DEFAULT 'n',
-  `http_archive_show_join` enum('n', 'y') NOT NULL DEFAULT 'n',
-  `http_archive_show_status` enum('n', 'y') NOT NULL DEFAULT 'n',
-  `use_status_host` enum('n','y') NOT NULL DEFAULT 'n',
-
-  `ssl_state` varchar(255) NULL,
-  `ssl_locality` varchar(255) NULL,
-  `ssl_organisation` varchar(255) NULL,
-  `ssl_organisation_unit` varchar(255) NULL,
-  `ssl_country` varchar(255) NULL,
-  `ssl_email` varchar(255) NULL,
-  `ssl_request` mediumtext NULL,
-  `ssl_cert` mediumtext NULL,
-  `ssl_bundle` mediumtext NULL,
-  `ssl_key` mediumtext NULL,
-  `ssl_action` varchar(16) NULL,
-
-  `active` enum('n','y') NOT NULL DEFAULT 'n',
-  PRIMARY KEY  (`domain_id`),
-  KEY `server_id` (`server_id`,`domain`),
-  KEY `domain_active` (`domain`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table  `xmpp_user`
---
-
-CREATE TABLE `xmpp_user` (
-  `xmppuser_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL default '',
-  `sys_perm_group` varchar(5) NOT NULL default '',
-  `sys_perm_other` varchar(5) NOT NULL default '',
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `jid` varchar(255) NOT NULL default '',
-  `password` varchar(255) NOT NULL default '',
-  `active` enum('n','y') NOT NULL DEFAULT 'n',
-  PRIMARY KEY  (`xmppuser_id`),
-  KEY `server_id` (`server_id`,`jid`),
-  KEY `jid_active` (`jid`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
--- --------------------------------------------------------
--- --------------------------------------------------------
--- DB-DATA
--- --------------------------------------------------------
--- --------------------------------------------------------
-
---
--- Dumping data for table `aps_settings`
---
-
-INSERT INTO `aps_settings` (`id`, `name`, `value`) VALUES(1, 'ignore-php-extension', '');
-INSERT INTO `aps_settings` (`id`, `name`, `value`) VALUES(2, 'ignore-php-configuration', '');
-INSERT INTO `aps_settings` (`id`, `name`, `value`) VALUES(3, 'ignore-webserver-module', '');
-
--- --------------------------------------------------------
-
---
--- Dumping data for table `country`
---
-
-INSERT INTO `country` (`iso`, `name`, `printable_name`, `iso3`, `numcode`, `eu`) VALUES
-('AF', 'AFGHANISTAN', 'Afghanistan', 'AFG', 4, 'n'),
-('AL', 'ALBANIA', 'Albania', 'ALB', 8, 'n'),
-('DZ', 'ALGERIA', 'Algeria', 'DZA', 12, 'n'),
-('AS', 'AMERICAN SAMOA', 'American Samoa', 'ASM', 16, 'n'),
-('AD', 'ANDORRA', 'Andorra', 'AND', 20, 'n'),
-('AO', 'ANGOLA', 'Angola', 'AGO', 24, 'n'),
-('AI', 'ANGUILLA', 'Anguilla', 'AIA', 660, 'n'),
-('AQ', 'ANTARCTICA', 'Antarctica', NULL, NULL, 'n'),
-('AG', 'ANTIGUA AND BARBUDA', 'Antigua and Barbuda', 'ATG', 28, 'n'),
-('AR', 'ARGENTINA', 'Argentina', 'ARG', 32, 'n'),
-('AM', 'ARMENIA', 'Armenia', 'ARM', 51, 'n'),
-('AW', 'ARUBA', 'Aruba', 'ABW', 533, 'n'),
-('AU', 'AUSTRALIA', 'Australia', 'AUS', 36, 'n'),
-('AT', 'AUSTRIA', 'Austria', 'AUT', 40, 'y'),
-('AZ', 'AZERBAIJAN', 'Azerbaijan', 'AZE', 31, 'n'),
-('BS', 'BAHAMAS', 'Bahamas', 'BHS', 44, 'n'),
-('BH', 'BAHRAIN', 'Bahrain', 'BHR', 48, 'n'),
-('BD', 'BANGLADESH', 'Bangladesh', 'BGD', 50, 'n'),
-('BB', 'BARBADOS', 'Barbados', 'BRB', 52, 'n'),
-('BY', 'BELARUS', 'Belarus', 'BLR', 112, 'n'),
-('BE', 'BELGIUM', 'Belgium', 'BEL', 56, 'y'),
-('BZ', 'BELIZE', 'Belize', 'BLZ', 84, 'n'),
-('BJ', 'BENIN', 'Benin', 'BEN', 204, 'n'),
-('BM', 'BERMUDA', 'Bermuda', 'BMU', 60, 'n'),
-('BT', 'BHUTAN', 'Bhutan', 'BTN', 64, 'n'),
-('BO', 'BOLIVIA', 'Bolivia', 'BOL', 68, 'n'),
-('BA', 'BOSNIA AND HERZEGOVINA', 'Bosnia and Herzegovina', 'BIH', 70, 'n'),
-('BW', 'BOTSWANA', 'Botswana', 'BWA', 72, 'n'),
-('BV', 'BOUVET ISLAND', 'Bouvet Island', NULL, NULL, 'n'),
-('BR', 'BRAZIL', 'Brazil', 'BRA', 76, 'n'),
-('IO', 'BRITISH INDIAN OCEAN TERRITORY', 'British Indian Ocean Territory', NULL, NULL, 'n'),
-('BN', 'BRUNEI DARUSSALAM', 'Brunei Darussalam', 'BRN', 96, 'n'),
-('BG', 'BULGARIA', 'Bulgaria', 'BGR', 100, 'y'),
-('BF', 'BURKINA FASO', 'Burkina Faso', 'BFA', 854, 'n'),
-('BI', 'BURUNDI', 'Burundi', 'BDI', 108, 'n'),
-('KH', 'CAMBODIA', 'Cambodia', 'KHM', 116, 'n'),
-('CM', 'CAMEROON', 'Cameroon', 'CMR', 120, 'n'),
-('CA', 'CANADA', 'Canada', 'CAN', 124, 'n'),
-('CV', 'CAPE VERDE', 'Cape Verde', 'CPV', 132, 'n'),
-('KY', 'CAYMAN ISLANDS', 'Cayman Islands', 'CYM', 136, 'n'),
-('CF', 'CENTRAL AFRICAN REPUBLIC', 'Central African Republic', 'CAF', 140, 'n'),
-('TD', 'CHAD', 'Chad', 'TCD', 148, 'n'),
-('CL', 'CHILE', 'Chile', 'CHL', 152, 'n'),
-('CN', 'CHINA', 'China', 'CHN', 156, 'n'),
-('CX', 'CHRISTMAS ISLAND', 'Christmas Island', NULL, NULL, 'n'),
-('CC', 'COCOS (KEELING) ISLANDS', 'Cocos (Keeling) Islands', NULL, NULL, 'n'),
-('CO', 'COLOMBIA', 'Colombia', 'COL', 170, 'n'),
-('KM', 'COMOROS', 'Comoros', 'COM', 174, 'n'),
-('CG', 'CONGO', 'Congo', 'COG', 178, 'n'),
-('CD', 'CONGO, THE DEMOCRATIC REPUBLIC OF THE', 'Congo, the Democratic Republic of the', 'COD', 180, 'n'),
-('CK', 'COOK ISLANDS', 'Cook Islands', 'COK', 184, 'n'),
-('CR', 'COSTA RICA', 'Costa Rica', 'CRI', 188, 'n'),
-('CI', 'COTE D''IVOIRE', 'Cote D''Ivoire', 'CIV', 384, 'n'),
-('HR', 'CROATIA', 'Croatia', 'HRV', 191, 'y'),
-('CU', 'CUBA', 'Cuba', 'CUB', 192, 'n'),
-('CY', 'CYPRUS', 'Cyprus', 'CYP', 196, 'y'),
-('CZ', 'CZECH REPUBLIC', 'Czech Republic', 'CZE', 203, 'y'),
-('DK', 'DENMARK', 'Denmark', 'DNK', 208, 'y'),
-('DJ', 'DJIBOUTI', 'Djibouti', 'DJI', 262, 'n'),
-('DM', 'DOMINICA', 'Dominica', 'DMA', 212, 'n'),
-('DO', 'DOMINICAN REPUBLIC', 'Dominican Republic', 'DOM', 214, 'n'),
-('EC', 'ECUADOR', 'Ecuador', 'ECU', 218, 'n'),
-('EG', 'EGYPT', 'Egypt', 'EGY', 818, 'n'),
-('SV', 'EL SALVADOR', 'El Salvador', 'SLV', 222, 'n'),
-('GQ', 'EQUATORIAL GUINEA', 'Equatorial Guinea', 'GNQ', 226, 'n'),
-('ER', 'ERITREA', 'Eritrea', 'ERI', 232, 'n'),
-('EE', 'ESTONIA', 'Estonia', 'EST', 233, 'y'),
-('ET', 'ETHIOPIA', 'Ethiopia', 'ETH', 231, 'n'),
-('FK', 'FALKLAND ISLANDS (MALVINAS)', 'Falkland Islands (Malvinas)', 'FLK', 238, 'n'),
-('FO', 'FAROE ISLANDS', 'Faroe Islands', 'FRO', 234, 'n'),
-('FJ', 'FIJI', 'Fiji', 'FJI', 242, 'n'),
-('FI', 'FINLAND', 'Finland', 'FIN', 246, 'y'),
-('FR', 'FRANCE', 'France', 'FRA', 250, 'y'),
-('GF', 'FRENCH GUIANA', 'French Guiana', 'GUF', 254, 'n'),
-('PF', 'FRENCH POLYNESIA', 'French Polynesia', 'PYF', 258, 'n'),
-('TF', 'FRENCH SOUTHERN TERRITORIES', 'French Southern Territories', NULL, NULL, 'n'),
-('GA', 'GABON', 'Gabon', 'GAB', 266, 'n'),
-('GM', 'GAMBIA', 'Gambia', 'GMB', 270, 'n'),
-('GE', 'GEORGIA', 'Georgia', 'GEO', 268, 'n'),
-('DE', 'GERMANY', 'Germany', 'DEU', 276, 'y'),
-('GH', 'GHANA', 'Ghana', 'GHA', 288, 'n'),
-('GI', 'GIBRALTAR', 'Gibraltar', 'GIB', 292, 'n'),
-('GR', 'GREECE', 'Greece', 'GRC', 300, 'y'),
-('GL', 'GREENLAND', 'Greenland', 'GRL', 304, 'n'),
-('GD', 'GRENADA', 'Grenada', 'GRD', 308, 'n'),
-('GP', 'GUADELOUPE', 'Guadeloupe', 'GLP', 312, 'n'),
-('GU', 'GUAM', 'Guam', 'GUM', 316, 'n'),
-('GT', 'GUATEMALA', 'Guatemala', 'GTM', 320, 'n'),
-('GN', 'GUINEA', 'Guinea', 'GIN', 324, 'n'),
-('GW', 'GUINEA-BISSAU', 'Guinea-Bissau', 'GNB', 624, 'n'),
-('GY', 'GUYANA', 'Guyana', 'GUY', 328, 'n'),
-('HT', 'HAITI', 'Haiti', 'HTI', 332, 'n'),
-('HM', 'HEARD ISLAND AND MCDONALD ISLANDS', 'Heard Island and Mcdonald Islands', NULL, NULL, 'n'),
-('VA', 'HOLY SEE (VATICAN CITY STATE)', 'Holy See (Vatican City State)', 'VAT', 336, 'n'),
-('HN', 'HONDURAS', 'Honduras', 'HND', 340, 'n'),
-('HK', 'HONG KONG', 'Hong Kong', 'HKG', 344, 'n'),
-('HU', 'HUNGARY', 'Hungary', 'HUN', 348, 'y'),
-('IS', 'ICELAND', 'Iceland', 'ISL', 352, 'n'),
-('IN', 'INDIA', 'India', 'IND', 356, 'n'),
-('ID', 'INDONESIA', 'Indonesia', 'IDN', 360, 'n'),
-('IR', 'IRAN, ISLAMIC REPUBLIC OF', 'Iran, Islamic Republic of', 'IRN', 364, 'n'),
-('IQ', 'IRAQ', 'Iraq', 'IRQ', 368, 'n'),
-('IE', 'IRELAND', 'Ireland', 'IRL', 372, 'y'),
-('IL', 'ISRAEL', 'Israel', 'ISR', 376, 'n'),
-('IT', 'ITALY', 'Italy', 'ITA', 380, 'y'),
-('JM', 'JAMAICA', 'Jamaica', 'JAM', 388, 'n'),
-('JP', 'JAPAN', 'Japan', 'JPN', 392, 'n'),
-('JO', 'JORDAN', 'Jordan', 'JOR', 400, 'n'),
-('KZ', 'KAZAKHSTAN', 'Kazakhstan', 'KAZ', 398, 'n'),
-('KE', 'KENYA', 'Kenya', 'KEN', 404, 'n'),
-('KI', 'KIRIBATI', 'Kiribati', 'KIR', 296, 'n'),
-('KP', 'KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF', 'Korea, Democratic People''s Republic of', 'PRK', 408, 'n'),
-('KR', 'KOREA, REPUBLIC OF', 'Korea, Republic of', 'KOR', 410, 'n'),
-('KW', 'KUWAIT', 'Kuwait', 'KWT', 414, 'n'),
-('KG', 'KYRGYZSTAN', 'Kyrgyzstan', 'KGZ', 417, 'n'),
-('LA', 'LAO PEOPLE''S DEMOCRATIC REPUBLIC', 'Lao People''s Democratic Republic', 'LAO', 418, 'n'),
-('LV', 'LATVIA', 'Latvia', 'LVA', 428, 'y'),
-('LB', 'LEBANON', 'Lebanon', 'LBN', 422, 'n'),
-('LS', 'LESOTHO', 'Lesotho', 'LSO', 426, 'n'),
-('LR', 'LIBERIA', 'Liberia', 'LBR', 430, 'n'),
-('LY', 'LIBYAN ARAB JAMAHIRIYA', 'Libyan Arab Jamahiriya', 'LBY', 434, 'n'),
-('LI', 'LIECHTENSTEIN', 'Liechtenstein', 'LIE', 438, 'n'),
-('LT', 'LITHUANIA', 'Lithuania', 'LTU', 440, 'y'),
-('LU', 'LUXEMBOURG', 'Luxembourg', 'LUX', 442, 'y'),
-('MO', 'MACAO', 'Macao', 'MAC', 446, 'n'),
-('MK', 'MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF', 'Macedonia, the Former Yugoslav Republic of', 'MKD', 807, 'n'),
-('MG', 'MADAGASCAR', 'Madagascar', 'MDG', 450, 'n'),
-('MW', 'MALAWI', 'Malawi', 'MWI', 454, 'n'),
-('MY', 'MALAYSIA', 'Malaysia', 'MYS', 458, 'n'),
-('MV', 'MALDIVES', 'Maldives', 'MDV', 462, 'n'),
-('ML', 'MALI', 'Mali', 'MLI', 466, 'n'),
-('MT', 'MALTA', 'Malta', 'MLT', 470, 'y'),
-('MH', 'MARSHALL ISLANDS', 'Marshall Islands', 'MHL', 584, 'n'),
-('MQ', 'MARTINIQUE', 'Martinique', 'MTQ', 474, 'n'),
-('MR', 'MAURITANIA', 'Mauritania', 'MRT', 478, 'n'),
-('MU', 'MAURITIUS', 'Mauritius', 'MUS', 480, 'n'),
-('YT', 'MAYOTTE', 'Mayotte', NULL, NULL, 'n'),
-('MX', 'MEXICO', 'Mexico', 'MEX', 484, 'n'),
-('FM', 'MICRONESIA, FEDERATED STATES OF', 'Micronesia, Federated States of', 'FSM', 583, 'n'),
-('MD', 'MOLDOVA, REPUBLIC OF', 'Moldova, Republic of', 'MDA', 498, 'n'),
-('MC', 'MONACO', 'Monaco', 'MCO', 492, 'n'),
-('MN', 'MONGOLIA', 'Mongolia', 'MNG', 496, 'n'),
-('MS', 'MONTSERRAT', 'Montserrat', 'MSR', 500, 'n'),
-('MA', 'MOROCCO', 'Morocco', 'MAR', 504, 'n'),
-('MZ', 'MOZAMBIQUE', 'Mozambique', 'MOZ', 508, 'n'),
-('MM', 'MYANMAR', 'Myanmar', 'MMR', 104, 'n'),
-('NA', 'NAMIBIA', 'Namibia', 'NAM', 516, 'n'),
-('NR', 'NAURU', 'Nauru', 'NRU', 520, 'n'),
-('NP', 'NEPAL', 'Nepal', 'NPL', 524, 'n'),
-('NL', 'NETHERLANDS', 'Netherlands', 'NLD', 528, 'y'),
-('AN', 'NETHERLANDS ANTILLES', 'Netherlands Antilles', 'ANT', 530, 'n'),
-('NC', 'NEW CALEDONIA', 'New Caledonia', 'NCL', 540, 'n'),
-('NZ', 'NEW ZEALAND', 'New Zealand', 'NZL', 554, 'n'),
-('NI', 'NICARAGUA', 'Nicaragua', 'NIC', 558, 'n'),
-('NE', 'NIGER', 'Niger', 'NER', 562, 'n'),
-('NG', 'NIGERIA', 'Nigeria', 'NGA', 566, 'n'),
-('NU', 'NIUE', 'Niue', 'NIU', 570, 'n'),
-('NF', 'NORFOLK ISLAND', 'Norfolk Island', 'NFK', 574, 'n'),
-('MP', 'NORTHERN MARIANA ISLANDS', 'Northern Mariana Islands', 'MNP', 580, 'n'),
-('NO', 'NORWAY', 'Norway', 'NOR', 578, 'n'),
-('OM', 'OMAN', 'Oman', 'OMN', 512, 'n'),
-('PK', 'PAKISTAN', 'Pakistan', 'PAK', 586, 'n'),
-('PW', 'PALAU', 'Palau', 'PLW', 585, 'n'),
-('PS', 'PALESTINIAN TERRITORY, OCCUPIED', 'Palestinian Territory, Occupied', NULL, NULL, 'n'),
-('PA', 'PANAMA', 'Panama', 'PAN', 591, 'n'),
-('PG', 'PAPUA NEW GUINEA', 'Papua New Guinea', 'PNG', 598, 'n'),
-('PY', 'PARAGUAY', 'Paraguay', 'PRY', 600, 'n'),
-('PE', 'PERU', 'Peru', 'PER', 604, 'n'),
-('PH', 'PHILIPPINES', 'Philippines', 'PHL', 608, 'n'),
-('PN', 'PITCAIRN', 'Pitcairn', 'PCN', 612, 'n'),
-('PL', 'POLAND', 'Poland', 'POL', 616, 'y'),
-('PT', 'PORTUGAL', 'Portugal', 'PRT', 620, 'y'),
-('PR', 'PUERTO RICO', 'Puerto Rico', 'PRI', 630, 'n'),
-('QA', 'QATAR', 'Qatar', 'QAT', 634, 'n'),
-('RE', 'REUNION', 'Reunion', 'REU', 638, 'n'),
-('RO', 'ROMANIA', 'Romania', 'ROM', 642, 'y'),
-('RU', 'RUSSIAN FEDERATION', 'Russian Federation', 'RUS', 643, 'n'),
-('RW', 'RWANDA', 'Rwanda', 'RWA', 646, 'n'),
-('SH', 'SAINT HELENA', 'Saint Helena', 'SHN', 654, 'n'),
-('KN', 'SAINT KITTS AND NEVIS', 'Saint Kitts and Nevis', 'KNA', 659, 'n'),
-('LC', 'SAINT LUCIA', 'Saint Lucia', 'LCA', 662, 'n'),
-('PM', 'SAINT PIERRE AND MIQUELON', 'Saint Pierre and Miquelon', 'SPM', 666, 'n'),
-('VC', 'SAINT VINCENT AND THE GRENADINES', 'Saint Vincent and the Grenadines', 'VCT', 670, 'n'),
-('WS', 'SAMOA', 'Samoa', 'WSM', 882, 'n'),
-('SM', 'SAN MARINO', 'San Marino', 'SMR', 674, 'n'),
-('ST', 'SAO TOME AND PRINCIPE', 'Sao Tome and Principe', 'STP', 678, 'n'),
-('SA', 'SAUDI ARABIA', 'Saudi Arabia', 'SAU', 682, 'n'),
-('SN', 'SENEGAL', 'Senegal', 'SEN', 686, 'n'),
-('RS', 'SERBIA', 'Serbia', 'SRB', 381, 'n'),
-('SC', 'SEYCHELLES', 'Seychelles', 'SYC', 690, 'n'),
-('SL', 'SIERRA LEONE', 'Sierra Leone', 'SLE', 694, 'n'),
-('SG', 'SINGAPORE', 'Singapore', 'SGP', 702, 'n'),
-('SK', 'SLOVAKIA', 'Slovakia', 'SVK', 703, 'y'),
-('SI', 'SLOVENIA', 'Slovenia', 'SVN', 705, 'y'),
-('SB', 'SOLOMON ISLANDS', 'Solomon Islands', 'SLB', 90, 'n'),
-('SO', 'SOMALIA', 'Somalia', 'SOM', 706, 'n'),
-('ZA', 'SOUTH AFRICA', 'South Africa', 'ZAF', 710, 'n'),
-('GS', 'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS', 'South Georgia and the South Sandwich Islands', NULL, NULL, 'n'),
-('ES', 'SPAIN', 'Spain', 'ESP', 724, 'y'),
-('LK', 'SRI LANKA', 'Sri Lanka', 'LKA', 144, 'n'),
-('SD', 'SUDAN', 'Sudan', 'SDN', 736, 'n'),
-('SR', 'SURINAME', 'Suriname', 'SUR', 740, 'n'),
-('SJ', 'SVALBARD AND JAN MAYEN', 'Svalbard and Jan Mayen', 'SJM', 744, 'n'),
-('SZ', 'SWAZILAND', 'Swaziland', 'SWZ', 748, 'n'),
-('SE', 'SWEDEN', 'Sweden', 'SWE', 752, 'y'),
-('CH', 'SWITZERLAND', 'Switzerland', 'CHE', 756, 'n'),
-('SY', 'SYRIAN ARAB REPUBLIC', 'Syrian Arab Republic', 'SYR', 760, 'n'),
-('TW', 'TAIWAN, PROVINCE OF CHINA', 'Taiwan, Province of China', 'TWN', 158, 'n'),
-('TJ', 'TAJIKISTAN', 'Tajikistan', 'TJK', 762, 'n'),
-('TZ', 'TANZANIA, UNITED REPUBLIC OF', 'Tanzania, United Republic of', 'TZA', 834, 'n'),
-('TH', 'THAILAND', 'Thailand', 'THA', 764, 'n'),
-('TL', 'TIMOR-LESTE', 'Timor-Leste', NULL, NULL, 'n'),
-('TG', 'TOGO', 'Togo', 'TGO', 768, 'n'),
-('TK', 'TOKELAU', 'Tokelau', 'TKL', 772, 'n'),
-('TO', 'TONGA', 'Tonga', 'TON', 776, 'n'),
-('TT', 'TRINIDAD AND TOBAGO', 'Trinidad and Tobago', 'TTO', 780, 'n'),
-('TN', 'TUNISIA', 'Tunisia', 'TUN', 788, 'n'),
-('TR', 'TURKEY', 'Turkey', 'TUR', 792, 'n'),
-('TM', 'TURKMENISTAN', 'Turkmenistan', 'TKM', 795, 'n'),
-('TC', 'TURKS AND CAICOS ISLANDS', 'Turks and Caicos Islands', 'TCA', 796, 'n'),
-('TV', 'TUVALU', 'Tuvalu', 'TUV', 798, 'n'),
-('UG', 'UGANDA', 'Uganda', 'UGA', 800, 'n'),
-('UA', 'UKRAINE', 'Ukraine', 'UKR', 804, 'n'),
-('AE', 'UNITED ARAB EMIRATES', 'United Arab Emirates', 'ARE', 784, 'n'),
-('GB', 'UNITED KINGDOM', 'United Kingdom', 'GBR', 826, 'y'),
-('US', 'UNITED STATES', 'United States', 'USA', 840, 'n'),
-('UM', 'UNITED STATES MINOR OUTLYING ISLANDS', 'United States Minor Outlying Islands', NULL, NULL, 'n'),
-('UY', 'URUGUAY', 'Uruguay', 'URY', 858, 'n'),
-('UZ', 'UZBEKISTAN', 'Uzbekistan', 'UZB', 860, 'n'),
-('VU', 'VANUATU', 'Vanuatu', 'VUT', 548, 'n'),
-('VE', 'VENEZUELA', 'Venezuela', 'VEN', 862, 'n'),
-('VN', 'VIET NAM', 'Viet Nam', 'VNM', 704, 'n'),
-('VG', 'VIRGIN ISLANDS, BRITISH', 'Virgin Islands, British', 'VGB', 92, 'n'),
-('VI', 'VIRGIN ISLANDS, U.S.', 'Virgin Islands, U.s.', 'VIR', 850, 'n'),
-('WF', 'WALLIS AND FUTUNA', 'Wallis and Futuna', 'WLF', 876, 'n'),
-('EH', 'WESTERN SAHARA', 'Western Sahara', 'ESH', 732, 'n'),
-('YE', 'YEMEN', 'Yemen', 'YEM', 887, 'n'),
-('ZM', 'ZAMBIA', 'Zambia', 'ZMB', 894, 'n'),
-('ZW', 'ZIMBABWE', 'Zimbabwe', 'ZWE', 716, 'n'),
-('ME', 'MONTENEGRO', 'Montenegro', 'MNE', 382, 'n');
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `dns_template`
--- 
-
-INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM,DNSSEC', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=3600\nttl=3600\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\nTXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600', 'y');
-
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `help_faq`
--- 
-
-INSERT INTO `help_faq` VALUES (1,1,0,'I would like to know ...','Yes, of course.',1,1,'riud','riud','r');
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `help_faq_sections`
--- 
-
-INSERT INTO `help_faq_sections` VALUES (1,'General',0,NULL,NULL,NULL,NULL,NULL);
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `software_repo`
--- 
-
-INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `repo_name`, `repo_url`, `repo_username`, `repo_password`, `active`) VALUES (1, 1, 1, 'riud', 'riud', '', 'ISPConfig Addons', 'http://repo.ispconfig.org/addons/', '', '', 'n');
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `spamfilter_policy`
--- 
-
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '');
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM*** ', NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `sys_group`
--- 
-
-INSERT INTO `sys_group` (`groupid`, `name`, `description`, `client_id`) VALUES (1, 'admin', 'Administrators group', 0);
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `sys_ini`
--- 
-
-INSERT INTO `sys_ini` (`sysini_id`, `config`, `default_logo`, `custom_logo`) VALUES (1, '', 'data:image/png;base64,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', '');
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `sys_user`
--- 
-
-INSERT INTO `sys_theme` (`var_id`, `tpl_name`, `username`, `logo_url`) VALUES (NULL, 'default', 'global', 'themes/default/images/header_logo.png');
-INSERT INTO `sys_theme` (`var_id`, `tpl_name`, `username`, `logo_url`) VALUES (NULL, 'default-v2', 'global', 'themes/default-v2/images/header_logo.png');
-
--- --------------------------------------------------------
-
--- 
--- Dumping data for table `sys_user`
--- 
-
-INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `username`, `passwort`, `modules`, `startmodule`, `app_theme`, `typ`, `active`, `language`, `groups`, `default_group`, `client_id`) VALUES (1, 1, 0, 'riud', 'riud', '', 'admin', '21232f297a57a5a743894a0e4a801fc3', 'dashboard,admin,client,mail,monitor,sites,dns,vm,tools,help', 'dashboard', 'default', 'admin', 1, 'en', '1,2', 1, 0);
-
--- --------------------------------------------------------
-
---
--- Dumping data for table `sys_config`
---
-
-INSERT INTO sys_config VALUES ('db','db_version','3.1dev');
-INSERT INTO sys_config VALUES ('interface','session_timeout','0');
-
-SET FOREIGN_KEY_CHECKS = 1;
diff --git a/install/sql/ispconfig3.sql.rej b/install/sql/ispconfig3.sql.rej
deleted file mode 100644
index 6c8d2e4a9c..0000000000
--- a/install/sql/ispconfig3.sql.rej
+++ /dev/null
@@ -1,23 +0,0 @@
---- install/sql/ispconfig3.sql
-+++ install/sql/ispconfig3.sql
-@@ -2522,13 +2527,13 @@ INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `s
- -- Dumping data for table `spamfilter_policy`
- -- 
- 
--INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '');
--INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
--INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
--INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
--INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL);
--INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
--INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '', 'n', 6.00, 8.00, 'rewrite_subject', 12.00);
-+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
-+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
-+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00);
-+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00);
-+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 2.00, 4.00, 'rewrite_subject', 8.00);
-+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 7.00, 10.00, 'rewrite_subject', 20.00);
- 
- -- --------------------------------------------------------
- 
diff --git a/interface/web/admin/form/server_config.tform.php.orig b/interface/web/admin/form/server_config.tform.php.orig
deleted file mode 100644
index 1a6c8070cb..0000000000
--- a/interface/web/admin/form/server_config.tform.php.orig
+++ /dev/null
@@ -1,1956 +0,0 @@
-<?php
-
-/*
-  Form Definition
-
-  Tabledefinition
-
-  Datatypes:
-  - INTEGER (Forces the input to Int)
-  - DOUBLE
-  - CURRENCY (Formats the values to currency notation)
-  - VARCHAR (no format check, maxlength: 255)
-  - TEXT (no format check)
-  - DATE (Dateformat, automatic conversion to timestamps)
-
-  Formtype:
-  - TEXT (Textfield)
-  - TEXTAREA (Textarea)
-  - PASSWORD (Password textfield, input is not shown when edited)
-  - SELECT (Select option field)
-  - RADIO
-  - CHECKBOX
-  - CHECKBOXARRAY
-  - FILE
-
-  VALUE:
-  - Wert oder Array
-
-  Hint:
-  The ID field of the database table is not part of the datafield definition.
-  The ID field must be always auto incement (int or bigint).
-
-
- */
-
-$form["title"] = "Server Config";
-$form["description"] = "";
-$form["name"] = "server_config";
-$form["action"] = "server_config_edit.php";
-$form["db_table"] = "server";
-$form["db_table_idx"] = "server_id";
-$form["db_history"] = "yes";
-$form["tab_default"] = "server";
-$form["list_default"] = "server_config_list.php";
-$form["auth"] = 'yes'; // yes / no
-
-$form["auth_preset"]["userid"] = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['server'] = array(
-	'title' => "Server",
-	'width' => 70,
-	'template' => "templates/server_config_server_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'auto_network_configuration' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'ip_address' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '192.168.0.105',
-			'validators' => array(0 => array('type' => 'ISIPV4',
-					'errmsg' => 'ip_address_error_wrong'),
-			),
-			'value' => '',
-			'width' => '15',
-			'maxlength' => '255'
-		),
-		'netmask' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '255.255.255.0',
-			'validators' => array(0 => array('type' => 'ISIPV4',
-					'errmsg' => 'netmask_error_wrong'),
-			),
-			'value' => '',
-			'width' => '15',
-			'maxlength' => '255'
-		),
-		'v6_prefix' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array(  0 => array('type' => 'ISV6PREFIX',
-						'errmsg' => 'v6_prefix_wrong'),
-						1 => array('type' => 'V6PREFIXEND',
-						'errmsg' => 'v6_prefix_end'),
-						2 => array('type' => 'V6PREFIXLENGTH',
-						'errmsg' => 'v6_prefix_length')
-			),
-			'default' => ''
-		),
-		'gateway' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '192.168.0.1',
-			'validators' => array(0 => array('type' => 'ISIPV4',
-					'errmsg' => 'gateway_error_wrong'),
-			),
-			'value' => '',
-			'width' => '15',
-			'maxlength' => '255'
-		),
-		'firewall' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'bastille',
-			'value' => array('bastille' => 'bastille', 'ufw' => 'ufw'),
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'hostname' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => 'server1.domain.tld',
-			'filters'   => array( 0 => array( 'event' => 'SAVE',
-					'type' => 'IDNTOASCII'),
-				1 => array( 'event' => 'SHOW',
-					'type' => 'IDNTOUTF8'),
-				2 => array( 'event' => 'SAVE',
-					'type' => 'TOLOWER')
-			),
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-												'errmsg' => 'hostname_error_empty'),
-									1 => array ('type' => 'REGEX',
-												'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/',
-												'errmsg'=> 'hostname_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'nameservers' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '192.168.0.1,192.168.0.2',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'nameservers_error_empty'),
-			),
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'loglevel' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '2',
-			'value' => array('0' => 'Debug', '1' => 'Warnings', '2' => 'Errors'),
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'admin_notify_events' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '1',
-			'value' => array('3' => 'no_notifications_txt', '0' => 'Debug', '1' => 'Warnings', '2' => 'Errors'),
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'backup_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '/var/backup',
-			'validators' => array(	0 => array ( 	'type' => 'REGEX',
-										'regex' => "/(|^\\/{1,2}(?:[\\w-]+[.]?\\/?){5,128})$/",
-										'errmsg'=> 'backup_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'backup_tmp' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '/tmp/',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'tmpdir_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => "/^\/[a-zA-Z0-9\.\-\_\/]{3,128}$/",
-										'errmsg'=> 'tmpdir_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'backup_dir_is_mount' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'backup_mode' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'userzip',
-			'value' => array('userzip' => 'backup_mode_userzip', 'rootgz' => 'backup_mode_rootgz'),
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'backup_time' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => '0:00',
-			'value' => array(	'0:00' => '0:00h',
-								'0:15' => '0:15h',
-								'0:30' => '0:30h',
-								'0:45' => '0:45h',
-								'1:00' => '1:00h',
-								'1:15' => '1:15h',
-								'1:30' => '1:30h',
-								'1:45' => '1:45h',
-								'2:00' => '2:00h',
-								'2:15' => '2:15h',
-								'2:30' => '2:30h',
-								'2:45' => '2:45h',
-								'3:00' => '3:00h',
-								'3:15' => '3:15h',
-								'3:30' => '3:30h',
-								'3:45' => '3:45h',
-								'4:00' => '4:00h',
-								'4:15' => '4:15h',
-								'4:30' => '4:30h',
-								'4:45' => '4:45h',
-								'5:00' => '5:00h',
-								'5:15' => '5:15h',
-								'5:30' => '5:30h',
-								'5:45' => '5:45h',
-								'6:00' => '6:00h',
-								'6:15' => '6:15h',
-								'6:30' => '6:30h',
-								'6:45' => '6:45h',
-								'7:00' => '7:00h',
-								'7:15' => '7:15h',
-								'7:30' => '7:30h',
-								'7:45' => '7:45h',
-								'8:00' => '8:00h',
-								'8:15' => '8:15h',
-								'8:30' => '8:30h',
-								'8:45' => '8:45h',
-								'9:00' => '9:00h',
-								'9:15' => '9:15h',
-								'9:30' => '9:30h',
-								'9:45' => '9:45h',
-								'10:00' => '10:00h',
-								'10:15' => '10:15h',
-								'10:30' => '10:30h',
-								'10:45' => '10:45h',
-								'11:00' => '11:00h',
-								'11:15' => '11:15h',
-								'11:30' => '11:30h',
-								'11:45' => '11:45h',
-								'12:00' => '12:00h',
-								'12:15' => '12:15h',
-								'12:30' => '12:30h',
-								'12:45' => '12:45h',
-								'13:00' => '13:00h',
-								'13:15' => '13:15h',
-								'13:30' => '13:30h',
-								'13:45' => '13:45h',
-								'14:00' => '14:00h',
-								'14:15' => '14:15h',
-								'14:30' => '14:30h',
-								'14:45' => '14:45h',
-								'15:00' => '15:00h',
-								'15:15' => '15:15h',
-								'15:30' => '15:30h',
-								'15:45' => '15:45h',
-								'16:00' => '16:00h',
-								'16:15' => '16:15h',
-								'16:30' => '16:30h',
-								'16:45' => '16:45h',
-								'17:00' => '17:00h',
-								'17:15' => '17:15h',
-								'17:30' => '17:30h',
-								'17:45' => '17:45h',
-								'18:00' => '18:00h',
-								'18:15' => '18:15h',
-								'18:30' => '18:30h',
-								'18:45' => '18:45h',
-								'19:00' => '19:00h',
-								'19:15' => '19:15h',
-								'19:30' => '19:30h',
-								'19:45' => '19:45h',
-								'20:00' => '20:00h',
-								'20:15' => '20:15h',
-								'20:30' => '20:30h',
-								'20:45' => '20:45h',
-								'21:00' => '21:00h',
-								'21:15' => '21:15h',
-								'21:30' => '21:30h',
-								'21:45' => '21:45h',
-								'22:00' => '22:00h',
-								'22:15' => '22:15h',
-								'22:30' => '22:30h',
-								'22:45' => '22:45h',
-								'23:00' => '23:00h',
-								'23:15' => '23:15h',
-								'23:30' => '23:30h',
-								'23:45' => '23:45h',
-								),
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'backup_delete' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'monit_url' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[0-9a-zA-Z\:\/\-\.\[\]]{0,255}$/',
-					'errmsg'=> 'monit_url_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'monit_user' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'monit_password' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'munin_url' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[0-9a-zA-Z\:\/\-\.\[\]]{0,255}$/',
-					'errmsg'=> 'munin_url_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'munin_user' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'munin_password' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'monitor_system_updates' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'log_retention' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'validators' => array (  0 => array ( 'type' => 'ISPOSITIVE',
-				'errmsg'=> 'log_retention_error_ispositive'),
-			),
-			'default' => '30',
-			'value' => '',
-			'width' => '4',
-			'maxlength' => '4'
-		),
-		'migration_mode' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['mail'] = array(
-	'title' => "Mail",
-	'width' => 60,
-	'template' => "templates/server_config_mail_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'module' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'value' => array('postfix_mysql' => 'postfix_mysql')
-		),
-		'maildir_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '/home/vmail/[domain]/[localpart]/',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'maildir_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{5,128}$/',
-										'errmsg'=> 'maildir_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'maildir_format' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => '20',
-			'value' => array('maildir' => 'Maildir', 'mdbox' => 'mdbox')
-		),
-		'homedir_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '/home/vmail/',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'homedir_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'homedir_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'dkim_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '/var/lib/amavis/dkim',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'dkim_strength' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '2048',
-			'value' => array('1024' => 'weak (1024)', '2048' => 'normal (2048)', '4096' => 'strong (4096)')
-		),
-        'relayhost_password' => array(
-            'datatype' => 'VARCHAR',
-            'formtype' => 'TEXT',
-            'default' => '',
-            'value' => '',
-            'width' => '40',
-            'maxlength' => '255'
-        ),
-
-		'pop3_imap_daemon' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => '20',
-			'value' => array('courier' => 'Courier', 'dovecot' => 'Dovecot')
-		),
-		'mail_filter_syntax' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => '20',
-			'value' => array('maildrop' => 'Maildrop', 'sieve' => 'Sieve')
-		),
-		'mailuser_uid' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '5000',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'mailuser_uid_error_empty'),
-									1 => array('type' => 'RANGE',
-										'range' => '1999:',
-										'errmsg' => 'mailuser_uid_error_range'),
-			),
-			'value' => '',
-			'width' => '10',
-			'maxlength' => '255'
-		),
-		'mailuser_gid' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '5000',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'mailuser_gid_error_empty'),
-									1 => array('type' => 'RANGE',
-										'range' => '1999:',
-										'errmsg' => 'mailuser_gid_error_range'),
-			),
-			'value' => '',
-			'width' => '10',
-			'maxlength' => '255'
-		),
-		'mailuser_name' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => 'vmail',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'mailuser_name_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^(?!ispconfig|root)([a-zA-Z0-9]{1,20})$/',
-										'errmsg'=> 'mailuser_name_error_regex'),
-			),
-			'value' => '',
-			'width' => '10',
-			'maxlength' => '255'
-		),
-		'mailuser_group' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => 'vmail',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'mailuser_group_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^(?!ispconfig|root)([a-zA-Z0-9]{1,20})$/',
-										'errmsg'=> 'mailuser_group_name_error_regex'),
-			),
-			'value' => '',
-			'width' => '10',
-			'maxlength' => '255'
-		),
-		'mailbox_virtual_uidgid_maps' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'validators' => array (0 => array ( 'type' => 'CUSTOM',
-					'class' => 'validate_server_mail_config',
-					'function' => 'mailbox_virtual_uidgid_maps'),
-			),
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'relayhost' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'relayhost_user' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'relayhost_password' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'reject_sender_login_mismatch' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'mailbox_size_limit' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value' => '',
-			'width' => '10',
-			'maxlength' => '15'
-		),
-		'message_size_limit' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value' => '',
-			'width' => '10',
-			'maxlength' => '15'
-		),
-		'mailbox_quota_stats' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'realtime_blackhole_list' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])(,\s*(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]))*)?$/',
-					'errmsg'=> 'rbl_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'overquota_notify_admin' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'overquota_notify_client' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'overquota_notify_freq' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '7',
-			'value' => '',
-			'width' => '20',
-			'maxlength' => '255'
-		),
-		'overquota_notify_onok' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['getmail'] = array(
-	'title' => "Getmail",
-	'width' => 80,
-	'template' => "templates/server_config_getmail_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'getmail_config_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'getmail_config_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'getmail_config_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['web'] = array(
-	'title' => "Web",
-	'width' => 60,
-	'template' => "templates/server_config_web_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'server_type' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'apache',
-			'value' => array('apache' => 'Apache', 'nginx' => 'Nginx')
-		),
-		'website_basedir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'website_basedir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'website_basedir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'website_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array(	'type' => 'NOTEMPTY',
-										'errmsg' => 'website_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{5,128}$/',
-										'errmsg'=> 'website_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'website_symlinks' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'website_symlinks_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]\:]{5,128}$/',
-										'errmsg'=> 'website_symlinks_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'website_symlinks_rel' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'network_filesystem' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'website_autoalias' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'vhost_rewrite_v6' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n',1 => 'y')
-		),
-		'vhost_conf_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'vhost_conf_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'vhost_conf_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'vhost_conf_enabled_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'vhost_conf_enabled_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'vhost_conf_enabled_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'nginx_enable_pagespeed' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n',1 => 'y')
-		),
-		'nginx_vhost_conf_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'nginx_vhost_conf_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'nginx_vhost_conf_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'nginx_vhost_conf_enabled_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'nginx_vhost_conf_enabled_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'nginx_vhost_conf_enabled_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'CA_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array(	0 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{0,128}$/',
-										'errmsg'=> 'ca_path_error_regex'),
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'CA_pass' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'security_level' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => '20',
-			'value' => array('10' => 'Medium', '20' => 'High')
-		),
-		'set_folder_permissions_on_update' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'web_folder_protection' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'add_web_users_to_sshusers_group' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'check_apache_config' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'enable_sni' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'enable_ip_wildcard' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'logging' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'yes',
-			'value' => array('yes' => 'Yes', 'anon' => 'Anonymize IP', 'no' => 'No')
-		),
-		'overtraffic_notify_admin' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'overtraffic_notify_client' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'overquota_notify_admin' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'overquota_notify_client' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'overquota_db_notify_admin' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'overquota_db_notify_client' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'overquota_notify_freq' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '7',
-			'value' => '',
-			'width' => '20',
-			'maxlength' => '255'
-		),
-		'overquota_notify_onok' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'user' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'apache_user_error_empty'),
-					1 => array(
-							'type' => 'CUSTOM',
-							'class' => 'validate_systemuser',
-							'function' => 'check_sysuser',
-							'check_names' => false,
-							'errmsg' => 'invalid_apache_user_txt'
-						),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'group' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'apache_group_error_empty'),
-					1 => array(
-							'type' => 'CUSTOM',
-							'class' => 'validate_systemuser',
-							'function' => 'check_sysgroup',
-							'check_names' => false,
-							'errmsg' => 'invalid_apache_group_txt'
-						),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'connect_userid_to_webid' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'connect_userid_to_webid_start' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '10000',
-			'validators' => array(0 => array('type' => 'ISINT',
-					'errmsg' => 'connect_userid_to_webid_startid_isint'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'nginx_user' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'nginx_user_error_empty'),
-									1 => array(
-							'type' => 'CUSTOM',
-							'class' => 'validate_systemuser',
-							'function' => 'check_sysuser',
-							'check_names' => false,
-							'errmsg' => 'invalid_nginx_user_txt'
-						),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'nginx_group' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'nginx_group_error_empty'),
-									1 => array(
-							'type' => 'CUSTOM',
-							'class' => 'validate_systemuser',
-							'function' => 'check_sysgroup',
-							'check_names' => false,
-							'errmsg' => 'invalid_nginx_group_txt'
-						),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_ini_path_apache' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'php_ini_path_apache_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'php_ini_path_apache_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_ini_path_cgi' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'php_ini_path_cgi_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'php_ini_path_cgi_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_default_name' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => 'Default',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'php_default_name_error_empty'),
-			),
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'TRIM'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					2 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_fpm_init_script' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'php_fpm_init_script_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\.\-\_]{1,128}$/',
-										'errmsg'=> 'php_fpm_init_script_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_fpm_ini_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'php_fpm_ini_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'php_fpm_ini_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_fpm_pool_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'php_fpm_pool_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'php_fpm_pool_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_fpm_start_port' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(0 => array('type' => 'ISPOSITIVE',
-					'errmsg' => 'php_fpm_start_port_error_empty'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_fpm_socket_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'php_fpm_socket_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'php_fpm_socket_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'php_open_basedir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'php_open_basedir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\.\-\_\/\]\[\:]{1,}$/',
-										'errmsg'=> 'php_open_basedir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '4000'
-		),
-		'php_ini_check_minutes' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '1',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'php_ini_check_minutes_error_empty'),
-			),
-			'value' => '',
-			'width' => '10',
-			'maxlength' => '255'
-		),
-		'php_handler' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'fast-cgi',
-			'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
-			'searchable' => 2
-		),
-		'php_fpm_incron_reload' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'nginx_cgi_socket' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'nginx_cgi_socket_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'nginx_cgi_socket_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'htaccess_allow_override' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'htaccess_allow_override_error_empty'),
-			),
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'enable_spdy' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default'  => 'y',
-			'value' => array (
-				0 => 'n',
-				1 => 'y'
-			)
-		),
-		'apps_vhost_enabled' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default'  => 'y',
-			'value' => array (0 => 'n', 1 => 'y')
-		),
-		'apps_vhost_port' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '8081',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'apps_vhost_port_error_empty'),
-			),
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'apps_vhost_ip' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '_default_',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'apps_vhost_ip_error_empty'),
-			),
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'apps_vhost_servername' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'awstats_conf_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'awstats_data_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'awstats_data_dir_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'awstats_data_dir_error_regex'),
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'awstats_pl' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'awstats_pl_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'awstats_pl_error_regex'),
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'awstats_buildstaticpages_pl' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'awstats_buildstaticpages_pl_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'awstats_buildstaticpages_pl_error_regex'),
-			),
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'skip_le_check' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default'  => 'n',
-			'value' => array (
-				0 => 'n',
-				1 => 'y'
-			)
-		),
-		'php_fpm_reload_mode' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'reload',
-			'value' => array('reload' => 'Reload', 'restart' => 'Restart'),
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['dns'] = array(
-	'title' => "DNS",
-	'width' => 60,
-	'template' => "templates/server_config_dns_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'bind_user' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'bind_user_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^(?!ispconfig)([a-zA-Z0-9]{1,20})$/',
-										'errmsg'=> 'invalid_bind_user_txt'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'bind_group' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'bind_group_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^(?!ispconfig)([a-zA-Z0-9]{1,20})$/',
-										'errmsg'=> 'invalid_bind_group_txt'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'bind_zonefiles_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'bind_zonefiles_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'bind_zonefiles_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'named_conf_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'named_conf_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'named_conf_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'named_conf_local_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'named_conf_local_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'named_conf_local_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'disable_bind_log' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['fastcgi'] = array(
-	'title' => "FastCGI",
-	'width' => 80,
-	'template' => "templates/server_config_fastcgi_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'fastcgi_starter_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'fastcgi_starter_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
-										'errmsg'=> 'fastcgi_starter_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'fastcgi_starter_script' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'fastcgi_starter_script_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'fastcgi_starter_script_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'fastcgi_alias' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'fastcgi_alias_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'fastcgi_alias_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'fastcgi_phpini_path' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'fastcgi_phpini_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
-										'errmsg'=> 'fastcgi_phpini_path_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'fastcgi_children' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(0 => array('type' => 'ISPOSITIVE',
-					'errmsg' => 'fastcgi_children_error_empty'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'fastcgi_max_requests' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array( 0 => array( 'type' => 'ISINT',
-					'errmsg' => 'fastcgi_max_requests_error_empty'),
-				1 => array( 'type' => 'RANGE',
-					'range' => '0:',
-					'errmsg' => 'fastcgi_max_requests_error_empty'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'fastcgi_bin' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'fastcgi_bin_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
-										'errmsg'=> 'fastcgi_bin_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'fastcgi_config_syntax' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '2',
-			'value' => array('1' => 'Old (apache 2.0)', '2' => 'New (apache 2.2)'),
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-$form["tabs"]['xmpp'] = array(
-    'title' => "XMPP",
-    'width' => 80,
-    'template' => "templates/server_config_xmpp_edit.htm",
-    'fields' => array(
-        //#################################
-        // Begin Datatable fields
-        //#################################
-        'xmpp_use_ipv6' => array(
-            'datatype' => 'VARCHAR',
-            'formtype' => 'CHECKBOX',
-            'default' => 'n',
-            'value' => array(0 => 'n', 1 => 'y')
-        ),
-        'xmpp_bosh_max_inactivity' => array(
-            'datatype' => 'VARCHAR',
-            'formtype' => 'TEXT',
-            'default' => '30',
-            'validators' => array(0 => array('type' => 'ISINT',
-                'errmsg' => 'ip_address_error_wrong'),
-                array('type'=>'RANGE', 'range'=>'15:360', 'errmsg' => 'xmpp_bosh_timeout_range_wrong')
-            ),
-            'value' => '',
-            'width' => '15'
-        ),
-
-        'xmpp_server_admins' => array(
-            'datatype' => 'VARCHAR',
-            'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-            'default' => 'admin@service.com, superuser@service.com',
-            'value' => '',
-            'width' => '15'
-        ),
-
-        'xmpp_modules_enabled' => array(
-            'datatype' => 'TEXT',
-            'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-            'default' => "saslauth, tls, dialback, disco, discoitems, version, uptime, time, ping, admin_adhoc, admin_telnet, bosh, posix, announce, offline, webpresence, mam, stream_management, message_carbons",
-            'value' => '',
-            'separator' => ","
-        ),
-
-        'xmpp_port_http' => array(
-            'datatype' => 'VARCHAR',
-            'formtype' => 'TEXT',
-            'default' => '5290',
-            'validators' => array(0 => array('type' => 'ISINT')),
-            'value' => '5290',
-            'width' => '15'
-        ),
-        'xmpp_port_https' => array(
-            'datatype' => 'VARCHAR',
-            'formtype' => 'TEXT',
-            'default' => '5291',
-            'validators' => array(0 => array('type' => 'ISINT')),
-            'value' => '5291',
-            'width' => '15'
-        ),
-        'xmpp_port_pastebin' => array(
-            'datatype' => 'VARCHAR',
-            'formtype' => 'TEXT',
-            'default' => '5292',
-            'validators' => array(0 => array('type' => 'ISINT')),
-            'value' => '5292',
-            'width' => '15'
-        ),
-        'xmpp_port_bosh' => array(
-            'datatype' => 'VARCHAR',
-            'formtype' => 'TEXT',
-            'default' => '5280',
-            'validators' => array(0 => array('type' => 'ISINT')),
-            'value' => '5280',
-            'width' => '15'
-        ),
-        //#################################
-        // ENDE Datatable fields
-        //#################################
-    )
-);
-
-$form["tabs"]['jailkit'] = array(
-	'title' => "Jailkit",
-	'width' => 80,
-	'template' => "templates/server_config_jailkit_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'jailkit_chroot_home' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'jailkit_chroot_home_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
-										'errmsg'=> 'jailkit_chroot_home_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'jailkit_chroot_app_sections' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'jailkit_chroot_app_sections_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\-\_\ ]{1,128}$/',
-										'errmsg'=> 'jailkit_chroot_app_sections_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '1000'
-		),
-		'jailkit_chroot_app_programs' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'jailkit_chroot_app_programs_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/',
-										'errmsg'=> 'jailkit_chroot_app_programs_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '1000'
-		),
-		'jailkit_chroot_cron_programs' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'jailkit_chroot_cron_programs_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/',
-										'errmsg'=> 'jailkit_chroot_cron_programs_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '1000'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-/*
-$form["tabs"]['ufw_firewall'] = array (
-	'title' 	=> "UFW Firewall",
-	'width' 	=> 80,
-	'template' 	=> "templates/server_config_ufw_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'ufw_enable' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'no',
-			'value'		=> array(0 => 'no',1 => 'yes')
-		),
-		'ufw_manage_builtins' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'no',
-			'value'		=> array(0 => 'no',1 => 'yes')
-		),
-		'ufw_ipv6' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'no',
-			'value'		=> array(0 => 'no',1 => 'yes')
-		),
-		'ufw_default_input_policy' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> 'ACCEPT',
-			'value'		=> array('ACCEPT' => 'accept', 'DROP' => 'drop', 'REJECT' => 'reject')
-		),
-		'ufw_default_output_policy' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> 'ACCEPT',
-			'value'		=> array('ACCEPT' => 'accept', 'DROP' => 'drop', 'REJECT' => 'reject')
-		),
-		'ufw_default_forward_policy' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> 'ACCEPT',
-			'value'		=> array('ACCEPT' => 'accept', 'DROP' => 'drop', 'REJECT' => 'reject')
-		),
-		'ufw_default_application_policy' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> 'DROP',
-			'value'		=> array('ACCEPT' => 'accept', 'DROP' => 'drop', 'REJECT' => 'reject')
-		),
-		'ufw_log_level' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> 'low',
-			'value'		=> array('low' => 'low', 'medium' => 'medium', 'high' => 'high')
-		)
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-*/
-
-$form["tabs"]['vlogger'] = array(
-	'title' => "vlogger",
-	'width' => 80,
-	'template' => "templates/server_config_vlogger_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'config_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'vlogger_config_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'vlogger_config_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-
-$form["tabs"]['cron'] = array(
-	'title' => "Cron",
-	'width' => 80,
-	'template' => "templates/server_config_cron_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'init_script' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'cron_init_script_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^[a-zA-Z0-9\-\_]{1,30}$/',
-										'errmsg'=> 'cron_init_script_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'crontab_dir' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'crontab_dir_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'crontab_dir_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		'wget' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'cron_wget_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
-										'errmsg'=> 'cron_wget_error_regex'),
-			),
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['rescue'] = array(
-	'title' => "Rescue",
-	'width' => 80,
-	'template' => "templates/server_config_rescue_edit.htm",
-	'fields' => array(
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'try_rescue' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'do_not_try_rescue_httpd' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'do_not_try_rescue_mongodb' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'do_not_try_rescue_mysql' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'do_not_try_rescue_mail' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng.orig b/interface/web/admin/lib/lang/de_server_config.lng.orig
deleted file mode 100644
index 108bf96de8..0000000000
--- a/interface/web/admin/lib/lang/de_server_config.lng.orig
+++ /dev/null
@@ -1,299 +0,0 @@
-<?php
-$wb['jailkit_chroot_home_txt'] = 'Jailkit Chroot home';
-$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit Chroot Anwendungsbereiche';
-$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit Chrooted Anwendungen';
-$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit Cron Chrooted Anwendungen';
-$wb['website_path_txt'] = 'Webseiten Pfad';
-$wb['website_symlinks_txt'] = 'Webseiten Symlinks';
-$wb['website_symlinks_rel_txt'] = 'Erstelle relative Symlinks';
-$wb['vhost_conf_dir_txt'] = 'vHost Konfigurationsverzeichnis';
-$wb['vhost_conf_enabled_dir_txt'] = 'vHost config enabled dir';
-$wb['getmail_config_dir_txt'] = 'Getmail Konfigurationsverzeichnis';
-$wb['fastcgi_starter_path_txt'] = 'FastCGI Starter Pfad';
-$wb['fastcgi_starter_script_txt'] = 'FastCGI Starter Script';
-$wb['fastcgi_alias_txt'] = 'FastCGI Alias';
-$wb['fastcgi_phpini_path_txt'] = 'FastCGI php.ini Pfad';
-$wb['fastcgi_children_txt'] = 'FastCGI Children';
-$wb['fastcgi_max_requests_txt'] = 'FastCGI max. Anfragen';
-$wb['fastcgi_bin_txt'] = 'FastCGI Bin';
-$wb['module_txt'] = 'Modul';
-$wb['maildir_path_txt'] = 'Maildir Pfad';
-$wb['maildir_format_txt'] = 'Maildir Format';
-$wb['homedir_path_txt'] = 'Homedir Pfad';
-$wb['dkim_path_txt'] = 'DKIM Pfad';
-$wb['mailuser_uid_txt'] = 'Mailbenutzer UID';
-$wb['mailuser_gid_txt'] = 'Mailbenutzer GID';
-$wb['mailuser_name_txt'] = 'Mailbenutzer Name';
-$wb['mailuser_group_txt'] = 'Mailbenutzer Gruppe';
-$wb['mailbox_virtual_uidgid_maps_txt'] = 'Website Linux Uid für Mailboxen';
-$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'nur für einzel-Server Installationen.';
-$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid kann in Multiserver-Umgebung nicht gemappt werden.';
-$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Uid Mapping funktioniert nur in Verbindung mit dovecot.';
-$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Uid Mapping kann nur umgeschaltet werden, wenn noch keine Mailuser angelegt sind.';
-$wb['relayhost_txt'] = 'Relayhost';
-$wb['relayhost_user_txt'] = 'Relayhost Benutzer';
-$wb['relayhost_password_txt'] = 'Relayhost Passwort';
-$wb['reject_sender_login_mismatch_txt'] = 'Zurückweisen von Mails, wenn Sender nicht gleich Login';
-$wb['mailbox_size_limit_txt'] = 'E-Mailkonto Beschränkung';
-$wb['message_size_limit_txt'] = 'E-Mailgrößen Beschränkung';
-$wb['ip_address_txt'] = 'IP Adresse';
-$wb['netmask_txt'] = 'Netzmaske';
-$wb['gateway_txt'] = 'Gateway';
-$wb['hostname_txt'] = 'Hostname';
-$wb['nameservers_txt'] = 'Nameserver';
-$wb['auto_network_configuration_txt'] = 'Netzwerkkonfiguration';
-$wb['website_basedir_txt'] = 'Webseiten basedir';
-$wb['website_autoalias_txt'] = 'Webseiten Autoalias';
-$wb['website_autoalias_note_txt'] = 'Platzhalter:';
-$wb['ip_address_error_wrong'] = 'Ungültiges IP Adressen Format.';
-$wb['netmask_error_wrong'] = 'Ungültiges Netzmasken Format.';
-$wb['gateway_error_wrong'] = 'Ungültiges Gateway Format.';
-$wb['hostname_error_empty'] = 'Hostname ist leer.';
-$wb['nameservers_error_empty'] = 'Nameserver ist leer.';
-$wb['config_dir_txt'] = 'Konfigurationsverzeichnis';
-$wb['init_script_txt'] = 'Cron init Script Name';
-$wb['crontab_dir_txt'] = 'Pfad für individuelle Crontabs';
-$wb['wget_txt'] = 'Pfad zum wget Programm';
-$wb['web_user_txt'] = 'Apache Benutzer';
-$wb['web_group_txt'] = 'Apache Gruppe';
-$wb['security_level_txt'] = 'Sicherheitslevel';
-$wb['loglevel_txt'] = 'Loglevel';
-$wb['apps_vhost_port_txt'] = 'Apps vHost Port';
-$wb['apps_vhost_ip_txt'] = 'Apps vHost IP Adresse';
-$wb['apps_vhost_servername_txt'] = 'Apps vHost Domain';
-$wb['bind_user_txt'] = 'BIND Benutzer';
-$wb['bind_group_txt'] = 'BIND Gruppe';
-$wb['bind_zonefiles_dir_txt'] = 'BIND Zonefiles Verzeichnis';
-$wb['named_conf_path_txt'] = 'BIND named.conf Pfad';
-$wb['bind_user_error_empty'] = 'BIND Benutzer ist leer.';
-$wb['bind_group_error_empty'] = 'BIND Gruppe ist leer.';
-$wb['bind_zonefiles_dir_error_empty'] = 'BIND Zonefiles Verzeichnis ist leer.';
-$wb['named_conf_path_error_empty'] = 'BIND named.conf Pfad ist leer.';
-$wb['named_conf_local_path_error_empty'] = 'BIND named.conf.local Pfad ist leer.';
-$wb['mail_filter_syntax_txt'] = 'E-Mailfilter Syntax';
-$wb['pop3_imap_daemon_txt'] = 'POP3/IMAP Dämon';
-$wb['php_open_basedir_txt'] = 'PHP open_basedir';
-$wb['php_open_basedir_error_empty'] = 'PHP open_basedir ist leer.';
-$wb['htaccess_allow_override_txt'] = '.htaccess AllowOverride';
-$wb['htaccess_allow_override_error_empty'] = '.htaccess AllowOverride ist leer.';
-$wb['awstats_conf_dir_txt'] = 'AWStats Konfigurationsverzeichnis';
-$wb['awstats_data_dir_txt'] = 'AWStats Datenverzeichnis';
-$wb['awstats_pl_txt'] = 'AWStats awstats.pl Script';
-$wb['awstats_buildstaticpages_pl_txt'] = 'AWStats awstats_buildstaticpages.pl Script';
-$wb['backup_dir_txt'] = 'Backupverzeichnis';
-$wb['backup_tmp_txt'] = 'Backup tmp-Dir (zip)';
-$wb['named_conf_local_path_txt'] = 'BIND named.conf.local Pfad';
-$wb['php_ini_path_cgi_txt'] = 'CGI php.ini Pfad';
-$wb['php_ini_path_apache_txt'] = 'Apache php.ini Pfad';
-$wb['check_apache_config_txt'] = 'Teste Apache Konfiguration beim Neustart';
-$wb['CA_path_txt'] = 'CA Pfad';
-$wb['CA_pass_txt'] = 'CA Passwort';
-$wb['ufw_enable_txt'] = 'Aktivieren';
-$wb['ufw_manage_builtins_txt'] = 'Verwalte Builtin Rules';
-$wb['ufw_ipv6_txt'] = 'Aktiviere IPv6';
-$wb['ufw_default_input_policy_txt'] = 'Default Input Policy';
-$wb['ufw_default_output_policy_txt'] = 'Default Output Policy';
-$wb['ufw_default_forward_policy_txt'] = 'Default Forward Policy';
-$wb['ufw_default_application_policy_txt'] = 'Default Application Policy';
-$wb['ufw_log_level_txt'] = 'Loglevel';
-$wb['network_config_warning_txt'] = 'Die Netzwerk Konfiguration Option ist nur auf Debian- und Ubuntu Servern verfügbar. Aktivieren Sie diese Option nicht, falls Ihr Netzwerk Interface nicht eth0 heißt.';
-$wb['server_type_txt'] = 'Server Typ';
-$wb['nginx_vhost_conf_dir_txt'] = 'Nginx vHost Konfigurations Verzeichnis';
-$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Nginx vHost config enabled dir';
-$wb['nginx_user_txt'] = 'Nginx Benutzer';
-$wb['nginx_group_txt'] = 'Nginx Gruppe';
-$wb['nginx_cgi_socket_txt'] = 'Nginx CGI Socket';
-$wb['backup_dir_error_empty'] = 'Backup Verzeichnis ist leer.';
-$wb['tmpdir_path_error_empty'] = 'Tmp-Dir Pfad ist leer.';
-$wb['tmpdir_path_error_regex'] = 'Invalid Tmp-Dir Pfad.';
-$wb['maildir_path_error_empty'] = 'Maildir Pfad ist leer.';
-$wb['homedir_path_error_empty'] = 'Homedir Pfad ist leer.';
-$wb['mailuser_uid_error_empty'] = 'Mail Benutzer UID ist leer.';
-$wb['mailuser_gid_error_empty'] = 'Mail Benutzer GID ist leer.';
-$wb['mailuser_name_error_empty'] = 'Mail Benutzer Name ist leer.';
-$wb['mailuser_group_error_empty'] = 'Mail Benutzer Gruppe ist leer.';
-$wb['getmail_config_dir_error_empty'] = 'Getmail config dir ist leer.';
-$wb['website_basedir_error_empty'] = 'Webseiten basedir ist leer.';
-$wb['website_path_error_empty'] = 'Webseiten Pfad ist leer.';
-$wb['website_symlinks_error_empty'] = 'Webseiten Symlinks ist leer.';
-$wb['vhost_conf_dir_error_empty'] = 'vHost config dir ist leer.';
-$wb['vhost_conf_enabled_dir_error_empty'] = 'vHost config enabled dir ist leer.';
-$wb['nginx_vhost_conf_dir_error_empty'] = 'Nginx vHost config dir ist leer.';
-$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Nginx vHost config enabled dir ist leer.';
-$wb['apache_user_error_empty'] = 'Apache Benutzer ist leer.';
-$wb['apache_group_error_empty'] = 'Apache Grupp ist leer.';
-$wb['nginx_user_error_empty'] = 'Nginx Benutzer ist leer.';
-$wb['nginx_group_error_empty'] = 'Nginx Gruppe ist leer.';
-$wb['php_ini_path_apache_error_empty'] = 'Apache php.ini Pfad ist leer.';
-$wb['php_ini_path_cgi_error_empty'] = 'CGI php.ini Pfad ist leer.';
-$wb['nginx_cgi_socket_empty'] = 'Nginx CGI Socket ist leer.';
-$wb['apps_vhost_port_error_empty'] = 'Apps vHost Port ist leer.';
-$wb['apps_vhost_ip_error_empty'] = 'Apps vHost IP Adresse ist leer.';
-$wb['fastcgi_starter_path_error_empty'] = 'FastCGI Starter Pfad ist leer.';
-$wb['fastcgi_starter_script_error_empty'] = 'FastCGI Starter Script  ist leer.';
-$wb['fastcgi_alias_error_empty'] = 'FastCGI Alias ist leer.';
-$wb['fastcgi_phpini_path_error_empty'] = 'FastCGI php.ini Pfad ist leer.';
-$wb['fastcgi_children_error_empty'] = 'FastCGI Children ist leer.';
-$wb['fastcgi_max_requests_error_empty'] = 'FastCGI max. Requests ist leer.';
-$wb['fastcgi_bin_error_empty'] = 'FastCGI Bin ist leer.';
-$wb['jailkit_chroot_home_error_empty'] = 'Jailkit Chroot home ist leer.';
-$wb['jailkit_chroot_app_sections_error_empty'] = 'Jailkit Chroot Anwendungsbereiche ist leer.';
-$wb['jailkit_chroot_app_programs_error_empty'] = 'Jailkit Chrooted Anwendungen ist leer.';
-$wb['jailkit_chroot_cron_programs_error_empty'] = 'Jailkit Cron Chrooted Anwendungen ist leer.';
-$wb['vlogger_config_dir_error_empty'] = 'Konfigurationsverzeichnis ist leer.';
-$wb['cron_init_script_error_empty'] = 'Cron Startscript Name ist leer.';
-$wb['crontab_dir_error_empty'] = 'Pfad für individuelle Crontabs ist leer.';
-$wb['cron_wget_error_empty'] = 'Pfad zum wget Programm ist leer.';
-$wb['php_fpm_init_script_txt'] = 'PHP-FPM Init Script';
-$wb['php_fpm_init_script_error_empty'] = 'PHP-FPM Init Script ist leer.';
-$wb['php_fpm_ini_path_txt'] = 'PHP-FPM php.ini Pfad';
-$wb['php_fpm_ini_path_error_empty'] = 'PHP-FPM php.ini Pfad ist leer.';
-$wb['php_fpm_pool_dir_txt'] = 'PHP-FPM Pool Verzeichnis';
-$wb['php_fpm_pool_dir_error_empty'] = 'PHP-FPM Pool Verzeichnis ist leer.';
-$wb['php_fpm_start_port_txt'] = 'PHP-FPM Start Port';
-$wb['php_fpm_start_port_error_empty'] = 'PHP-FPM Start Port ist leer.';
-$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM Socket Verzeichnis';
-$wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM Socket Verzeichnis ist leer.';
-$wb['fastcgi_config_syntax_txt'] = 'FastCGI Konfigurations Syntax';
-$wb['try_rescue_txt'] = 'Aktiviere Service Monitoring und Neustart bei Unerreichbarkeit';
-$wb['do_not_try_rescue_httpd_txt'] = 'Deaktiviere HTTPD Monitoring';
-$wb['do_not_try_rescue_mongodb_txt'] = 'Deaktiviere MongoDB Monitoring';
-$wb['do_not_try_rescue_mysql_txt'] = 'Deaktiviere MySQL Monitoring';
-$wb['do_not_try_rescue_mail_txt'] = 'Deaktiviere E-Mail Monitoring';
-$wb['rescue_description_txt'] = '<b>Information:</b> Falls Sie MySQL stoppen möchten, wählen Sie die Funktion \'Deaktiviere MySQL Monitoring\' und warten Sie 2 bis 3 Minuten. Wenn Sie nicht 2 bis 3 Minuten warten wird ISPConfig versuchen MySQL wieder zu starten.';
-$wb['enable_sni_txt'] = 'Aktiviere SNI';
-$wb['set_folder_permissions_on_update_txt'] = 'Verzeichnisberechtigungen beim Update setzen';
-$wb['add_web_users_to_sshusers_group_txt'] = 'Webbenutzer zur -sshusers- hinzufügen';
-$wb['connect_userid_to_webid_txt'] = 'Linux Userid mit webid verknüpfen';
-$wb['connect_userid_to_webid_start_txt'] = 'Start ID für userid/webid Verknüpfung';
-$wb['realtime_blackhole_list_txt'] = 'Realtime Blackhole Liste';
-$wb['realtime_blackhole_list_note_txt'] = '(Mehrere Realtime Blackhole Listen mit Kommas trennen)';
-$wb['ssl_settings_txt'] = 'SSL Einstellungen';
-$wb['permissions_txt'] = 'Berechtigungen';
-$wb['php_settings_txt'] = 'PHP Einstellungen';
-$wb['apps_vhost_settings_txt'] = 'Apps vHost Einstellungen';
-$wb['awstats_settings_txt'] = 'AWStats Einstellungen';
-$wb['backup_mode_txt'] = 'Backupmodus';
-$wb['backup_mode_userzip'] = 'Backup Dateien gehören dem Web Benutzer (.zip Datei)';
-$wb['backup_mode_rootgz'] = 'Backup aller Dateien des Webverzeichnisses als Root Benutzer';
-$wb['backup_time_txt'] = 'Backupzeit';
-$wb['firewall_txt'] = 'Firewall';
-$wb['mailbox_quota_stats_txt'] = 'E-Mailkonto Beschränkung Statistiken';
-$wb['enable_ip_wildcard_txt'] = 'IP Adressen Wildcard (*) aktivieren';
-$wb['web_folder_protection_txt'] = 'Webverzeichnis unveränderlich machen (erweiterte Attribute)';
-$wb['overtraffic_notify_admin_txt'] = 'Ãœberschreiten des Datentransfer Limits an den Administrator senden';
-$wb['overtraffic_notify_client_txt'] = 'Ãœberschreiten des Datentransfer Limits an den Kunden senden';
-$wb['rbl_error_regex'] = 'Bitte geben Sie gültige RBL-Hostnamen an.';
-$wb['overquota_notify_admin_txt'] = 'Quota-Warnungen an den Administrator senden';
-$wb['overquota_notify_client_txt'] = 'Quota-Warnungen an den Kunden senden';
-$wb['overquota_notify_onok_txt'] = 'Meldung an den Kunden senden, wenn Belegung wieder ok';
-$wb['overquota_notify_freq_txt'] = 'Quota-Warnung alle X Tage versenden';
-$wb['overquota_notify_freq_note_txt'] = '0 = Meldung nur einmalig versenden, keine Wiederholung';
-$wb['admin_notify_events_txt'] = 'Sende E-Mail an Administrator ab folgendem Level';
-$wb['no_notifications_txt'] = 'Keine Benachrichtigungen';
-$wb['monit_url_txt'] = 'Monit-URL';
-$wb['monit_user_txt'] = 'Monit-Benutzer';
-$wb['monit_password_txt'] = 'Monit-Passwort';
-$wb['monit_url_error_regex'] = 'Ungültige Monit-URL';
-$wb['monit_url_note_txt'] = 'Platzhalter:';
-$wb['munin_url_txt'] = 'Munin-URL';
-$wb['munin_user_txt'] = 'Munin-Benutzer';
-$wb['munin_password_txt'] = 'Munin-Passwort';
-$wb['munin_url_error_regex'] = 'Ungültige Munin-URL';
-$wb['munin_url_note_txt'] = 'Platzhalter:';
-$wb['backup_dir_is_mount_txt'] = 'Backupverzeichnis ist ein eigener Mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount-Befehl, falls Backupverzeichnis nicht gemountet';
-$wb['backup_delete_txt'] = 'Backups loeschen wenn eine Domain / Webseite geloescht wird';
-$wb['v6_prefix_txt'] = 'IPv6 Prefix';
-$wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror';
-$wb['v6_prefix_length'] = 'Prefix zu lang fuer angegebene IPv6-Adresse ';
-$wb['monitor_system_updates_txt'] = 'Suche nach Linux updates';
-$wb['dkim_strength_txt'] = 'DKIM Stärke';
-$wb['hostname_error_regex'] = 'Invalid Hostname.';
-$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
-$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
-$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
-$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
-$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
-$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
-$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
-$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
-$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
-$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
-$wb['website_basedir_error_regex'] = 'Invalid website basedir or path too short, min. length 5 chars.';
-$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
-$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
-$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
-$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
-$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
-$wb['ca_path_error_regex'] = 'Invalid CA path.';
-$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
-$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
-$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
-$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
-$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
-$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
-$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
-$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
-$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
-$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
-$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
-$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
-$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
-$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
-$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
-$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
-$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
-$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
-$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
-$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
-$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
-$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
-$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
-$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
-$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
-$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
-$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
-$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
-$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
-$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
-$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
-$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
-$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
-$wb['network_filesystem_txt'] = 'Netzwerk-Dateisystem';
-$wb['overquota_db_notify_admin_txt'] = 'Datenbank-Quota-Warnungen an den Administrator senden';
-$wb['overquota_db_notify_client_txt'] = 'Datenbank-Quota-Warnungen an den Kunden senden';
-$wb['php_ini_check_minutes_txt'] = 'Prüfe php.ini alle X Minuten auf Änderungen';
-$wb['php_ini_check_minutes_error_empty'] = 'Bitte geben Sie einen Wert an, wie oft die php.ini auf Änderungen geprüft werden soll.';
-$wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung';
-$wb['php_handler_txt'] = 'Standard-PHP-Handler';
-$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
-$wb['enable_spdy_txt'] = 'Stellt SPDY/HTTP2 zur Verfügung';
-$wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
-$wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
-$wb['disabled_txt'] = 'Disabled';
-$wb['web_settings_txt'] = 'Web Server';
-$wb['xmpp_server_txt'] = 'XMPP Server';
-$wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
-$wb['xmpp_bosh_max_inactivity_txt'] = 'Max. BOSH inactivity time';
-$wb['xmpp_bosh_timeout_range_wrong'] = 'Please enter a bosh timeout range between 15 - 360';
-$wb['xmpp_module_saslauth'] = 'saslauth';
-$wb['xmpp_server_admins_txt'] = 'Server Admins (JIDs)';
-$wb['xmpp_modules_enabled_txt'] = 'Serverwide enabled plugins (one per line)';
-$wb['xmpp_ports_txt'] = 'Component ports';
-$wb['xmpp_port_http_txt'] = 'HTTP';
-$wb['xmpp_port_https_txt'] = 'HTTPS';
-$wb['xmpp_port_pastebin_txt'] = 'Pastebin';
-$wb['xmpp_port_bosh_txt'] = 'BOSH';
-$wb['skip_le_check_txt'] = 'Skip Lets Encrypt Check';
-$wb['migration_mode_txt'] = 'Server Migration Mode';
-$wb['nginx_enable_pagespeed_txt'] = 'Makes Pagespeed available';
-$wb['logging_txt'] = 'Store website access and error logs';
-$wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
-$wb['log_retention_txt'] = 'Log retention (days)';
-$wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
-$wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
-$wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
-$wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
-$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload Modus';
-?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng.rej b/interface/web/admin/lib/lang/de_server_config.lng.rej
deleted file mode 100644
index eeed14711e..0000000000
--- a/interface/web/admin/lib/lang/de_server_config.lng.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- interface/web/admin/lib/lang/de_server_config.lng
-+++ interface/web/admin/lib/lang/de_server_config.lng
-@@ -295,4 +295,7 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
- $wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
- $wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
- $wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
--?>
-+$wb['content_filter_txt'] = 'Content-Filter';
-+$wb['rspamd_url_txt'] = 'Rspamd-URL';
-+$wb['rspamd_user_txt'] = 'Rspamd-Benutzer';
-+$wb['rspamd_password_txt'] = 'Rspamd-Passwort';
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_server_config.lng.orig b/interface/web/admin/lib/lang/en_server_config.lng.orig
deleted file mode 100644
index ac0ee42b90..0000000000
--- a/interface/web/admin/lib/lang/en_server_config.lng.orig
+++ /dev/null
@@ -1,300 +0,0 @@
-<?php
-$wb["ufw_enable_txt"] = 'Enable';
-$wb["ufw_manage_builtins_txt"] = 'Manage Builtin Rules';
-$wb["ufw_ipv6_txt"] = 'Enable IPv6';
-$wb["ufw_default_input_policy_txt"] = 'Default Input Policy';
-$wb["ufw_default_output_policy_txt"] = 'Default Output Policy';
-$wb["ufw_default_forward_policy_txt"] = 'Default Forward Policy';
-$wb["ufw_default_application_policy_txt"] = 'Default Application Policy';
-$wb["ufw_log_level_txt"] = 'Log Level';
-$wb["jailkit_chroot_home_txt"] = 'Jailkit chroot home';
-$wb["jailkit_chroot_app_sections_txt"] = 'Jailkit chroot app sections';
-$wb["jailkit_chroot_app_programs_txt"] = 'Jailkit chrooted applications';
-$wb["jailkit_chroot_cron_programs_txt"] = 'Jailkit cron chrooted applications';
-$wb["website_path_txt"] = 'Website path';
-$wb["website_symlinks_txt"] = 'Website symlinks';
-$wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
-$wb["website_basedir_txt"] = 'Website basedir';
-$wb["website_autoalias_txt"] = 'Website auto alias';
-$wb["website_autoalias_note_txt"] = 'Placeholders:';
-$wb["vhost_conf_dir_txt"] = 'Vhost config dir';
-$wb["vhost_conf_enabled_dir_txt"] = 'Vhost config enabled dir';
-$wb["getmail_config_dir_txt"] = 'Getmail config dir';
-$wb["fastcgi_starter_path_txt"] = 'FastCGI starter path';
-$wb["fastcgi_starter_script_txt"] = 'FastCGI starter script';
-$wb["fastcgi_alias_txt"] = 'FastCGI Alias';
-$wb["fastcgi_phpini_path_txt"] = 'FastCGI php.ini Path';
-$wb["fastcgi_children_txt"] = 'FastCGI Children';
-$wb["fastcgi_max_requests_txt"] = 'FastCGI max. Requests';
-$wb["fastcgi_bin_txt"] = 'FastCGI Bin';
-$wb["module_txt"] = 'Module';
-$wb["maildir_path_txt"] = 'Maildir Path';
-$wb['maildir_format_txt'] = 'Maildir Format';
-$wb["homedir_path_txt"] = 'Homedir Path';
-$wb["dkim_path_txt"] = 'DKIM Path';
-$wb["mailuser_uid_txt"] = 'Mailuser UID';
-$wb["mailuser_gid_txt"] = 'Mailuser GID';
-$wb["mailuser_name_txt"] = 'Mailuser Name';
-$wb["mailuser_group_txt"] = 'Mailuser Group';
-$wb['mailbox_virtual_uidgid_maps_txt'] = 'Use Websites Linux uid for mailbox';
-$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'only in single web and mail-server-setup';
-$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid cannot be mapped in multi-server-setup.';
-$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Uid-mapping can only be used with dovecot.';
-$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Uid-mapping cannot be changed if there are already mail users.';
-$wb["relayhost_txt"] = 'Relayhost';
-$wb["relayhost_user_txt"] = 'Relayhost User';
-$wb["relayhost_password_txt"] = 'Relayhost Password';
-$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
-$wb["mailbox_size_limit_txt"] = 'Mailbox Size Limit';
-$wb["message_size_limit_txt"] = 'Message Size Limit';
-$wb["ip_address_txt"] = 'IP Address';
-$wb["netmask_txt"] = 'Netmask';
-$wb["gateway_txt"] = 'Gateway';
-$wb["hostname_txt"] = 'Hostname';
-$wb["nameservers_txt"] = 'Nameservers';
-$wb["auto_network_configuration_txt"] = 'Network Configuration';
-$wb["ip_address_error_wrong"] = 'Invalid IP address format.';
-$wb["netmask_error_wrong"] = 'Invalid Netmask format.';
-$wb["gateway_error_wrong"] = 'Invalid Gateway format.';
-$wb["hostname_error_empty"] = 'Hostname is empty.';
-$wb["hostname_error_regex"] = 'Invalid Hostname.';
-$wb["nameservers_error_empty"] = 'Nameserver is empty.';
-$wb["config_dir_txt"] = 'Config directory';
-$wb["init_script_txt"] = 'Cron init script name';
-$wb["crontab_dir_txt"] = 'Path for individual crontabs';
-$wb["wget_txt"] = 'Path to wget program';
-$wb["web_user_txt"] = 'Apache user';
-$wb["web_group_txt"] = 'Apache group';
-$wb["security_level_txt"] = 'Security level';
-$wb["loglevel_txt"] = 'Loglevel';
-$wb["apps_vhost_port_txt"] = 'Apps-vhost port';
-$wb["apps_vhost_ip_txt"] = 'Apps-vhost IP';
-$wb["apps_vhost_servername_txt"] = 'Apps-vhost Domain';
-$wb["bind_user_txt"] = 'BIND User';
-$wb["bind_group_txt"] = 'BIND Group';
-$wb["bind_zonefiles_dir_txt"] = 'BIND zonefiles directory';
-$wb["named_conf_path_txt"] = 'BIND named.conf path';
-$wb["bind_user_error_empty"] = 'BIND user is empty.';
-$wb["bind_group_error_empty"] = 'BIND group is empty.';
-$wb["bind_zonefiles_dir_error_empty"] = 'BIND zonefiles directory is empty.';
-$wb["named_conf_path_error_empty"] = 'BIND named.conf path is empty.';
-$wb["named_conf_local_path_error_empty"] = 'BIND named.conf.local path is empty.';
-$wb["mail_filter_syntax_txt"] = 'Mailfilter Syntax';
-$wb["pop3_imap_daemon_txt"] = 'POP3/IMAP Daemon';
-$wb["php_open_basedir_txt"] = 'PHP open_basedir';
-$wb["php_open_basedir_error_empty"] = 'PHP open_basedir is empty.';
-$wb["htaccess_allow_override_txt"] = '.htaccess AllowOverride';
-$wb["htaccess_allow_override_error_empty"] = '.htaccess AllowOverride is empty.';
-$wb["awstats_conf_dir_txt"] = 'awstats conf folder';
-$wb["awstats_data_dir_txt"] = 'awstats data folder';
-$wb["awstats_pl_txt"] = 'awstats.pl script';
-$wb["awstats_buildstaticpages_pl_txt"] = 'awstats_buildstaticpages.pl script';
-$wb["backup_dir_txt"] = 'Backup directory';
-$wb["backup_tmp_txt"] = 'Backup tmp directory for zip';
-$wb["named_conf_local_path_txt"] = 'BIND named.conf.local path';
-$wb["php_ini_path_cgi_txt"] = 'CGI php.ini path';
-$wb["php_ini_path_apache_txt"] = 'Apache php.ini path';
-$wb["check_apache_config_txt"] = 'Test apache configuration on restart';
-$wb["network_config_warning_txt"] = 'The network configuration option is only available for Debian and Ubuntu Servers. Do not enable this option if your network interface is not eth0.';
-$wb["CA_path_txt"] = 'CA Path';
-$wb["CA_pass_txt"] = 'CA passphrase';
-$wb["fastcgi_config_syntax_txt"] = 'FastCGI config syntax';
-$wb["backup_mode_txt"] = 'Backup mode';
-$wb["backup_mode_userzip"] = 'Backup web files owned by web user as zip';
-$wb["backup_mode_rootgz"] = 'Backup all files in web directory as root user';
-$wb['tmpdir_path_error_empty'] = 'tmp-dir Path is empty.';
-$wb['tmpdir_path_error_regex'] = 'Invalid tmp-dir path.';
-$wb["backup_time_txt"] = 'Backup time';
-$wb["server_type_txt"] = 'Server Type';
-$wb["nginx_vhost_conf_dir_txt"] = 'Nginx Vhost config dir';
-$wb["nginx_vhost_conf_enabled_dir_txt"] = 'Nginx Vhost config enabled dir';
-$wb["nginx_user_txt"] = 'Nginx user';
-$wb["nginx_group_txt"] = 'Nginx group';
-$wb["nginx_cgi_socket_txt"] = 'Nginx CGI Socket';
-$wb["backup_dir_error_empty"] = 'Backup directory is empty.';
-$wb["maildir_path_error_empty"] = 'Maildir Path is empty.';
-$wb["homedir_path_error_empty"] = 'Homedir Path is empty.';
-$wb["mailuser_uid_error_empty"] = 'Mailuser UID is empty.';
-$wb["mailuser_gid_error_empty"] = 'Mailuser GID is empty.';
-$wb["mailuser_name_error_empty"] = 'Mailuser Name is empty.';
-$wb["mailuser_group_error_empty"] = 'Mailuser Group is empty.';
-$wb["getmail_config_dir_error_empty"] = 'Getmail config dir is empty.';
-$wb["website_basedir_error_empty"] = 'Website basedir is empty.';
-$wb["website_path_error_empty"] = 'Website path is empty.';
-$wb["website_symlinks_error_empty"] = 'Website symlinks is empty.';
-$wb["vhost_conf_dir_error_empty"] = 'Vhost config dir is empty.';
-$wb["vhost_conf_enabled_dir_error_empty"] = 'Vhost config enabled dir is empty.';
-$wb["nginx_vhost_conf_dir_error_empty"] = 'Nginx Vhost config dir is empty.';
-$wb["nginx_vhost_conf_enabled_dir_error_empty"] = 'Nginx Vhost config enabled dir is empty.';
-$wb["apache_user_error_empty"] = 'Apache user is empty.';
-$wb["apache_group_error_empty"] = 'Apache group is empty.';
-$wb["nginx_user_error_empty"] = 'Nginx user is empty.';
-$wb["nginx_group_error_empty"] = 'Nginx group is empty.';
-$wb["php_ini_path_apache_error_empty"] = 'Apache php.ini path is empty.';
-$wb["php_ini_path_cgi_error_empty"] = 'CGI php.ini path is empty.';
-$wb["nginx_cgi_socket_empty"] = 'Nginx CGI Socket is empty.';
-$wb["apps_vhost_port_error_empty"] = 'Apps-vhost port is empty.';
-$wb["apps_vhost_ip_error_empty"] = 'Apps-vhost IP is empty.';
-$wb["fastcgi_starter_path_error_empty"] = 'FastCGI starter path is empty.';
-$wb["fastcgi_starter_script_error_empty"] = 'FastCGI starter script is empty.';
-$wb["fastcgi_alias_error_empty"] = 'FastCGI Alias is empty.';
-$wb["fastcgi_phpini_path_error_empty"] = 'FastCGI php.ini Path is empty.';
-$wb["fastcgi_children_error_empty"] = 'FastCGI Children is empty.';
-$wb["fastcgi_max_requests_error_empty"] = 'FastCGI max. Requests is empty.';
-$wb["fastcgi_bin_error_empty"] = 'FastCGI Bin is empty.';
-$wb["jailkit_chroot_home_error_empty"] = 'Jailkit chroot home is empty.';
-$wb["jailkit_chroot_app_sections_error_empty"] = 'Jailkit chroot app sections is empty.';
-$wb["jailkit_chroot_app_programs_error_empty"] = 'Jailkit chrooted applications is empty.';
-$wb["jailkit_chroot_cron_programs_error_empty"] = 'Jailkit cron chrooted applications is empty.';
-$wb["vlogger_config_dir_error_empty"] = 'Config directory is empty.';
-$wb["cron_init_script_error_empty"] = 'Cron init script name is empty.';
-$wb["crontab_dir_error_empty"] = 'Path for individual crontabs is empty.';
-$wb["cron_wget_error_empty"] = 'Path to wget program is empty.';
-$wb["php_fpm_init_script_txt"] = 'PHP-FPM init script';
-$wb["php_fpm_init_script_error_empty"] = 'PHP-FPM init script is empty.';
-$wb["php_fpm_ini_path_txt"] = 'PHP-FPM php.ini path';
-$wb["php_fpm_ini_path_error_empty"] = 'PHP-FPM php.ini path is empty.';
-$wb["php_fpm_pool_dir_txt"] = 'PHP-FPM pool directory';
-$wb["php_fpm_pool_dir_error_empty"] = 'PHP-FPM pool directory is empty.';
-$wb["php_fpm_start_port_txt"] = 'PHP-FPM start port';
-$wb["php_fpm_start_port_error_empty"] = 'PHP-FPM start port is empty.';
-$wb["php_fpm_socket_dir_txt"] = 'PHP-FPM socket directory';
-$wb["php_fpm_socket_dir_error_empty"] = 'PHP-FPM socket directory is empty.';
-$wb["try_rescue_txt"] = 'Enable service monitoring and restart on failure';
-$wb["do_not_try_rescue_httpd_txt"] = 'Disable HTTPD monitoring';
-$wb["do_not_try_rescue_mongodb_txt"] = 'Disable MongoDB monitoring';
-$wb["do_not_try_rescue_mysql_txt"] = 'Disable MySQL monitoring';
-$wb["do_not_try_rescue_mail_txt"] = 'Disable Email monitoring';
-$wb["rescue_description_txt"] = '<b>Information:</b> If you want to shut down mysql you have to select the "Disable MySQL monitor" checkbox and then wait 2-3 minutes.<br>If you do not wait 2-3 minutes, rescue will try to restart mysql!';
-$wb["enable_sni_txt"] = 'Enable SNI';
-$wb["set_folder_permissions_on_update_txt"] = 'Set folder permissions on update';
-$wb["add_web_users_to_sshusers_group_txt"] = 'Add web users to -sshusers- group';
-$wb["connect_userid_to_webid_txt"] = 'Connect Linux userid to webid';
-$wb["connect_userid_to_webid_start_txt"] = 'Start ID for userid/webid connect';
-$wb["realtime_blackhole_list_txt"] = 'Real-time Blackhole List';
-$wb["realtime_blackhole_list_note_txt"] = '(Separate RBL\'s with commas)';
-$wb["ssl_settings_txt"] = 'SSL Settings';
-$wb["permissions_txt"] = 'Permissions';
-$wb["php_settings_txt"] = 'PHP Settings';
-$wb["apps_vhost_settings_txt"] = 'Apps Vhost Settings';
-$wb["awstats_settings_txt"] = 'AWStats Settings';
-$wb["firewall_txt"] = 'Firewall';
-$wb["mailbox_quota_stats_txt"] = 'Mailbox quota statistics';
-$wb["enable_ip_wildcard_txt"] = 'Enable IP wildcard (*)';
-$wb["web_folder_protection_txt"] = 'Make web folders immutable (extended attributes)';
-$wb["overtraffic_notify_admin_txt"] = 'Send overtraffic notification to admin';
-$wb["overtraffic_notify_client_txt"] = 'Send overtraffic notification to client';
-$wb["rbl_error_regex"] = 'Please specify valid RBL hostnames.';
-$wb["overquota_notify_admin_txt"] = 'Send quota warnings to admin';
-$wb["overquota_notify_client_txt"] = 'Send quota warnings to client';
-$wb["overquota_notify_onok_txt"] = 'Send quota ok message to client';
-$wb['overquota_notify_freq_txt'] = 'Send quota warning each X days';
-$wb['overquota_notify_freq_note_txt'] = '0 = send message just once, no repeated messages';
-$wb['admin_notify_events_txt'] = 'Send email to admin starting with the following level';
-$wb['no_notifications_txt'] = 'No Notifications';
-$wb['monit_url_txt'] = 'Monit URL';
-$wb['monit_user_txt'] = 'Monit User';
-$wb['monit_password_txt'] = 'Monit Password';
-$wb['monit_url_error_regex'] = 'Invalid Monit URL';
-$wb['monit_url_note_txt'] = 'Placeholder:';
-$wb['munin_url_txt'] = 'Munin URL';
-$wb['munin_user_txt'] = 'Munin User';
-$wb['munin_password_txt'] = 'Munin Password';
-$wb['munin_url_error_regex'] = 'Invalid Munin URL';
-$wb['munin_url_note_txt'] = 'Placeholder:';
-$wb["v6_prefix_txt"] = 'IPv6 Prefix';
-$wb["vhost_rewrite_v6_txt"] = 'Rewrite IPv6 on Mirror';
-$wb["v6_prefix_length"] = 'Prefix too long according to defined IPv6 ';
-$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
-$wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
-$wb["overquota_db_notify_admin_txt"] = 'Send DB quota warnings to admin';
-$wb["overquota_db_notify_client_txt"] = 'Send DB quota warnings to client';
-$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
-$wb['php_handler_txt'] = "Default PHP Handler";
-$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
-$wb['disabled_txt'] = 'Disabled';
-$wb['dkim_strength_txt'] = 'DKIM strength';
-$wb['monitor_system_updates_txt'] = 'Check for Linux updates';
-$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
-$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
-$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
-$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
-$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
-$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
-$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
-$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
-$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
-$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
-$wb['website_basedir_error_regex'] = 'Invalid website basedir path, min. length 5 chars.';
-$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
-$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
-$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
-$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
-$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
-$wb['ca_path_error_regex'] = 'Invalid CA path.';
-$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
-$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
-$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
-$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
-$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
-$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
-$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
-$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
-$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
-$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
-$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
-$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
-$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
-$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
-$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
-$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
-$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
-$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
-$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
-$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
-$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
-$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
-$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
-$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
-$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
-$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
-$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
-$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
-$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
-$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
-$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
-$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
-$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
-$wb['network_filesystem_txt'] = 'Network Filesystem';
-$wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
-$wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
-$wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
-$wb['web_settings_txt'] = 'Web Server';
-$wb['xmpp_server_txt'] = 'XMPP Server';
-$wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
-$wb['xmpp_bosh_max_inactivity_txt'] = 'Max. BOSH inactivity time';
-$wb['xmpp_bosh_timeout_range_wrong'] = 'Please enter a bosh timeout range between 15 - 360';
-$wb['xmpp_module_saslauth'] = 'saslauth';
-$wb['xmpp_server_admins_txt'] = 'Server Admins (JIDs)';
-$wb['xmpp_modules_enabled_txt'] = 'Serverwide enabled plugins (one per line)';
-$wb['xmpp_ports_txt'] = 'Component ports';
-$wb['xmpp_port_http_txt'] = 'HTTP';
-$wb['xmpp_port_https_txt'] = 'HTTPS';
-$wb['xmpp_port_pastebin_txt'] = 'Pastebin';
-$wb['xmpp_port_bosh_txt'] = 'BOSH';
-$wb["disable_bind_log_txt"] = "Disable bind9 messages for Loglevel WARN";
-$wb["apps_vhost_enabled_txt"] = "Apps-vhost enabled";
-$wb['skip_le_check_txt'] = 'Skip Lets Encrypt Check';
-$wb['migration_mode_txt'] = 'Server Migration Mode';
-$wb['nginx_enable_pagespeed_txt'] = 'Makes Pagespeed available';
-$wb['logging_txt'] = 'Store website access and error logs';
-$wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
-$wb['log_retention_txt'] = 'Log retention (days)';
-$wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
-$wb['php_default_name_txt'] = 'Description Default PHP-Version';
-$wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
-$wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
-$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
-?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng.rej b/interface/web/admin/lib/lang/en_server_config.lng.rej
deleted file mode 100644
index 1460249765..0000000000
--- a/interface/web/admin/lib/lang/en_server_config.lng.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- interface/web/admin/lib/lang/en_server_config.lng
-+++ interface/web/admin/lib/lang/en_server_config.lng
-@@ -296,4 +296,7 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
- $wb['php_default_name_txt'] = 'Description Default PHP-Version';
- $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
- $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
--?>
-+$wb['content_filter_txt'] = 'Content Filter';
-+$wb['rspamd_url_txt'] = 'Rspamd URL';
-+$wb['rspamd_user_txt'] = 'Rspamd User';
-+$wb['rspamd_password_txt'] = 'Rspamd Password';
\ No newline at end of file
diff --git a/interface/web/mail/form/spamfilter_policy.tform.php.orig b/interface/web/mail/form/spamfilter_policy.tform.php.orig
deleted file mode 100644
index 31e8b8092a..0000000000
--- a/interface/web/mail/form/spamfilter_policy.tform.php.orig
+++ /dev/null
@@ -1,496 +0,0 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"]    = "Spamfilter policy";
-$form["description"]  = "";
-$form["name"]    = "spamfilter_policy";
-$form["action"]   = "spamfilter_policy_edit.php";
-$form["db_table"]  = "spamfilter_policy";
-$form["db_table_idx"] = "id";
-$form["db_history"]  = "yes";
-$form["tab_default"] = "policy";
-$form["list_default"] = "spamfilter_policy_list.php";
-$form["auth"]   = 'yes'; // yes / no
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = 'r'; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['policy'] = array (
-	'title'  => "Policy",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_policy_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'policy_name' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
-					'errmsg'=> 'policyname_error_notempty'),
-			),
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'virus_lover' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'spam_lover' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'banned_files_lover' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'bad_header_lover' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'bypass_virus_checks' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'bypass_banned_checks' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'bypass_header_checks' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-$form["tabs"]['quarantine'] = array (
-	'title'  => "Quarantine",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_quarantine_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'virus_quarantine_to' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'spam_quarantine_to' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'banned_quarantine_to' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'bad_header_quarantine_to' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'clean_quarantine_to' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'other_quarantine_to' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['taglevel'] = array (
-	'title'  => "Tag-Level",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_taglevel_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'spam_tag_level' => array (
-			'datatype' => 'DOUBLE',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		'spam_tag2_level' => array (
-			'datatype' => 'DOUBLE',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		'spam_kill_level' => array (
-			'datatype' => 'DOUBLE',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		'spam_dsn_cutoff_level' => array (
-			'datatype' => 'DOUBLE',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		'spam_quarantine_cutoff_level' => array (
-			'datatype' => 'DOUBLE',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		'spam_modifies_subj' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'spam_subject_tag' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'spam_subject_tag2' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-$form["tabs"]['other'] = array (
-	'title'  => "Other",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_other_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'addr_extension_virus' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'addr_extension_spam' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'addr_extension_banned' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'addr_extension_bad_header' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'warnvirusrecip' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'warnbannedrecip' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'warnbadhrecip' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'N',
-			'value'  => array('N' => 'No', 'Y' => 'Yes')
-		),
-		'newvirus_admin' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'virus_admin' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'banned_admin' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'bad_header_admin' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'spam_admin' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-
-		'message_size_limit' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		'banned_rulenames' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-?>
-- 
GitLab


From a23052c6cd5a63ddb87cee2d42f5117d69fd50ba Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 31 Jul 2019 15:14:20 +0200
Subject: [PATCH 077/571] - fixed argument replacement in exec_safe function

---
 interface/lib/classes/system.inc.php | 3 ++-
 server/lib/classes/system.inc.php    | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index ede53034d3..0be2b6b1e9 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -71,7 +71,8 @@ class system {
 		}
 		if($arg_count > 1) {
 			$args = func_get_args();
-
+			array_shift($args);
+			
 			$pos = 0;
 			$a = 0;
 			foreach($args as $value) {
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 88cf83eeba..288f9d73f8 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -2077,6 +2077,7 @@ class system{
 		}
 		if($arg_count > 1) {
 			$args = func_get_args();
+			array_shift($args);
 
 			$pos = 0;
 			$a = 0;
-- 
GitLab


From d6ab12b7da16a426b96fc086f828ae7f81b573ec Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 31 Jul 2019 15:46:25 +0200
Subject: [PATCH 078/571] - fixed PHP warning (undefined constant openvz_tools)

---
 server/lib/classes/cron.d/100-monitor_openvz.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_openvz.inc.php b/server/lib/classes/cron.d/100-monitor_openvz.inc.php
index 30b51b4b5f..adc092ec95 100644
--- a/server/lib/classes/cron.d/100-monitor_openvz.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_openvz.inc.php
@@ -69,7 +69,7 @@ class cronjob_monitor_openvz extends cronjob {
 		/*
 			Fetch the data into a array
 		 */
-		$app->load(openvz_tools);
+		$app->load('openvz_tools');
 		$openVzTools = new openvz_tools();
 		$data = $openVzTools->getOpenVzVeInfo();
 
@@ -98,7 +98,7 @@ class cronjob_monitor_openvz extends cronjob {
 		/*
 			Fetch the data into a array
 		 */
-		$app->load(openvz_tools);
+		$app->load('openvz_tools');
 		$openVzTools = new openvz_tools();
 		$data = $openVzTools->getOpenVzVeBeanCounter();
 
-- 
GitLab


From cbb258385a579f319ca6dde17f9b20158c5d4f6e Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 31 Jul 2019 15:47:32 +0200
Subject: [PATCH 079/571] - fixed PHP warning The each() function is deprecated
 in cron.inc.php

---
 server/lib/classes/cron.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/cron.inc.php b/server/lib/classes/cron.inc.php
index 48ca093739..c6c2ad02b2 100644
--- a/server/lib/classes/cron.inc.php
+++ b/server/lib/classes/cron.inc.php
@@ -264,7 +264,7 @@ class cron {
 		if(!array_key_exists($sField, $this->_aValidValues)) return false;
 
 		reset($this->_aValidValues[$sField]);
-		while(($cur = each($this->_aValidValues[$sField])) !== false) {
+		foreach($this->_aValidValues[$sField] as $cur) {
 			if($bIncludeCurrent == true && $cur['value'] >= $iValue) return $cur['value'];
 			elseif($cur['value'] > $iValue) return $cur['value'];
 		}
-- 
GitLab


From a0fed931cbf202c6d94672d3401e9286b6643843 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 31 Jul 2019 15:53:06 +0200
Subject: [PATCH 080/571] - fixed problem with gid/uid problem on user creation
 (apache2 and nginx plugin)

---
 server/plugins-available/apache2_plugin.inc.php | 10 +++++-----
 server/plugins-available/nginx_plugin.inc.php   | 10 +++++-----
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 2183e96eb4..ad8de1ab4c 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -606,7 +606,7 @@ class apache2_plugin {
 
 		$groupname = $data['new']['system_group'];
 		if($data['new']['system_group'] != '' && !$app->system->is_group($data['new']['system_group'])) {
-			$app->system->exec_safe('groupadd ? ?', $fixed_gid_param, $groupname);
+			$app->system->exec_safe('groupadd ' . $fixed_gid_param . ' ?', $groupname);
 			if($apache_chrooted) $app->system->exec_safe('chroot ? groupadd ?', $web_config['website_basedir'], $groupname);
 			$app->log('Adding the group: '.$groupname, LOGLEVEL_DEBUG);
 		}
@@ -614,11 +614,11 @@ class apache2_plugin {
 		$username = $data['new']['system_user'];
 		if($data['new']['system_user'] != '' && !$app->system->is_user($data['new']['system_user'])) {
 			if($web_config['add_web_users_to_sshusers_group'] == 'y') {
-				$app->system->exec_safe('useradd -d ? -g ? ? -G sshusers ? -s /bin/false', $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
-				if($apache_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ? -G sshusers ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
+				$app->system->exec_safe('useradd -d ? -g ? ' . $fixed_uid_param . ' -G sshusers ? -s /bin/false', $data['new']['document_root'], $groupname, $username);
+				if($apache_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ' . $fixed_uid_param . ' -G sshusers ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $username);
 			} else {
-				$app->system->exec_safe('useradd -d ? -g ? ? ? -s /bin/false', $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
-				if($apache_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ? ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
+				$app->system->exec_safe('useradd -d ? -g ? ' . $fixed_uid_param . ' ? -s /bin/false', $data['new']['document_root'], $groupname, $username);
+				if($apache_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ' . $fixed_uid_param . ' ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $username);
 			}
 			$app->log('Adding the user: '.$username, LOGLEVEL_DEBUG);
 		}
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 9913299aa5..86d5aba14f 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -451,7 +451,7 @@ class nginx_plugin {
 
 		$groupname = $data['new']['system_group'];
 		if($data['new']['system_group'] != '' && !$app->system->is_group($data['new']['system_group'])) {
-			$app->system->exec_safe('groupadd ? ?', $fixed_gid_param, $groupname);
+			$app->system->exec_safe('groupadd ' . $fixed_gid_param . ' ?', $groupname);
 			if($nginx_chrooted) $app->system->exec_safe('chroot ? groupadd ?', $web_config['website_basedir'], $groupname);
 			$app->log('Adding the group: '.$groupname, LOGLEVEL_DEBUG);
 		}
@@ -459,11 +459,11 @@ class nginx_plugin {
 		$username = $data['new']['system_user'];
 		if($data['new']['system_user'] != '' && !$app->system->is_user($data['new']['system_user'])) {
 			if($web_config['add_web_users_to_sshusers_group'] == 'y') {
-				$app->system->exec_safe('useradd -d ? -g ? ? -G sshusers ? -s /bin/false', $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
-				if($nginx_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ? -G sshusers ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
+				$app->system->exec_safe('useradd -d ? -g ? ' . $fixed_uid_param . ' -G sshusers ? -s /bin/false', $data['new']['document_root'], $groupname, $username);
+				if($nginx_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ' . $fixed_uid_param . ' -G sshusers ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $username);
 			} else {
-				$app->system->exec_safe('useradd -d ? -g ? ? ? -s /bin/false', $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
-				if($nginx_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ? ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $fixed_uid_param, $username);
+				$app->system->exec_safe('useradd -d ? -g ? ' . $fixed_uid_param . ' ? -s /bin/false', $data['new']['document_root'], $groupname, $username);
+				if($nginx_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ' . $fixed_uid_param . ' ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $username);
 			}
 			$app->log('Adding the user: '.$username, LOGLEVEL_DEBUG);
 		}
-- 
GitLab


From 112102507f29ea3b10313bac16e46978773f77db Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 31 Jul 2019 15:58:17 +0200
Subject: [PATCH 081/571] - fixed invalid argument count on exec_safe in
 shell_user plugin

---
 server/plugins-available/shelluser_base_plugin.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 90e3293ad7..1fa61f8438 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -129,9 +129,9 @@ class shelluser_base_plugin {
 					$app->system->chgrp($homedir,$data['new']['pgroup'],false);
 				}
 				$command = 'useradd -d ? -g ? -o ?'; // non unique
-				if($data['new']['password'] != '') $command .= ' -p ?';
+				if($data['new']['password'] != '') $command .= ' -p ' . escapeshellarg($data['new']['password']);
 				$command .= ' -s ? -u ? ?';
-				$app->system->exec_safe($command, $homedir, $data['new']['pgroup'], $data['new']['password'], $data['new']['shell'], $uid, $data['new']['username']);
+				$app->system->exec_safe($command, $homedir, $data['new']['pgroup'], $data['new']['shell'], $uid, $data['new']['username']);
 				$app->log("Executed command: ".$command, LOGLEVEL_DEBUG);
 				$app->log("Added shelluser: ".$data['new']['username'], LOGLEVEL_DEBUG);
 				
-- 
GitLab


From 6e4209499f267108c7ac25a1244177255b4b9820 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 31 Jul 2019 16:00:16 +0200
Subject: [PATCH 082/571] - fixed parameter naming in app.inc.php (interface)

---
 interface/lib/app.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index 46f7213240..11bd024398 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -78,7 +78,7 @@ class app {
 		
 		$this->uses($prop);
 		if(property_exists($this, $prop)) return $this->{$prop};
-		else trigger_error('Undefined property ' . $name . ' of class app', E_USER_WARNING);
+		else trigger_error('Undefined property ' . $prop . ' of class app', E_USER_WARNING);
 	}
 	
 	public function __destruct() {
-- 
GitLab


From a68bd9a76c61e04665fb144762aba2d57dd8c88b Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 31 Jul 2019 16:09:03 +0200
Subject: [PATCH 083/571] - too many arguments for useradd in shell user plugin

---
 server/plugins-available/shelluser_base_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 1fa61f8438..b4e47b4e97 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -128,7 +128,7 @@ class shelluser_base_plugin {
 					$app->system->chown($homedir,$data['new']['puser'],false);
 					$app->system->chgrp($homedir,$data['new']['pgroup'],false);
 				}
-				$command = 'useradd -d ? -g ? -o ?'; // non unique
+				$command = 'useradd -d ? -g ? -o'; // non unique
 				if($data['new']['password'] != '') $command .= ' -p ' . escapeshellarg($data['new']['password']);
 				$command .= ' -s ? -u ? ?';
 				$app->system->exec_safe($command, $homedir, $data['new']['pgroup'], $data['new']['shell'], $uid, $data['new']['username']);
-- 
GitLab


From 8f1357074fec6a5a74bd3531a38a581cad8550ab Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 1 Aug 2019 19:20:52 +0200
Subject: [PATCH 084/571] - set autofocus on username/email field for login
 page, implements #5358

---
 interface/web/login/templates/index.htm          | 2 +-
 interface/web/login/templates/password_reset.htm | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/login/templates/index.htm b/interface/web/login/templates/index.htm
index 9a75a66cbd..e03e58f1f1 100644
--- a/interface/web/login/templates/index.htm
+++ b/interface/web/login/templates/index.htm
@@ -4,7 +4,7 @@
 					<form accept-charset="UTF-8" role="form" method="post" action="index.php">
                     <fieldset>
 			    	  	<div class="form-group">
-			    		    <input class="form-control" placeholder="{tmpl_var name='username_txt'}" name="username" id="username" type="text">
+			    		    <input class="form-control" placeholder="{tmpl_var name='username_txt'}" name="username" id="username" type="text" autofocus>
 			    		</div>
 			    		<div class="form-group">
 			    			<input class="form-control" placeholder="{tmpl_var name='password_txt'}" name="password" id="password" type="password" value="">
diff --git a/interface/web/login/templates/password_reset.htm b/interface/web/login/templates/password_reset.htm
index 66faf490f4..49fa528834 100644
--- a/interface/web/login/templates/password_reset.htm
+++ b/interface/web/login/templates/password_reset.htm
@@ -9,7 +9,7 @@
 <form accept-charset="UTF-8" role="form" method="post" action="password_reset.php">
 <fieldset>
 	<div class="form-group">
-		<input class="form-control" placeholder="{tmpl_var name='email_txt'}" name="email" id="email" type="text">
+		<input class="form-control" placeholder="{tmpl_var name='email_txt'}" name="email" id="email" type="text" autofocus>
 	</div>
 	<div class="form-group">
 		<input class="form-control" placeholder="{tmpl_var name='username_txt'}" name="username" id="username" type="text">
-- 
GitLab


From 793394b5084d1bf912e5e94955cbcdaee18c1545 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 2 Aug 2019 13:44:58 +0200
Subject: [PATCH 085/571] - fixed invalid arguments for exec_safe on dkim

---
 interface/web/mail/ajax_get_json.php | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/interface/web/mail/ajax_get_json.php b/interface/web/mail/ajax_get_json.php
index 69705ba6f7..412958a315 100644
--- a/interface/web/mail/ajax_get_json.php
+++ b/interface/web/mail/ajax_get_json.php
@@ -54,8 +54,9 @@ if($type == 'create_dkim' && $domain_id != ''){
 	if ($dkim_strength=='') $dkim_strength = 2048;
 	
 	$rnd_val = $dkim_strength * 10;
-	$app->system->exec_safe('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null', $output, $result);
-	$app->system->exec_safe('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null', $privkey, $result);
+	$app->system->exec_safe('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null');
+	$app->system->exec_safe('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null');
+	$privkey = $app->system->last_exec_out();
 	unlink("../../temp/random-data.bin");
 	$dkim_private='';
 	foreach($privkey as $values) $dkim_private=$dkim_private.$values."\n";
-- 
GitLab


From e39bc1d6b6db40f70d59340b4dd45957bf9e5499 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 2 Aug 2019 14:16:02 +0200
Subject: [PATCH 086/571] - dkim_signing conf for rspamd not readable for
 daemon

---
 install/lib/installer_base.lib.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 4db0da1ecf..6fd8024e86 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1578,13 +1578,13 @@ class installer_base {
 			exec('cp tpl/rspamd_neural_group.conf.master /etc/rspamd/local.d/neural_group.conf');
 		}
 
-		exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/override.d/*');
-
 		$tpl = new tpl();
 		$tpl->newTemplate('rspamd_dkim_signing.conf.master');
 		$tpl->setVar('dkim_path', $mail_config['dkim_path']);
 		wf('/etc/rspamd/local.d/dkim_signing.conf', $tpl->grab());
 
+		exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/override.d/*');
+		
 		$command = 'usermod -a -G amavis _rspamd';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 			
-- 
GitLab


From 6311f1edc90f5a5327ca496f2fe03e833d98f130 Mon Sep 17 00:00:00 2001
From: Patrick ZAJDA <patrick@zajda.fr>
Date: Sat, 3 Aug 2019 16:44:50 +0200
Subject: [PATCH 087/571] Put http to https redirect before SEO in Nginx
 virtualhost. It makes better the compliance with HSTS, http to https redirect
 must be done before domain to www.domain.

---
 server/conf/nginx_vhost.conf.master | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index e78a107c77..b1db61fe1c 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -25,6 +25,13 @@ server {
 
         root   <tmpl_var name='web_document_root_www'>;
 		
+<tmpl_if name='ssl_enabled'>
+<tmpl_if name='rewrite_to_https' op='==' value='y'>
+        if ($scheme != "https") {
+            rewrite ^ https://$http_host$request_uri? permanent;
+        }
+</tmpl_if>
+</tmpl_if>
 <tmpl_if name='seo_redirect_enabled'>
         if ($http_host <tmpl_var name='seo_redirect_operator'> "<tmpl_var name='seo_redirect_origin_domain'>") {
             rewrite ^ $scheme://<tmpl_var name='seo_redirect_target_domain'>$request_uri? permanent;
@@ -40,13 +47,6 @@ server {
             rewrite ^<tmpl_var name='local_redirect_exclude'>(.*)$ <tmpl_var name='local_redirect_target'>$2 <tmpl_var name='local_redirect_type'>;
         }
 </tmpl_loop>
-<tmpl_if name='ssl_enabled'>
-<tmpl_if name='rewrite_to_https' op='==' value='y'>
-        if ($scheme != "https") {
-            rewrite ^ https://$http_host$request_uri? permanent;
-        }
-</tmpl_if>
-</tmpl_if>
 
 <tmpl_loop name="own_redirects">
 <tmpl_if name='use_rewrite'>
-- 
GitLab


From af99f3ef9682e9a5e75d9b67698ee6e57436c6b9 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 6 Aug 2019 13:45:09 +0200
Subject: [PATCH 088/571] Fixes #5362 wrong pool dir used for php-fpm

---
 server/plugins-available/apache2_plugin.inc.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index ad8de1ab4c..59e97629cb 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1559,9 +1559,11 @@ class apache2_plugin {
 
 		if($default_php_fpm){
 			$pool_dir = $web_config['php_fpm_pool_dir'];
+		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
 		$pool_dir = trim($pool_dir);
+
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['new']['domain_id'];
 		$socket_dir = $web_config['php_fpm_socket_dir'];
-- 
GitLab


From 8b2ecd98f9c43966475a736ee6105dde3f140593 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Wed, 7 Aug 2019 12:42:49 +0200
Subject: [PATCH 089/571] fixed typo

---
 interface/web/dns/dns_dkim_edit.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/dns/dns_dkim_edit.php b/interface/web/dns/dns_dkim_edit.php
index 35bac0d0c6..5c95b2033d 100644
--- a/interface/web/dns/dns_dkim_edit.php
+++ b/interface/web/dns/dns_dkim_edit.php
@@ -128,7 +128,7 @@ class page_action extends tform_actions {
 		// check for duplicate entry
 		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data = ? AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord["data"], $this->dataRecord['name']);
 		if ($check!='') $app->tform->errorMessage .= $app->tform->wordbook["record_exists_txt"];
-		if (empty($this->dataRecord['data'])) $app->tform->errorMessage /= $app->tform->wordbook["dkim_disabled_txt"];
+		if (empty($this->dataRecord['data'])) $app->tform->errorMessage .= $app->tform->wordbook["dkim_disabled_txt"];
 
 		// validate selector and public-key
 		if (empty($this->dataRecord['selector'])) $app->tform->errorMessage .= '<br/>'.$app->tform->wordbook["dkim_selector_empty_txt"].'<br/>';
-- 
GitLab


From c3e2fd1604eb485e08e4a6566b8b43e0048c3b19 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 12 Aug 2019 14:13:22 +0200
Subject: [PATCH 090/571] - rspamd is not set even if it is installed

---
 install/lib/installer_base.lib.php | 2 ++
 install/lib/update.lib.php         | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 6fd8024e86..b60300e2b1 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -326,6 +326,8 @@ class installer_base {
 		$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
 		$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
 		$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
+		$tpl_ini_array['mail']['content_filter'] = @($conf['rspamd']['installed']) ? 'rspamd' : 'amavis';
+		$tpl_ini_array['mail']['rspamd_available'] = @($conf['rspamd']['installed']) ? 'y' : 'n';
 		$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
 		$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
 		$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php
index fd1a34b2ca..9deb8ca10e 100644
--- a/install/lib/update.lib.php
+++ b/install/lib/update.lib.php
@@ -335,6 +335,9 @@ function updateDbAndIni() {
 	$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
 	$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
 	$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
+	// do not switch to rspamd automatically!
+	// $tpl_ini_array['mail']['content_filter'] = @($conf['rspamd']['installed']) ? 'rspamd' : 'amavis';
+	$tpl_ini_array['mail']['rspamd_available'] = @($conf['rspamd']['installed']) ? 'y' : 'n';
 	$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
 	$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
 	$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
-- 
GitLab


From befdfb2ae5e9d33c90a1584c3be0fd055bcd0687 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 12 Aug 2019 15:01:31 +0200
Subject: [PATCH 091/571] - added missing rspamd lines in apps vhost template
 on install

---
 install/lib/installer_base.lib.php   | 11 ++++++++++-
 install/tpl/apache_apps.vhost.master | 18 ++++++++++++++++++
 install/tpl/nginx_apps.vhost.master  | 24 ++++++++++++++++++++++++
 3 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index b60300e2b1..c7f955d945 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -2226,7 +2226,10 @@ class installer_base {
 				$tpl->setVar('logging','yes');
 			}
 
-
+			if($conf['rspamd']['installed'] == true) {
+				$tpl->setVar('use_rspamd', 'yes');
+			}
+			
 			// comment out the listen directive if port is 80 or 443
 			if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) {
 				$tpl->setVar('vhost_port_listen','#');
@@ -2294,6 +2297,12 @@ class installer_base {
 				$apps_vhost_ip = $conf['web']['apps_vhost_ip'].':';
 			}
 
+			if($conf['rspamd']['installed'] == true) {
+				$content = str_replace('{use_rspamd}', '', $content);
+			} else {
+				$content = str_replace('{use_rspamd}', '# ', $content);
+			}
+			
 			$socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
 			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
 			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index ee1b693097..9cccf8d38e 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -19,6 +19,12 @@
 	RequestHeader unset Proxy early
   </IfModule>
   
+  {tmpl_if name="enable_spdy" op="==" value="y"}
+  <IfModule spdy_module>
+	SpdyEnabled on
+  </IfModule>
+  {/tmpl_if}
+
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -68,6 +74,18 @@
     </Directory>
   </IfModule>
 
+{tmpl_if name="use_rspamd"}
+  <Location /rspamd>
+        Order allow,deny
+        Allow from all
+  </Location>
+  RewriteEngine On
+  RewriteRule ^/rspamd$ /rspamd/ [R,L]
+  RewriteRule ^/rspamd/(.*) http://127.0.0.1:11334/$1 [P]
+{/tmpl_if}
+
+
+
 </VirtualHost>
 
 
diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master
index 3d00d11106..871dff8c57 100644
--- a/install/tpl/nginx_apps.vhost.master
+++ b/install/tpl/nginx_apps.vhost.master
@@ -208,4 +208,28 @@ server {
                alias /var/lib/mailman/archives/public;
                autoindex on;
         }
+
+        {use_rspamd}location /rspamd/ {
+                {use_rspamd}proxy_pass http://127.0.0.1:11334/;
+                {use_rspamd}rewrite ^//(.*) /$1;
+                {use_rspamd}proxy_set_header X-Forwarded-Proto $scheme;
+                {use_rspamd}proxy_set_header Host $host;
+                {use_rspamd}proxy_set_header X-Real-IP $remote_addr;
+                {use_rspamd}proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+                {use_rspamd}proxy_pass_header Authorization;
+                {use_rspamd}client_max_body_size 0;
+                {use_rspamd}client_body_buffer_size 1m;
+                {use_rspamd}proxy_intercept_errors on;
+                {use_rspamd}proxy_buffering on;
+                {use_rspamd}proxy_buffer_size 128k;
+                {use_rspamd}proxy_buffers 256 16k;
+                {use_rspamd}proxy_busy_buffers_size 256k;
+                {use_rspamd}proxy_temp_file_write_size 256k;
+                {use_rspamd}proxy_max_temp_file_size 0;
+                {use_rspamd}proxy_read_timeout 300;
+                {use_rspamd}
+                {use_rspamd}location ~* ^/rspamd/(.+\.(jpg|jpeg|gif|css|png|js|ico|html?|xml|txt))$ {
+                       {use_rspamd}alias /usr/share/rspamd/www/$1;
+                {use_rspamd}}
+        {use_rspamd}}
 }
-- 
GitLab


From 7eb3be87690f6bb9aa6e399375c7254359cf0f83 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 15 Aug 2019 10:42:41 +0200
Subject: [PATCH 092/571] - re-wrote policy editing to separate rspamd and
 amavis settings

---
 install/patches/upd_0088.php                  |  47 +++++
 .../web/mail/form/spamfilter_policy.tform.php | 146 ++++++-------
 .../mail/lib/lang/en_spamfilter_policy.lng    |   8 +-
 interface/web/mail/spamfilter_policy_edit.php |  80 ++-----
 .../mail/templates/spamfilter_amavis_edit.htm | 198 ++++++++++++++++++
 .../mail/templates/spamfilter_other_edit.htm  |  67 ------
 .../mail/templates/spamfilter_policy_edit.htm |  36 +---
 .../templates/spamfilter_quarantine_edit.htm  |  35 ----
 .../mail/templates/spamfilter_rspamd_edit.htm |  36 ++++
 .../templates/spamfilter_taglevel_edit.htm    |  69 ------
 10 files changed, 372 insertions(+), 350 deletions(-)
 create mode 100644 install/patches/upd_0088.php
 create mode 100644 interface/web/mail/templates/spamfilter_amavis_edit.htm
 delete mode 100644 interface/web/mail/templates/spamfilter_other_edit.htm
 delete mode 100644 interface/web/mail/templates/spamfilter_quarantine_edit.htm
 create mode 100644 interface/web/mail/templates/spamfilter_rspamd_edit.htm
 delete mode 100644 interface/web/mail/templates/spamfilter_taglevel_edit.htm

diff --git a/install/patches/upd_0088.php b/install/patches/upd_0088.php
new file mode 100644
index 0000000000..47a10f6080
--- /dev/null
+++ b/install/patches/upd_0088.php
@@ -0,0 +1,47 @@
+<?php
+
+if(!defined('INSTALLER_RUN')) die('Patch update file access violation.');
+
+/*
+	Example installer patch update class. the classname must match
+	the php and the sql patch update filename. The php patches are
+	only executed when a corresponding sql patch exists.
+*/
+
+class upd_0088 extends installer_patch_update {
+
+	public function onAfterSQL() {
+		global $inst;
+		
+		// delete all the files that were deleted on previous updates
+		$delete = array(
+			'interface/web/mail/templates/spamfilter_taglevel_edit.htm',
+			'interface/web/mail/templates/spamfilter_quarantine_edit.htm',
+			'interface/web/mail/templates/spamfilter_other_edit.htm',
+		);
+		
+		$curpath = dirname(dirname(realpath(dirname(__FILE__))));
+		
+		$c = 0;
+		$del_all = false;
+		foreach($delete as $file) {
+			if(strpos($file, '..') !== false) continue; // security!
+			
+			if($del_all == false) {
+				$answer = $inst->simple_query('Delete obsolete file ' . $file . '?', array('y', 'n', 'a', 'all', 'none'), 'y');
+				if($answer == 'n') continue;
+				elseif($answer == 'a' || $answer == 'all') $del_all = true;
+				elseif($answer == 'none') break;
+			}
+			if(@is_file('/usr/local/ispconfig/' . $file) && !@is_file($curpath . '/' . $file)) {
+				// be sure this is not a file contained in installation!
+				@unlink('/usr/local/ispconfig/' . $file);
+				ilog('Deleted obsolete file /usr/local/ispconfig/' . $file);
+				$c++;
+			}
+		}
+		ilog($c . 'obsolete files deleted.');
+	}
+}
+
+?>
diff --git a/interface/web/mail/form/spamfilter_policy.tform.php b/interface/web/mail/form/spamfilter_policy.tform.php
index d6ecef9bbc..2205dbb651 100644
--- a/interface/web/mail/form/spamfilter_policy.tform.php
+++ b/interface/web/mail/form/spamfilter_policy.tform.php
@@ -87,6 +87,21 @@ $form["tabs"]['policy'] = array (
 			'default' => 'N',
 			'value'  => array('N' => 'No', 'Y' => 'Yes')
 		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+
+$form["tabs"]['amavis'] = array (
+	'title'  => "Amavis",
+	'width'  => 100,
+	'template'  => "templates/spamfilter_amavis_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
 		'banned_files_lover' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
@@ -117,21 +132,6 @@ $form["tabs"]['policy'] = array (
 			'default' => 'N',
 			'value'  => array('N' => 'No', 'Y' => 'Yes')
 		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-$form["tabs"]['quarantine'] = array (
-	'title'  => "Quarantine",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_quarantine_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
 		'virus_quarantine_to' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -216,20 +216,6 @@ $form["tabs"]['quarantine'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['taglevel'] = array (
-	'title'  => "Tag-Level",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_taglevel_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
 		'spam_tag_level' => array (
 			'datatype' => 'DOUBLE',
 			'formtype' => 'TEXT',
@@ -304,57 +290,6 @@ $form["tabs"]['taglevel'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
-		'rspamd_greylisting' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'rspamd_spam_greylisting_level' => array (
-			'datatype' => 'DOUBLE',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		'rspamd_spam_tag_level' => array (
-			'datatype' => 'DOUBLE',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		'rspamd_spam_tag_method' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => 'rewrite_subject',
-			'value'  => array('add_header' => $app->lng('add_header_txt'), 'rewrite_subject' => $app->lng('rewrite_subject_txt'))
-		),
-		'rspamd_spam_kill_level' => array (
-			'datatype' => 'DOUBLE',
-			'formtype' => 'TEXT',
-			'default' => '0',
-			'value'  => '',
-			'width'  => '10',
-			'maxlength' => '255'
-		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-$form["tabs"]['other'] = array (
-	'title'  => "Other",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_other_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
 		'addr_extension_virus' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -522,11 +457,58 @@ $form["tabs"]['other'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
-
 		//#################################
 		// ENDE Datatable fields
 		//#################################
 	)
 );
 
-?>
+$form["tabs"]['rspamd'] = array (
+	'title'  => "Rspamd",
+	'width'  => 100,
+	'template'  => "templates/spamfilter_rspamd_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'rspamd_greylisting' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'rspamd_spam_greylisting_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'rspamd_spam_tag_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'rspamd_spam_tag_method' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'rewrite_subject',
+			'value'  => array('add_header' => $app->lng('add_header_txt'), 'rewrite_subject' => $app->lng('rewrite_subject_txt'))
+		),
+		'rspamd_spam_kill_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
diff --git a/interface/web/mail/lib/lang/en_spamfilter_policy.lng b/interface/web/mail/lib/lang/en_spamfilter_policy.lng
index f9e8a8e303..af1aac5d7f 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_policy.lng
@@ -42,4 +42,10 @@ $wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
 $wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-?>
\ No newline at end of file
+
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
\ No newline at end of file
diff --git a/interface/web/mail/spamfilter_policy_edit.php b/interface/web/mail/spamfilter_policy_edit.php
index 55a42fe847..ffc0818ffa 100644
--- a/interface/web/mail/spamfilter_policy_edit.php
+++ b/interface/web/mail/spamfilter_policy_edit.php
@@ -49,48 +49,9 @@ $app->uses('tpl,tform,tform_actions');
 $app->load('tform_actions');
 
 class page_action extends tform_actions {
-
-	function onShow() {
-		global $app, $conf;
-		
-		// get the config
-		$app->uses('getconf');
-		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-		
-		$content_filter = 'amavisd';
-		if($mail_config['content_filter'] == 'rspamd'){
-			$content_filter = 'rspamd';
-			unset($app->tform->formDef["tabs"]["policy"]['fields']['banned_files_lover']);
-			unset($app->tform->formDef["tabs"]["policy"]['fields']['bad_header_lover']);
-			unset($app->tform->formDef["tabs"]["policy"]['fields']['bypass_virus_checks']);
-			unset($app->tform->formDef["tabs"]["policy"]['fields']['bypass_banned_checks']);
-			unset($app->tform->formDef["tabs"]["policy"]['fields']['bypass_header_checks']);
-			
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_tag_level']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_tag2_level']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_kill_level']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_dsn_cutoff_level']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_quarantine_cutoff_level']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_modifies_subj']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_subject_tag']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['spam_subject_tag2']);
-			
-			unset($app->tform->formDef["tabs"]["quarantine"]);
-			unset($app->tform->formDef["tabs"]["other"]);
-		} else {
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_greylisting']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_spam_greylisting_level']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_spam_tag_level']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_spam_tag_method']);
-			unset($app->tform->formDef["tabs"]["taglevel"]['fields']['rspamd_spam_kill_level']);
-		}
-		$app->tpl->setVar("content_filter", $content_filter);
-		
-		parent::onShow();
-	}
 	
 	function onShowNew() {
-		global $app, $conf;
+		global $app;
 
 		// we will check only users, not admins
 		if($_SESSION["s"]["user"]["typ"] == 'user') {
@@ -106,7 +67,7 @@ class page_action extends tform_actions {
 	}
 
 	function onSubmit() {
-		global $app, $conf;
+		global $app;
 
 		// Check the client limits, if user is not the admin
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
@@ -128,35 +89,30 @@ class page_action extends tform_actions {
 	}
 	
 	function onAfterUpdate() {
-		global $app, $conf;
-		
-		$app->uses('getconf');
-		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		global $app;
 		
-		if($mail_config['content_filter'] == 'rspamd'){
-			$record_has_changed = false;
-			if(isset($this->dataRecord['rspamd_spam_greylisting_level']) && !isset($this->dataRecord['rspamd_greylisting'])) $this->dataRecord['rspamd_greylisting'] = 'n';
-			foreach($this->dataRecord as $key => $val) {
-				if(isset($this->oldDataRecord[$key]) && @$this->oldDataRecord[$key] != $val) {
-					// Record has changed
-					$record_has_changed = true;
-				}
+		$record_has_changed = false;
+		if(isset($this->dataRecord['rspamd_spam_greylisting_level']) && !isset($this->dataRecord['rspamd_greylisting'])) {
+			$this->dataRecord['rspamd_greylisting'] = 'n';
+		}
+		foreach($this->dataRecord as $key => $val) {
+			if(isset($this->oldDataRecord[$key]) && @$this->oldDataRecord[$key] != $val) {
+				// Record has changed
+				$record_has_changed = true;
 			}
-		
-			if($record_has_changed){
-				$spamfilter_users = $app->db->queryAllRecords("SELECT * FROM spamfilter_users WHERE policy_id = ?", intval($this->id));
+		}
+
+		if($record_has_changed){
+			$spamfilter_users = $app->db->queryAllRecords("SELECT * FROM spamfilter_users WHERE policy_id = ?", intval($this->id));
 
-				if(is_array($spamfilter_users) && !empty($spamfilter_users)){
-					foreach($spamfilter_users as $spamfilter_user){
-						$app->db->datalogUpdate('spamfilter_users', $spamfilter_user, 'id', $spamfilter_user["id"], true);
-					}
+			if(is_array($spamfilter_users) && !empty($spamfilter_users)){
+				foreach($spamfilter_users as $spamfilter_user){
+					$app->db->datalogUpdate('spamfilter_users', $spamfilter_user, 'id', $spamfilter_user["id"], true);
 				}
 			}
 		}
 	}
-
 }
 
 $app->tform_actions = new page_action;
 $app->tform_actions->onLoad();
-?>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_amavis_edit.htm b/interface/web/mail/templates/spamfilter_amavis_edit.htm
new file mode 100644
index 0000000000..41bf6b5410
--- /dev/null
+++ b/interface/web/mail/templates/spamfilter_amavis_edit.htm
@@ -0,0 +1,198 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
+	<!-- Settings -->
+  <div class="panel panel-default">
+    <div class="panel-heading" role="tab" id="headingSettings">
+      <h4 class="panel-title">
+        <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseSettings" aria-expanded="true" aria-controls="collapseSettings">
+          {tmpl_var name='amavis_settings_txt'}
+        </a>
+      </h4>
+    </div>
+    <div id="collapseSettings" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingWeb">
+      <div class="panel-body">
+			<div class="form-group">
+                <label for="banned_files_lover" class="col-sm-3 control-label">{tmpl_var name='banned_files_lover_txt'}</label>
+                <div class="col-sm-9"><select name="banned_files_lover" id="banned_files_lover" class="form-control">
+                    {tmpl_var name='banned_files_lover'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="bad_header_lover" class="col-sm-3 control-label">{tmpl_var name='bad_header_lover_txt'}</label>
+                <div class="col-sm-9"><select name="bad_header_lover" id="bad_header_lover" class="form-control">
+                    {tmpl_var name='bad_header_lover'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="bypass_virus_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_virus_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_virus_checks" id="bypass_virus_checks" class="form-control">
+                    {tmpl_var name='bypass_virus_checks'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="bypass_banned_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_banned_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_banned_checks" id="bypass_banned_checks" class="form-control">
+                    {tmpl_var name='bypass_banned_checks'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="bypass_header_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_header_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_header_checks" id="bypass_header_checks" class="form-control">
+                    {tmpl_var name='bypass_header_checks'}
+                </select></div>
+            </div>
+	  </div>
+	</div>
+  </div>
+	
+<!-- Tag Level -->
+  <div class="panel panel-default">
+    <div class="panel-heading" role="tab" id="headingTaglevel">
+      <h4 class="panel-title">
+        <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTaglevel" aria-expanded="true" aria-controls="collapseTaglevel">
+          {tmpl_var name='amavis_taglevel_txt'}
+        </a>
+      </h4>
+    </div>
+    <div id="collapseTaglevel" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTaglevel">
+      <div class="panel-body">
+
+            <div class="form-group">
+                <label for="spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_tag_level" id="spam_tag_level" value="{tmpl_var name='spam_tag_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_tag2_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag2_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_tag2_level" id="spam_tag2_level" value="{tmpl_var name='spam_tag2_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='spam_kill_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_kill_level" id="spam_kill_level" value="{tmpl_var name='spam_kill_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_dsn_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_dsn_cutoff_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_dsn_cutoff_level" id="spam_dsn_cutoff_level" value="{tmpl_var name='spam_dsn_cutoff_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_quarantine_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_cutoff_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_quarantine_cutoff_level" id="spam_quarantine_cutoff_level" value="{tmpl_var name='spam_quarantine_cutoff_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_modifies_subj" class="col-sm-3 control-label">{tmpl_var name='spam_modifies_subj_txt'}</label>
+                <div class="col-sm-9"><select name="spam_modifies_subj" id="spam_modifies_subj" class="form-control">
+                    {tmpl_var name='spam_modifies_subj'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="spam_subject_tag" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_subject_tag" id="spam_subject_tag" value="{tmpl_var name='spam_subject_tag'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_subject_tag2" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag2_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_subject_tag2" id="spam_subject_tag2" value="{tmpl_var name='spam_subject_tag2'}" class="form-control" /></div></div>
+	  </div>
+	</div>
+  </div>
+
+<!-- Quarantine -->
+  <div class="panel panel-default">
+    <div class="panel-heading" role="tab" id="headingQuarantine">
+      <h4 class="panel-title">
+        <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseQuarantine" aria-expanded="true" aria-controls="collapseQuarantine">
+          {tmpl_var name='amavis_quarantine_txt'}
+        </a>
+      </h4>
+    </div>
+    <div id="collapseQuarantine" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingQuarantine">
+      <div class="panel-body">
+
+
+            <div class="form-group">
+                <label for="virus_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='virus_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="virus_quarantine_to" id="virus_quarantine_to" value="{tmpl_var name='virus_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_quarantine_to" id="spam_quarantine_to" value="{tmpl_var name='spam_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="banned_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='banned_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_quarantine_to" id="banned_quarantine_to" value="{tmpl_var name='banned_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bad_header_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='bad_header_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bad_header_quarantine_to" id="bad_header_quarantine_to" value="{tmpl_var name='bad_header_quarantine_to'}" class="form-control" /></div></div>
+	  </div>
+	</div>
+  </div>
+
+<!-- Other -->
+  <div class="panel panel-default">
+    <div class="panel-heading" role="tab" id="headingOther">
+      <h4 class="panel-title">
+        <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOther" aria-expanded="true" aria-controls="collapseOther">
+          {tmpl_var name='amavis_other_txt'}
+        </a>
+      </h4>
+    </div>
+    <div id="collapseOther" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOther">
+      <div class="panel-body">
+
+            <div class="form-group">
+                <label for="addr_extension_virus" class="col-sm-3 control-label">{tmpl_var name='addr_extension_virus_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_virus" id="addr_extension_virus" value="{tmpl_var name='addr_extension_virus'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_spam" class="col-sm-3 control-label">{tmpl_var name='addr_extension_spam_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_spam" id="addr_extension_spam" value="{tmpl_var name='addr_extension_spam'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_banned" class="col-sm-3 control-label">{tmpl_var name='addr_extension_banned_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_banned" id="addr_extension_banned" value="{tmpl_var name='addr_extension_banned'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_bad_header" class="col-sm-3 control-label">{tmpl_var name='addr_extension_bad_header_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_bad_header" id="addr_extension_bad_header" value="{tmpl_var name='addr_extension_bad_header'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="warnvirusrecip" class="col-sm-3 control-label">{tmpl_var name='warnvirusrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnvirusrecip" id="warnvirusrecip" class="form-control">
+                    {tmpl_var name='warnvirusrecip'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="warnbannedrecip" class="col-sm-3 control-label">{tmpl_var name='warnbannedrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnbannedrecip" id="warnbannedrecip" class="form-control">
+                    {tmpl_var name='warnbannedrecip'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="warnbadhrecip" class="col-sm-3 control-label">{tmpl_var name='warnbadhrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnbadhrecip" id="warnbadhrecip" class="form-control">
+                    {tmpl_var name='warnbadhrecip'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="newvirus_admin" class="col-sm-3 control-label">{tmpl_var name='newvirus_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="newvirus_admin" id="newvirus_admin" value="{tmpl_var name='newvirus_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="virus_admin" class="col-sm-3 control-label">{tmpl_var name='virus_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="virus_admin" id="virus_admin" value="{tmpl_var name='virus_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="banned_admin" class="col-sm-3 control-label">{tmpl_var name='banned_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_admin" id="banned_admin" value="{tmpl_var name='banned_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bad_header_admin" class="col-sm-3 control-label">{tmpl_var name='bad_header_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bad_header_admin" id="bad_header_admin" value="{tmpl_var name='bad_header_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_admin" class="col-sm-3 control-label">{tmpl_var name='spam_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_admin" id="spam_admin" value="{tmpl_var name='spam_admin'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="message_size_limit" class="col-sm-3 control-label">{tmpl_var name='message_size_limit_txt'}</label>
+                <div class="col-sm-9"><div class="input-group"><input type="text" name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" class="form-control" aria-describedby="message_size_limit-desc" /><span class="input-group-addon" id="message_size_limit-desc">Bytes</span></div></div>
+            </div>
+            <div class="form-group">
+                <label for="banned_rulenames" class="col-sm-3 control-label">{tmpl_var name='banned_rulenames_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_rulenames" id="banned_rulenames" value="{tmpl_var name='banned_rulenames'}" class="form-control" /></div></div>
+	  </div>
+	</div>
+  </div>
+
+				
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_other_edit.htm b/interface/web/mail/templates/spamfilter_other_edit.htm
deleted file mode 100644
index 83cd4a95c9..0000000000
--- a/interface/web/mail/templates/spamfilter_other_edit.htm
+++ /dev/null
@@ -1,67 +0,0 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
-            <div class="form-group">
-                <label for="addr_extension_virus" class="col-sm-3 control-label">{tmpl_var name='addr_extension_virus_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="addr_extension_virus" id="addr_extension_virus" value="{tmpl_var name='addr_extension_virus'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="addr_extension_spam" class="col-sm-3 control-label">{tmpl_var name='addr_extension_spam_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="addr_extension_spam" id="addr_extension_spam" value="{tmpl_var name='addr_extension_spam'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="addr_extension_banned" class="col-sm-3 control-label">{tmpl_var name='addr_extension_banned_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="addr_extension_banned" id="addr_extension_banned" value="{tmpl_var name='addr_extension_banned'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="addr_extension_bad_header" class="col-sm-3 control-label">{tmpl_var name='addr_extension_bad_header_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="addr_extension_bad_header" id="addr_extension_bad_header" value="{tmpl_var name='addr_extension_bad_header'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="warnvirusrecip" class="col-sm-3 control-label">{tmpl_var name='warnvirusrecip_txt'}</label>
-                <div class="col-sm-9"><select name="warnvirusrecip" id="warnvirusrecip" class="form-control">
-                    {tmpl_var name='warnvirusrecip'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="warnbannedrecip" class="col-sm-3 control-label">{tmpl_var name='warnbannedrecip_txt'}</label>
-                <div class="col-sm-9"><select name="warnbannedrecip" id="warnbannedrecip" class="form-control">
-                    {tmpl_var name='warnbannedrecip'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="warnbadhrecip" class="col-sm-3 control-label">{tmpl_var name='warnbadhrecip_txt'}</label>
-                <div class="col-sm-9"><select name="warnbadhrecip" id="warnbadhrecip" class="form-control">
-                    {tmpl_var name='warnbadhrecip'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="newvirus_admin" class="col-sm-3 control-label">{tmpl_var name='newvirus_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="newvirus_admin" id="newvirus_admin" value="{tmpl_var name='newvirus_admin'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="virus_admin" class="col-sm-3 control-label">{tmpl_var name='virus_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="virus_admin" id="virus_admin" value="{tmpl_var name='virus_admin'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="banned_admin" class="col-sm-3 control-label">{tmpl_var name='banned_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="banned_admin" id="banned_admin" value="{tmpl_var name='banned_admin'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="bad_header_admin" class="col-sm-3 control-label">{tmpl_var name='bad_header_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="bad_header_admin" id="bad_header_admin" value="{tmpl_var name='bad_header_admin'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_admin" class="col-sm-3 control-label">{tmpl_var name='spam_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_admin" id="spam_admin" value="{tmpl_var name='spam_admin'}" class="form-control" /></div></div>
-			<div class="form-group">
-                <label for="message_size_limit" class="col-sm-3 control-label">{tmpl_var name='message_size_limit_txt'}</label>
-                <div class="col-sm-9"><div class="input-group"><input type="text" name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" class="form-control" aria-describedby="message_size_limit-desc" /><span class="input-group-addon" id="message_size_limit-desc">Bytes</span></div></div>
-            </div>
-            <div class="form-group">
-                <label for="banned_rulenames" class="col-sm-3 control-label">{tmpl_var name='banned_rulenames_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="banned_rulenames" id="banned_rulenames" value="{tmpl_var name='banned_rulenames'}" class="form-control" /></div></div>
-        
-
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_policy_edit.htm b/interface/web/mail/templates/spamfilter_policy_edit.htm
index 0496d3a85a..506b4d5b89 100644
--- a/interface/web/mail/templates/spamfilter_policy_edit.htm
+++ b/interface/web/mail/templates/spamfilter_policy_edit.htm
@@ -3,8 +3,7 @@
 </div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-
-        
+       
             <div class="form-group">
                 <label for="policy_name" class="col-sm-3 control-label">{tmpl_var name='policy_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="policy_name" id="policy_name" value="{tmpl_var name='policy_name'}" class="form-control" /></div></div>
@@ -20,38 +19,7 @@
                     {tmpl_var name='spam_lover'}
                 </select></div>
             </div>
-			<tmpl_if name='content_filter' op='==' value='amavisd'>
-            <div class="form-group">
-                <label for="banned_files_lover" class="col-sm-3 control-label">{tmpl_var name='banned_files_lover_txt'}</label>
-                <div class="col-sm-9"><select name="banned_files_lover" id="banned_files_lover" class="form-control">
-                    {tmpl_var name='banned_files_lover'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="bad_header_lover" class="col-sm-3 control-label">{tmpl_var name='bad_header_lover_txt'}</label>
-                <div class="col-sm-9"><select name="bad_header_lover" id="bad_header_lover" class="form-control">
-                    {tmpl_var name='bad_header_lover'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="bypass_virus_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_virus_checks_txt'}</label>
-                <div class="col-sm-9"><select name="bypass_virus_checks" id="bypass_virus_checks" class="form-control">
-                    {tmpl_var name='bypass_virus_checks'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="bypass_banned_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_banned_checks_txt'}</label>
-                <div class="col-sm-9"><select name="bypass_banned_checks" id="bypass_banned_checks" class="form-control">
-                    {tmpl_var name='bypass_banned_checks'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="bypass_header_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_header_checks_txt'}</label>
-                <div class="col-sm-9"><select name="bypass_header_checks" id="bypass_header_checks" class="form-control">
-                    {tmpl_var name='bypass_header_checks'}
-                </select></div>
-            </div>
-			</tmpl_if>
+
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
diff --git a/interface/web/mail/templates/spamfilter_quarantine_edit.htm b/interface/web/mail/templates/spamfilter_quarantine_edit.htm
deleted file mode 100644
index 7f44b58020..0000000000
--- a/interface/web/mail/templates/spamfilter_quarantine_edit.htm
+++ /dev/null
@@ -1,35 +0,0 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
-            <div class="form-group">
-                <label for="virus_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='virus_quarantine_to_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="virus_quarantine_to" id="virus_quarantine_to" value="{tmpl_var name='virus_quarantine_to'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_to_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_quarantine_to" id="spam_quarantine_to" value="{tmpl_var name='spam_quarantine_to'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="banned_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='banned_quarantine_to_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="banned_quarantine_to" id="banned_quarantine_to" value="{tmpl_var name='banned_quarantine_to'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="bad_header_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='bad_header_quarantine_to_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="bad_header_quarantine_to" id="bad_header_quarantine_to" value="{tmpl_var name='bad_header_quarantine_to'}" class="form-control" /></div></div>
-            <!--
-                  <div class="form-group">
-                    <label for="clean_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='clean_quarantine_to_txt'}</label>
-                    <div class="col-sm-9"><input type="text" name="clean_quarantine_to" id="clean_quarantine_to" value="{tmpl_var name='clean_quarantine_to'}" class="form-control" /></div></div>
-                  <div class="form-group">
-                    <label for="other_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='other_quarantine_to_txt'}</label>
-                    <div class="col-sm-9"><input type="text" name="other_quarantine_to" id="other_quarantine_to" value="{tmpl_var name='other_quarantine_to'}" class="form-control" /></div></div>
-            -->
-        
-
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_rspamd_edit.htm b/interface/web/mail/templates/spamfilter_rspamd_edit.htm
new file mode 100644
index 0000000000..73472a876c
--- /dev/null
+++ b/interface/web/mail/templates/spamfilter_rspamd_edit.htm
@@ -0,0 +1,36 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='rspamd_greylisting_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='rspamd_greylisting'}
+                </div>
+            </div>
+			<div class="form-group">
+                <label for="rspamd_spam_greylisting_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_greylisting_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_greylisting_level" id="rspamd_spam_greylisting_level" value="{tmpl_var name='rspamd_spam_greylisting_level'}" class="form-control" /></div>
+			</div>
+			<div class="form-group">
+                <label for="rspamd_spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_tag_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_tag_level" id="rspamd_spam_tag_level" value="{tmpl_var name='rspamd_spam_tag_level'}" class="form-control" /></div>
+			</div>
+			<div class="form-group">
+                <label for="rspamd_spam_tag_method" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_tag_method_txt'}</label>
+                <div class="col-sm-9"><select name="rspamd_spam_tag_method" id="rspamd_spam_tag_method" class="form-control">
+                    {tmpl_var name='rspamd_spam_tag_method'}
+                </select></div>
+            </div>
+			<div class="form-group">
+                <label for="rspamd_spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_kill_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_kill_level" id="rspamd_spam_kill_level" value="{tmpl_var name='rspamd_spam_kill_level'}" class="form-control" /></div>
+			</div>
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_taglevel_edit.htm b/interface/web/mail/templates/spamfilter_taglevel_edit.htm
deleted file mode 100644
index 1b3c3b482c..0000000000
--- a/interface/web/mail/templates/spamfilter_taglevel_edit.htm
+++ /dev/null
@@ -1,69 +0,0 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <tmpl_if name='content_filter' op='==' value='amavisd'>
-            <div class="form-group">
-                <label for="spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_tag_level" id="spam_tag_level" value="{tmpl_var name='spam_tag_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_tag2_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag2_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_tag2_level" id="spam_tag2_level" value="{tmpl_var name='spam_tag2_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='spam_kill_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_kill_level" id="spam_kill_level" value="{tmpl_var name='spam_kill_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_dsn_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_dsn_cutoff_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_dsn_cutoff_level" id="spam_dsn_cutoff_level" value="{tmpl_var name='spam_dsn_cutoff_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_quarantine_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_cutoff_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_quarantine_cutoff_level" id="spam_quarantine_cutoff_level" value="{tmpl_var name='spam_quarantine_cutoff_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_modifies_subj" class="col-sm-3 control-label">{tmpl_var name='spam_modifies_subj_txt'}</label>
-                <div class="col-sm-9"><select name="spam_modifies_subj" id="spam_modifies_subj" class="form-control">
-                    {tmpl_var name='spam_modifies_subj'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="spam_subject_tag" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_subject_tag" id="spam_subject_tag" value="{tmpl_var name='spam_subject_tag'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_subject_tag2" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag2_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_subject_tag2" id="spam_subject_tag2" value="{tmpl_var name='spam_subject_tag2'}" class="form-control" /></div></div>
-			</tmpl_if>
-			<tmpl_if name='content_filter' op='==' value='rspamd'>
-			<div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='rspamd_greylisting_txt'}</label>
-                <div class="col-sm-9">
-                    {tmpl_var name='rspamd_greylisting'}
-                </div>
-            </div>
-			<div class="form-group">
-                <label for="rspamd_spam_greylisting_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_greylisting_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="rspamd_spam_greylisting_level" id="rspamd_spam_greylisting_level" value="{tmpl_var name='rspamd_spam_greylisting_level'}" class="form-control" /></div>
-			</div>
-			<div class="form-group">
-                <label for="rspamd_spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_tag_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="rspamd_spam_tag_level" id="rspamd_spam_tag_level" value="{tmpl_var name='rspamd_spam_tag_level'}" class="form-control" /></div>
-			</div>
-			<div class="form-group">
-                <label for="rspamd_spam_tag_method" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_tag_method_txt'}</label>
-                <div class="col-sm-9"><select name="rspamd_spam_tag_method" id="rspamd_spam_tag_method" class="form-control">
-                    {tmpl_var name='rspamd_spam_tag_method'}
-                </select></div>
-            </div>
-			<div class="form-group">
-                <label for="rspamd_spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_kill_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="rspamd_spam_kill_level" id="rspamd_spam_kill_level" value="{tmpl_var name='rspamd_spam_kill_level'}" class="form-control" /></div>
-			</div>
-			</tmpl_if>
-        
-
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
-- 
GitLab


From 63b9660ffad9e2a9a9de32b9f0dce8fd10b44dd7 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 16 Aug 2019 15:14:06 +0200
Subject: [PATCH 093/571] Fixes #5369 Internal ISPConfig cronjobs are not run
 in 3.1-dev version

---
 install/sql/incremental/upd_dev_collection.sql | 2 ++
 server/lib/classes/cron.inc.php                | 4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index f86f6a93ac..91cbc81626 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -35,3 +35,5 @@ ALTER TABLE `ftp_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT
 ALTER TABLE `shell_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
 ALTER TABLE `sys_user` CHANGE COLUMN `passwort` `passwort` VARCHAR(200) DEFAULT NULL;
 ALTER TABLE `webdav_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+
+DELETE FROM sys_cron WHERE `next_run` IS NOT NULL AND `next_run` >= DATE_ADD(`last_run`, INTERVAL 30 DAY) AND `next_run` BETWEEN '2020-01-01' AND '2020-01-02';
diff --git a/server/lib/classes/cron.inc.php b/server/lib/classes/cron.inc.php
index c6c2ad02b2..67be475fe3 100644
--- a/server/lib/classes/cron.inc.php
+++ b/server/lib/classes/cron.inc.php
@@ -265,8 +265,8 @@ class cron {
 
 		reset($this->_aValidValues[$sField]);
 		foreach($this->_aValidValues[$sField] as $cur) {
-			if($bIncludeCurrent == true && $cur['value'] >= $iValue) return $cur['value'];
-			elseif($cur['value'] > $iValue) return $cur['value'];
+			if($bIncludeCurrent == true && $cur >= $iValue) return $cur;
+			elseif($cur > $iValue) return $cur;
 		}
 		return reset($this->_aValidValues[$sField]);
 	}
-- 
GitLab


From 2b3eb82dd3fdcedd90f7473ded8ba6a3ad2c7c94 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 16 Aug 2019 15:15:10 +0200
Subject: [PATCH 094/571] Plugins module not loaded in cron debugger which
 prevents debugging of the Let's encrypt plugin.

---
 server/cron_debug.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/cron_debug.php b/server/cron_debug.php
index 2ab9289d26..c92410f3e5 100644
--- a/server/cron_debug.php
+++ b/server/cron_debug.php
@@ -39,7 +39,7 @@ ini_set('error_reporting', E_ALL & ~E_NOTICE);
 $conf['server_id'] = intval($conf['server_id']);
 
 // Load required base-classes
-$app->uses('modules,ini_parser,file,services,getconf,system,cron,functions');
+$app->uses('modules,plugins,ini_parser,file,services,getconf,system,cron,functions');
 $app->load('libdatetime,cronjob');
 
 // Path settings
-- 
GitLab


From 2df03bce442fcdf691681ea0a7fa390d8a06dae7 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sat, 17 Aug 2019 11:01:28 +0200
Subject: [PATCH 095/571] - don't treat cron jobs as running when last run is
 older than 24h

---
 server/lib/classes/cronjob.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/cronjob.inc.php b/server/lib/classes/cronjob.inc.php
index 9fba5af3c5..1e452b6481 100644
--- a/server/lib/classes/cronjob.inc.php
+++ b/server/lib/classes/cronjob.inc.php
@@ -100,7 +100,7 @@ class cronjob {
 		// check the run time and values for this job
 
 		// get previous run data
-		$data = $app->db->queryOneRecord("SELECT `last_run`, `next_run`, `running` FROM `sys_cron` WHERE `name` = ?", get_class($this));
+		$data = $app->db->queryOneRecord("SELECT `last_run`, `next_run`, IF(`last_run` IS NOT NULL AND `last_run` < DATE_SUB(NOW(), INTERVAL 24 HOUR), 0, `running`) as `running` FROM `sys_cron` WHERE `name` = ?", get_class($this));
 		if($data) {
 			if($data['last_run']) $this->_last_run = $data['last_run'];
 			if($data['next_run']) $this->_next_run = $data['next_run'];
-- 
GitLab


From 3305f4ee9282f69666441122fdf9a53aa3189164 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 21 Aug 2019 14:20:27 +0200
Subject: [PATCH 096/571] Force equal passwords in APS installer before form
 can be posted

---
 interface/web/sites/templates/aps_install_package.htm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/sites/templates/aps_install_package.htm b/interface/web/sites/templates/aps_install_package.htm
index 2c4b48b9d3..255a8685d5 100644
--- a/interface/web/sites/templates/aps_install_package.htm
+++ b/interface/web/sites/templates/aps_install_package.htm
@@ -57,7 +57,7 @@
 		<input type="hidden" name="install" value="0" />
 		<div class="clear">
 			<div class="right">
-				<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_install_txt'}" name="btn_install" onclick="document.pageForm.install.value=1; ISPConfig.submitForm('pageForm','sites/aps_install_package.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='btn_install_txt'}</button>
+				<button class="btn btn-default formbutton-success positive" type="button" value="{tmpl_var name='btn_install_txt'}" name="btn_install" onclick="document.pageForm.install.value=1; ISPConfig.submitForm('pageForm','sites/aps_install_package.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='btn_install_txt'}</button>
 				<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/aps_availablepackages_list.php">{tmpl_var name='btn_cancel_txt'}</button>
 			</div>
 		</div>
-- 
GitLab


From 0b1fac193e9cabc965b42645388ea45a5515cd9d Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 21 Aug 2019 14:26:31 +0200
Subject: [PATCH 097/571] Don't try to load non-existing config in aps remote,
 fixes #4974

---
 interface/lib/classes/remote.d/aps.inc.php | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/interface/lib/classes/remote.d/aps.inc.php b/interface/lib/classes/remote.d/aps.inc.php
index 50dda48255..78330fc8bb 100644
--- a/interface/lib/classes/remote.d/aps.inc.php
+++ b/interface/lib/classes/remote.d/aps.inc.php
@@ -43,8 +43,7 @@ class remoting_aps extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		
-		require_once '../../../lib/config.inc.php';
+
 		$app->load('aps_crawler');
 		
 		$aps = new ApsCrawler($app, true); // true = Interface mode, false = Server mode
-- 
GitLab


From 2a3cadc8416c56f3c309df101249adffde3a0eaf Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 21 Aug 2019 14:29:11 +0200
Subject: [PATCH 098/571] Minor language change for APS installer

---
 interface/web/sites/lib/lang/en_aps.lng | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/sites/lib/lang/en_aps.lng b/interface/web/sites/lib/lang/en_aps.lng
index b0300fe0cc..04f6fb798d 100644
--- a/interface/web/sites/lib/lang/en_aps.lng
+++ b/interface/web/sites/lib/lang/en_aps.lng
@@ -28,7 +28,7 @@ $wb['installation_txt'] = 'Installation';
 $wb['install_location_txt'] = 'Install location';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['acceptance_txt'] = 'Acceptance';
+$wb['acceptance_txt'] = 'I accept the license';
 $wb['acceptance_text_txt'] = 'Yes, i\'ve read the license and agree.';
 $wb['install_language_txt'] = 'Interface language';
 $wb['new_database_password_txt'] = 'New database password';
-- 
GitLab


From 0bbef70c613b99664bc637ddb519697d3ce116cd Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 21 Aug 2019 14:30:58 +0200
Subject: [PATCH 099/571] Load APS language file for APS instance list

---
 .../web/sites/list/aps_installedpackages.list.php  | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/interface/web/sites/list/aps_installedpackages.list.php b/interface/web/sites/list/aps_installedpackages.list.php
index d9a51d8bef..1f855082d5 100644
--- a/interface/web/sites/list/aps_installedpackages.list.php
+++ b/interface/web/sites/list/aps_installedpackages.list.php
@@ -28,6 +28,12 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+// Load the APS language file
+$lngfile = 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'_aps.lng';
+require_once $lngfile;
+$app->tpl->setVar($wb);
+$app->load_language_file('web/sites/'.$lngfile);
+
 $liste['name'] = 'aps_instances'; // Name of the list
 $liste['table'] = 'aps_instances'; // Database table
 $liste['table_idx'] = 'id'; // Table index
@@ -85,9 +91,9 @@ $liste["item"][] = array('field'    => 'instance_status',
 	'prefix'   => '',
 	'suffix'   => '',
 	'width'    => '',
-	'value'    => array(INSTANCE_INSTALL => $app->lng('Installation_task'),
-		INSTANCE_ERROR => $app->lng('Installation_error'),
-		INSTANCE_SUCCESS => $app->lng('Installation_success'),
-		INSTANCE_REMOVE => $app->lng('Installation_remove')),
+	'value'    => array(INSTANCE_INSTALL => $app->lng('installation_task_txt'),
+		INSTANCE_ERROR => $app->lng('installation_error_txt'),
+		INSTANCE_SUCCESS => $app->lng('installation_success_txt'),
+		INSTANCE_REMOVE => $app->lng('installation_remove_txt')),
 	'table' => 'aps_instances');
 ?>
-- 
GitLab


From 1b273e48f9030743eaa046414079b055e894d209 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 21 Aug 2019 14:33:28 +0200
Subject: [PATCH 100/571] Fix APS package list table

---
 interface/web/sites/templates/aps_packages_list.htm | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/interface/web/sites/templates/aps_packages_list.htm b/interface/web/sites/templates/aps_packages_list.htm
index d3f3f8c3bb..501e7aeedd 100644
--- a/interface/web/sites/templates/aps_packages_list.htm
+++ b/interface/web/sites/templates/aps_packages_list.htm
@@ -6,7 +6,7 @@
 <table class="table">
                 <thead class="dark form-group-sm">
                     <tr>
-                        <th>{tmpl_var name='name_txt'}</th>
+                        <th colspan="2">{tmpl_var name='name_txt'}</th>
                         <th>{tmpl_var name='version_txt'}</th>
                         <th>{tmpl_var name='category_txt'}</th>
                             <tmpl_if name='is_admin'>
@@ -15,7 +15,7 @@
                         <th class="small-col text-right">&nbsp;</th>
                     </tr>
                     <tr>
-                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td colspan="2"><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
                         <td><input class="form-control" type="text" name="search_version" value="{tmpl_var name='search_version'}" /></td>
                         <td><select class="form-control" name="search_category" onChange="ISPConfig.submitForm('pageForm','sites/aps_availablepackages_list.php');">{tmpl_var name='search_category'}</select></td>
                             <tmpl_if name='is_admin'>
@@ -27,7 +27,7 @@
                 <tbody>
                     <tmpl_loop name='records'>
                         <tr>
-                            <td><a href="#" data-load-content="sites/aps_packagedetails_show.php?id={tmpl_var name='id'}">{tmpl_var name='name'}</a></td>
+                            <td colspan="2"><a href="#" data-load-content="sites/aps_packagedetails_show.php?id={tmpl_var name='id'}">{tmpl_var name='name'}</a></td>
                             <td>{tmpl_var name='version'}-{tmpl_var name='release'}</td>
                             <td>{tmpl_var name='category'}</td>
                                 <tmpl_if name='is_admin'>
-- 
GitLab


From 66ccf358c1d3463eddb4879f5b33bf9f5d851b2b Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 21 Aug 2019 14:48:35 +0200
Subject: [PATCH 101/571] Add missing API doc for
 sites_aps_change_package_status

---
 remoting_client/API-docs/navigation.html      |  7 +++--
 .../sites_aps_change_package_status.html      | 29 +++++++++++++++++++
 2 files changed, 33 insertions(+), 3 deletions(-)
 create mode 100644 remoting_client/API-docs/sites_aps_change_package_status.html

diff --git a/remoting_client/API-docs/navigation.html b/remoting_client/API-docs/navigation.html
index a9d32f7598..5168122f28 100644
--- a/remoting_client/API-docs/navigation.html
+++ b/remoting_client/API-docs/navigation.html
@@ -2,11 +2,11 @@
 <html><head>
   <title>ISCPConfig 3 API Functions</title>
 
-  
-  
+
+
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 
-  
+
   <style type="text/css">
 <!--
 .command {
@@ -200,6 +200,7 @@
 <p><a href="server_get_php_versions.html" target="content">server_get_php_versions</a></p>
 <p><a href="server_get_serverid_by_ip.html" target="content">server_get_serverid_by_ip</a></p>
 <p><a href="sites_aps_available_packages_list.html" target="content">sites_aps_available_packages_list</a></p>
+<p><a href="sites_aps_change_package_status.html" target="content">sites_aps_change_package_status</a></p>
 <p><a href="sites_aps_get_package_details.html" target="content">sites_aps_get_package_details</a></p>
 <p><a href="sites_aps_get_package_file.html" target="content">sites_aps_get_package_file</a></p>
 <p><a href="sites_aps_get_package_settings.html" target="content">sites_aps_get_package_settings</a></p>
diff --git a/remoting_client/API-docs/sites_aps_change_package_status.html b/remoting_client/API-docs/sites_aps_change_package_status.html
new file mode 100644
index 0000000000..bc8ad380ed
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_change_package_status.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPConfig 3 remote API documentation</title>
+
+
+
+
+
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_change_package_status(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Changes the status for specified APS package. Supply the APS package ID in $primary_id.</p><br>
+<p class="headgrp">Input Variables: </p>
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> package_status&nbsp;&nbsp;(<span class="paratype">int</span>) - can be 1 (= PACKAGE_LOCKED) or 2 (= PACKAGE_ENABLED)</p>
+<p class="headgrp">Output: </p>
+<p class="margin"> Returns true package status was changed.</p>
+<!--<b>Output:</b>
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
-- 
GitLab


From c7e3e7d94f84a9f2da2f91f78d7fa518051d4c2f Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 23 Aug 2019 09:12:17 +0200
Subject: [PATCH 102/571] On the Mailbox Quota, link rows to the mailbox page

---
 interface/web/dashboard/dashlets/templates/mailquota.htm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/dashboard/dashlets/templates/mailquota.htm b/interface/web/dashboard/dashlets/templates/mailquota.htm
index 5ad01d6865..3573ef1ab9 100644
--- a/interface/web/dashboard/dashlets/templates/mailquota.htm
+++ b/interface/web/dashboard/dashlets/templates/mailquota.htm
@@ -12,7 +12,7 @@
 		<tbody>
 		<tmpl_loop name='mailquota'>
 			<tr>
-				<td>{tmpl_var name='email'}</td>
+				<td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='mailuser_id'}" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="{tmpl_var name='email'}">{tmpl_var name='email'}</a></td>
 				<td>{tmpl_var name='name'}</td>
 				<td>{tmpl_var name='used'}</td>
 				<td>{tmpl_var name='quota'}</td>
-- 
GitLab


From 72fbabda91187018134675c0d2876753b12c4da8 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 23 Aug 2019 12:56:55 +0200
Subject: [PATCH 103/571] - added missing onComplete() to cron debug script
 (led to permanent running marker on jobs)

---
 server/cron_debug.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/server/cron_debug.php b/server/cron_debug.php
index c92410f3e5..6eda4fcdde 100644
--- a/server/cron_debug.php
+++ b/server/cron_debug.php
@@ -66,6 +66,7 @@ $cronjob->onPrepare();
 $cronjob->onBeforeRun();
 $cronjob->onRunJob();
 $cronjob->onAfterRun();
+$cronjob->onCompleted();
 
 die("finished.\n");
 
-- 
GitLab


From 8f35cdb04e263fbcad5d3c7de77d7e48acb26946 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 26 Aug 2019 14:03:35 +0200
Subject: [PATCH 104/571] - prevent running update when mysql cannot be used
 from command line with credentials from mysql_clientdb.conf

---
 install/update.php | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/install/update.php b/install/update.php
index 42ddd625f5..11570aa666 100644
--- a/install/update.php
+++ b/install/update.php
@@ -293,6 +293,22 @@ if($conf['mysql']['master_slave_setup'] == 'y') {
 */
 checkDbHealth();
 
+
+/*
+ * Check command line mysql login
+ */
+if( !empty($conf["mysql"]["admin_password"]) ) {
+	$cmd = "mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." --force -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." -P ".escapeshellarg($conf['mysql']['port'])." -D ".escapeshellarg($conf['mysql']['database'])." -e ". escapeshellarg('SHOW DATABASES');
+} else {
+	$cmd = "mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." --force -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -P ".escapeshellarg($conf['mysql']['port'])." -D ".escapeshellarg($conf['mysql']['database'])." -e ". escapeshellarg('SHOW DATABASES');
+}
+$retval = 0;
+$retout = array();
+exec($cmd, $retout, $retval);
+if($retval != 0) {
+	die("Unable to call mysql command line with credentials from mysql_clientdb.conf\n");
+}
+
 /*
  *  dump the new Database and reconfigure the server.ini
  */
-- 
GitLab


From 8ab148b3bae66b595c8b4d73d61cf66ab7d4e8bc Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 26 Aug 2019 21:59:35 +0200
Subject: [PATCH 105/571] - added debug log to exec_safe including returncode -
 moved jailkit functions from bash files to system library

---
 server/lib/classes/system.inc.php             | 85 ++++++++++++++++++-
 .../cron_jailkit_plugin.inc.php               | 34 ++------
 .../shelluser_jailkit_plugin.inc.php          | 17 ++--
 3 files changed, 97 insertions(+), 39 deletions(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 288f9d73f8..4c76e9aaff 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -2070,6 +2070,8 @@ class system{
 	}
 	
 	public function exec_safe($cmd) {
+		global $app;
+		
 		$arg_count = func_num_args();
 		if($arg_count != substr_count($cmd, '?') + 1) {
 			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
@@ -2096,7 +2098,11 @@ class system{
 		
 		$this->_last_exec_out = null;
 		$this->_last_exec_retcode = null;
-		return exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
+		$ret = exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
+		
+		$this->app->log("safe_exec cmd: " . $cmd . " - return code: " . $this->_last_exec_retcode, LOGLEVEL_DEBUG);
+		
+		return $ret;
 	}
 	
 	public function system_safe($cmd) {
@@ -2104,4 +2110,81 @@ class system{
 		return implode("\n", $this->_last_exec_out);
 	}
 	
+	public function create_jailkit_user($username, $home_dir, $user_home_dir, $shell = '/bin/bash', $p_user = null, $p_user_home_dir = null) {
+		// Check if USERHOMEDIR already exists
+		if(!is_dir($home_dir . '/.' . $user_home_dir)) {
+			$this->mkdirpath($home_dir . '/.' . $user_home_dir, 0755, $username);
+		}
+
+		// Reconfigure the chroot home directory for the user
+		$cmd = 'usermod --home=? ? 2>/dev/null';
+		$this->exec_safe($cmd, $home_dir . '/.' . $user_home_dir, $username);
+
+		// Add the chroot user
+		$cmd = 'jk_jailuser -n -s ? -j ? ?';
+		$this->exec_safe($cmd, $shell, $home_dir, $username);
+
+		//  We have to reconfigure the chroot home directory for the parent user
+		if($p_user !== null) {
+			$cmd = 'usermod --home=? ? 2>/dev/null';
+			$this->exec_safe($cmd, $home_dir . '/.' . $p_user_home_dir, $p_user);
+		}
+		
+		return true;
+	}
+	
+	public function create_jailkit_programs($home_dir, $programs = array()) {
+		if(empty($programs)) {
+			return true;
+		}
+		$program_args = '';
+		foreach($programs as $prog) {
+			$program_args .= ' ' . escapeshellarg($prog);
+		}
+		
+		$cmd = 'jk_cp -k ?' . $program_args;
+		$this->exec_safe($cmd, $home_dir);
+		
+		return true;
+	}
+	
+	public function create_jailkit_chroot($home_dir, $app_sections = array()) {
+		if(empty($app_sections)) {
+			return true;
+		}
+		
+		// Change ownership of the chroot directory to root
+		$app->system->chown($home_dir, 'root');
+		$app->system->chgrp($home_dir, 'root');
+
+		$app_args = '';
+		foreach($app_sections as $app_section) {
+			$app_args .= ' ' . escapeshellarg($app_section);
+		}
+		
+		// Initialize the chroot into the specified directory with the specified applications
+		$cmd = 'jk_init -f -k -c /etc/jailkit/jk_init.ini -j ?' . $app_args;
+		$this->exec_safe($cmd, $home_dir);
+
+		// Create the temp directory
+		if(!is_dir($home_dir . '/tmp')) {
+			$this->mkdirpath($home_dir . '/tmp', 0777);
+		} else {
+			$this->chmod($home_dir . '/tmp', 0777);
+		}
+
+		// Fix permissions of the root firectory
+		$this->chmod($home_dir . '/bin', 0755);  // was chmod g-w $CHROOT_HOMEDIR/bin
+
+		// mysql needs the socket in the chrooted environment
+		$this->mkdirpath($home_dir . '/var/run/mysqld');
+		
+		// ln /var/run/mysqld/mysqld.sock $CHROOT_HOMEDIR/var/run/mysqld/mysqld.sock
+		if(!file_exists("/var/run/mysqld/mysqld.sock")) {
+			$this->exec_safe('ln ? ?', '/var/run/mysqld/mysqld.sock', $home_dir . '/var/run/mysqld/mysqld.sock');
+		}
+		
+		return true;
+	}
+	
 }
diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php
index f8f6640444..81d4b72e96 100644
--- a/server/plugins-available/cron_jailkit_plugin.inc.php
+++ b/server/plugins-available/cron_jailkit_plugin.inc.php
@@ -216,12 +216,9 @@ class cron_jailkit_plugin {
 		//check if the chroot environment is created yet if not create it with a list of program sections from the config
 		if (!is_dir($this->parent_domain['document_root'].'/etc/jailkit'))
 		{
-			$command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh';
-			$command .= ' ?';
-			$command .= ' ?';
-			$app->system->exec_safe($command.' 2>/dev/null', $this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_app_sections']);
+			$app->system->create_jailkit_chroot($this->parent_domain['document_root'], preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_sections']));
 
-			$this->app->log("Added jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
+			$this->app->log("Added jailkit chroot", LOGLEVEL_DEBUG);
 
 			$this->app->load('tpl');
 
@@ -259,19 +256,11 @@ class cron_jailkit_plugin {
 		global $app;
 
 		//copy over further programs and its libraries
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
-		$command .= ' ?';
-		$command .= ' ?';
-		$app->system->exec_safe($command.' 2>/dev/null', $this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_app_programs']);
-
-		$this->app->log("Added programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
-
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
-		$command .= ' ?';
-		$command .= ' ?';
-		$app->system->exec_safe($command.' 2>/dev/null', $this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_cron_programs']);
-
-		$this->app->log("Added cron programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
+		$app->system->create_jailkit_programs($this->parent_domain['document_root'], preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_programs']));
+		$this->app->log("Added app programs to jailkit chroot", LOGLEVEL_DEBUG);
+		
+		$app->system->create_jailkit_programs($this->parent_domain['document_root'], preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_cron_programs']));
+		$this->app->log("Added cron programs to jailkit chroot", LOGLEVEL_DEBUG);
 	}
 
 	function _add_jailkit_user()
@@ -288,14 +277,7 @@ class cron_jailkit_plugin {
 		// ALWAYS create the user. Even if the user was created before
 		// if we check if the user exists, then a update (no shell -> jailkit) will not work
 		// and the user has FULL ACCESS to the root of the server!
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_user.sh';
-		$command .= ' ?';
-		$command .= ' ?';
-		$command .= ' ?';
-		$command .= ' /bin/bash';
-		$app->system->exec_safe($command.' 2>/dev/null', $this->parent_domain['system_user'], $this->parent_domain['document_root'], $jailkit_chroot_userhome);
-
-		$this->app->log("Added jailkit user to chroot with command: ".$command, LOGLEVEL_DEBUG);
+		$app->system->create_jailkit_user($this->parent_domain['system_user'], $this->parent_domain['document_root'], $jailkit_chroot_userhome);
 
 		$app->system->mkdir($this->parent_domain['document_root'].$jailkit_chroot_userhome, 0755, true);
 		$app->system->chown($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_user']);
diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php
index 1f3a08face..eae2ea74fd 100755
--- a/server/plugins-available/shelluser_jailkit_plugin.inc.php
+++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -273,10 +273,8 @@ class shelluser_jailkit_plugin {
 		//check if the chroot environment is created yet if not create it with a list of program sections from the config
 		if (!is_dir($this->data['new']['dir'].'/etc/jailkit'))
 		{
-			$command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh ? ?';
-			$app->system->exec_safe($command.' 2>/dev/null', $this->data['new']['dir'], $this->jailkit_config['jailkit_chroot_app_sections']);
-
-			$this->app->log("Added jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
+			$app->system->create_jailkit_chroot($this->data['new']['dir'], preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_sections']));
+			$this->app->log("Added jailkit chroot", LOGLEVEL_DEBUG);
 
 			$this->_add_jailkit_programs();
 
@@ -323,10 +321,8 @@ class shelluser_jailkit_plugin {
 				$jailkit_chroot_app_program = trim($jailkit_chroot_app_program);
 				if(is_file($jailkit_chroot_app_program) || is_dir($jailkit_chroot_app_program)){			
 					//copy over further programs and its libraries
-					$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh ? ?';
-					$app->system->exec_safe($command.' 2>/dev/null', $this->data['new']['dir'], $jailkit_chroot_app_program);
-
-					$this->app->log("Added programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
+					$app->system->create_jailkit_programs($this->data['new']['dir'], $jailkit_chroot_app_program);
+					$this->app->log("Added programs to jailkit chroot", LOGLEVEL_DEBUG);
 				}
 			}
 		}
@@ -357,8 +353,7 @@ class shelluser_jailkit_plugin {
 		// ALWAYS create the user. Even if the user was created before
 		// if we check if the user exists, then a update (no shell -> jailkit) will not work
 		// and the user has FULL ACCESS to the root of the server!
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_user.sh ? ? ? ? ? ?';
-		$app->system->exec_safe($command.' 2>/dev/null', $this->data['new']['username'], $this->data['new']['dir'], $jailkit_chroot_userhome, $this->data['new']['shell'], $this->data['new']['puser'], $jailkit_chroot_puserhome);
+		$app->system->create_jailkit_user($this->data['new']['username'], $this->data['new']['dir'], $jailkit_chroot_userhome, $this->data['new']['shell'], $this->data['new']['puser'], $jailkit_chroot_puserhome);
 
 		$shell = '/usr/sbin/jk_chrootsh';
 		if($this->data['new']['active'] != 'y') $shell = '/bin/false';
@@ -366,8 +361,6 @@ class shelluser_jailkit_plugin {
 		$app->system->usermod($this->data['new']['username'], 0, 0, $this->data['new']['dir'].'/.'.$jailkit_chroot_userhome, $shell);
 		$app->system->usermod($this->data['new']['puser'], 0, 0, $this->data['new']['dir'].'/.'.$jailkit_chroot_puserhome, '/usr/sbin/jk_chrootsh');
 
-		$this->app->log("Added jailkit user to chroot with command: ".$command, LOGLEVEL_DEBUG);
-
 		if(!is_dir($this->data['new']['dir'].$jailkit_chroot_userhome)) {
 			if(is_dir($this->data['old']['dir'].$jailkit_chroot_userhome_old)) {
 				$app->system->rename($this->data['old']['dir'].$jailkit_chroot_userhome_old,$this->data['new']['dir'].$jailkit_chroot_userhome);
-- 
GitLab


From 90afc99533450e73162e984497f9e606dcde73b4 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 26 Aug 2019 22:01:40 +0200
Subject: [PATCH 106/571] - missed changing app->system to this.

---
 server/lib/classes/system.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 4c76e9aaff..1698d73fe1 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -2154,8 +2154,8 @@ class system{
 		}
 		
 		// Change ownership of the chroot directory to root
-		$app->system->chown($home_dir, 'root');
-		$app->system->chgrp($home_dir, 'root');
+		$this->chown($home_dir, 'root');
+		$this->chgrp($home_dir, 'root');
 
 		$app_args = '';
 		foreach($app_sections as $app_section) {
-- 
GitLab


From 9387f0222c46ddcf64a7666f5dd3af4ad7a6d2d1 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 26 Aug 2019 22:09:33 +0200
Subject: [PATCH 107/571] - typo in logging line

---
 server/lib/classes/system.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 1698d73fe1..5da642e8ad 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -2100,7 +2100,7 @@ class system{
 		$this->_last_exec_retcode = null;
 		$ret = exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
 		
-		$this->app->log("safe_exec cmd: " . $cmd . " - return code: " . $this->_last_exec_retcode, LOGLEVEL_DEBUG);
+		$app->log("safe_exec cmd: " . $cmd . " - return code: " . $this->_last_exec_retcode, LOGLEVEL_DEBUG);
 		
 		return $ret;
 	}
-- 
GitLab


From 7bf3c540f444123d7236cc4632305419f2736e8c Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 26 Aug 2019 22:17:07 +0200
Subject: [PATCH 108/571] - moved splitting for programs and sections (jailkit)
 to lib - fixed warning in chmod

---
 server/lib/classes/system.inc.php                         | 8 ++++++--
 server/plugins-available/cron_jailkit_plugin.inc.php      | 6 +++---
 server/plugins-available/shelluser_jailkit_plugin.inc.php | 2 +-
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 5da642e8ad..c05d5ddf00 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -2136,6 +2136,8 @@ class system{
 	public function create_jailkit_programs($home_dir, $programs = array()) {
 		if(empty($programs)) {
 			return true;
+		} elseif(is_string($programs)) {
+			$programs = preg_split('/[\s,]+/', $programs);
 		}
 		$program_args = '';
 		foreach($programs as $prog) {
@@ -2151,6 +2153,8 @@ class system{
 	public function create_jailkit_chroot($home_dir, $app_sections = array()) {
 		if(empty($app_sections)) {
 			return true;
+		} elseif(is_string($app_sections)) {
+			$app_sections = preg_split('/[\s,]+/', $app_sections);
 		}
 		
 		// Change ownership of the chroot directory to root
@@ -2170,11 +2174,11 @@ class system{
 		if(!is_dir($home_dir . '/tmp')) {
 			$this->mkdirpath($home_dir . '/tmp', 0777);
 		} else {
-			$this->chmod($home_dir . '/tmp', 0777);
+			$this->chmod($home_dir . '/tmp', 0777, true);
 		}
 
 		// Fix permissions of the root firectory
-		$this->chmod($home_dir . '/bin', 0755);  // was chmod g-w $CHROOT_HOMEDIR/bin
+		$this->chmod($home_dir . '/bin', 0755, true);  // was chmod g-w $CHROOT_HOMEDIR/bin
 
 		// mysql needs the socket in the chrooted environment
 		$this->mkdirpath($home_dir . '/var/run/mysqld');
diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php
index 81d4b72e96..0650ad87a3 100644
--- a/server/plugins-available/cron_jailkit_plugin.inc.php
+++ b/server/plugins-available/cron_jailkit_plugin.inc.php
@@ -216,7 +216,7 @@ class cron_jailkit_plugin {
 		//check if the chroot environment is created yet if not create it with a list of program sections from the config
 		if (!is_dir($this->parent_domain['document_root'].'/etc/jailkit'))
 		{
-			$app->system->create_jailkit_chroot($this->parent_domain['document_root'], preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_sections']));
+			$app->system->create_jailkit_chroot($this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_app_sections']);
 
 			$this->app->log("Added jailkit chroot", LOGLEVEL_DEBUG);
 
@@ -256,10 +256,10 @@ class cron_jailkit_plugin {
 		global $app;
 
 		//copy over further programs and its libraries
-		$app->system->create_jailkit_programs($this->parent_domain['document_root'], preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_programs']));
+		$app->system->create_jailkit_programs($this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_app_programs']);
 		$this->app->log("Added app programs to jailkit chroot", LOGLEVEL_DEBUG);
 		
-		$app->system->create_jailkit_programs($this->parent_domain['document_root'], preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_cron_programs']));
+		$app->system->create_jailkit_programs($this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_cron_programs']);
 		$this->app->log("Added cron programs to jailkit chroot", LOGLEVEL_DEBUG);
 	}
 
diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php
index eae2ea74fd..43d6365008 100755
--- a/server/plugins-available/shelluser_jailkit_plugin.inc.php
+++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -273,7 +273,7 @@ class shelluser_jailkit_plugin {
 		//check if the chroot environment is created yet if not create it with a list of program sections from the config
 		if (!is_dir($this->data['new']['dir'].'/etc/jailkit'))
 		{
-			$app->system->create_jailkit_chroot($this->data['new']['dir'], preg_split('/[\s,]+/', $this->jailkit_config['jailkit_chroot_app_sections']));
+			$app->system->create_jailkit_chroot($this->data['new']['dir'], $this->jailkit_config['jailkit_chroot_app_sections']);
 			$this->app->log("Added jailkit chroot", LOGLEVEL_DEBUG);
 
 			$this->_add_jailkit_programs();
-- 
GitLab


From a471ca233a99f4e6824ed0a16b65f069e3f148c2 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 29 Aug 2019 13:42:23 +0200
Subject: [PATCH 109/571] #5373 No file when dns zone delete.

---
 server/plugins-available/bind_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index 29d841ef8a..e8b72b5dbc 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -391,7 +391,7 @@ class bind_plugin {
 		$app->log("Deleting BIND domain file: ".$zone_file_name, LOGLEVEL_DEBUG);
 
  		//* DNSSEC-Implementation
- 		if($data['old']['dnssec_initialized'] == 'Y') {
+ 		if($data['old']['dnssec_initialized'] == 'Y' && file_exists('/usr/local/ispconfig/server/scripts/dnssec-delete.sh')) {
 			//delete keys
 			$app->system->exec_safe('/usr/local/ispconfig/server/scripts/dnssec-delete.sh ?', $data['old']['origin']);
 		}
-- 
GitLab


From b951b645a7ac868ef9b2b6d9e80843a8366ab4e9 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 29 Aug 2019 13:45:43 +0200
Subject: [PATCH 110/571] Fixed wrong socket path in apps vhost when PHP 7.3 is
 used on the server.

---
 install/lib/installer_base.lib.php | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index c7f955d945..148c6708b8 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -2322,6 +2322,7 @@ class installer_base {
 				|| file_exists('/var/run/php/php7.1-fpm.sock')
 				|| file_exists('/var/run/php/php7.2-fpm.sock')
 				|| file_exists('/var/run/php/php7.3-fpm.sock')
+				|| file_exists('/var/run/php/php7.4-fpm.sock')
 			){
 				$use_tcp = '#';
 				$use_socket = '';
@@ -2340,6 +2341,8 @@ class installer_base {
 			if(file_exists('/var/run/php/php7.0-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.1-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.2-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.2-fpm.sock', $content);
+			if(file_exists('/var/run/php/php7.3-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.3-fpm.sock', $content);
+			if(file_exists('/var/run/php/php7.4-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.4-fpm.sock', $content);
 
 			wf($vhost_conf_dir.'/apps.vhost', $content);
 
-- 
GitLab


From 3cabaa685abcff8d58c2296c7b52f85014bd5a37 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 29 Aug 2019 14:11:21 +0200
Subject: [PATCH 111/571] Fixed #5343 Buster/Dovecot stats-writer

---
 install/dist/lib/debian60.lib.php         |  6 +++++
 install/dist/lib/fedora.lib.php           | 32 +++++++++++++++++++++++
 install/lib/installer_base.lib.php        | 32 +++++++++++++++++++++++
 install/tpl/debian6_dovecot2.conf.master  | 17 ++++++++++++
 install/tpl/debian_dovecot2.conf.master   | 15 +++++++++++
 install/tpl/fedora_dovecot2.conf.master   | 15 +++++++++++
 install/tpl/opensuse_dovecot2.conf.master | 15 +++++++++++
 7 files changed, 132 insertions(+)

diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index 487d350512..cc234f132e 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -136,6 +136,12 @@ class installer extends installer_base {
 						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 					}
 				}
+				//remove #2.3+ comment
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('#2.3+','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+				
 			} else {
 				// remove settings which are not supported in Dovecot < 2.3
 				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 5bb8fc0d25..3af8746908 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -449,6 +449,38 @@ class installer_dist extends installer_base {
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
 			}
+			if(version_compare($dovecot_version,2.3) >= 0) {
+				// Remove deprecated setting(s)
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+				
+				// Check if we have a dhparams file and if not, create it
+				if(!file_exists('/etc/dovecot/dh.pem')) {
+					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
+					if(file_exists('/var/lib/dovecot/ssl-parameters.dat')) {
+						// convert existing ssl parameters file
+						$command = 'dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					} else {
+						/*
+						   Create a new dhparams file. We use 2048 bit only as it simply takes too long
+						   on smaller systems to generate a 4096 bit dh file (> 30 minutes). If you need
+						   a 4096 bit file, create it manually before you install ISPConfig
+						*/
+						$command = 'openssl dhparam -out /etc/dovecot/dh.pem 2048';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					}
+				}
+				//remove #2.3+ comment
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('#2.3+','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+				
+			} else {
+				// remove settings which are not supported in Dovecot < 2.3
+				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
+				removeLine($config_dir.'/'.$configfile, 'ssl_dh =');
+			}
 			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
 			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = webmaster@localhost', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
 		} else {
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 148c6708b8..dd4fe9c306 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1304,6 +1304,38 @@ class installer_base {
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
 			}
+			if(version_compare($dovecot_version,2.3) >= 0) {
+				// Remove deprecated setting(s)
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+				
+				// Check if we have a dhparams file and if not, create it
+				if(!file_exists('/etc/dovecot/dh.pem')) {
+					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
+					if(file_exists('/var/lib/dovecot/ssl-parameters.dat')) {
+						// convert existing ssl parameters file
+						$command = 'dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					} else {
+						/*
+						   Create a new dhparams file. We use 2048 bit only as it simply takes too long
+						   on smaller systems to generate a 4096 bit dh file (> 30 minutes). If you need
+						   a 4096 bit file, create it manually before you install ISPConfig
+						*/
+						$command = 'openssl dhparam -out /etc/dovecot/dh.pem 2048';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					}
+				}
+				//remove #2.3+ comment
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('#2.3+','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+				
+			} else {
+				// remove settings which are not supported in Dovecot < 2.3
+				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
+				removeLine($config_dir.'/'.$configfile, 'ssl_dh =');
+			}
 		}
 
 		//* dovecot-lmtpd
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index f13bbd53df..74f680024b 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -68,3 +68,20 @@ protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
 }
+
+mail_plugins = $mail_plugins quota
+
+#2.3+ service stats {
+#2.3+     unix_listener stats-reader {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ 
+#2.3+     unix_listener stats-writer {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ }
+
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index 8fdaf44eeb..cfe3bd0182 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -64,4 +64,19 @@ protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
 }
+
 mail_plugins = $mail_plugins quota
+
+#2.3+ service stats {
+#2.3+     unix_listener stats-reader {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ 
+#2.3+     unix_listener stats-writer {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ }
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index c14af1d44d..1ba39a30d4 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -61,4 +61,19 @@ protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
 }
+
 mail_plugins = $mail_plugins quota
+
+#2.3+ service stats {
+#2.3+     unix_listener stats-reader {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ 
+#2.3+     unix_listener stats-writer {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ }
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index f28c1095d2..f615cf3354 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -60,4 +60,19 @@ protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
 }
+
 mail_plugins = $mail_plugins quota
+
+#2.3+ service stats {
+#2.3+     unix_listener stats-reader {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ 
+#2.3+     unix_listener stats-writer {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ }
-- 
GitLab


From ea111e9228a6be7acedfd5d0644825e5eb4aca54 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 29 Aug 2019 14:14:26 +0200
Subject: [PATCH 112/571] Removed global quota line from dovecot.conf file
 again.

---
 install/tpl/debian6_dovecot2.conf.master | 2 --
 1 file changed, 2 deletions(-)

diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 74f680024b..777280f044 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -69,8 +69,6 @@ protocol lmtp {
   mail_plugins = quota sieve
 }
 
-mail_plugins = $mail_plugins quota
-
 #2.3+ service stats {
 #2.3+     unix_listener stats-reader {
 #2.3+         user = vmail
-- 
GitLab


From 20b7abe33d2b9d2cf549d5896c9763bc620e8a1b Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 30 Aug 2019 14:51:17 +0200
Subject: [PATCH 113/571] - enable greylisting setting for catchall mail
 addresses - change the way greylisting setting is evaluated (prio is now 1.
 mail user, 2. mail forward/alias, 3. catchall), fixes #5378

---
 install/tpl/mysql-virtual_policy_greylist.cf.master        | 3 ++-
 interface/web/mail/form/mail_domain_catchall.tform.php     | 6 ++++++
 interface/web/mail/lib/lang/de_mail_domain_catchall.lng    | 1 +
 interface/web/mail/lib/lang/en_mail_domain_catchall.lng    | 1 +
 interface/web/mail/templates/mail_domain_catchall_edit.htm | 6 ++++++
 5 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/install/tpl/mysql-virtual_policy_greylist.cf.master b/install/tpl/mysql-virtual_policy_greylist.cf.master
index fd6fded819..7967ee4a9c 100644
--- a/install/tpl/mysql-virtual_policy_greylist.cf.master
+++ b/install/tpl/mysql-virtual_policy_greylist.cf.master
@@ -1,5 +1,6 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-query = SELECT 'greylisting' FROM (SELECT greylisting, source AS email FROM mail_forwarding WHERE server_id = {server_id} UNION SELECT greylisting, email FROM mail_user WHERE server_id = {server_id}) addresses WHERE addresses.email='%s' AND addresses.greylisting='y' UNION SELECT 'greylisting' FROM `mail_forwarding` f CROSS JOIN `mail_user` u ON u.email = f.destination WHERE f.type = 'catchall' AND u.greylisting = 'y' AND u.server_id = {server_id} AND f.source = '@%s'
+query = SELECT 'greylisting' FROM (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%s' ORDER BY `prio` ASC LIMIT 1) as rules WHERE rules.greylisting = 'y'
+
 hosts = {mysql_server_ip}
\ No newline at end of file
diff --git a/interface/web/mail/form/mail_domain_catchall.tform.php b/interface/web/mail/form/mail_domain_catchall.tform.php
index 8d0c0296bd..81ce24c7b5 100644
--- a/interface/web/mail/form/mail_domain_catchall.tform.php
+++ b/interface/web/mail/form/mail_domain_catchall.tform.php
@@ -131,6 +131,12 @@ $form["tabs"]['catchall'] = array (
 			'default' => 'y',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'greylisting' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(1 => 'y', 0 => 'n')
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/mail/lib/lang/de_mail_domain_catchall.lng b/interface/web/mail/lib/lang/de_mail_domain_catchall.lng
index 9f37e56697..bef241e0ea 100644
--- a/interface/web/mail/lib/lang/de_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/de_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Ungültiger Domainname oder ungültige Zeichen im D
 $wb['limit_mailcatchall_txt'] = 'Die maximale Anzahl an Catchall Einträgen für Ihr Konto wurde erreicht.';
 $wb['source_txt'] = 'Quelle';
 $wb['destination_error_isemail'] = 'Das Ziel ist keine gültige E-Mail Adresse.';
+$wb['greylisting_txt'] = 'Aktiviere Greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_domain_catchall.lng b/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
index 1f1726e540..a49722802e 100644
--- a/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
@@ -9,4 +9,5 @@ $wb["limit_mailcatchall_txt"] = 'The max. number of email catchall accounts for
 $wb['domain_txt'] = 'Domain';
 $wb["source_txt"] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/templates/mail_domain_catchall_edit.htm b/interface/web/mail/templates/mail_domain_catchall_edit.htm
index 63c4405de2..5991f2aecc 100644
--- a/interface/web/mail/templates/mail_domain_catchall_edit.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_edit.htm
@@ -14,6 +14,12 @@
             <div class="form-group">
                 <label for="destination" class="col-sm-3 control-label">{tmpl_var name='destination_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="destination" id="destination" value="{tmpl_var name='destination'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='greylisting_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='greylisting'}
+                </div>
+            </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
                 <div class="col-sm-9">
-- 
GitLab


From 4666bfeb7456c34c847525a0f44a419f10457ace Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 30 Aug 2019 15:11:59 +0200
Subject: [PATCH 114/571] - fix for previous commit

---
 install/tpl/mysql-virtual_policy_greylist.cf.master | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/tpl/mysql-virtual_policy_greylist.cf.master b/install/tpl/mysql-virtual_policy_greylist.cf.master
index 7967ee4a9c..00f504e082 100644
--- a/install/tpl/mysql-virtual_policy_greylist.cf.master
+++ b/install/tpl/mysql-virtual_policy_greylist.cf.master
@@ -1,6 +1,6 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-query = SELECT 'greylisting' FROM (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%s' ORDER BY `prio` ASC LIMIT 1) as rules WHERE rules.greylisting = 'y'
+query = SELECT 'greylisting' FROM (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1) as rules WHERE rules.greylisting = 'y'
 
 hosts = {mysql_server_ip}
\ No newline at end of file
-- 
GitLab


From 24b60e9c77a440812e61b2a65200c6b8501a0f8c Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 2 Sep 2019 10:15:41 +0200
Subject: [PATCH 115/571] - fixed problem when running cron_debug.php - fixed
 php warning on awstats cron

---
 server/lib/classes/cron.d/150-awstats.inc.php | 4 +++-
 server/lib/classes/cronjob.inc.php            | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/server/lib/classes/cron.d/150-awstats.inc.php b/server/lib/classes/cron.d/150-awstats.inc.php
index 0b1cbd5a44..4ba286ea1a 100644
--- a/server/lib/classes/cron.d/150-awstats.inc.php
+++ b/server/lib/classes/cron.d/150-awstats.inc.php
@@ -148,7 +148,9 @@ class cronjob_awstats extends cronjob {
 				}
 
 				$statsdirold = $statsdir."/".$awyear."-".$awmonth."/";
-				mkdir($statsdirold);
+				if(!is_dir($statsdirold)) {
+					mkdir($statsdirold);
+				}
 				$files = scandir($statsdir);
 				foreach ($files as $file) {
 					if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") copy("$statsdir"."/"."$file", "$statsdirold"."$file");
diff --git a/server/lib/classes/cronjob.inc.php b/server/lib/classes/cronjob.inc.php
index 1e452b6481..1407add021 100644
--- a/server/lib/classes/cronjob.inc.php
+++ b/server/lib/classes/cronjob.inc.php
@@ -174,7 +174,7 @@ class cronjob {
 	}
 
 	// child classes may NOT override this!
-	private function onCompleted() {
+	protected function onCompleted() {
 		global $app, $conf;
 
 		if($conf['log_priority'] <= LOGLEVEL_DEBUG) print "Called onCompleted() for class " . get_class($this) . "\n";
-- 
GitLab


From 2e3887d07d0baeed95208df87ab5b53816ada8ff Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 2 Sep 2019 11:13:54 +0200
Subject: [PATCH 116/571] - changed the way cron_debug.php calls cron job
 classes

---
 server/cron_debug.php              | 7 +------
 server/lib/classes/cronjob.inc.php | 4 ++--
 2 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/server/cron_debug.php b/server/cron_debug.php
index 6eda4fcdde..74065f02c4 100644
--- a/server/cron_debug.php
+++ b/server/cron_debug.php
@@ -61,12 +61,7 @@ if(preg_match('/^\d+\-(.*)$/', $name, $match)) $name = $match[1]; // strip numer
 include $path . '/' . $cronjob_file;
 $class_name = 'cronjob_' . $name;
 $cronjob = new $class_name();
-
-$cronjob->onPrepare();
-$cronjob->onBeforeRun();
-$cronjob->onRunJob();
-$cronjob->onAfterRun();
-$cronjob->onCompleted();
+$cronjob->run(true);
 
 die("finished.\n");
 
diff --git a/server/lib/classes/cronjob.inc.php b/server/lib/classes/cronjob.inc.php
index 1407add021..27bc7038cf 100644
--- a/server/lib/classes/cronjob.inc.php
+++ b/server/lib/classes/cronjob.inc.php
@@ -76,14 +76,14 @@ class cronjob {
 
 
 	/** run through cronjob sequence **/
-	public function run() {
+	public function run($debug_mode = false) {
 		global $conf;
 		
 		if($conf['log_priority'] <= LOGLEVEL_DEBUG) print "Called run() for class " . get_class($this) . "\n";
 		if($conf['log_priority'] <= LOGLEVEL_DEBUG) print "Job has schedule: " . $this->getSchedule() . "\n";
 		$this->onPrepare();
 		$run_it = $this->onBeforeRun();
-		if($run_it == true) {
+		if($run_it == true || $debug_mode === true) {
 			$this->onRunJob();
 			$this->onAfterRun();
 			$this->onCompleted();
-- 
GitLab


From 20fd2cce482389d5c80a78a9f247c10562177a48 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 2 Sep 2019 14:15:54 +0200
Subject: [PATCH 117/571] Implemented #5375 Add WebDAV functions to remoting
 API

---
 interface/lib/classes/remote.d/sites.inc.php | 50 ++++++++++++++++++++
 interface/web/sites/lib/remote.conf.php      |  1 +
 2 files changed, 51 insertions(+)

diff --git a/interface/lib/classes/remote.d/sites.inc.php b/interface/lib/classes/remote.d/sites.inc.php
index a2f15d6f9d..59c2e371f3 100644
--- a/interface/lib/classes/remote.d/sites.inc.php
+++ b/interface/lib/classes/remote.d/sites.inc.php
@@ -1017,6 +1017,56 @@ class remoting_sites extends remoting {
 		return $app->quota_lib->get_databasequota_data($client_id, false);
 	}
 	
+	// ----------------------------------------------------------------------------------------------------------
+
+	//* Get record details
+	public function sites_webdav_user_get($session_id, $primary_id)
+	{
+		global $app;
+
+		if(!$this->checkPerm($session_id, 'sites_webdav_user_get')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/webdav_user.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+
+	//* Add a record
+	public function sites_webdav_user_add($session_id, $client_id, $params)
+	{
+		if(!$this->checkPerm($session_id, 'sites_webdav_user_add')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../sites/form/webdav_user.tform.php', $client_id, $params);
+	}
+
+	//* Update a record
+	public function sites_webdav_user_update($session_id, $client_id, $primary_id, $params)
+	{
+		if(!$this->checkPerm($session_id, 'sites_webdav_user_update')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/webdav_user.tform.php', $client_id, $primary_id, $params);
+		return $affected_rows;
+	}
+
+	//* Delete a record
+	public function sites_webdav_user_delete($session_id, $primary_id)
+	{
+		global $app;
+		if(!$this->checkPerm($session_id, 'sites_webdav_user_delete')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+
+		$affected_rows = $this->deleteQuery('../sites/form/webdav_user.tform.php', $primary_id);
+		return $affected_rows;
+	}
+	
 	
 }
 
diff --git a/interface/web/sites/lib/remote.conf.php b/interface/web/sites/lib/remote.conf.php
index a9ef3236b7..19a48e3ca5 100644
--- a/interface/web/sites/lib/remote.conf.php
+++ b/interface/web/sites/lib/remote.conf.php
@@ -9,4 +9,5 @@ $function_list['sites_web_domain_backup'] = 'Sites Backup functions';
 $function_list['sites_web_aliasdomain_get,sites_web_aliasdomain_add,sites_web_aliasdomain_update,sites_web_aliasdomain_delete'] = 'Sites Aliasdomain functions';
 $function_list['sites_web_subdomain_get,sites_web_subdomain_add,sites_web_subdomain_update,sites_web_subdomain_delete'] = 'Sites Subdomain functions';
 $function_list['sites_aps_update_package_list,sites_aps_available_packages_list,sites_aps_change_package_status,sites_aps_install_package,sites_aps_get_package_details,sites_aps_get_package_file,sites_aps_get_package_settings,sites_aps_instance_get,sites_aps_instance_delete'] = 'Sites APS functions';
+$function_list['sites_webdav_user_get,sites_webdav_user_add,sites_webdav_user_update,sites_webdav_user_delete'] = 'Sites WebDAV-User functions';
 ?>
-- 
GitLab


From 80e4c48f17672b3791d744ce38a17c43ea61f7a1 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 2 Sep 2019 14:25:15 +0200
Subject: [PATCH 118/571] #5383 Updated Czech translation

---
 interface/lib/lang/cz.lng                     |  2 +-
 .../web/admin/lib/lang/cz_server_php.lng      |  2 +-
 .../web/admin/lib/lang/cz_server_php_list.lng |  2 +-
 .../web/admin/lib/lang/cz_system_config.lng   | 16 +++----
 .../web/client/lib/lang/cz_clients_list.lng   |  6 +--
 .../lib/lang/cz_dashlet_invoices.lng          |  2 +-
 .../dashboard/lib/lang/cz_dashlet_limits.lng  |  8 ++--
 interface/web/dns/lib/lang/cz_dns_caa.lng     | 32 +++++++-------
 interface/web/dns/lib/lang/cz_dns_dmarc.lng   |  4 +-
 interface/web/dns/lib/lang/cz_dns_ds.lng      |  4 +-
 interface/web/dns/lib/lang/cz_dns_import.lng  |  2 +-
 interface/web/dns/lib/lang/cz_dns_loc.lng     |  4 +-
 interface/web/dns/lib/lang/cz_dns_soa.lng     |  2 +-
 interface/web/dns/lib/lang/cz_dns_spf.lng     |  4 +-
 interface/web/dns/lib/lang/cz_dns_tlsa.lng    |  4 +-
 interface/web/dns/lib/lang/cz_dns_wizard.lng  |  2 +-
 .../web/mail/lib/lang/cz_mail_backup_list.lng | 12 ++---
 interface/web/monitor/lib/lang/cz.lng         |  2 +-
 .../lib/lang/cz_dataloghistory_list.lng       | 12 ++---
 .../lib/lang/cz_dataloghistory_undo.lng       |  4 +-
 .../lib/lang/cz_dataloghistory_view.lng       | 44 +++++++++----------
 .../sites/lib/lang/cz_aps_instances_list.lng  |  2 +-
 .../web/sites/lib/lang/cz_web_aliasdomain.lng |  2 +-
 .../web/sites/lib/lang/cz_web_backup_list.lng |  4 +-
 .../web/sites/lib/lang/cz_web_childdomain.lng |  2 +-
 .../sites/lib/lang/cz_web_vhost_domain.lng    | 10 ++---
 .../sites/lib/lang/cz_web_vhost_subdomain.lng |  2 +-
 27 files changed, 96 insertions(+), 96 deletions(-)

diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng
index 6d95c1249f..fdf9053dae 100644
--- a/interface/lib/lang/cz.lng
+++ b/interface/lib/lang/cz.lng
@@ -33,7 +33,7 @@ $wb['top_menu_monitor'] = 'Monitor';
 $wb['top_menu_sites'] = 'Stránky';
 $wb['top_menu_dns'] = 'DNS';
 $wb['top_menu_tools'] = 'Nástroje';
-$wb['top_menu_help'] = 'Pomoc';
+$wb['top_menu_help'] = 'Podpora';
 $wb['toolsarea_head_txt'] = 'Nástroje';
 $wb['top_menu_billing'] = 'Fakturace';
 $wb['top_menu_domain'] = 'Doména';
diff --git a/interface/web/admin/lib/lang/cz_server_php.lng b/interface/web/admin/lib/lang/cz_server_php.lng
index 615431c355..e326870340 100644
--- a/interface/web/admin/lib/lang/cz_server_php.lng
+++ b/interface/web/admin/lib/lang/cz_server_php.lng
@@ -13,5 +13,5 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Cesta k php.ini adresáři';
 $wb['php_fpm_init_script_txt'] = 'Cesta k PHP-FPM init script';
 $wb['php_fpm_ini_dir_txt'] = 'Cesta k php.ini adresáři';
 $wb['php_fpm_pool_dir_txt'] = 'Cesta k PHP-FPM pool adresáři';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Aktivní';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_php_list.lng b/interface/web/admin/lib/lang/cz_server_php_list.lng
index f79d482190..abe4f750ff 100644
--- a/interface/web/admin/lib/lang/cz_server_php_list.lng
+++ b/interface/web/admin/lib/lang/cz_server_php_list.lng
@@ -4,5 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Přidat verzi PHP';
 $wb['client_id_txt'] = 'Klient';
 $wb['name_txt'] = 'Verze PHP';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Aktivní';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index a0abf26410..3660e1b689 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -77,17 +77,17 @@ $wb['default_dnsserver_txt'] = 'Výchozí DNS server';
 $wb['default_slave_dnsserver_txt'] = 'Výchozí sekundární DNS server';
 $wb['default_dbserver_txt'] = 'Výchozí databázový server';
 $wb['company_name_txt'] = 'Název společnosti v panelu (listu) webového prohlížeče';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['reseller_can_use_options_txt'] = 'Distributor (prodejce) může použít kartu možností pro weby.';
 $wb['custom_login_text_txt'] = 'Vlastní text na přihlašovací stránce';
 $wb['custom_login_link_txt'] = 'Vlastní odkaz (URL) na přihlašovací stránce (vlastní text)';
 $wb['login_link_error_regex'] = 'Neplatný formát URL pro vlastní odkaz na přihlašovací stránce';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_name_txt'] = 'Název vydavatele';
+$wb['ca_issue_txt'] = 'Doména vydavatele';
+$wb['ca_wildcard_txt'] = 'Použít Wildcard (*)';
+$wb['ca_critical_txt'] = 'Přísná kontrola';
 $wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
+$wb['active_txt'] = 'Aktivní';
+$wb['btn_save_txt'] = 'Uložit';
+$wb['btn_cancel_txt'] = 'Zrušit';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/client/lib/lang/cz_clients_list.lng b/interface/web/client/lib/lang/cz_clients_list.lng
index 8cdabf2696..270da3674d 100644
--- a/interface/web/client/lib/lang/cz_clients_list.lng
+++ b/interface/web/client/lib/lang/cz_clients_list.lng
@@ -8,7 +8,7 @@ $wb['country_txt'] = 'Stát';
 $wb['add_new_record_txt'] = 'Vytvořit klienta';
 $wb['username_txt'] = 'Uživatelské jméno';
 $wb['customer_no_txt'] = 'Zákaznické číslo';
-$wb['locked_txt'] = 'Locked';
-$wb['yes_txt'] = 'Yes';
-$wb['no_txt'] = 'No';
+$wb['locked_txt'] = 'Zamčené';
+$wb['yes_txt'] = 'Ano';
+$wb['no_txt'] = 'Ne';
 ?>
diff --git a/interface/web/dashboard/lib/lang/cz_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/cz_dashlet_invoices.lng
index 9666ed2b08..ab093825c6 100644
--- a/interface/web/dashboard/lib/lang/cz_dashlet_invoices.lng
+++ b/interface/web/dashboard/lib/lang/cz_dashlet_invoices.lng
@@ -3,7 +3,7 @@ $wb['invoices_txt'] = 'Invoices';
 $wb['invoice_no_txt'] = 'Invoice No.';
 $wb['amount_txt'] = 'Amount';
 $wb['date_txt'] = 'Datum';
-$wb['invoice_status_txt'] = 'Status';
+$wb['invoice_status_txt'] = 'Stav';
 $wb['no_invoices_txt'] = 'No Invoices available.';
 $wb['paid_txt'] = 'Paid';
 $wb['unpaid_txt'] = 'Unpaid';
diff --git a/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng b/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
index d322823e6b..a7aecc4a53 100644
--- a/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['limits_txt'] = 'Limity účtu';
+$wb['limits_txt'] = 'Limity účtů';
 $wb['of_txt'] = 'z';
 $wb['unlimited_txt'] = 'neomezeno';
 $wb['limit_maildomain_txt'] = 'Počet e-mailových domén';
@@ -28,7 +28,7 @@ $wb['limit_client_txt'] = 'Počet klientů';
 $wb['limit_database_txt'] = 'Počet databází';
 $wb['limit_mailmailinglist_txt'] = 'Počet e-mailových konferencí';
 $wb['limit_domain_txt'] = 'Počet domén';
-$wb['limit_mailquota_txt'] = 'Assigned mailbox quota';
-$wb['limit_web_quota_txt'] = 'Assigned web quota';
-$wb['limit_database_quota_txt'] = 'Assigned database quota';
+$wb['limit_mailquota_txt'] = 'Přiřazená e-mailová kvóta';
+$wb['limit_web_quota_txt'] = 'Přiřazená webová kvóta';
+$wb['limit_database_quota_txt'] = 'Přiřazená databázová kvóta';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_caa.lng b/interface/web/dns/lib/lang/cz_dns_caa.lng
index 973a97ceb6..f4ba690c5a 100644
--- a/interface/web/dns/lib/lang/cz_dns_caa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_caa.lng
@@ -1,19 +1,19 @@
 <?php
-$wb['ca_list_txt'] = 'Certifiction Authority';
-$wb['ca_domain_txt'] = 'Domain';
-$wb['ca_hostname_txt'] = 'Additional Hostnamen';
-$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
-$wb['ca_options_txt'] = 'Additional Options';
-$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
-$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check';
+$wb['ca_list_txt'] = 'Certifikační autorita';
+$wb['ca_domain_txt'] = 'Doména';
+$wb['ca_hostname_txt'] = 'Omezit na názvy hostitelů';
+$wb['ca_hostname_note_txt'] = '(Oddělený seznam s čárkami - prázdný pro všechna jména hostitelů)';
+$wb['ca_options_txt'] = 'Další možnosti názvu hostitele';
+$wb['ca_options_note_txt'] = 'requested by the CA (Oddělený seznam s čárkami)';
+$wb['ca_wildcard_txt'] = 'Použití Wildcard (*) SSL';
+$wb['ca_critical_txt'] = 'Přísná kontrola';
 $wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['select_txt'] = 'Select Certifiction Authority';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['ca_error_txt'] = 'No Certifiction Authority selected';
-$wb['caa_exists_error'] = 'CAA Record already exists';
-$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['active_txt'] = 'Aktivní';
+$wb['select_txt'] = 'Vyberte certifikační autoritu';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['ca_error_txt'] = 'Nebyla vybrána žádná certifikační autorita';
+$wb['caa_exists_error'] = 'CAA záznam již existuje';
+$wb['ca_option_error'] = 'Neplatný formát pro další možnosti; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL čas je 60 sekund.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_dmarc.lng b/interface/web/dns/lib/lang/cz_dns_dmarc.lng
index c5952552a6..c4c3bb4f24 100644
--- a/interface/web/dns/lib/lang/cz_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/cz_dns_dmarc.lng
@@ -44,7 +44,7 @@ $wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
 $wb['dmarc_invalid_email_txt'] = 'Neplatný e-mail';
 $wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
 $wb['record_exists_txt'] = 'DNS záznam již existuje';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_ds.lng b/interface/web/dns/lib/lang/cz_dns_ds.lng
index 3d25095d3b..f7dd779ef8 100644
--- a/interface/web/dns/lib/lang/cz_dns_ds.lng
+++ b/interface/web/dns/lib/lang/cz_dns_ds.lng
@@ -6,8 +6,8 @@ $wb['type_txt'] = 'Typ';
 $wb['data_txt'] = 'Data';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'Text empty';
diff --git a/interface/web/dns/lib/lang/cz_dns_import.lng b/interface/web/dns/lib/lang/cz_dns_import.lng
index 3b41baa1be..fc90d3cf3c 100644
--- a/interface/web/dns/lib/lang/cz_dns_import.lng
+++ b/interface/web/dns/lib/lang/cz_dns_import.lng
@@ -12,5 +12,5 @@ $wb['title'] = 'Importovat soubory zón';
 $wb['no_file_uploaded_error'] = 'Nelze odeslat DNS zonový soubor';
 $wb['zone_file_import_txt'] = 'Importovat DNS zonový soubor';
 $wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_loc.lng b/interface/web/dns/lib/lang/cz_dns_loc.lng
index 90ddd3533b..4ed9018152 100644
--- a/interface/web/dns/lib/lang/cz_dns_loc.lng
+++ b/interface/web/dns/lib/lang/cz_dns_loc.lng
@@ -6,8 +6,8 @@ $wb['type_txt'] = 'Typ';
 $wb['data_txt'] = 'Data';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'Text empty';
diff --git a/interface/web/dns/lib/lang/cz_dns_soa.lng b/interface/web/dns/lib/lang/cz_dns_soa.lng
index 7dfbb0e91b..5e4a0c2bb3 100644
--- a/interface/web/dns/lib/lang/cz_dns_soa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_soa.lng
@@ -38,7 +38,7 @@ $wb['xfer_error_regex'] = 'Také oznámí: Prosím, použijte IP adresu.';
 $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry';
 $wb['dnssec_wanted_txt'] = 'Podepsat zónu (DNSSEC)';
 $wb['dnssec_wanted_info'] = 'Když deaktivujete DNSSEC klíče nebudou odstraněny, ale DNS záznamy (zóna) již nebudou propagovány v podepsaném formátu. Pokud používáte PowerDNS, budou klíče WILL vymazány!';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
 $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.';
 $wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_spf.lng b/interface/web/dns/lib/lang/cz_dns_spf.lng
index 755e01f11e..3086454c34 100644
--- a/interface/web/dns/lib/lang/cz_dns_spf.lng
+++ b/interface/web/dns/lib/lang/cz_dns_spf.lng
@@ -19,7 +19,7 @@ $wb['spf_invalid_domain_txt'] = 'Neplatné doménové jméno';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
 $wb['record_exists_txt'] = 'DNS záznam již existuje';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_tlsa.lng b/interface/web/dns/lib/lang/cz_dns_tlsa.lng
index b92da1d45b..3891ad37c7 100644
--- a/interface/web/dns/lib/lang/cz_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_tlsa.lng
@@ -6,8 +6,8 @@ $wb['type_txt'] = 'Typ';
 $wb['data_txt'] = 'TLSA-Data';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'The hostname has the wrong format. Correct: _&lt;port&gt;._(tcp|udp).&lt;hostname&gt;';
 $wb['data_error_empty'] = 'TLSA-Data empty';
diff --git a/interface/web/dns/lib/lang/cz_dns_wizard.lng b/interface/web/dns/lib/lang/cz_dns_wizard.lng
index 548b90d702..a4a1ddf539 100644
--- a/interface/web/dns/lib/lang/cz_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/cz_dns_wizard.lng
@@ -39,7 +39,7 @@ $wb['list_head_txt'] = 'Průvodce vytvořením DNS zóny';
 $wb['list_desc_txt'] = 'Vytvoření DNS zóny pomocí průvodce';
 $wb['dkim_txt'] = 'DKIM povolen';
 $wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
 $wb['dnssec_txt'] = 'Podepsat zónu (DNSSEC)';
 $wb['limit_dns_zone_txt'] = 'The max. number of DNS zones for your account is reached.';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_backup_list.lng b/interface/web/mail/lib/lang/cz_mail_backup_list.lng
index 91ea1ad49f..d4f941a4cd 100644
--- a/interface/web/mail/lib/lang/cz_mail_backup_list.lng
+++ b/interface/web/mail/lib/lang/cz_mail_backup_list.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['list_head_txt'] = 'Stávající zálohy';
+$wb['list_head_txt'] = 'Dostupné zálohy';
 $wb['date_txt'] = 'Datum';
 $wb['backup_type_txt'] = 'Typ';
 $wb['filename_txt'] = 'Záloha souborů';
 $wb['restore_backup_txt'] = 'Obnovit';
-$wb['restore_info_txt'] = 'Restore of the backup has been started. This action takes several minutes to be completed.';
-$wb['restore_confirm_txt'] = 'Restoring may overwrite existing files in your mailbox. Do you really want to restore this backup?';
-$wb['download_pending_txt'] = 'There is already a pending backup download job.';
-$wb['restore_pending_txt'] = 'There is already a pending backup restore job.';
+$wb['restore_info_txt'] = 'Obnovení zálohy bylo zahájeno. Dokončení této akce může trvat několik minut.';
+$wb['restore_confirm_txt'] = 'Obnovení může přepsat existující soubory ve vaší poštovní schránce. Opravdu chcete tuto zálohu obnovit ?';
+$wb['download_pending_txt'] = 'Již existuje čekající úloha pro stažení zálohy.';
+$wb['restore_pending_txt'] = 'Již existuje čekající úloha pro obnovu zálohy.';
 $wb['delete_backup_txt'] = 'Smazat zálohu';
 $wb['delete_info_txt'] = 'Bylo zahájeno odstranění zálohy. Tato akce může trvat několik minut než bude dokončena.';
 $wb['delete_confirm_txt'] = 'Opravdu chcete smazat tuto zálohu ?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
+$wb['delete_pending_txt'] = 'Již existuje čekající úloha pro odstranění zálohy.';
 $wb['filesize_txt'] = 'Velikost souboru';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz.lng b/interface/web/monitor/lib/lang/cz.lng
index 9e054aacf2..be2d9eadbb 100644
--- a/interface/web/monitor/lib/lang/cz.lng
+++ b/interface/web/monitor/lib/lang/cz.lng
@@ -161,5 +161,5 @@ $wb['monitor_database_client_txt'] = 'Klient';
 $wb['monitor_database_domain_txt'] = 'Doména';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
-$wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Show Data Log History'] = 'Zobrazit historii datového logu';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng
index 9f9afd6347..ce89af1a88 100644
--- a/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Protokol historie datového logu';
+$wb['tstamp_txt'] = 'Datum';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Tabulka';
+$wb['action_txt'] = 'Akce';
+$wb['status_txt'] = 'Stav';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng
index 0e040a3e77..0d25364ec1 100644
--- a/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['list_head_txt'] = 'Záznam historie datového logu';
 $wb['success_txt'] = 'Undo successful';
 $wb['error_txt'] = 'Error during undo: Record does not exist anymore';
 $wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
-$wb['btn_cancel_txt'] = 'Back';
+$wb['btn_cancel_txt'] = 'Zpět';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng
index df9ddd286f..1f20cf12d4 100644
--- a/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng
@@ -1,26 +1,26 @@
 <?php
-$wb['i'] = 'Insert';
-$wb['u'] = 'Update';
-$wb['d'] = 'Delete';
-$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['i'] = 'Vložit';
+$wb['u'] = 'Aktualizace';
+$wb['d'] = 'Odstranit';
+$wb['list_head_txt'] = 'Záznam historie datového logu';
 $wb['id_txt'] = 'ID';
-$wb['timestamp_txt'] = 'Timestamp';
-$wb['table_txt'] = 'Table';
-$wb['action_txt'] = 'Action';
-$wb['session_id_txt'] = 'Session ID';
-$wb['fields_txt'] = 'Fields';
-$wb['fields_inserted_txt'] = 'Inserted Fields';
-$wb['fields_updated_txt'] = 'Updated Fields';
-$wb['fields_deleted_txt'] = 'Deleted Fields';
-$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['timestamp_txt'] = 'Časové razítko';
+$wb['table_txt'] = 'Tabulka';
+$wb['action_txt'] = 'Akce';
+$wb['session_id_txt'] = 'ID Relace';
+$wb['fields_txt'] = 'Pole';
+$wb['fields_inserted_txt'] = 'Vložená pole';
+$wb['fields_updated_txt'] = 'Aktualizovaná pole';
+$wb['fields_deleted_txt'] = 'Odstraněná pole';
+$wb['no_changes_txt'] = 'Žádné změny (re-sync)';
 $wb['is_diff_txt'] = 'The differences are highlighted';
-$wb['is_diff_inserts_txt'] = 'Insertions';
-$wb['is_diff_deletes_txt'] = 'Deletions';
-$wb['field_txt'] = 'Field';
-$wb['value_txt'] = 'Value';
-$wb['old_txt'] = 'Old';
-$wb['new_txt'] = 'New';
-$wb['btn_cancel_txt'] = 'Back';
-$wb['undo_txt'] = 'Undo action';
-$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+$wb['is_diff_inserts_txt'] = 'Vložení';
+$wb['is_diff_deletes_txt'] = 'Odstranění';
+$wb['field_txt'] = 'Pole';
+$wb['value_txt'] = 'Hodnota';
+$wb['old_txt'] = 'Starý';
+$wb['new_txt'] = 'Nový';
+$wb['btn_cancel_txt'] = 'Zpět';
+$wb['undo_txt'] = 'Vrátit akci';
+$wb['undo_confirmation_txt'] = 'Opravdu chcete tuto akci vrátit zpět ?';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_aps_instances_list.lng b/interface/web/sites/lib/lang/cz_aps_instances_list.lng
index 8d712878d7..db4494af02 100644
--- a/interface/web/sites/lib/lang/cz_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/cz_aps_instances_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'Nainstalované balíčky';
 $wb['name_txt'] = 'Jméno';
 $wb['version_txt'] = 'Verze';
 $wb['customer_txt'] = 'Klient';
-$wb['status_txt'] = 'Status';
+$wb['status_txt'] = 'Stav';
 $wb['install_location_txt'] = 'Umístění instalace';
 $wb['pkg_delete_confirmation'] = 'Opravdu chcete smazat tuto instalaci ?';
 $wb['filter_txt'] = 'Hledat';
diff --git a/interface/web/sites/lib/lang/cz_web_aliasdomain.lng b/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
index 57b920156d..0f8d3e5dec 100644
--- a/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_txt'] = 'PHP Verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_backup_list.lng b/interface/web/sites/lib/lang/cz_web_backup_list.lng
index 9674e6197a..d30e41d961 100644
--- a/interface/web/sites/lib/lang/cz_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/cz_web_backup_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Stávající zálohy';
+$wb['list_head_txt'] = 'Dostupné zálohy';
 $wb['date_txt'] = 'Datum';
 $wb['backup_type_txt'] = 'Verze';
 $wb['filename_txt'] = 'Záloha souborů';
@@ -16,6 +16,6 @@ $wb['filesize_txt'] = 'Velikost souboru';
 $wb['delete_backup_txt'] = 'Smazat zálohu';
 $wb['delete_info_txt'] = 'Bylo zahájeno odstranění zálohy. Tato akce může trvat několik minut než bude dokončena.';
 $wb['delete_confirm_txt'] = 'Opravdu chcete smazat tuto zálohu ?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
+$wb['delete_pending_txt'] = 'Již existuje čekající úloha pro odstranění zálohy.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_childdomain.lng b/interface/web/sites/lib/lang/cz_web_childdomain.lng
index e39dfc12ee..5a5091c89a 100644
--- a/interface/web/sites/lib/lang/cz_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_txt'] = 'PHP Verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index 269b6b5862..deaa3269c4 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -130,13 +130,13 @@ $wb['variables_txt'] = 'Proměnné';
 $wb['added_by_txt'] = 'Kdo vytvořil účet';
 $wb['added_date_txt'] = 'Datum vytvoření účtu';
 $wb['backup_excludes_txt'] = 'Vyloučené adresáře';
-$wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)';
-$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
-$wb['server_chosen_not_ok'] = 'The selected server is not allowed for this account.';
-$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
+$wb['backup_excludes_note_txt'] = '(Oddělte více adresářů čárkami. Příklad: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'Vyloučené adresáře obsahují neplatné znaky.';
+$wb['server_chosen_not_ok'] = 'Vybraný server není pro tento účet povolen.';
+$wb['subdomain_error_empty'] = 'Pole subdomény je prázdné nebo obsahuje neplatné znaky.';
 $wb['btn_save_txt'] = 'Uložit';
 $wb['btn_cancel_txt'] = 'Zrušit';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
+$wb['enable_spdy_txt'] = 'Povolit SPDY / HTTP2';
 $wb['load_client_data_txt'] = 'Nahrát údaje z podrobností registrovaného klienta';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Obnovit údaje (resetovat)';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
index 2b6f3c77d2..268368c139 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
@@ -123,7 +123,7 @@ $wb['variables_txt'] = 'Proměnné';
 $wb['backup_excludes_txt'] = 'Vyloučené adresáře';
 $wb['backup_excludes_note_txt'] = '(Oddělte více adresářů čárkami. Vzor: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Vyloučené adresáře obsahují neplatné znaky.';
-$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
+$wb['subdomain_error_empty'] = 'Pole subdomény je prázdné nebo obsahuje neplatné znaky.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
-- 
GitLab


From 90f3c771c5b42c904d9b15f15f7dbcce34fe5430 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 2 Sep 2019 14:53:34 +0200
Subject: [PATCH 119/571] - fixed rspamd handling of user settings files -
 removed separate rspamd greylisting setting for policy and respect mail
 user/alias/forward/catchall setting for greylisting, fixes #5379

---
 interface/web/admin/server_config_edit.php    |  14 +-
 .../web/mail/form/spamfilter_policy.tform.php |   6 -
 interface/web/mail/spamfilter_policy_edit.php |   3 -
 .../mail/templates/spamfilter_rspamd_edit.htm |   6 -
 server/conf/rspamd_users.inc.conf.master      |  56 +++--
 .../plugins-available/rspamd_plugin.inc.php   | 237 ++++++++++++------
 6 files changed, 208 insertions(+), 114 deletions(-)

diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index 8a7cd770a3..f311f6b1a5 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -174,7 +174,7 @@ class page_action extends tform_actions {
 					}
 				}
 				
-				$mail_users = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE server_id = ? AND (autoresponder = 'y' OR move_junk = 'y')", intval($this->id));
+				$mail_users = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE server_id = ?", intval($this->id));
 				if(is_array($mail_users) && !empty($mail_users)){
 					foreach($mail_users as $mail_user){
 						if($mail_user['autoresponder'] == 'y'){
@@ -182,13 +182,21 @@ class page_action extends tform_actions {
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
 							$mail_user['autoresponder'] = 'y';
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
-						} else {
+						} elseif($mail_user['move_junk'] == 'y') {
 							$mail_user['move_junk'] = 'n';
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
 							$mail_user['move_junk'] = 'y';
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+						} else {
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
 						}
-						
+					}
+				}
+				
+				$mail_forwards = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE server_id = ?", intval($this->id));
+				if(is_array($mail_forwards) && !empty($mail_forwards)){
+					foreach($mail_forwards as $mail_forward){
+						$app->db->datalogUpdate('mail_forwarding', $mail_forward, 'forwarding_id', $mail_forward["forwarding_id"], true);
 					}
 				}
 			}
diff --git a/interface/web/mail/form/spamfilter_policy.tform.php b/interface/web/mail/form/spamfilter_policy.tform.php
index 2205dbb651..57aa4f2bf5 100644
--- a/interface/web/mail/form/spamfilter_policy.tform.php
+++ b/interface/web/mail/form/spamfilter_policy.tform.php
@@ -471,12 +471,6 @@ $form["tabs"]['rspamd'] = array (
 		//#################################
 		// Begin Datatable fields
 		//#################################
-		'rspamd_greylisting' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
 		'rspamd_spam_greylisting_level' => array (
 			'datatype' => 'DOUBLE',
 			'formtype' => 'TEXT',
diff --git a/interface/web/mail/spamfilter_policy_edit.php b/interface/web/mail/spamfilter_policy_edit.php
index ffc0818ffa..8226ae6048 100644
--- a/interface/web/mail/spamfilter_policy_edit.php
+++ b/interface/web/mail/spamfilter_policy_edit.php
@@ -92,9 +92,6 @@ class page_action extends tform_actions {
 		global $app;
 		
 		$record_has_changed = false;
-		if(isset($this->dataRecord['rspamd_spam_greylisting_level']) && !isset($this->dataRecord['rspamd_greylisting'])) {
-			$this->dataRecord['rspamd_greylisting'] = 'n';
-		}
 		foreach($this->dataRecord as $key => $val) {
 			if(isset($this->oldDataRecord[$key]) && @$this->oldDataRecord[$key] != $val) {
 				// Record has changed
diff --git a/interface/web/mail/templates/spamfilter_rspamd_edit.htm b/interface/web/mail/templates/spamfilter_rspamd_edit.htm
index 73472a876c..2f8ea0f451 100644
--- a/interface/web/mail/templates/spamfilter_rspamd_edit.htm
+++ b/interface/web/mail/templates/spamfilter_rspamd_edit.htm
@@ -3,12 +3,6 @@
 </div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-			<div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='rspamd_greylisting_txt'}</label>
-                <div class="col-sm-9">
-                    {tmpl_var name='rspamd_greylisting'}
-                </div>
-            </div>
 			<div class="form-group">
                 <label for="rspamd_spam_greylisting_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_greylisting_level_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="rspamd_spam_greylisting_level" id="rspamd_spam_greylisting_level" value="{tmpl_var name='rspamd_spam_greylisting_level'}" class="form-control" /></div>
diff --git a/server/conf/rspamd_users.inc.conf.master b/server/conf/rspamd_users.inc.conf.master
index 43890e8135..96ba9f0838 100644
--- a/server/conf/rspamd_users.inc.conf.master
+++ b/server/conf/rspamd_users.inc.conf.master
@@ -1,39 +1,55 @@
-spamfilter_users-<tmpl_var name='record_id'> {
+<tmpl_var name='record_identifier'> {
 	priority = <tmpl_var name='priority'>;
-	<tmpl_if name='local' op='==' value='Y'>rcpt<tmpl_else>from</tmpl_if> = "<tmpl_var name='email'>";
-<tmpl_if name='spam_lover_virus_lover' op='==' value='spam_lover_AND_virus_lover'>
-	want_spam = yes;
+<tmpl_if name='from_email'>
+	from = "<tmpl_var name='from_email'>";
+</tmpl_if>
+<tmpl_if name='to_email'>
+	rcpt = "<tmpl_var name='to_email'>";
 </tmpl_if>
-<tmpl_if name='spam_lover_virus_lover' op='==' value='spam_lover_AND_NOTvirus_lover'>
+
+<tmpl_if name='spam_lover'>
+<tmpl_if name='virus_lover'>
+	want_spam = yes;
+<tmpl_else>
 	apply {
 		CLAM_VIRUS = 1999.0;
 		JUST_EICAR = 1999.0;
 		actions {
 			reject = null;
+	<tmpl_if name='greylisting'>
+		<tmpl_if name='greylisting' op='==' value='y'>
+			greylist = <tmpl_var name='greylisting_level'>;
+		<tmpl_else>
+			greylist = null;
+		</tmpl_if>
+	</tmpl_if>
 		}
 	}
-</tmpl_if>
-<tmpl_if name='spam_lover_virus_lover' op='==' value='NOTspam_lover_AND_virus_lover'>
+	</tmpl_if>
+<tmpl_else>
 	apply {
+	<tmpl_if name='virus_lover'>
 		CLAM_VIRUS = -999.0;
 		JUST_EICAR = -999.0;
-		actions {
-			<tmpl_if name='rspamd_greylisting' op='==' value='y'>greylist = <tmpl_var name='rspamd_spam_greylisting_level'>;</tmpl_if>
-			<tmpl_if name='rspamd_spam_tag_method' op='==' value='rewrite_subject'>"rewrite subject" =  <tmpl_var name='rspamd_spam_tag_level'>;</tmpl_if>
-			<tmpl_if name='rspamd_spam_tag_method' op='==' value='add_header'>"add header" =  <tmpl_var name='rspamd_spam_tag_level'>;</tmpl_if>
-			reject = <tmpl_var name='rspamd_spam_kill_level'>;
-		}
-	}
-</tmpl_if>
-<tmpl_if name='spam_lover_virus_lover' op='==' value='NOTspam_lover_AND_NOTvirus_lover'>
-	apply {
+	<tmpl_else>
 		CLAM_VIRUS = <tmpl_var name='rspamd_virus_kill_level'>;
 		JUST_EICAR = <tmpl_var name='rspamd_virus_kill_level'>;
+	</tmpl_if>
 		actions {
-			<tmpl_if name='rspamd_greylisting' op='==' value='y'>greylist = <tmpl_var name='rspamd_spam_greylisting_level'>;</tmpl_if>
-			<tmpl_if name='rspamd_spam_tag_method' op='==' value='rewrite_subject'>"rewrite subject" =  <tmpl_var name='rspamd_spam_tag_level'>;</tmpl_if>
-			<tmpl_if name='rspamd_spam_tag_method' op='==' value='add_header'>"add header" =  <tmpl_var name='rspamd_spam_tag_level'>;</tmpl_if>
+		<tmpl_if name='rspamd_spam_tag_method' op='==' value='rewrite_subject'>
+			"rewrite subject" =  <tmpl_var name='rspamd_spam_tag_level'>;
+		</tmpl_if>
+		<tmpl_if name='rspamd_spam_tag_method' op='==' value='add_header'>
+			"add header" =  <tmpl_var name='rspamd_spam_tag_level'>;
+		</tmpl_if>
 			reject = <tmpl_var name='rspamd_spam_kill_level'>;
+	<tmpl_if name='greylisting'>
+		<tmpl_if name='greylisting' op='==' value='y'>
+			greylist = <tmpl_var name='greylisting_level'>;
+		<tmpl_else>
+			greylist = null;
+		</tmpl_if>
+	</tmpl_if>
 		}
 	}
 </tmpl_if>
diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 7fd3ebf773..70885056d7 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -33,7 +33,7 @@ class rspamd_plugin {
 	var $plugin_name = 'rspamd_plugin';
 	var $class_name  = 'rspamd_plugin';
 	var $users_config_dir = '/etc/rspamd/local.d/users/';
-
+	
 	//* This function is called during ispconfig installation to determine
 	//  if a symlink shall be created for this plugin.
 	function onInstall() {
@@ -57,109 +57,195 @@ class rspamd_plugin {
 		Register for the events
 		*/
 
-		//* spamfilter_users
-		$app->plugins->registerEvent('spamfilter_users_insert', $this->plugin_name, 'spamfilter_users_insert');
-		$app->plugins->registerEvent('spamfilter_users_update', $this->plugin_name, 'spamfilter_users_update');
-		$app->plugins->registerEvent('spamfilter_users_delete', $this->plugin_name, 'spamfilter_users_delete');
-
 		//* spamfilter_wblist
 		$app->plugins->registerEvent('spamfilter_wblist_insert', $this->plugin_name, 'spamfilter_wblist_insert');
 		$app->plugins->registerEvent('spamfilter_wblist_update', $this->plugin_name, 'spamfilter_wblist_update');
 		$app->plugins->registerEvent('spamfilter_wblist_delete', $this->plugin_name, 'spamfilter_wblist_delete');
 		
+		//* global mail access filters
+		$app->plugins->registerEvent('mail_access_insert', $this->plugin_name, 'spamfilter_wblist_insert');
+		$app->plugins->registerEvent('mail_access_update', $this->plugin_name, 'spamfilter_wblist_update');
+		$app->plugins->registerEvent('mail_access_delete', $this->plugin_name, 'spamfilter_wblist_delete');
+		
 		//* server ip
 		$app->plugins->registerEvent('server_ip_insert', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_ip_update', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_ip_delete', $this->plugin_name, 'server_ip');
 		
-		//* global mail access filters
-		$app->plugins->registerEvent('mail_access_insert', $this->plugin_name, 'spamfilter_wblist_insert');
-		$app->plugins->registerEvent('mail_access_update', $this->plugin_name, 'spamfilter_wblist_update');
-		$app->plugins->registerEvent('mail_access_delete', $this->plugin_name, 'spamfilter_wblist_delete');
-	}
+		//* spamfilter_users
+		$app->plugins->registerEvent('spamfilter_users_insert', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('spamfilter_users_update', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('spamfilter_users_delete', $this->plugin_name, 'user_settings_update');
 
-	function spamfilter_users_insert($event_name, $data) {
-		$this->action = 'insert';
-		// just run the spamfilter_users_update function
-		$this->spamfilter_users_update($event_name, $data);
+		//* mail user / fwd / catchall changed (greylisting)
+		$app->plugins->registerEvent('mail_user_insert', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_user_update', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_user_delete', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_forwarding_insert', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_forwarding_update', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_forwarding_delete', $this->plugin_name, 'user_settings_update');
 	}
 
-	function spamfilter_users_update($event_name, $data) {
+	function user_settings_update($event_name, $data) {
 		global $app, $conf;
+		
+		if(!is_dir('/etc/rspamd')) {
+			return;
+		}
+		
+		$use_data = 'new';
+		if(substr($event_name, -7) === 'delete') {
+			$mode = 'delete';
+			$use_data = 'old';
+		} elseif(substr($event_name, -7) === 'insert') {
+			$mode = 'insert';
+		} else {
+			$mode = 'update';
+		}
 
 		// get the config
 		$app->uses('getconf,system,functions');
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-
-		if(is_dir('/etc/rspamd')) {
-			$policy = $app->db->queryOneRecord("SELECT * FROM spamfilter_policy WHERE id = ?", intval($data['new']['policy_id']));
-			
-			//* Create the config file
-			$user_file = $this->users_config_dir.'spamfilter_user_'.intval($data['new']['id']).'.conf';
 		
-			if(is_array($policy) && !empty($policy)){
-				if(!is_dir($this->users_config_dir)){
-					$app->system->mkdirpath($this->users_config_dir);
-				}
+		$type = false;
+		$identifier = false;
+		$entry_id = false;
+		if(substr($event_name, 0, 17) === 'spamfilter_users_') {
+			$identifier = 'email';
+			$type = 'spamfilter_user';
+			$entry_id = $data[$use_data]['id'];
+		} elseif(substr($event_name, 0, 16) === 'mail_forwarding_') {
+			$identifier = 'source';
+			$type = 'mail_forwarding';
+			$entry_id = $data[$use_data]['forwarding_id'];
+		} elseif(substr($event_name, 0, 10) === 'mail_user_') {
+			$identifier = 'email';
+			$type = 'mail_user';
+			$entry_id = $data[$use_data]['mailuser_id'];
+		} else {
+			// invalid event
+			$app->log('Invalid event name for rspamd_plugin: ' . $event_name, LOGLEVEL_WARN);
+			return;
+		}
 		
-				$app->load('tpl');
-
-				$tpl = new tpl();
-				$tpl->newTemplate('rspamd_users.inc.conf.master');
-				$tpl->setVar('record_id', intval($data['new']['id']));
-				$tpl->setVar('priority', intval($data['new']['priority']));
-				$tpl->setVar('email', $app->functions->idn_encode($data['new']['email']));
-				$tpl->setVar('local', $data['new']['local']);
-				
-				$tpl->setVar('rspamd_greylisting', $policy['rspamd_greylisting']);
-				$tpl->setVar('rspamd_spam_greylisting_level', floatval($policy['rspamd_spam_greylisting_level']));
-				
-				$tpl->setVar('rspamd_spam_tag_level', floatval($policy['rspamd_spam_tag_level']));
-				$tpl->setVar('rspamd_spam_tag_method', $policy['rspamd_spam_tag_method']);
-				
-				$tpl->setVar('rspamd_spam_kill_level', floatval($policy['rspamd_spam_kill_level']));
-				$tpl->setVar('rspamd_virus_kill_level', floatval($policy['rspamd_spam_kill_level']) + 1000);
+		$is_domain = false;
+		$email_address = $data[$use_data][$identifier];
+		$settings_name =  $email_address;
+		if(!$email_address) {
+			// problem reading identifier
+			$app->log('Empty email address in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN);
+			return;
+		} elseif(substr($email_address, 0, 1) === '@') {
+			$settings_name = substr($email_address, 1);
+			$is_domain = true;
+		} elseif(strpos($email_address, '@') === false) {
+			$email_address = '@' . $email_address;
+			$is_domain = true;
+		}
+		
+		if($settings_name == '') {
+			// missing settings file name
+			$app->log('Empty email address in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN);
+			return;
+		}
+		
+		$settings_file = $this->users_config_dir . str_replace('@', '_', $settings_name) . '.conf';
+		$app->log('Settings file for rspamd is ' . $settings_file, LOGLEVEL_WARN);
+		if($mode === 'delete') {
+			if(is_file($settings_file)) {
+				unlink($settings_file);
+			}
+		} else {
+			$settings_priority = 20;
+			if(isset($data[$use_data]['priority'])) {
+				$settings_priority = intval($data[$use_data]['priority']);
+			} elseif($is_domain === true) {
+				$settings_priority = 18;
+			}
+			
+			// get policy for entry
+			if($type === 'spamfilter_user') {
+				$policy = $app->db->queryOneRecord("SELECT * FROM spamfilter_policy WHERE id = ?", intval($data['new']['policy_id']));
 				
-				$spam_lover_virus_lover = '';
-				if($policy['spam_lover'] == 'Y' && $policy['virus_lover'] == 'Y') $spam_lover_virus_lover = 'spam_lover_AND_virus_lover';
-				if($policy['spam_lover'] == 'Y' && $policy['virus_lover'] != 'Y') $spam_lover_virus_lover = 'spam_lover_AND_NOTvirus_lover';
-				if($policy['spam_lover'] != 'Y' && $policy['virus_lover'] == 'Y') $spam_lover_virus_lover = 'NOTspam_lover_AND_virus_lover';
-				if($policy['spam_lover'] != 'Y' && $policy['virus_lover'] != 'Y') $spam_lover_virus_lover = 'NOTspam_lover_AND_NOTvirus_lover';
+				$check = $app->db->queryOneRecord('SELECT `greylisting` FROM `mail_user` WHERE `server_id` = ? AND `email` = ? UNION SELECT `greylisting` FROM `mail_forwarding` WHERE `server_id` = ? AND `source` = ? ORDER BY (`greylisting` = ?) DESC', $conf['server_id'], $email_address, $conf['server_id'], $email_address, 'y');
+				if($check) {
+					$greylisting = $check['greylisting'];
+				} else {
+					$greylisting = 'n';
+				}
+			} else {
+				$search_for_policy[] = $email_address;
+				$search_for_policy[] = substr($email_address, strpos($email_address, '@'));
 				
-				$tpl->setVar('spam_lover_virus_lover', $spam_lover_virus_lover);
+				$policy = $app->db->queryOneRecord("SELECT p.* FROM spamfilter_users as u INNER JOIN spamfilter_policy as p ON (p.id = u.policy_id) WHERE u.server_id =  AND u.email IN ? ORDER BY u.priority DESC", $conf['server_id'], $search_for_policy);
 				
-				//$groups_disabled = array();
-				//if($policy['virus_lover'] == 'Y') $groups_disabled[] = '';
-		
-				$app->system->file_put_contents($user_file, $tpl->grab());
-			} else {
-				if(is_file($user_file)) {
-					unlink($user_file);
+				$greylisting = $data[$use_data]['greylisting'];
+			}
+			
+			if(!is_dir($this->users_config_dir)){
+				$app->system->mkdirpath($this->users_config_dir);
+			}
+			
+			$app->load('tpl');
+			
+			$tpl = new tpl();
+			$tpl->newTemplate('rspamd_users.inc.conf.master');
+			
+			$tpl->setVar('record_identifier', 'ispc_' . $type . '_' . $entry_id);
+			$tpl->setVar('priority', $settings_priority);
+			
+			if($type === 'spamfilter_user') {
+				if($data[$use_data]['local'] === 'Y') {
+					$tpl->setVar('to_email', $app->functions->idn_encode($email_address));
+				} else {
+					$tpl->setVar('from_email', $app->functions->idn_encode($email_address));
 				}
+				$spamfilter = $data[$use_data];
+			} else {
+				$tpl->setVar('to_email', $app->functions->idn_encode($email_address));
+				
+				// need to get matching spamfilter user if any
+				$spamfilter = $app->db->queryOneRecord('SELECT * FROM spamfilter_users WHERE `email` = ?', $email_address);
 			}
 			
-			if($mail_config['content_filter'] == 'rspamd'){
-				if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
+			if(!isset($policy['rspamd_spam_tag_level'])) {
+				$policy['rspamd_spam_tag_level'] = 6.0;
 			}
-		}
-	}
-
-	function spamfilter_users_delete($event_name, $data) {
-		global $app, $conf;
+			if(!isset($policy['rspamd_spam_tag_method'])) {
+				$policy['rspamd_spam_tag_method'] = 'add_header';
+			}
+			if(!isset($policy['rspamd_spam_kill_level'])) {
+				$policy['rspamd_spam_kill_level'] = 15.0;
+			}
+			if(!isset($policy['rspamd_virus_kill_level'])) {
+				$policy['rspamd_virus_kill_level'] = floatval($policy['rspamd_spam_kill_level']) + 1000;
+			}
+			
+			$tpl->setVar('rspamd_spam_tag_level', floatval($policy['rspamd_spam_tag_level']));
+			$tpl->setVar('rspamd_spam_tag_method', floatval($policy['rspamd_spam_tag_method']));
+			$tpl->setVar('rspamd_spam_kill_level', floatval($policy['rspamd_spam_kill_level']));
+			$tpl->setVar('rspamd_virus_kill_level', floatval($policy['rspamd_spam_kill_level']) + 1000);
+			
+			if(isset($policy['spam_lover']) && $policy['spam_lover'] == 'Y') {
+				$tpl->setVar('spam_lover', true);
+			}
+			if(isset($policy['virus_lover']) && $policy['virus_lover'] == 'Y') {
+				$tpl->setVar('virus_lover', true);
+			}
+			
+			$tpl->setVar('greylisting', $greylisting);
 
-		// get the config
-		$app->uses('getconf');
-		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+			if(isset($policy['rspamd_spam_greylisting_level'])) {
+				$tpl->setVar('greylisting_level', floatval($policy['rspamd_spam_greylisting_level']));
+			} else {
+				$tpl->setVar('greylisting_level', 0.1);
+			}
 
-		if(is_dir('/etc/rspamd')) {
-			//* delete the config file
-			$user_file = $this->users_config_dir.'spamfilter_user_'.intval($data['old']['id']).'.conf';
-			if(is_file($user_file)) unlink($user_file);
-			
+			$app->system->file_put_contents($settings_file, $tpl->grab());
 		}
-		
-		if($mail_config['content_filter'] == 'rspamd') {
-			if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
+
+		if($mail_config['content_filter'] == 'rspamd'){
+			$app->services->restartServiceDelayed('rspamd', 'reload');
 		}
 	}
 
@@ -234,7 +320,7 @@ class rspamd_plugin {
 				$tpl->setVar('list_scope', ($global_filter ? 'global' : 'spamfilter'));
 				$tpl->setVar('record_id', $record_id);
 				// we need to add 10 to priority to avoid mailbox/domain spamfilter settings overriding white/blacklists
-				$tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 20 : 10));
+				$tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 10 : 20));
 				$tpl->setVar('from', $filter_from);
 				$tpl->setVar('recipient', $filter_rcpt);
 				$tpl->setVar('hostname', $filter['hostname']);
@@ -315,5 +401,4 @@ class rspamd_plugin {
 			return false;
 		}
 	}
-	
 } // end class
-- 
GitLab


From fbbedfa302b51e1e475197be586a16d37c52a474 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 2 Sep 2019 14:59:21 +0200
Subject: [PATCH 120/571] - added german text for rspamd policy change

---
 interface/web/mail/lib/lang/de_spamfilter_policy.lng | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/interface/web/mail/lib/lang/de_spamfilter_policy.lng b/interface/web/mail/lib/lang/de_spamfilter_policy.lng
index 04b8274478..1efbcb6afc 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_policy.lng
@@ -42,3 +42,10 @@ $wb['rspamd_spam_tag_method_txt'] = 'SPAM-Markierungsmethode';
 $wb['rspamd_spam_kill_level_txt'] = 'SPAM-Reject-Level';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
+
+$wb['amavis_settings_txt'] = 'Einstellungen';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantäne';
+$wb['amavis_other_txt'] = 'Sonstiges';
+$wb['add_header_txt'] = 'Header hinzufügen';
+$wb['rewrite_subject_txt'] = 'Betreff ändern';
\ No newline at end of file
-- 
GitLab


From e470fde84a904409aa7912bedcf424d6467d9e0f Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 2 Sep 2019 15:06:44 +0200
Subject: [PATCH 121/571] Remote API: monitor_jobqueue_count returning wrong
 count in multiserver setup, fixes #5382

---
 interface/lib/classes/remote.d/monitor.inc.php | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/interface/lib/classes/remote.d/monitor.inc.php b/interface/lib/classes/remote.d/monitor.inc.php
index d3689b94ca..3df681f9ba 100644
--- a/interface/lib/classes/remote.d/monitor.inc.php
+++ b/interface/lib/classes/remote.d/monitor.inc.php
@@ -39,7 +39,6 @@ class remoting_monitor extends remoting {
 
 		if(!$this->checkPerm($session_id, 'monitor_jobqueue_count')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
 		}
 		
 		$server_id = intval($server_id);
@@ -48,7 +47,7 @@ class remoting_monitor extends remoting {
 			$servers = $app->db->queryAllRecords("SELECT server_id, updated FROM server");
 			$sql = 'SELECT count(datalog_id) as jobqueue_count FROM sys_datalog WHERE ';
 			foreach($servers as $sv) {
-				$sql .= " (datalog_id > ".$sv['updated']." AND server_id = ".$sv['server_id'].") OR ";
+				$sql .= " (datalog_id > ".$sv['updated']." AND server_id IN (0,".$sv['server_id'].")) OR ";
 			}
 			$sql = substr($sql, 0, -4);
 			$tmp = $app->db->queryOneRecord($sql);
@@ -56,7 +55,7 @@ class remoting_monitor extends remoting {
 			
 		} else {
 			$server = $app->db->queryOneRecord("SELECT updated FROM server WHERE server_id = ?",$server_id);
-			$tmp = $app->db->queryOneRecord('SELECT count(datalog_id) as jobqueue_count FROM sys_datalog WHERE datalog_id > ?',$server['updated']);
+			$tmp = $app->db->queryOneRecord('SELECT count(datalog_id) as jobqueue_count FROM sys_datalog WHERE datalog_id > ? AND server_id IN ?',$server['updated'], array(0, $server_id));
 			return $tmp['jobqueue_count'];
 		}
 	}
-- 
GitLab


From 0fce8c16f197599d3ec33f54494b00d085f8e4ae Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 2 Sep 2019 15:25:21 +0200
Subject: [PATCH 122/571] Fixed #5351 Remote API function dns_templatezone_add
 issue Added test script for dns_templatezone_add remote API function

---
 interface/lib/classes/remote.d/aps.inc.php    |  3 ++
 interface/lib/classes/remote.d/dns.inc.php    |  4 +-
 .../examples/dns_templatezone_add.php         | 50 +++++++++++++++++++
 3 files changed, 56 insertions(+), 1 deletion(-)
 create mode 100644 remoting_client/examples/dns_templatezone_add.php

diff --git a/interface/lib/classes/remote.d/aps.inc.php b/interface/lib/classes/remote.d/aps.inc.php
index 50dda48255..4cca7fb8b6 100644
--- a/interface/lib/classes/remote.d/aps.inc.php
+++ b/interface/lib/classes/remote.d/aps.inc.php
@@ -238,6 +238,9 @@ class remoting_aps extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
+		
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadUserProfile(0);
 	
 		$app->load('aps_guicontroller');
 		$gui = new ApsGUIController($app);
diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 7e0b230d7f..434af6a983 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -56,7 +56,9 @@ class remoting_dns extends remoting {
 		$tform_def_file = "../../web/dns/form/dns_soa.tform.php";
 		$app->uses('tform');
 		$app->tform->loadFormDef($tform_def_file);
-		$app->uses('tpl,validate_dns');
+		$app->uses('tpl,validate_dns,remoting_lib');
+		
+		$app->remoting_lib->loadUserProfile($client_id);
 
 		//* replace template placeholders
 		$tpl_content = $template_record['template'];
diff --git a/remoting_client/examples/dns_templatezone_add.php b/remoting_client/examples/dns_templatezone_add.php
new file mode 100644
index 0000000000..aedfc61f5d
--- /dev/null
+++ b/remoting_client/examples/dns_templatezone_add.php
@@ -0,0 +1,50 @@
+<?php
+
+require 'soap_config.php';
+
+// Disable SSL verification for this test script
+$context = stream_context_create([
+    'ssl' => [
+        // set some SSL/TLS specific options
+        'verify_peer' => false,
+        'verify_peer_name' => false,
+        'allow_self_signed' => true
+    ]
+]);
+
+$client = new SoapClient(null, array('location' => $soap_location,
+                'uri'      => $soap_uri,
+                'trace' => 1,
+                'exceptions' => 1,
+                'stream_context' => $context));
+
+
+try {
+        if($session_id = $client->login($username, $password)) {
+                echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+        }
+
+        //* Set the function parameters.
+        $client_id = 1;
+        $template_id = 1;
+        $domain = 'test.tld';
+        $ip = '192.168.0.100';
+        $ns1 = 'ns1.testhoster.tld';
+        $ns2 = 'ns2.testhoster.tld';
+        $email = 'email.test.tld';
+
+        $id = $client->dns_templatezone_add($session_id, $client_id, $template_id, $domain, $ip, $ns1, $ns2, $email);
+
+        echo "ID: ".$id."<br>";
+
+        if($client->logout($session_id)) {
+                echo 'Logged out.<br />';
+        }
+
+
+} catch (SoapFault $e) {
+        echo $client->__getLastResponse();
+        die('SOAP Error: '.$e->getMessage());
+}
+
+?>
\ No newline at end of file
-- 
GitLab


From 724b7e4f7f0a8c9377b2ff250ae46c86b3a892d6 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 2 Sep 2019 15:44:43 +0200
Subject: [PATCH 123/571] Fixed #5348 Virtual server config panel showing
 without active VServer

---
 interface/web/dashboard/dashlets/modules.php | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/interface/web/dashboard/dashlets/modules.php b/interface/web/dashboard/dashlets/modules.php
index 5c1f15149d..f5f96a82ac 100644
--- a/interface/web/dashboard/dashlets/modules.php
+++ b/interface/web/dashboard/dashlets/modules.php
@@ -40,6 +40,11 @@ class dashlet_modules {
 							$web_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE web_server = 1 AND active = 1");
 							if($web_servers['cnt'] == 0) continue;
 						}
+						
+						if($mt == 'vm'){
+							$vserver_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE vserver_server = 1 AND active = 1");
+							if($vserver_servers['cnt'] == 0) continue;
+						}
 					
 						$module_title = $app->lng($module['title']);
 						if(function_exists('mb_strlen')) {
-- 
GitLab


From efda2243d899e9a4c4f9e383d3e2df13efa29271 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 2 Sep 2019 16:01:58 +0200
Subject: [PATCH 124/571] Fixed ISPConfig server log warning:  Unable to add a
 delayed restart for 'postfix'. Service not registered.

---
 server/mods-available/mail_module.inc.php | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/server/mods-available/mail_module.inc.php b/server/mods-available/mail_module.inc.php
index 14cbbb24e4..e13839d344 100644
--- a/server/mods-available/mail_module.inc.php
+++ b/server/mods-available/mail_module.inc.php
@@ -113,6 +113,7 @@ class mail_module {
 		$app->modules->registerTableHook('spamfilter_wblist', 'mail_module', 'process'); 
 
 		$app->services->registerService('rspamd', 'mail_module', 'restartRspamd');
+		$app->services->registerService('postfix', 'mail_module', 'restartPostfix');
 	}
 
 	/*
@@ -192,6 +193,22 @@ class mail_module {
 		}
 		return $retval;
 	}
+	
+	function restartPostfix($action = 'reload') {
+		global $app;
+
+		$app->uses('system');
+
+		$daemon = 'postfix';
+
+		$retval = array('output' => '', 'retval' => 0);
+		if($action == 'restart') {
+			exec($app->system->getinitcommand($daemon, 'restart').' 2>&1', $retval['output'], $retval['retval']);
+		} else {
+			exec($app->system->getinitcommand($daemon, 'reload').' 2>&1', $retval['output'], $retval['retval']);
+		}
+		return $retval;
+	}
 } // end class
 
 ?>
-- 
GitLab


From 65be9518b8f704479010e1cd65c8d5552f98ed4c Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 2 Sep 2019 16:10:43 +0200
Subject: [PATCH 125/571] Fixed PHP Warning:  Undefined property wb of class
 app in /usr/local/ispconfig/interface/lib/app.inc.php on line 81

---
 interface/lib/app.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index 11bd024398..e341a57943 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -248,7 +248,7 @@ class app {
 			}
 			$this->_language_inc = 1;
 		}
-		if(isset($this->_wb[$text]) && $this->wb[$text] !== '') {
+		if(isset($this->_wb[$text]) && $this->_wb[$text] !== '') {
 			$text = $this->_wb[$text];
 		} else {
 			if($this->_conf['debug_language']) {
-- 
GitLab


From 7d72427c9d61e0b78d2869da75c8aa469a36c57a Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 2 Sep 2019 16:28:03 +0200
Subject: [PATCH 126/571] Fixed html glitch behind active checkbox in dmarc
 edit form.

---
 interface/web/dns/templates/dns_dmarc_edit.htm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/dns/templates/dns_dmarc_edit.htm b/interface/web/dns/templates/dns_dmarc_edit.htm
index 630c18559b..4b7646a398 100644
--- a/interface/web/dns/templates/dns_dmarc_edit.htm
+++ b/interface/web/dns/templates/dns_dmarc_edit.htm
@@ -147,7 +147,7 @@
             <div class="form-group">
                 <label class="col-sm-2 control-label">{tmpl_var name='active_txt'}</label>
                 <div class="col-sm-3">
-					<input type="checkbox" value="1" id="active" name="active" {tmpl_var name='active'} />
+					{tmpl_var name='active'}
                 </div>
             </div>
 
-- 
GitLab


From 2eede67205b7b51988f1540c3b7c999b42ee02e6 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 3 Sep 2019 10:32:05 +0200
Subject: [PATCH 127/571] - fixed invalid sql query on rspamd plugin

---
 server/plugins-available/rspamd_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 70885056d7..17a14ce42e 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -177,7 +177,7 @@ class rspamd_plugin {
 				$search_for_policy[] = $email_address;
 				$search_for_policy[] = substr($email_address, strpos($email_address, '@'));
 				
-				$policy = $app->db->queryOneRecord("SELECT p.* FROM spamfilter_users as u INNER JOIN spamfilter_policy as p ON (p.id = u.policy_id) WHERE u.server_id =  AND u.email IN ? ORDER BY u.priority DESC", $conf['server_id'], $search_for_policy);
+				$policy = $app->db->queryOneRecord("SELECT p.* FROM spamfilter_users as u INNER JOIN spamfilter_policy as p ON (p.id = u.policy_id) WHERE u.server_id = ? AND u.email IN ? ORDER BY u.priority DESC", $conf['server_id'], $search_for_policy);
 				
 				$greylisting = $data[$use_data]['greylisting'];
 			}
-- 
GitLab


From 44b6fa2337b35149a9b5cd80ff4790c311c5e471 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 3 Sep 2019 10:39:35 +0200
Subject: [PATCH 128/571] - removed debug message from rspamd plugin

---
 server/plugins-available/rspamd_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 17a14ce42e..49eb87165e 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -150,7 +150,7 @@ class rspamd_plugin {
 		}
 		
 		$settings_file = $this->users_config_dir . str_replace('@', '_', $settings_name) . '.conf';
-		$app->log('Settings file for rspamd is ' . $settings_file, LOGLEVEL_WARN);
+		//$app->log('Settings file for rspamd is ' . $settings_file, LOGLEVEL_WARN);
 		if($mode === 'delete') {
 			if(is_file($settings_file)) {
 				unlink($settings_file);
-- 
GitLab


From b9f6e3fa6e33cd596f56044827b422e17f844477 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 3 Sep 2019 15:54:08 +0200
Subject: [PATCH 129/571] - allow @ in webdav username

---
 interface/web/sites/form/webdav_user.tform.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/sites/form/webdav_user.tform.php b/interface/web/sites/form/webdav_user.tform.php
index 8d5c0c561f..b7db858546 100644
--- a/interface/web/sites/form/webdav_user.tform.php
+++ b/interface/web/sites/form/webdav_user.tform.php
@@ -85,7 +85,7 @@ $form["tabs"]['webdav'] = array (
 			'validators' => array (  0 => array ( 'type' => 'UNIQUE',
 					'errmsg'=> 'username_error_unique'),
 				1 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\w\.\-]{0,64}$/',
+					'regex' => '/^[\w\.\-@]{0,64}$/',
 					'errmsg'=> 'username_error_regex'),
 			),
 			'default' => '',
-- 
GitLab


From af562b205e3013b5c2ccd2622608f51133779f6d Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 4 Sep 2019 11:37:08 +0200
Subject: [PATCH 130/571] Moved sql dev collection to upd_0088.sql file.

---
 install/sql/incremental/upd_0088.sql          | 39 +++++++++++++++++++
 .../sql/incremental/upd_dev_collection.sql    | 39 -------------------
 2 files changed, 39 insertions(+), 39 deletions(-)
 create mode 100644 install/sql/incremental/upd_0088.sql

diff --git a/install/sql/incremental/upd_0088.sql b/install/sql/incremental/upd_0088.sql
new file mode 100644
index 0000000000..5c062603f9
--- /dev/null
+++ b/install/sql/incremental/upd_0088.sql
@@ -0,0 +1,39 @@
+-- rspamd
+ALTER TABLE `spamfilter_policy` ADD `rspamd_greylisting` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `policyd_greylist`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_greylisting_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_greylisting`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_greylisting_level`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_method` ENUM('add_header','rewrite_subject') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'rewrite_subject' AFTER `rspamd_spam_tag_level`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_kill_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_tag_method`;
+
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 4;
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 5;
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 6;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '4.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '6.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '2.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '7.00' WHERE id = 7;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '6.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '8.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '4.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '10.00' WHERE id = 7;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '10.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '12.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '8.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '20.00' WHERE id = 7;
+-- end of rspamd
+ALTER TABLE `client` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `ftp_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `shell_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `sys_user` CHANGE COLUMN `passwort` `passwort` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `webdav_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+
+DELETE FROM sys_cron WHERE `next_run` IS NOT NULL AND `next_run` >= DATE_ADD(`last_run`, INTERVAL 30 DAY) AND `next_run` BETWEEN '2020-01-01' AND '2020-01-02';
\ No newline at end of file
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 91cbc81626..e69de29bb2 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -1,39 +0,0 @@
--- rspamd
-ALTER TABLE `spamfilter_policy` ADD `rspamd_greylisting` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `policyd_greylist`;
-ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_greylisting_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_greylisting`;
-ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_greylisting_level`;
-ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_method` ENUM('add_header','rewrite_subject') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'rewrite_subject' AFTER `rspamd_spam_tag_level`;
-ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_kill_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_tag_method`;
-
-UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 4;
-UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 5;
-UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 6;
-
-UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '4.00';
-UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '6.00' WHERE id = 1;
-UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 2;
-UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 3;
-UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '2.00' WHERE id = 6;
-UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '7.00' WHERE id = 7;
-
-UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '6.00';
-UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '8.00' WHERE id = 1;
-UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 2;
-UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 3;
-UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '4.00' WHERE id = 6;
-UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '10.00' WHERE id = 7;
-
-UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '10.00';
-UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '12.00' WHERE id = 1;
-UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 2;
-UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 3;
-UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '8.00' WHERE id = 6;
-UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '20.00' WHERE id = 7;
--- end of rspamd
-ALTER TABLE `client` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
-ALTER TABLE `ftp_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
-ALTER TABLE `shell_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
-ALTER TABLE `sys_user` CHANGE COLUMN `passwort` `passwort` VARCHAR(200) DEFAULT NULL;
-ALTER TABLE `webdav_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
-
-DELETE FROM sys_cron WHERE `next_run` IS NOT NULL AND `next_run` >= DATE_ADD(`last_run`, INTERVAL 30 DAY) AND `next_run` BETWEEN '2020-01-01' AND '2020-01-02';
-- 
GitLab


From 65d142ea6719c72b3e4612a06b245ad3b3495c33 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 4 Sep 2019 11:41:56 +0200
Subject: [PATCH 131/571] Merged language files.

---
 interface/lib/lang/ar.lng                        |  2 +-
 interface/lib/lang/bg.lng                        |  2 +-
 interface/lib/lang/ca.lng                        |  2 +-
 interface/lib/lang/cz.lng                        |  2 +-
 interface/lib/lang/de.lng                        |  5 ++---
 interface/lib/lang/dk.lng                        |  2 +-
 interface/lib/lang/el.lng                        |  2 +-
 interface/lib/lang/es.lng                        |  2 +-
 interface/lib/lang/fi.lng                        |  2 +-
 interface/lib/lang/hr.lng                        |  2 +-
 interface/lib/lang/hu.lng                        |  2 +-
 interface/lib/lang/id.lng                        |  2 +-
 interface/lib/lang/it.lng                        |  2 +-
 interface/lib/lang/ja.lng                        |  2 +-
 interface/lib/lang/nl.lng                        |  2 +-
 interface/lib/lang/pl.lng                        |  2 +-
 interface/lib/lang/pt.lng                        |  2 +-
 interface/lib/lang/ro.lng                        |  2 +-
 interface/lib/lang/ru.lng                        |  2 +-
 interface/lib/lang/se.lng                        |  2 +-
 interface/lib/lang/sk.lng                        |  2 +-
 interface/lib/lang/tr.lng                        |  2 +-
 .../web/admin/lib/lang/ar_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/ar_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ar_users.lng        |  2 +-
 .../web/admin/lib/lang/bg_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/bg_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/bg_users.lng        |  2 +-
 .../web/admin/lib/lang/br_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/br_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ca_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/ca_server_config.lng      |  6 +++++-
 .../web/admin/lib/lang/ca_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ca_users.lng        |  2 +-
 .../web/admin/lib/lang/cz_remote_action.lng      |  4 ++--
 .../web/admin/lib/lang/cz_server_config.lng      |  6 +++++-
 .../web/admin/lib/lang/de_server_config.lng      |  3 ++-
 interface/web/admin/lib/lang/dk_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/dk_server_config.lng      |  6 +++++-
 .../web/admin/lib/lang/dk_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/dk_users.lng        |  2 +-
 .../web/admin/lib/lang/el_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/el_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/el_users.lng        |  2 +-
 interface/web/admin/lib/lang/es_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/es_server_config.lng      |  6 +++++-
 .../web/admin/lib/lang/es_system_config.lng      |  4 ++--
 .../web/admin/lib/lang/fi_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/fi_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/fi_users.lng        |  2 +-
 .../web/admin/lib/lang/fr_remote_action.lng      |  2 +-
 .../web/admin/lib/lang/fr_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/fr_system_config.lng      |  2 +-
 .../web/admin/lib/lang/hr_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/hr_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/hr_users.lng        |  2 +-
 interface/web/admin/lib/lang/hr_users_list.lng   |  2 +-
 .../web/admin/lib/lang/hu_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/hu_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/hu_users.lng        |  2 +-
 .../web/admin/lib/lang/id_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/id_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/id_users.lng        |  2 +-
 .../web/admin/lib/lang/it_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/it_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/it_users.lng        |  2 +-
 .../web/admin/lib/lang/ja_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/ja_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ja_users.lng        |  2 +-
 .../web/admin/lib/lang/nl_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/nl_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/nl_users.lng        |  2 +-
 .../web/admin/lib/lang/pl_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/pl_system_config.lng      |  2 +-
 .../web/admin/lib/lang/pt_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/pt_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/pt_users.lng        |  2 +-
 .../web/admin/lib/lang/ro_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/ro_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/ro_users.lng        |  2 +-
 interface/web/admin/lib/lang/ru_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/ru_server_config.lng      |  6 +++++-
 .../web/admin/lib/lang/ru_system_config.lng      |  4 ++--
 interface/web/admin/lib/lang/ru_users.lng        |  2 +-
 .../web/admin/lib/lang/se_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/se_system_config.lng      |  2 +-
 .../web/admin/lib/lang/sk_server_config.lng      |  4 ++++
 .../web/admin/lib/lang/sk_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/sk_users.lng        |  2 +-
 interface/web/admin/lib/lang/tr_firewall.lng     |  4 ++--
 .../web/admin/lib/lang/tr_remote_action.lng      |  4 ++--
 .../web/admin/lib/lang/tr_server_config.lng      |  6 +++++-
 .../web/admin/lib/lang/tr_system_config.lng      |  2 +-
 interface/web/admin/lib/lang/tr_users.lng        |  2 +-
 interface/web/client/lib/lang/ar_client.lng      |  2 +-
 interface/web/client/lib/lang/ar_reseller.lng    |  2 +-
 interface/web/client/lib/lang/bg_client.lng      |  2 +-
 interface/web/client/lib/lang/bg_reseller.lng    |  2 +-
 interface/web/client/lib/lang/br_client.lng      |  2 +-
 .../web/client/lib/lang/br_client_template.lng   |  2 +-
 interface/web/client/lib/lang/br_reseller.lng    |  2 +-
 interface/web/client/lib/lang/ca_client.lng      |  2 +-
 interface/web/client/lib/lang/ca_reseller.lng    |  2 +-
 interface/web/client/lib/lang/cz_client.lng      |  2 +-
 interface/web/client/lib/lang/cz_reseller.lng    |  2 +-
 interface/web/client/lib/lang/de_reseller.lng    |  2 +-
 interface/web/client/lib/lang/dk_client.lng      |  2 +-
 interface/web/client/lib/lang/dk_reseller.lng    |  2 +-
 interface/web/client/lib/lang/el_client.lng      |  2 +-
 interface/web/client/lib/lang/el_reseller.lng    |  2 +-
 interface/web/client/lib/lang/es_client.lng      |  4 ++--
 .../web/client/lib/lang/es_client_template.lng   |  4 ++--
 interface/web/client/lib/lang/es_reseller.lng    |  4 ++--
 interface/web/client/lib/lang/fi_client.lng      |  2 +-
 interface/web/client/lib/lang/fi_reseller.lng    |  2 +-
 interface/web/client/lib/lang/fr_client.lng      |  2 +-
 interface/web/client/lib/lang/fr_reseller.lng    |  2 +-
 interface/web/client/lib/lang/hr_client.lng      |  2 +-
 interface/web/client/lib/lang/hr_reseller.lng    |  2 +-
 interface/web/client/lib/lang/hu_client.lng      |  2 +-
 interface/web/client/lib/lang/hu_reseller.lng    |  2 +-
 interface/web/client/lib/lang/id_client.lng      |  2 +-
 interface/web/client/lib/lang/id_reseller.lng    |  2 +-
 interface/web/client/lib/lang/it_client.lng      |  2 +-
 interface/web/client/lib/lang/it_reseller.lng    |  2 +-
 interface/web/client/lib/lang/ja_client.lng      |  2 +-
 interface/web/client/lib/lang/ja_reseller.lng    |  2 +-
 interface/web/client/lib/lang/nl_client.lng      |  2 +-
 interface/web/client/lib/lang/nl_reseller.lng    |  2 +-
 interface/web/client/lib/lang/pl_reseller.lng    |  2 +-
 interface/web/client/lib/lang/pt_client.lng      |  2 +-
 interface/web/client/lib/lang/pt_reseller.lng    |  2 +-
 interface/web/client/lib/lang/ro_client.lng      |  2 +-
 interface/web/client/lib/lang/ro_reseller.lng    |  2 +-
 interface/web/client/lib/lang/ru_client.lng      |  4 ++--
 interface/web/client/lib/lang/ru_reseller.lng    |  4 ++--
 interface/web/client/lib/lang/se_client.lng      |  2 +-
 interface/web/client/lib/lang/se_reseller.lng    |  2 +-
 interface/web/client/lib/lang/sk_client.lng      |  2 +-
 interface/web/client/lib/lang/sk_reseller.lng    |  2 +-
 interface/web/client/lib/lang/tr_client.lng      |  2 +-
 interface/web/client/lib/lang/tr_reseller.lng    |  2 +-
 .../web/dashboard/lib/lang/es_dashlet_limits.lng |  2 +-
 interface/web/dns/lib/lang/br_dns_dmarc.lng      | 10 +++++-----
 interface/web/dns/lib/lang/br_dns_tlsa.lng       |  4 ++--
 interface/web/dns/lib/lang/ru_dns_hinfo.lng      |  2 +-
 .../web/help/lib/lang/br_support_message.lng     |  2 +-
 interface/web/login/lib/lang/ar_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/bg_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/br_login_as.lng     |  2 +-
 interface/web/login/lib/lang/ca_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/dk_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/el_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/es_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/fi_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/hr_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/hu_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/id_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/it_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/ja_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/nl_login_as.lng     |  4 ++--
 interface/web/login/lib/lang/pt_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/ro_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/ru_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/se_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/sk_login_as.lng     |  6 +++---
 interface/web/login/lib/lang/tr_login_as.lng     |  6 +++---
 interface/web/mail/lib/lang/ar.lng               |  2 ++
 .../mail/lib/lang/ar_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/ar_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/ar_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/bg.lng               |  2 ++
 .../mail/lib/lang/bg_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/bg_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/bg_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/br.lng               |  2 ++
 .../mail/lib/lang/br_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/br_mail_user.lng     |  4 ++--
 .../web/mail/lib/lang/br_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/ca.lng               |  2 ++
 .../mail/lib/lang/ca_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/ca_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/ca_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/cz.lng               |  2 ++
 .../mail/lib/lang/cz_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/cz_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/cz_mail_mailinglist.lng    |  2 +-
 .../web/mail/lib/lang/cz_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/de.lng               |  2 ++
 .../web/mail/lib/lang/de_spamfilter_policy.lng   |  4 ++--
 interface/web/mail/lib/lang/dk.lng               |  2 ++
 .../mail/lib/lang/dk_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/dk_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/dk_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/el.lng               |  2 ++
 .../mail/lib/lang/el_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/el_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/el_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/es.lng               |  4 +++-
 .../mail/lib/lang/es_mail_domain_catchall.lng    |  5 +++--
 .../lib/lang/es_mail_domain_catchall_list.lng    |  4 ++--
 interface/web/mail/lib/lang/es_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/es_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/fi.lng               |  2 ++
 .../mail/lib/lang/fi_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/fi_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/fi_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/fr.lng               |  2 ++
 .../mail/lib/lang/fr_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/fr_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/fr_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/hr.lng               |  2 ++
 .../mail/lib/lang/hr_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/hr_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/hr_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/hu.lng               |  2 ++
 .../mail/lib/lang/hu_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/hu_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/hu_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/id.lng               |  2 ++
 .../mail/lib/lang/id_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/id_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/id_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/it.lng               |  2 ++
 .../mail/lib/lang/it_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/it_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/it_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/ja.lng               |  2 ++
 .../mail/lib/lang/ja_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/ja_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/ja_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/nl.lng               |  2 ++
 .../mail/lib/lang/nl_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/nl_mail_get.lng      |  2 +-
 interface/web/mail/lib/lang/nl_mail_user.lng     |  4 ++--
 .../web/mail/lib/lang/nl_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/pl.lng               |  2 ++
 .../mail/lib/lang/pl_mail_domain_catchall.lng    |  1 +
 .../web/mail/lib/lang/pl_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/pt.lng               |  2 ++
 .../mail/lib/lang/pt_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/pt_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/pt_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/ro.lng               |  2 ++
 .../mail/lib/lang/ro_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/ro_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/ro_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/ru.lng               |  2 ++
 .../mail/lib/lang/ru_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/ru_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/ru_mail_user_filter.lng    |  2 +-
 .../web/mail/lib/lang/ru_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/se.lng               |  2 ++
 .../mail/lib/lang/se_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/se_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/se_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/sk.lng               |  2 ++
 .../mail/lib/lang/sk_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/sk_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/sk_spamfilter_policy.lng   | 13 +++++++++++++
 interface/web/mail/lib/lang/tr.lng               |  2 ++
 .../mail/lib/lang/tr_mail_domain_catchall.lng    |  1 +
 interface/web/mail/lib/lang/tr_mail_get.lng      |  2 +-
 .../web/mail/lib/lang/tr_spamfilter_policy.lng   | 13 +++++++++++++
 .../mailuser/lib/lang/ru_mail_user_filter.lng    |  2 +-
 .../monitor/lib/lang/ar_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/bg_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/br_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/ca_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/dk_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/el_dataloghistory_list.lng  | 12 ++++++------
 interface/web/monitor/lib/lang/es.lng            |  2 +-
 .../monitor/lib/lang/es_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/fi_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/fr_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/hr_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/hu_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/id_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/it_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/ja_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/nl_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/pl_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/pt_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/ro_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/ru_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/se_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/sk_dataloghistory_list.lng  | 12 ++++++------
 .../monitor/lib/lang/tr_dataloghistory_list.lng  | 12 ++++++------
 interface/web/sites/lib/lang/ar.lng              |  2 +-
 interface/web/sites/lib/lang/ar_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/ar_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ar_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/bg.lng              |  2 +-
 interface/web/sites/lib/lang/bg_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/bg_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/bg_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/br.lng              |  2 +-
 interface/web/sites/lib/lang/br_cron.lng         |  4 ++--
 interface/web/sites/lib/lang/br_database.lng     |  2 +-
 .../web/sites/lib/lang/br_database_user.lng      |  2 +-
 interface/web/sites/lib/lang/br_ftp_user.lng     |  4 ++--
 interface/web/sites/lib/lang/br_shell_user.lng   |  4 ++--
 .../web/sites/lib/lang/br_web_aliasdomain.lng    |  4 ++--
 .../web/sites/lib/lang/br_web_childdomain.lng    |  6 +++---
 interface/web/sites/lib/lang/br_web_domain.lng   |  6 +++---
 .../web/sites/lib/lang/br_web_subdomain.lng      |  2 +-
 .../web/sites/lib/lang/br_web_vhost_domain.lng   |  4 ++--
 .../sites/lib/lang/br_web_vhost_subdomain.lng    | 10 +++++-----
 interface/web/sites/lib/lang/br_webdav_user.lng  |  4 ++--
 interface/web/sites/lib/lang/ca.lng              |  2 +-
 interface/web/sites/lib/lang/ca_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/ca_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ca_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/cz.lng              |  2 +-
 interface/web/sites/lib/lang/cz_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/cz_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/cz_web_subdomain.lng      |  2 +-
 .../web/sites/lib/lang/de_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/de_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/dk.lng              |  2 +-
 interface/web/sites/lib/lang/dk_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/dk_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/dk_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/el.lng              |  2 +-
 interface/web/sites/lib/lang/el_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/el_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/el_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/es.lng              |  2 +-
 interface/web/sites/lib/lang/es_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/es_web_childdomain.lng    |  4 ++--
 .../web/sites/lib/lang/es_web_subdomain.lng      |  2 +-
 .../web/sites/lib/lang/es_web_vhost_domain.lng   |  2 +-
 interface/web/sites/lib/lang/fi.lng              |  2 +-
 interface/web/sites/lib/lang/fi_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/fi_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/fi_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/fr.lng              |  2 +-
 interface/web/sites/lib/lang/fr_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/fr_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/fr_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/hr.lng              |  2 +-
 interface/web/sites/lib/lang/hr_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/hr_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/hr_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/hu.lng              |  2 +-
 interface/web/sites/lib/lang/hu_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/hu_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/hu_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/id.lng              |  2 +-
 interface/web/sites/lib/lang/id_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/id_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/id_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/it.lng              |  2 +-
 interface/web/sites/lib/lang/it_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/it_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/it_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/ja.lng              |  2 +-
 interface/web/sites/lib/lang/ja_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/ja_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ja_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/nl.lng              |  2 +-
 interface/web/sites/lib/lang/nl_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/nl_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/nl_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/pl_aps.lng          | 16 ++++++++--------
 interface/web/sites/lib/lang/pt.lng              |  2 +-
 interface/web/sites/lib/lang/pt_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/pt_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/pt_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/ro.lng              |  2 +-
 interface/web/sites/lib/lang/ro_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/ro_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ro_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/ru.lng              |  2 +-
 interface/web/sites/lib/lang/ru_aps.lng          | 16 ++++++++--------
 interface/web/sites/lib/lang/ru_database.lng     |  2 +-
 .../web/sites/lib/lang/ru_database_user.lng      |  2 +-
 .../web/sites/lib/lang/ru_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/ru_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/se.lng              |  2 +-
 interface/web/sites/lib/lang/se_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/se_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/se_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/sk.lng              |  2 +-
 interface/web/sites/lib/lang/sk_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/sk_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/sk_web_subdomain.lng      |  2 +-
 interface/web/sites/lib/lang/tr.lng              |  2 +-
 interface/web/sites/lib/lang/tr_aps.lng          | 16 ++++++++--------
 .../web/sites/lib/lang/tr_web_childdomain.lng    |  2 +-
 .../web/sites/lib/lang/tr_web_subdomain.lng      |  2 +-
 interface/web/vm/lib/lang/dk_openvz_template.lng |  2 +-
 interface/web/vm/lib/lang/es_openvz_template.lng |  2 +-
 interface/web/vm/lib/lang/tr_openvz_template.lng |  2 +-
 394 files changed, 1113 insertions(+), 651 deletions(-)

diff --git a/interface/lib/lang/ar.lng b/interface/lib/lang/ar.lng
index c8ee365e4b..25dd920831 100644
--- a/interface/lib/lang/ar.lng
+++ b/interface/lib/lang/ar.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/bg.lng b/interface/lib/lang/bg.lng
index eafc8334d4..ff1e39fe34 100644
--- a/interface/lib/lang/bg.lng
+++ b/interface/lib/lang/bg.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/ca.lng b/interface/lib/lang/ca.lng
index 03b9e65a0d..c39cd0db27 100644
--- a/interface/lib/lang/ca.lng
+++ b/interface/lib/lang/ca.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Moyen';
 $wb['strength_3'] = 'Bon';
 $wb['strength_4'] = 'Fort';
 $wb['strength_5'] = 'Très fort';
-$wb['weak_password_txt'] = 'Le mot de passe choisi ne rencontre pas les minimas requis : {chars} caractères minimums et une force de \"{strength}\".';
+$wb['weak_password_txt'] = 'Le mot de passe choisi ne rencontre pas les minimas requis : {chars} caractères minimums et une force de \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'Le mot de passe choisi ne rencontre pas les minimas requis : {chars} caractères minimums.';
 $wb['security_check1_txt'] = 'Vérifier les permissions de sécurité:';
 $wb['security_check2_txt'] = 'Echec';
diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng
index fdf9053dae..eeb0819292 100644
--- a/interface/lib/lang/cz.lng
+++ b/interface/lib/lang/cz.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Podprůměrná';
 $wb['strength_3'] = 'Dobrá';
 $wb['strength_4'] = 'Silná';
 $wb['strength_5'] = 'Velmi silná';
-$wb['weak_password_txt'] = 'Zvolené heslo neodpovídá požadavkům zásad pro tvorbu hesel. Heslo musí být alespoň {chars} znaků dlouhé a mající sílu \"{strength}\".';
+$wb['weak_password_txt'] = 'Zvolené heslo neodpovídá požadavkům zásad pro tvorbu hesel. Heslo musí být alespoň {chars} znaků dlouhé a mající sílu \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'Zvolené heslo neodpovídá požadavkům zásad pro tvorbu hesel. Heslo musí být alespoň {chars} znaků dlouhé.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng
index bc217c30b0..61551ceeab 100644
--- a/interface/lib/lang/de.lng
+++ b/interface/lib/lang/de.lng
@@ -152,11 +152,10 @@ $wb['strength_2'] = 'Mittel';
 $wb['strength_3'] = 'Gut';
 $wb['strength_4'] = 'Stark';
 $wb['strength_5'] = 'Sehr stark';
-$wb['weak_password_txt'] = 'Das gewählte Passwort erfüllt die Sicherheitsanforderungen nicht. Es muss mindestens {chars} Zeichen lang sein und die Stärke \"{strength}\" besitzen.';
+$wb['weak_password_txt'] = 'Das gewählte Passwort erfüllt die Sicherheitsanforderungen nicht. Es muss mindestens {chars} Zeichen lang sein und die Stärke \\"{strength}\\" besitzen.';
 $wb['weak_password_length_txt'] = 'Das gewählte Passwort erfüllt die Sicherheitsanforderungen nicht. Es muss mindestens {chars} Zeichen lang sein.';
 $wb['security_check1_txt'] = 'Sicherheitsüberprüfung für:';
 $wb['security_check2_txt'] = 'fehlgeschlagen.';
 $wb['select_directive_snippet_txt'] = 'Direktiven Schnipsel';
 $wb['select_master_directive_snippet_txt'] = 'Master Direktiven Schnipsel';
-$wb['add_header_txt'] = 'Header (fügt "X-Spam: Yes" hinzu)';
-$wb['rewrite_subject_txt'] = 'Betreff (fügt "***SPAM***" am Anfang hinzu)';
+?>
diff --git a/interface/lib/lang/dk.lng b/interface/lib/lang/dk.lng
index 2f7aeb2790..798d2ccd45 100644
--- a/interface/lib/lang/dk.lng
+++ b/interface/lib/lang/dk.lng
@@ -146,7 +146,7 @@ $wb['strength_2'] = 'Nogenlunde';
 $wb['strength_3'] = 'God';
 $wb['strength_4'] = 'Stærk';
 $wb['strength_5'] = 'Meget Stærk';
-$wb['weak_password_txt'] = 'Den valgte adgangskode matcher ikke retningslinjerne for sikkerhedsindstillingerne. Det skal være mindst {chars} tegn i længden og have en styrke på \"{strength}\".';
+$wb['weak_password_txt'] = 'Den valgte adgangskode matcher ikke retningslinjerne for sikkerhedsindstillingerne. Det skal være mindst {chars} tegn i længden og have en styrke på \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'Den valgte adgangskode matcher ikke retningslinjerne for sikkerhedsindstillingerne. Det skal være mindst {chars} tegn i længden.';
 $wb['security_check1_txt'] = 'Check for sikkerheds tilladelse:';
 $wb['security_check2_txt'] = 'mislykkedes.';
diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng
index 53cd56f175..382bf4a758 100644
--- a/interface/lib/lang/el.lng
+++ b/interface/lib/lang/el.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/es.lng b/interface/lib/lang/es.lng
index 8b9bc94ef8..3b1bae0b46 100644
--- a/interface/lib/lang/es.lng
+++ b/interface/lib/lang/es.lng
@@ -146,7 +146,7 @@ $wb['strength_2'] = 'Aceptable';
 $wb['strength_3'] = 'Buena';
 $wb['strength_4'] = 'Fuerte';
 $wb['strength_5'] = 'Muy fuerte';
-$wb['weak_password_txt'] = 'La contraseña elegida no coincide con las directrices de seguridad. Debe contener al menos {chars} caracteres y tener una fortaleza \"{strength}\".';
+$wb['weak_password_txt'] = 'La contraseña elegida no coincide con las directrices de seguridad. Debe contener al menos {chars} caracteres y tener una fortaleza \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'La contraseña elegida no coincide con las directrices de seguridad. Debe contener al menos {chars} caracteres.';
 $wb['security_check1_txt'] = 'Verificar permisos de seguridad:';
 $wb['security_check2_txt'] = 'ha fallado.';
diff --git a/interface/lib/lang/fi.lng b/interface/lib/lang/fi.lng
index 0439142c52..d4c23ca777 100755
--- a/interface/lib/lang/fi.lng
+++ b/interface/lib/lang/fi.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/hr.lng b/interface/lib/lang/hr.lng
index c6a1b74d81..310371be47 100644
--- a/interface/lib/lang/hr.lng
+++ b/interface/lib/lang/hr.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Dobro';
 $wb['strength_3'] = 'Bolje';
 $wb['strength_4'] = 'Jako';
 $wb['strength_5'] = 'Odlično';
-$wb['weak_password_txt'] = 'Unešena šifra nije dobra. Mora biti dugačka barem {chars} znakova i jačine \"{strength}\".';
+$wb['weak_password_txt'] = 'Unešena šifra nije dobra. Mora biti dugačka barem {chars} znakova i jačine \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'Unešena šifra nije dobra. Mora biti dugačka barem {chars} znakova.';
 $wb['security_check1_txt'] = 'Provjerite sigurnosne dozvole:';
 $wb['security_check2_txt'] = 'greška.';
diff --git a/interface/lib/lang/hu.lng b/interface/lib/lang/hu.lng
index 1ef741d6a2..dd4cce79b3 100644
--- a/interface/lib/lang/hu.lng
+++ b/interface/lib/lang/hu.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/id.lng b/interface/lib/lang/id.lng
index 6483418b3e..bd90fd5a1b 100644
--- a/interface/lib/lang/id.lng
+++ b/interface/lib/lang/id.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/it.lng b/interface/lib/lang/it.lng
index 332cd1ab9f..33d16c3d5f 100644
--- a/interface/lib/lang/it.lng
+++ b/interface/lib/lang/it.lng
@@ -138,7 +138,7 @@ $wb['strength_2'] = 'Mediocre';
 $wb['strength_3'] = 'Buono';
 $wb['strength_4'] = 'Forte';
 $wb['strength_5'] = 'Molto forte';
-$wb['weak_password_txt'] = 'La password indicata non segue le impostazioni di sicurezza. Deve essere lunga almeno  {chars} caratteri ed avere un livello di sicurezza pari a \"{strength}\".';
+$wb['weak_password_txt'] = 'La password indicata non segue le impostazioni di sicurezza. Deve essere lunga almeno  {chars} caratteri ed avere un livello di sicurezza pari a \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'La password indicata non segue le impostazioni di sicurezza. Deve essere lunga almeno  {chars} caratteri.';
 $wb['security_check1_txt'] = 'Verifica permessi di sicurezza:';
 $wb['security_check2_txt'] = 'fallito.';
diff --git a/interface/lib/lang/ja.lng b/interface/lib/lang/ja.lng
index 5f8b20add4..2a56e77399 100644
--- a/interface/lib/lang/ja.lng
+++ b/interface/lib/lang/ja.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/nl.lng b/interface/lib/lang/nl.lng
index 561e4cdb76..888f9c0200 100644
--- a/interface/lib/lang/nl.lng
+++ b/interface/lib/lang/nl.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/pl.lng b/interface/lib/lang/pl.lng
index abbb98ee14..b5b62c816d 100644
--- a/interface/lib/lang/pl.lng
+++ b/interface/lib/lang/pl.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/pt.lng b/interface/lib/lang/pt.lng
index 026aff80a8..7845520a5b 100644
--- a/interface/lib/lang/pt.lng
+++ b/interface/lib/lang/pt.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/ro.lng b/interface/lib/lang/ro.lng
index bfbd725dab..613f2377a1 100644
--- a/interface/lib/lang/ro.lng
+++ b/interface/lib/lang/ro.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/ru.lng b/interface/lib/lang/ru.lng
index 823ef44c79..e5e8ce6278 100644
--- a/interface/lib/lang/ru.lng
+++ b/interface/lib/lang/ru.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Средний';
 $wb['strength_3'] = 'Хороший';
 $wb['strength_4'] = 'Стойкий';
 $wb['strength_5'] = 'Очень стойкий';
-$wb['weak_password_txt'] = 'Выбранный пароль не соответствует требованиям безопасности. Он должен быть как минимум {chars} символов в длину и стойкость \"{strength}\".';
+$wb['weak_password_txt'] = 'Выбранный пароль не соответствует требованиям безопасности. Он должен быть как минимум {chars} символов в длину и стойкость \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'Выбранный пароль не соответствует требованиям безопасности. Он должен быть как минимум {chars} символов в длину.';
 $wb['security_check1_txt'] = 'Проверка разрешений безопасности:';
 $wb['security_check2_txt'] = 'не удалось.';
diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng
index 4f67c28024..b6767144df 100644
--- a/interface/lib/lang/se.lng
+++ b/interface/lib/lang/se.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Sådär';
 $wb['strength_3'] = 'Bra';
 $wb['strength_4'] = 'Starkt';
 $wb['strength_5'] = 'Väldigt starkt';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/sk.lng b/interface/lib/lang/sk.lng
index b647226e34..6b4ef7676f 100644
--- a/interface/lib/lang/sk.lng
+++ b/interface/lib/lang/sk.lng
@@ -145,7 +145,7 @@ $wb['strength_2'] = 'Fair';
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng
index 551fae8d86..115bc890bb 100644
--- a/interface/lib/lang/tr.lng
+++ b/interface/lib/lang/tr.lng
@@ -146,7 +146,7 @@ $wb['strength_2'] = 'Yeterli';
 $wb['strength_3'] = 'Ä°yi';
 $wb['strength_4'] = 'Güçlü';
 $wb['strength_5'] = 'Çok Güçlü';
-$wb['weak_password_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda ve \"{strength}\" güçlüğünde olmalı.';
+$wb['weak_password_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda ve \\"{strength}\\" güçlüğünde olmalı.';
 $wb['weak_password_length_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda olmalı.';
 $wb['security_check1_txt'] = 'Güvenlik iznini denetle:';
 $wb['security_check2_txt'] = 'başarısız.';
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 55d3f8949c..bccdcc42c0 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index b650929064..0a830014d8 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/ar_users.lng b/interface/web/admin/lib/lang/ar_users.lng
index 9d9923b631..dcbc4f4727 100644
--- a/interface/web/admin/lib/lang/ar_users.lng
+++ b/interface/web/admin/lib/lang/ar_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 6b63770459..39531461c3 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index 15d5338704..130cb596aa 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/bg_users.lng b/interface/web/admin/lib/lang/bg_users.lng
index e36d2d9d32..e8dc631a59 100644
--- a/interface/web/admin/lib/lang/bg_users.lng
+++ b/interface/web/admin/lib/lang/bg_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 088dac70be..25ffb06996 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index 3d8ea38e14..8688ca53aa 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'O número do gabarito do cliente
 $wb['customer_no_start_txt'] = 'Valor inicial do código do cliente';
 $wb['customer_no_counter_txt'] = 'Contador de código do cliente';
 $wb['session_timeout_txt'] = 'Duração da sessão (minutos)';
-$wb['session_allow_endless_txt'] = 'Habilitar \"Manter-me conectado\"';
+$wb['session_allow_endless_txt'] = 'Habilitar \\"Manter-me conectado\\"';
 $wb['min_password_length_txt'] = 'Comprimento mínimo da senha';
 $wb['min_password_strength_txt'] = 'Dificuldade mínima da senha';
 $wb['company_name_txt'] = 'Nome da empresa no título da página';
diff --git a/interface/web/admin/lib/lang/ca_firewall.lng b/interface/web/admin/lib/lang/ca_firewall.lng
index 0e08215f7a..06a51c80cf 100644
--- a/interface/web/admin/lib/lang/ca_firewall.lng
+++ b/interface/web/admin/lib/lang/ca_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Separated by comma';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 42fb15c246..14f0b91d3b 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -161,7 +161,7 @@ $wb['do_not_try_rescue_httpd_txt'] = 'Disable HTTPD monitoring';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['do_not_try_rescue_mysql_txt'] = 'Disable MySQL monitoring';
 $wb['do_not_try_rescue_mail_txt'] = 'Disable Email monitoring';
-$wb['rescue_description_txt'] = '<b>Information:</b> If you want to shut down mysql you have to select the \"Disable MySQL monitor\" checkbox and then wait 2-3 minutes.<br>If you do not wait 2-3 minutes, rescue will try to restart mysql!';
+$wb['rescue_description_txt'] = '<b>Information:</b> If you want to shut down mysql you have to select the \\"Disable MySQL monitor\\" checkbox and then wait 2-3 minutes.<br>If you do not wait 2-3 minutes, rescue will try to restart mysql!';
 $wb['enable_sni_txt'] = 'Enable SNI';
 $wb['set_folder_permissions_on_update_txt'] = 'Set folder permissions on update';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Add web users to -sshusers- group';
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index 326b3b2750..cc3c11c6c5 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/ca_users.lng b/interface/web/admin/lib/lang/ca_users.lng
index 9d9923b631..dcbc4f4727 100644
--- a/interface/web/admin/lib/lang/ca_users.lng
+++ b/interface/web/admin/lib/lang/ca_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/cz_remote_action.lng b/interface/web/admin/lib/lang/cz_remote_action.lng
index 68da1c065d..e1908e2d04 100644
--- a/interface/web/admin/lib/lang/cz_remote_action.lng
+++ b/interface/web/admin/lib/lang/cz_remote_action.lng
@@ -2,9 +2,9 @@
 $wb['select_server_txt'] = 'Zvolit server';
 $wb['btn_do_txt'] = 'Provést akci';
 $wb['do_osupdate_caption'] = 'Aktualizace operačního systému na vzdáleném serveru.';
-$wb['do_osupdate_desc'] = 'Tato akce provede \"aptitude -y\" aktualizaci na vybraném serveru.<br><br><strong>POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !</strong>';
+$wb['do_osupdate_desc'] = 'Tato akce provede \\"aptitude -y\\" aktualizaci na vybraném serveru.<br><br><strong>POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !</strong>';
 $wb['do_ispcupdate_caption'] = 'Provedení ISPConfig 3 - aktualizace na vzdáleném serveru';
-$wb['do_ispcupdate_desc'] = 'Tato akce provede \"ISPConfig 3\" aktualizaci na vašem vybraném serveru.<br><br><strong>POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !</strong>';
+$wb['do_ispcupdate_desc'] = 'Tato akce provede \\"ISPConfig 3\\" aktualizaci na vašem vybraném serveru.<br><br><strong>POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !</strong>';
 $wb['action_scheduled'] = 'Akce je naplánována na provedení';
 $wb['select_all_server'] = 'VÅ¡echny servery';
 $wb['ispconfig_update_title'] = 'ISPConfig pokyny k aktualizaci';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 40af41289a..a97d78b8eb 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -143,7 +143,7 @@ $wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM adresář pro socket je prázdn
 $wb['try_rescue_txt'] = 'Povolit monitorování služeb a restartovat při selhání';
 $wb['do_not_try_rescue_mysql_txt'] = 'Zakázat MySQL monitorování';
 $wb['do_not_try_rescue_mail_txt'] = 'Zakázat E-mail monitorování';
-$wb['rescue_description_txt'] = '<b>Informace:</b> Pokud chcete např. vypnout MySQL službu zatrhněte políčko \"Zakázat MySQL monitorování\" změna se provede do 2-3 minut.<br>Pokud nepočkáte 2-3 minuty, monitorování nastartuje službu MySQL automaticky znovu !';
+$wb['rescue_description_txt'] = '<b>Informace:</b> Pokud chcete např. vypnout MySQL službu zatrhněte políčko \\"Zakázat MySQL monitorování\\" změna se provede do 2-3 minut.<br>Pokud nepočkáte 2-3 minuty, monitorování nastartuje službu MySQL automaticky znovu !';
 $wb['enable_sni_txt'] = 'Aktivovat SNI (Server Name Indication)';
 $wb['do_not_try_rescue_httpd_txt'] = 'Zakázat HTTPD monitorování';
 $wb['set_folder_permissions_on_update_txt'] = 'Nastavení oprávnění složky při aktualizaci';
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 50b3514564..960381e7c1 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -299,4 +299,5 @@ $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload Modus';
 $wb['content_filter_txt'] = 'Content-Filter';
 $wb['rspamd_url_txt'] = 'Rspamd-URL';
 $wb['rspamd_user_txt'] = 'Rspamd-Benutzer';
-$wb['rspamd_password_txt'] = 'Rspamd-Passwort';
\ No newline at end of file
+$wb['rspamd_password_txt'] = 'Rspamd-Passwort';
+?>
diff --git a/interface/web/admin/lib/lang/dk_firewall.lng b/interface/web/admin/lib/lang/dk_firewall.lng
index 9a20698384..96608b2830 100644
--- a/interface/web/admin/lib/lang/dk_firewall.lng
+++ b/interface/web/admin/lib/lang/dk_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Adskilt af komma';
 $wb['udp_port_help_txt'] = 'Adskilt af komma';
 $wb['active_txt'] = 'Aktiv';
 $wb['firewall_error_unique'] = 'Der er allerede en firewall post for denne server.';
-$wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i tcp port definition. Tilladt tegn er tal, \":\" og \",\".';
-$wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i udp port definition. Tilladt tegn er tal, \":\" og \",\".';
+$wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i tcp port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
+$wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i udp port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index a4e0a12d9f..73e7ef1bfd 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -152,7 +152,7 @@ $wb['try_rescue_txt'] = 'Aktiver overvågnings service og genstarte ved fejl';
 $wb['do_not_try_rescue_httpd_txt'] = 'Deaktiver HTTPD monitoring';
 $wb['do_not_try_rescue_mysql_txt'] = 'Deaktiver MySQL monitoring';
 $wb['do_not_try_rescue_mail_txt'] = 'Deaktiver E-mail monitoring';
-$wb['rescue_description_txt'] = '<b>Information:</b> Hvis du ønsker nedlukning af mysql skal du vælge \"Deaktiver MySQL monitor\" afkrydsningsfeltet og derefter vente 2-3 minutter.<br>Hvis du ikke vente 2-3 minutter, vil redning forsøge at genstarte mysql!';
+$wb['rescue_description_txt'] = '<b>Information:</b> Hvis du ønsker nedlukning af mysql skal du vælge \\"Deaktiver MySQL monitor\\" afkrydsningsfeltet og derefter vente 2-3 minutter.<br>Hvis du ikke vente 2-3 minutter, vil redning forsøge at genstarte mysql!';
 $wb['enable_sni_txt'] = 'Enable SNI';
 $wb['set_folder_permissions_on_update_txt'] = 'Indstil mappe tilladelser ved opdatering';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Tilføj web-brugere til -sshusers- gruppe';
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index 75e55f1eb0..26b0fe7e78 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -64,7 +64,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Kunde Nr. skabelon indeholder ugy
 $wb['customer_no_start_txt'] = 'Kunde Nr. start værdi';
 $wb['customer_no_counter_txt'] = 'Kunde Nr. tæller';
 $wb['session_timeout_txt'] = 'Session timeout (minutter)';
-$wb['session_allow_endless_txt'] = 'Aktiver \"forbliv logget ind\"';
+$wb['session_allow_endless_txt'] = 'Aktiver \\"forbliv logget ind\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum adgangskode længde';
 $wb['min_password_strength_txt'] = 'Minimum adgangskode styrke';
diff --git a/interface/web/admin/lib/lang/dk_users.lng b/interface/web/admin/lib/lang/dk_users.lng
index a70cc1dbf1..2e86ab4ca9 100644
--- a/interface/web/admin/lib/lang/dk_users.lng
+++ b/interface/web/admin/lib/lang/dk_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generer Adgangskode';
 $wb['repeat_password_txt'] = 'Gentage Adgangskode';
 $wb['password_mismatch_txt'] = 'Adgangskoderne stemmer ikke overens.';
 $wb['password_match_txt'] = 'Adgangskoderne stemmer overens.';
-$wb['username_error_collision'] = 'Brugernavn må ikke være web eller web plus et tal.\"';
+$wb['username_error_collision'] = 'Brugernavn må ikke være web eller web plus et tal.\\"';
 $wb['client_not_admin_err'] = 'En bruger der hører til en klient kan ikke indstilles til typen: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index ae0efc9e31..84992261bb 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 80ddaca144..640d6f00a9 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/el_users.lng b/interface/web/admin/lib/lang/el_users.lng
index e5ce7a8792..f0307b95ec 100644
--- a/interface/web/admin/lib/lang/el_users.lng
+++ b/interface/web/admin/lib/lang/el_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/es_firewall.lng b/interface/web/admin/lib/lang/es_firewall.lng
index db09b57844..81cad3c0aa 100755
--- a/interface/web/admin/lib/lang/es_firewall.lng
+++ b/interface/web/admin/lib/lang/es_firewall.lng
@@ -4,8 +4,8 @@ $wb['firewall_error_unique'] = 'Ya existe un registro de cortafuegos para este s
 $wb['server_id_txt'] = 'Servidor';
 $wb['tcp_port_help_txt'] = 'Separados por coma';
 $wb['tcp_port_txt'] = 'Puertos TCP abiertos';
-$wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \":\" y \",\".';
+$wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
 $wb['udp_port_help_txt'] = 'Separados por coma';
 $wb['udp_port_txt'] = 'Puertos UDP abiertos';
-$wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \":\" y \",\".';
+$wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 01c9978ae1..01350367ae 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -228,7 +228,7 @@ $wb['reject_sender_login_mismatch_txt'] = 'Rechazar remitente e inicio de sesió
 $wb['relayhost_password_txt'] = 'Contraseña del servidor de retransmisión';
 $wb['relayhost_txt'] = 'Servidor de retransmisión';
 $wb['relayhost_user_txt'] = 'Usuario del servidor de retransmisión';
-$wb['rescue_description_txt'] = '<b>Información:</b> Si desea detener el servicio de MySQL debe seleccionar la casilla \"Deshabilitar monitorización de MySQL\" y luego esperar 2-3 minutos.<br>Si no espera 2-3 minutos, el rescatador intentará reiniciar el servicio';
+$wb['rescue_description_txt'] = '<b>Información:</b> Si desea detener el servicio de MySQL debe seleccionar la casilla \\"Deshabilitar monitorización de MySQL\\" y luego esperar 2-3 minutos.<br>Si no espera 2-3 minutos, el rescatador intentará reiniciar el servicio';
 $wb['security_level_txt'] = 'Nivel de seguridad';
 $wb['server_type_txt'] = 'Tipo de servidor';
 $wb['set_folder_permissions_on_update_txt'] = 'Establecer permisos de carpetas al actualizar';
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index b927ab043f..043c52cfdd 100755
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -7,7 +7,7 @@ $wb['available_dashlets_note_txt'] = 'Componentes disponibles:';
 $wb['backups_include_into_web_quota_txt'] = 'Incluir archivos de copia de seguridad en la cuota web.';
 $wb['client_dashlets_left_txt'] = 'Componentes del cliente a la izquierda';
 $wb['client_dashlets_right_txt'] = 'Componentes del cliente a la derecha';
-$wb['client_username_web_check_disabled_txt'] = 'Desactivar la comprobación de la palabra \"web\" en los nombres de clientes.';
+$wb['client_username_web_check_disabled_txt'] = 'Desactivar la comprobación de la palabra \\"web\\" en los nombres de clientes.';
 $wb['company_name_txt'] = 'Nombre de la compañía para el título de la página';
 $wb['custom_login_link_txt'] = 'Enlace personalizado para la página de Inicio de Sesión';
 $wb['custom_login_text_txt'] = 'Texto personalizado para la página de Inicio de Sesión';
@@ -51,7 +51,7 @@ $wb['phpmyadmin_url_txt'] = 'Enlace a phpMyAdmin';
 $wb['reseller_can_use_options_txt'] = 'El revendedor puede utilizar la pestaña opciones para los sitios webs';
 $wb['reseller_dashlets_left_txt'] = 'Componentes de revendedores a la izquierda';
 $wb['reseller_dashlets_right_txt'] = 'Componentes de revendedores a la derecha';
-$wb['session_allow_endless_txt'] = 'Habilitar \"mantenerme conectado\"';
+$wb['session_allow_endless_txt'] = 'Habilitar \\"mantenerme conectado\\"';
 $wb['session_timeout_txt'] = 'Tiempo límite de sesión (minutos)';
 $wb['shelluser_prefix_error_regex'] = 'Carácter no permitido en el prefijo de usuario del shell.';
 $wb['shelluser_prefix_txt'] = 'Prefijo del usuario del Shell';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index c1e43b276b..6caf643abe 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index 72e7aaa2e6..c0972c49d8 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/fi_users.lng b/interface/web/admin/lib/lang/fi_users.lng
index 4fde01b87c..199601f520 100755
--- a/interface/web/admin/lib/lang/fi_users.lng
+++ b/interface/web/admin/lib/lang/fi_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/fr_remote_action.lng b/interface/web/admin/lib/lang/fr_remote_action.lng
index 0072271d69..bb3443b40a 100644
--- a/interface/web/admin/lib/lang/fr_remote_action.lng
+++ b/interface/web/admin/lib/lang/fr_remote_action.lng
@@ -8,5 +8,5 @@ $wb['do_ispcupdate_desc'] = 'Cette action met à jour ISPConfig3 sur le serveur
 $wb['action_scheduled'] = 'L’action est marquée pour exécution';
 $wb['select_all_server'] = 'Tout serveur';
 $wb['ispconfig_update_title'] = 'ISPConfig update instructions';
-$wb['ispconfig_update_text'] = 'Login as root user on the shell of your server and execute the command<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />to start the ISPConfig update.<br /><br /><a href=\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\" target=\"_blank\">Click here for detailed update instructions</a>';
+$wb['ispconfig_update_text'] = 'Login as root user on the shell of your server and execute the command<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />to start the ISPConfig update.<br /><br /><a href=\\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\\" target=\\"_blank\\">Click here for detailed update instructions</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 418f633670..25f7375688 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index df90e03011..18f0dbbed4 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -64,7 +64,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index 78d9a57a5b..faf08f4201 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index a8b44528c6..a7735647b1 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/hr_users.lng b/interface/web/admin/lib/lang/hr_users.lng
index 52f0bdff34..7be3f968f2 100644
--- a/interface/web/admin/lib/lang/hr_users.lng
+++ b/interface/web/admin/lib/lang/hr_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generiraj Å¡ifru';
 $wb['repeat_password_txt'] = 'Ponovi Å¡ifru';
 $wb['password_mismatch_txt'] = 'Šifre nisu identične.';
 $wb['password_match_txt'] = 'Šifre su identične.';
-$wb['username_error_collision'] = 'Korisničko ime ne može biti web ili web sa brojem.\"';
+$wb['username_error_collision'] = 'Korisničko ime ne može biti web ili web sa brojem.\\"';
 $wb['client_not_admin_err'] = 'Korisnik koji je u grupi klijenti ne može biti admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/hr_users_list.lng b/interface/web/admin/lib/lang/hr_users_list.lng
index 7725ce2b96..c102e5f7f5 100644
--- a/interface/web/admin/lib/lang/hr_users_list.lng
+++ b/interface/web/admin/lib/lang/hr_users_list.lng
@@ -4,6 +4,6 @@ $wb['username_txt'] = 'Korisničko ime';
 $wb['client_id_txt'] = 'Client ID';
 $wb['active_txt'] = 'Active';
 $wb['add_new_record_txt'] = 'Dodaj klijenta';
-$wb['warning_txt'] = '<b>UPOZORENJE:</b> Ovdje nemojte mijenjati podatke klijenta. Koristite \"Klijent\" i \"Preprodavač\" postavke u Klijent modulu. Mijenjanjem postavki klijenata ili grupa može doći do gubitka podataka!';
+$wb['warning_txt'] = '<b>UPOZORENJE:</b> Ovdje nemojte mijenjati podatke klijenta. Koristite \\"Klijent\\" i \\"Preprodavač\\" postavke u Klijent modulu. Mijenjanjem postavki klijenata ili grupa može doći do gubitka podataka!';
 $wb['groups_txt'] = 'Groups';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index c2adb3efb2..6347afb7da 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index e983379e3f..cee497fe19 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/hu_users.lng b/interface/web/admin/lib/lang/hu_users.lng
index 05f3554dfd..e2cf25fb79 100644
--- a/interface/web/admin/lib/lang/hu_users.lng
+++ b/interface/web/admin/lib/lang/hu_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index 36f3cd8535..9a28dff300 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index 41dd67fbac..344185b84d 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/id_users.lng b/interface/web/admin/lib/lang/id_users.lng
index f5ae7efea5..f9e961192c 100644
--- a/interface/web/admin/lib/lang/id_users.lng
+++ b/interface/web/admin/lib/lang/id_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 766b7fb1ae..3dc37a3c1d 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index 35e625bd2a..311b7c957c 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -64,7 +64,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/it_users.lng b/interface/web/admin/lib/lang/it_users.lng
index be1294cdbe..1bde73a67b 100644
--- a/interface/web/admin/lib/lang/it_users.lng
+++ b/interface/web/admin/lib/lang/it_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Genera Password';
 $wb['repeat_password_txt'] = 'Ripeti Password';
 $wb['password_mismatch_txt'] = 'Le password non coincidono.';
 $wb['password_match_txt'] = 'Le password coincidono.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index ccabb127e6..72bef72c4b 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index 494f90dd3e..aa5cc6a7a3 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/ja_users.lng b/interface/web/admin/lib/lang/ja_users.lng
index 2e6ad9fb72..64f8339ffa 100644
--- a/interface/web/admin/lib/lang/ja_users.lng
+++ b/interface/web/admin/lib/lang/ja_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 187ea86ec1..2884f304ec 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index 89e3ff8e47..44a58b7646 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/nl_users.lng b/interface/web/admin/lib/lang/nl_users.lng
index 782bfc5f90..1e6d4ef586 100644
--- a/interface/web/admin/lib/lang/nl_users.lng
+++ b/interface/web/admin/lib/lang/nl_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index a50e27b33e..29cb94e96c 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index bbbbf95ec7..a809251ec1 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 96c16d3a2c..3703c759ed 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index a72ca0e954..6fc26344c0 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/pt_users.lng b/interface/web/admin/lib/lang/pt_users.lng
index b53790e6fa..67cfe4f572 100644
--- a/interface/web/admin/lib/lang/pt_users.lng
+++ b/interface/web/admin/lib/lang/pt_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 239a87dc74..3251476126 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index 93ccf39477..2a39a454e8 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/ro_users.lng b/interface/web/admin/lib/lang/ro_users.lng
index 9d9923b631..dcbc4f4727 100644
--- a/interface/web/admin/lib/lang/ro_users.lng
+++ b/interface/web/admin/lib/lang/ro_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/ru_firewall.lng b/interface/web/admin/lib/lang/ru_firewall.lng
index c30f26f2e8..70beb30437 100644
--- a/interface/web/admin/lib/lang/ru_firewall.lng
+++ b/interface/web/admin/lib/lang/ru_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Перечислить порты TCP через з
 $wb['udp_port_help_txt'] = 'Перечислить порты UDP через запятую';
 $wb['active_txt'] = 'Активно';
 $wb['firewall_error_unique'] = 'Уже есть такая запись брандмауэра для этого сервера.';
-$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \":\" и \",\"';
-$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \":\" и \",\"';
+$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
+$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index ca66b325bc..b2f0b407d6 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -152,7 +152,7 @@ $wb['php_fpm_socket_dir_error_empty'] = 'Каталог PHP-FPM сокета п
 $wb['try_rescue_txt'] = 'Включить мониторинг службы и перезапуск при сбое';
 $wb['do_not_try_rescue_mysql_txt'] = 'Отключить мониторинг MySQL';
 $wb['do_not_try_rescue_mail_txt'] = 'Отключить мониторинг Email';
-$wb['rescue_description_txt'] = '<b>Информация:</b> Если вы хотите выключить MySQL, вы должны установить флажок \"Отключить мониторинг MySQL\" и подождать 2-3 минуты.<br>Если вы не подождёте 2-3 минуты, мониторинг будет пытаться перезапустить MySQL!';
+$wb['rescue_description_txt'] = '<b>Информация:</b> Если вы хотите выключить MySQL, вы должны установить флажок \\"Отключить мониторинг MySQL\\" и подождать 2-3 минуты.<br>Если вы не подождёте 2-3 минуты, мониторинг будет пытаться перезапустить MySQL!';
 $wb['enable_sni_txt'] = 'Включить SNI';
 $wb['do_not_try_rescue_httpd_txt'] = 'Отключить мониторинг HTTPD';
 $wb['set_folder_permissions_on_update_txt'] = 'Установить разрешения для папки на обновления';
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index 52324f3c77..baed497b0e 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -14,7 +14,7 @@ $wb['mailboxlist_webmail_link_txt'] = 'Ссылка на веб-почту в с
 $wb['webmail_url_txt'] = 'URL веб-почты';
 $wb['phpmyadmin_url_txt'] = 'URL PHPMyAdmin';
 $wb['use_domain_module_txt'] = 'Использовать модуль домена, чтобы добавить новые домены';
-$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \"домен\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
+$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \\"домен\\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
 $wb['new_domain_txt'] = 'HTML текст, чтобы создать новый домен';
 $wb['webdavuser_prefix_txt'] = 'Префикс пользователя WebDAV';
 $wb['webdavuser_prefix_error_regex'] = 'Некорректный символ в префиксе пользователя WebDAV.';
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Шаблон номера Кли
 $wb['customer_no_start_txt'] = 'Начальное значение номера Клиента';
 $wb['customer_no_counter_txt'] = 'Счётчик номера Клиента';
 $wb['session_timeout_txt'] = 'Тайм-аут сессии (в минутах)';
-$wb['session_allow_endless_txt'] = 'Включить \"оставаться в системе\"';
+$wb['session_allow_endless_txt'] = 'Включить \\"оставаться в системе\\"';
 $wb['No'] = 'Нет';
 $wb['min_password_length_txt'] = 'Минимальная длина пароля';
 $wb['min_password_strength_txt'] = 'Минимальная стойкость пароля';
diff --git a/interface/web/admin/lib/lang/ru_users.lng b/interface/web/admin/lib/lang/ru_users.lng
index bd1b8034ff..63f081f917 100644
--- a/interface/web/admin/lib/lang/ru_users.lng
+++ b/interface/web/admin/lib/lang/ru_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Создать пароль';
 $wb['repeat_password_txt'] = 'Повторить пароль';
 $wb['password_mismatch_txt'] = 'Пароли не совпадают.';
 $wb['password_match_txt'] = 'Эти пароли совпадают.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['client_not_admin_err'] = 'Пользователь, который принадлежит к клиенту не может быть установлен тип: admin';
 $wb['lost_password_function_txt'] = 'Функция восстановления пароля доступна';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index c949c052ba..1103baa4d2 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 0c5643bf4f..74ae16734f 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Kundnummermallen innehåller otil
 $wb['customer_no_start_txt'] = 'Kundnummer startvärde';
 $wb['customer_no_counter_txt'] = 'Kundnummer räknare';
 $wb['session_timeout_txt'] = 'Session timeout (minuter)';
-$wb['session_allow_endless_txt'] = 'Aktivera \"håll mig inloggad\"';
+$wb['session_allow_endless_txt'] = 'Aktivera \\"håll mig inloggad\\"';
 $wb['No'] = 'Nej';
 $wb['min_password_length_txt'] = 'Minsta lösenordslängd';
 $wb['min_password_strength_txt'] = 'Minsta lösenordsstyrka';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 709f7b928a..125e0b1ea2 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index 390458886c..90418e87d5 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contain
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/sk_users.lng b/interface/web/admin/lib/lang/sk_users.lng
index 60a0aa99ec..d71952fa3e 100644
--- a/interface/web/admin/lib/lang/sk_users.lng
+++ b/interface/web/admin/lib/lang/sk_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['username_error_collision'] = 'The username may not be web or web plus a number.\"';
+$wb['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/tr_firewall.lng b/interface/web/admin/lib/lang/tr_firewall.lng
index 8db312ff05..a45998d4e1 100644
--- a/interface/web/admin/lib/lang/tr_firewall.lng
+++ b/interface/web/admin/lib/lang/tr_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['active_txt'] = 'Etkin';
 $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
-$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \":\" ve \",\" karakterleri kullanılabilir.';
-$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \":\" ve \",\" karakterleri kullanılabilir.';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_remote_action.lng b/interface/web/admin/lib/lang/tr_remote_action.lng
index 2f124714e1..c067f67e88 100644
--- a/interface/web/admin/lib/lang/tr_remote_action.lng
+++ b/interface/web/admin/lib/lang/tr_remote_action.lng
@@ -2,11 +2,11 @@
 $wb['select_server_txt'] = 'Sunucu Seçin';
 $wb['btn_do_txt'] = 'İşlemi Başlatın';
 $wb['do_osupdate_caption'] = 'Uzak sunucudaki işletim sistemini güncelleyin';
-$wb['do_osupdate_desc'] = 'Bu işlem seçilmiş sunucuda \"aptitude -y upgrade\" komutunu yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SİZE AİTTİR!</strong>';
+$wb['do_osupdate_desc'] = 'Bu işlem seçilmiş sunucuda \\"aptitude -y upgrade\\" komutunu yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SİZE AİTTİR!</strong>';
 $wb['do_ispcupdate_caption'] = 'Uzak sunucudaki ISPConfig 3 - sürümünü güncelleyin';
 $wb['do_ispcupdate_desc'] = 'Bu işlem seçilmiş sunucuda ISPConfig3 güncellemesini yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SÜZE AİTTİR!</strong>';
 $wb['action_scheduled'] = 'İşlem yürütülmek üzere zamanlandı';
 $wb['select_all_server'] = 'Tüm Sunucularda';
 $wb['ispconfig_update_title'] = 'ISPConfig güncelleme yönergeleri';
-$wb['ispconfig_update_text'] = 'Sunucunuzda root kullanıcısı ile bir kabuk oturumu açın ve ISPConfig güncellemesini başlatmak için<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />komutunu yürütün.<br /><br /><a href=\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\" target=\"_blank\">Ayrıntılı güncelleme bilgilerine bakmak için buraya tıklayın</a>';
+$wb['ispconfig_update_text'] = 'Sunucunuzda root kullanıcısı ile bir kabuk oturumu açın ve ISPConfig güncellemesini başlatmak için<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />komutunu yürütün.<br /><br /><a href=\\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\\" target=\\"_blank\\">Ayrıntılı güncelleme bilgilerine bakmak için buraya tıklayın</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 4abfd909bf..efe24bf3a4 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -152,7 +152,7 @@ $wb['try_rescue_txt'] = 'Hizmetler izlensin ve sorun çıktığında yeniden ba
 $wb['do_not_try_rescue_httpd_txt'] = 'HTTPD izlenmesin';
 $wb['do_not_try_rescue_mysql_txt'] = 'MySQL izlenmesin';
 $wb['do_not_try_rescue_mail_txt'] = 'E-posta izlenmesin';
-$wb['rescue_description_txt'] = '<b>Uyarı:</b> mysql sunucusunu kapatmak istiyorsanız \"MySQL izlenmesin\" seçeneğini işaretleyip 2-3 dakika bekleyin.<br>2-3 dakika beklemezseniz, kurtarma işlemi mysql sunucusunu yeniden başlatmaya çalışır!';
+$wb['rescue_description_txt'] = '<b>Uyarı:</b> mysql sunucusunu kapatmak istiyorsanız \\"MySQL izlenmesin\\" seçeneğini işaretleyip 2-3 dakika bekleyin.<br>2-3 dakika beklemezseniz, kurtarma işlemi mysql sunucusunu yeniden başlatmaya çalışır!';
 $wb['enable_sni_txt'] = 'SNI Kullanılsın';
 $wb['set_folder_permissions_on_update_txt'] = 'Güncellenirken klasör izinleri ayarlansın';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Web kullanıcıları -sshusers- grubuna eklensin';
@@ -296,4 +296,8 @@ $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
 $wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index b4b213697f..c52893f6b4 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -64,7 +64,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Müşteri no kalıbında geçersi
 $wb['customer_no_start_txt'] = 'Müşteri No Başlangıç Değeri';
 $wb['customer_no_counter_txt'] = 'Müşteri No Sayacı';
 $wb['session_timeout_txt'] = 'Oturum Zaman Aşımı (dakika)';
-$wb['session_allow_endless_txt'] = '\"Oturum açık kalsın\" kullanılabilsin';
+$wb['session_allow_endless_txt'] = '\\"Oturum açık kalsın\\" kullanılabilsin';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'En Az Parola UzunluÄŸu';
 $wb['min_password_strength_txt'] = 'En Az Parola Güçlüğü';
diff --git a/interface/web/admin/lib/lang/tr_users.lng b/interface/web/admin/lib/lang/tr_users.lng
index b639bf9a1d..0029214773 100644
--- a/interface/web/admin/lib/lang/tr_users.lng
+++ b/interface/web/admin/lib/lang/tr_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Parola OluÅŸtur';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['username_error_collision'] = 'Kullanıcı adı -web- ya da -web- sözcüğünü izleyen bir sayı ile başlayamaz.\"';
+$wb['username_error_collision'] = 'Kullanıcı adı -web- ya da -web- sözcüğünü izleyen bir sayı ile başlayamaz.\\"';
 $wb['client_not_admin_err'] = 'Bir müşteriye ait bir kullanıcının tipi admin olarak atanamaz';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/client/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng
index 4d2bcccef0..71bc0fc1f7 100644
--- a/interface/web/client/lib/lang/ar_client.lng
+++ b/interface/web/client/lib/lang/ar_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/ar_reseller.lng b/interface/web/client/lib/lang/ar_reseller.lng
index 553abe0aee..68e8a950f3 100644
--- a/interface/web/client/lib/lang/ar_reseller.lng
+++ b/interface/web/client/lib/lang/ar_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/bg_client.lng b/interface/web/client/lib/lang/bg_client.lng
index 163f677043..36da0a0422 100644
--- a/interface/web/client/lib/lang/bg_client.lng
+++ b/interface/web/client/lib/lang/bg_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/bg_reseller.lng b/interface/web/client/lib/lang/bg_reseller.lng
index 7daa4cff22..211b6daf93 100644
--- a/interface/web/client/lib/lang/bg_reseller.lng
+++ b/interface/web/client/lib/lang/bg_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng
index ad9282aa4c..992c1ea2ca 100644
--- a/interface/web/client/lib/lang/br_client.lng
+++ b/interface/web/client/lib/lang/br_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
 $wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo (ou em branco).';
 $wb['paypal_email_error_isemail'] = 'Por favor, insira um e-mail do PayPal válido.';
 $wb['paypal_email_txt'] = 'e-mail do PayPal';
-$wb['err_msg_master_tpl_set'] = 'Todos as configurações de limites personalizadas são ignoradas se qualquer gabarito mestre ou algum gabarito \"personalizado\" for selecionado.';
+$wb['err_msg_master_tpl_set'] = 'Todos as configurações de limites personalizadas são ignoradas se qualquer gabarito mestre ou algum gabarito \\"personalizado\\" for selecionado.';
 $wb['aps_limits_txt'] = 'Limites de apps instalados';
 $wb['limit_aps_txt'] = 'Limite de instâncias de apps';
 $wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng
index bc7124b16c..4b2ce6555b 100644
--- a/interface/web/client/lib/lang/br_client_template.lng
+++ b/interface/web/client/lib/lang/br_client_template.lng
@@ -76,7 +76,7 @@ $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
 $wb['force_suexec_txt'] = 'Forçar SuEXEC';
-$wb['limit_hterror_txt'] = 'Diretório \"Custom error docs\" disponível';
+$wb['limit_hterror_txt'] = 'Diretório \\"Custom error docs\\" disponível';
 $wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
 $wb['limit_ssl_txt'] = 'SSL disponível';
 $wb['web_limits_txt'] = 'Limites web';
diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng
index 524f875f73..d90d3b15a2 100644
--- a/interface/web/client/lib/lang/br_reseller.lng
+++ b/interface/web/client/lib/lang/br_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Data do cadastro';
 $wb['limit_domainmodule_error_notint'] = 'Limite de módulos de domínio deve ser um número.';
 $wb['limit_domainmodule_txt'] = 'Limites de módulos de domínio';
 $wb['client_limits_txt'] = 'Limite de clientes';
-$wb['err_msg_master_tpl_set'] = 'Todas as configurações personalizadas de limites serão ignoradas se um gabarito mestre ou \"personalizado\" for selecionado.';
+$wb['err_msg_master_tpl_set'] = 'Todas as configurações personalizadas de limites serão ignoradas se um gabarito mestre ou \\"personalizado\\" for selecionado.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['email_error_empty'] = 'e-mail está em branco.';
diff --git a/interface/web/client/lib/lang/ca_client.lng b/interface/web/client/lib/lang/ca_client.lng
index 7f460522ff..bfa38a3401 100644
--- a/interface/web/client/lib/lang/ca_client.lng
+++ b/interface/web/client/lib/lang/ca_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Saisissez une adresse courriel valide.';
 $wb['customer_no_error_unique'] = 'Le numéro client doit être unique (ou vide).';
 $wb['paypal_email_error_isemail'] = 'Saisissez un compte Paypal valide.';
 $wb['paypal_email_txt'] = 'Compte Paypal';
-$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \"custom\" est sélectionné.';
+$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \\"custom\\" est sélectionné.';
 $wb['aps_limits_txt'] = 'Nombre max d\'Installeur APS';
 $wb['limit_aps_txt'] = 'Nombre max d\'instances APS';
 $wb['limit_aps_error_notint'] = 'La limite d\'instances APS doit être un nombre';
diff --git a/interface/web/client/lib/lang/ca_reseller.lng b/interface/web/client/lib/lang/ca_reseller.lng
index 7125b01a74..f83d3aaff7 100644
--- a/interface/web/client/lib/lang/ca_reseller.lng
+++ b/interface/web/client/lib/lang/ca_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Ajouté le';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['limit_backup_txt'] = 'Backupfunction available';
 $wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
diff --git a/interface/web/client/lib/lang/cz_client.lng b/interface/web/client/lib/lang/cz_client.lng
index edd366830a..3351ac58e1 100644
--- a/interface/web/client/lib/lang/cz_client.lng
+++ b/interface/web/client/lib/lang/cz_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Zadejte prosím platnou e-mailovou adresu.';
 $wb['customer_no_error_unique'] = 'Zákaznické číslo musí být jedinečné (nebo prázdné).';
 $wb['paypal_email_error_isemail'] = 'Zadejte prosím platnou PayPal e-mail addresu.';
 $wb['paypal_email_txt'] = 'PayPal e-mail';
-$wb['err_msg_master_tpl_set'] = 'Nelze nastavit vlastní limity, pokud chtete nastavit vlatní limity musí být \"hlavní šablona\" nastavena na volbu \"Custom\".';
+$wb['err_msg_master_tpl_set'] = 'Nelze nastavit vlastní limity, pokud chtete nastavit vlatní limity musí být \\"hlavní šablona\\" nastavena na volbu \\"Custom\\".';
 $wb['aps_limits_txt'] = 'APS limity instalátoru';
 $wb['limit_aps_txt'] = 'Max. počet APS instalací';
 $wb['limit_aps_error_notint'] = 'Limit pro APS instalace musí být číslo.';
diff --git a/interface/web/client/lib/lang/cz_reseller.lng b/interface/web/client/lib/lang/cz_reseller.lng
index 011b985311..adfea62ac5 100644
--- a/interface/web/client/lib/lang/cz_reseller.lng
+++ b/interface/web/client/lib/lang/cz_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Datum vytvoření účtu';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Klientské limity';
-$wb['err_msg_master_tpl_set'] = 'Nelze nastavit vlastní limity, pokud chtete nastavit vlatní limity musí být \"hlavní šablona\" nastavena na volbu \"Custom\".';
+$wb['err_msg_master_tpl_set'] = 'Nelze nastavit vlastní limity, pokud chtete nastavit vlatní limity musí být \\"hlavní šablona\\" nastavena na volbu \\"Custom\\".';
 $wb['contact_firstname_txt'] = 'Kontakt křestní jméno';
 $wb['limit_backup_txt'] = 'Funkce zálohování (volitelné)';
 $wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng
index 48460658c0..e37ca395af 100644
--- a/interface/web/client/lib/lang/de_reseller.lng
+++ b/interface/web/client/lib/lang/de_reseller.lng
@@ -160,7 +160,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['invalid_vat_id'] = 'Die USt.-ID ist ungültig.';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
diff --git a/interface/web/client/lib/lang/dk_client.lng b/interface/web/client/lib/lang/dk_client.lng
index f0a8d1a7cd..b944e03175 100644
--- a/interface/web/client/lib/lang/dk_client.lng
+++ b/interface/web/client/lib/lang/dk_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Indtast en gyldig e-mail adresse.';
 $wb['customer_no_error_unique'] = 'Kunde nr. skal være unikke (eller tomt).';
 $wb['paypal_email_error_isemail'] = 'Indtast en gyldig PayPal e-mail adresse.';
 $wb['paypal_email_txt'] = 'PayPal E-mail';
-$wb['err_msg_master_tpl_set'] = 'Alle brugerdefinerede grænse indstillinger ignoreres, hvis nogen anden master skabelonen end \"custom\" er valgt.';
+$wb['err_msg_master_tpl_set'] = 'Alle brugerdefinerede grænse indstillinger ignoreres, hvis nogen anden master skabelonen end \\"custom\\" er valgt.';
 $wb['aps_limits_txt'] = 'APS Installer Begrænsninger';
 $wb['limit_aps_txt'] = 'Max. antal af APS forekomster';
 $wb['limit_aps_error_notint'] = 'APS forekomster grænse skal være et tal.';
diff --git a/interface/web/client/lib/lang/dk_reseller.lng b/interface/web/client/lib/lang/dk_reseller.lng
index 93cd7c4032..b06301ccdd 100644
--- a/interface/web/client/lib/lang/dk_reseller.lng
+++ b/interface/web/client/lib/lang/dk_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Tilføjet d.';
 $wb['limit_domainmodule_error_notint'] = 'Domænemodul grænse skal være et tal.';
 $wb['limit_domainmodule_txt'] = 'Domænemodul Begrænsning';
 $wb['client_limits_txt'] = 'Kunde Begrænsninger';
-$wb['err_msg_master_tpl_set'] = 'Alle brugerdefinerede grænse indstillinger ignoreres, hvis nogen anden master skabelonen end \"custom\" er valgt.';
+$wb['err_msg_master_tpl_set'] = 'Alle brugerdefinerede grænse indstillinger ignoreres, hvis nogen anden master skabelonen end \\"custom\\" er valgt.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_database_user_txt'] = 'Max. Database users';
diff --git a/interface/web/client/lib/lang/el_client.lng b/interface/web/client/lib/lang/el_client.lng
index 8c2d7d738e..b85f653d4e 100644
--- a/interface/web/client/lib/lang/el_client.lng
+++ b/interface/web/client/lib/lang/el_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/el_reseller.lng b/interface/web/client/lib/lang/el_reseller.lng
index 13a38caf9d..b409c169e6 100644
--- a/interface/web/client/lib/lang/el_reseller.lng
+++ b/interface/web/client/lib/lang/el_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng
index 1935b168af..75125024fb 100755
--- a/interface/web/client/lib/lang/es_client.lng
+++ b/interface/web/client/lib/lang/es_client.lng
@@ -42,7 +42,7 @@ $wb['email_error_empty'] = 'El correo electrónico está vacío';
 $wb['email_error_isemail'] = 'Por favor ingrese una dirección de correo válida.';
 $wb['email_limits_txt'] = 'Límites de correo';
 $wb['email_txt'] = 'Correo';
-$wb['err_msg_master_tpl_set'] = 'Todas las opciones personalizadas de límites serán ignoradas si se utiliza otra plantilla maestra diferente a \"personalizada\".';
+$wb['err_msg_master_tpl_set'] = 'Todas las opciones personalizadas de límites serán ignoradas si se utiliza otra plantilla maestra diferente a \\"personalizada\\".';
 $wb['fax_txt'] = 'Fax';
 $wb['firstname_error_empty'] = 'El nombre está vacío.';
 $wb['firstname_txt'] = 'Nombre';
@@ -90,7 +90,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'El límite de alias de dominio de c
 $wb['limit_mailaliasdomain_txt'] = 'Cantidad máx. de alias de dominio';
 $wb['limit_mailbox_error_notint'] = 'El límite de buzones debe ser un número.';
 $wb['limit_mailbox_txt'] = 'Cantidad máx. de buzones';
-$wb['limit_mailcatchall_error_notint'] = 'El límite de correos \"recoge-todo\" debe ser un número.';
+$wb['limit_mailcatchall_error_notint'] = 'El límite de correos \\"recoge-todo\\" debe ser un número.';
 $wb['limit_mailcatchall_txt'] = 'Cantidad máx. de receptores de correos huérfanos';
 $wb['limit_maildomain_error_notint'] = 'El límite de dominio de correo debe ser un número.';
 $wb['limit_maildomain_txt'] = 'Cantidad máx. de dominios para correo';
diff --git a/interface/web/client/lib/lang/es_client_template.lng b/interface/web/client/lib/lang/es_client_template.lng
index 6a51459600..4fd6f650f3 100755
--- a/interface/web/client/lib/lang/es_client_template.lng
+++ b/interface/web/client/lib/lang/es_client_template.lng
@@ -46,8 +46,8 @@ $wb['limit_mailaliasdomain_error_notint'] = 'El límite de alias de dominio de c
 $wb['limit_mailaliasdomain_txt'] = 'Cantidad máx. de alias de dominio';
 $wb['limit_mailbox_error_notint'] = 'El límite de buzones debe ser un número.';
 $wb['limit_mailbox_txt'] = 'Cantidad máx. de buzones';
-$wb['limit_mailcatchall_error_notint'] = 'El límite de receptores de correo \"recoge-todo\" debe ser un número.';
-$wb['limit_mailcatchall_txt'] = 'Cantidad máx. de receptores de correo  \"recoge-todo\" ';
+$wb['limit_mailcatchall_error_notint'] = 'El límite de receptores de correo \\"recoge-todo\\" debe ser un número.';
+$wb['limit_mailcatchall_txt'] = 'Cantidad máx. de receptores de correo  \\"recoge-todo\\" ';
 $wb['limit_maildomain_error_notint'] = 'El límite de dominio de correo debe ser un número.';
 $wb['limit_maildomain_txt'] = 'Cantidad máx. de dominios para correo';
 $wb['limit_mailfetchmail_error_notint'] = 'El límite de recuperadores de correo debe ser un número.';
diff --git a/interface/web/client/lib/lang/es_reseller.lng b/interface/web/client/lib/lang/es_reseller.lng
index a1de1fb7b9..5a94b9e803 100755
--- a/interface/web/client/lib/lang/es_reseller.lng
+++ b/interface/web/client/lib/lang/es_reseller.lng
@@ -46,7 +46,7 @@ $wb['email_error_empty'] = 'El correo electrónico está vacío';
 $wb['email_error_isemail'] = 'Por favor ingrese una dirección de correo válida.';
 $wb['email_limits_txt'] = 'Límites de correo';
 $wb['email_txt'] = 'Correo';
-$wb['err_msg_master_tpl_set'] = 'Todas las opciones personalizadas de límites serán ignoradas si se utiliza otra plantilla maestra diferente a \"personalizada\".';
+$wb['err_msg_master_tpl_set'] = 'Todas las opciones personalizadas de límites serán ignoradas si se utiliza otra plantilla maestra diferente a \\"personalizada\\".';
 $wb['fax_txt'] = 'Fax';
 $wb['firstname_error_empty'] = 'El nombre está vacío.';
 $wb['firstname_txt'] = 'Nombre';
@@ -97,7 +97,7 @@ $wb['limit_mailalias_txt'] = 'Cantidad máx. de alias de correo';
 $wb['limit_mailaliasdomain_txt'] = 'Cantidad máx. de alias de dominio';
 $wb['limit_mailbox_error_notint'] = 'El límite de buzones debe ser un número.';
 $wb['limit_mailbox_txt'] = 'Cantidad máx. de buzones';
-$wb['limit_mailcatchall_error_notint'] = 'El límite de correos \"recoge-todo\" debe ser un número.';
+$wb['limit_mailcatchall_error_notint'] = 'El límite de correos \\"recoge-todo\\" debe ser un número.';
 $wb['limit_mailcatchall_txt'] = 'Cantidad máx. de receptores de correos huérfanos';
 $wb['limit_maildomain_error_notint'] = 'El límite de dominio de correo debe ser un número.';
 $wb['limit_maildomain_txt'] = 'Cantidad máx. de dominios para correo';
diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng
index a90a3d7c2d..6df30e7753 100755
--- a/interface/web/client/lib/lang/fi_client.lng
+++ b/interface/web/client/lib/lang/fi_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/fi_reseller.lng b/interface/web/client/lib/lang/fi_reseller.lng
index 6aecc836e3..58af2fdf0d 100644
--- a/interface/web/client/lib/lang/fi_reseller.lng
+++ b/interface/web/client/lib/lang/fi_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng
index f13f0d4676..61612ccbe0 100644
--- a/interface/web/client/lib/lang/fr_client.lng
+++ b/interface/web/client/lib/lang/fr_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Saisissez une adresse e-mail valide.';
 $wb['customer_no_error_unique'] = 'Le numéro client doit être unique (ou vide).';
 $wb['paypal_email_error_isemail'] = 'Saisissez un compte Paypal valide.';
 $wb['paypal_email_txt'] = 'Compte Paypal';
-$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \"custom\" est sélectionné.';
+$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \\"custom\\" est sélectionné.';
 $wb['aps_limits_txt'] = 'Nombre max d’Installeur APS';
 $wb['limit_aps_txt'] = 'Nombre max d’instances APS';
 $wb['limit_aps_error_notint'] = 'La limite d’instances APS doit être un nombre';
diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng
index 591e12ac35..f30fcd48c6 100644
--- a/interface/web/client/lib/lang/fr_reseller.lng
+++ b/interface/web/client/lib/lang/fr_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['limit_backup_txt'] = 'Backupfunction available';
 $wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
diff --git a/interface/web/client/lib/lang/hr_client.lng b/interface/web/client/lib/lang/hr_client.lng
index 351ad4b8b4..ec5b73d940 100644
--- a/interface/web/client/lib/lang/hr_client.lng
+++ b/interface/web/client/lib/lang/hr_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Unesi ispravnu email adresu.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/hr_reseller.lng b/interface/web/client/lib/lang/hr_reseller.lng
index 37e1e38356..9188b6861b 100644
--- a/interface/web/client/lib/lang/hr_reseller.lng
+++ b/interface/web/client/lib/lang/hr_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Datum dodavanja';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domain module Limit';
 $wb['client_limits_txt'] = 'Limiti klijenata';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/hu_client.lng b/interface/web/client/lib/lang/hu_client.lng
index 8b9cc16081..10993601c0 100644
--- a/interface/web/client/lib/lang/hu_client.lng
+++ b/interface/web/client/lib/lang/hu_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/hu_reseller.lng b/interface/web/client/lib/lang/hu_reseller.lng
index 2b0c15e8f0..dd9290885a 100644
--- a/interface/web/client/lib/lang/hu_reseller.lng
+++ b/interface/web/client/lib/lang/hu_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/id_client.lng b/interface/web/client/lib/lang/id_client.lng
index d25230ea3d..c84e6251f4 100644
--- a/interface/web/client/lib/lang/id_client.lng
+++ b/interface/web/client/lib/lang/id_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/id_reseller.lng b/interface/web/client/lib/lang/id_reseller.lng
index af91d1bb4e..821a35e3cd 100644
--- a/interface/web/client/lib/lang/id_reseller.lng
+++ b/interface/web/client/lib/lang/id_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng
index a361d0a887..0f75d849d6 100644
--- a/interface/web/client/lib/lang/it_client.lng
+++ b/interface/web/client/lib/lang/it_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/it_reseller.lng b/interface/web/client/lib/lang/it_reseller.lng
index 8fc49568af..2cef293265 100644
--- a/interface/web/client/lib/lang/it_reseller.lng
+++ b/interface/web/client/lib/lang/it_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['limit_backup_txt'] = 'Backupfunction available';
 $wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
diff --git a/interface/web/client/lib/lang/ja_client.lng b/interface/web/client/lib/lang/ja_client.lng
index 2526c02791..33aa6ab4e9 100644
--- a/interface/web/client/lib/lang/ja_client.lng
+++ b/interface/web/client/lib/lang/ja_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/ja_reseller.lng b/interface/web/client/lib/lang/ja_reseller.lng
index 66200eccbe..7edf836f39 100644
--- a/interface/web/client/lib/lang/ja_reseller.lng
+++ b/interface/web/client/lib/lang/ja_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng
index 8e0092f255..188a37f4fd 100644
--- a/interface/web/client/lib/lang/nl_client.lng
+++ b/interface/web/client/lib/lang/nl_client.lng
@@ -142,7 +142,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng
index 9cdb1856fe..9953880bec 100644
--- a/interface/web/client/lib/lang/nl_reseller.lng
+++ b/interface/web/client/lib/lang/nl_reseller.lng
@@ -160,7 +160,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/pl_reseller.lng b/interface/web/client/lib/lang/pl_reseller.lng
index 69b30fe2a3..9b2cf58f75 100644
--- a/interface/web/client/lib/lang/pl_reseller.lng
+++ b/interface/web/client/lib/lang/pl_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/pt_client.lng b/interface/web/client/lib/lang/pt_client.lng
index b05e14dfe7..ae3e45b24d 100644
--- a/interface/web/client/lib/lang/pt_client.lng
+++ b/interface/web/client/lib/lang/pt_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/pt_reseller.lng b/interface/web/client/lib/lang/pt_reseller.lng
index ae3eddd8b0..e021cd2511 100644
--- a/interface/web/client/lib/lang/pt_reseller.lng
+++ b/interface/web/client/lib/lang/pt_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/ro_client.lng b/interface/web/client/lib/lang/ro_client.lng
index bc0ad4316e..034c4d0e44 100644
--- a/interface/web/client/lib/lang/ro_client.lng
+++ b/interface/web/client/lib/lang/ro_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/ro_reseller.lng b/interface/web/client/lib/lang/ro_reseller.lng
index 553abe0aee..68e8a950f3 100644
--- a/interface/web/client/lib/lang/ro_reseller.lng
+++ b/interface/web/client/lib/lang/ro_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng
index a37d4673a1..befd6b15bf 100644
--- a/interface/web/client/lib/lang/ru_client.lng
+++ b/interface/web/client/lib/lang/ru_client.lng
@@ -108,7 +108,7 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Принудительный шабл
 $wb['limit_openvz_vm_error_notint'] = 'Лимит виртуальных серверов должен быть числом.';
 $wb['web_php_options_notempty'] = 'Нет выбранных параметров PHP. Выберите по крайней мере один параметр PHP.';
 $wb['ssh_chroot_notempty'] = 'Не выбран параметр SSH-Chroot. Выберите по крайней мере один параметр SSH-Chroot.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['add_additional_template_txt'] = 'Добавить дополнительный шаблон';
 $wb['delete_additional_template_txt'] = 'Удалить дополнительный шаблон';
 $wb['limit_cgi_txt'] = 'CGI доступен';
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Некорректный почтовый адре
 $wb['customer_no_error_unique'] = 'Счётчик номера Клиента должен быть уникален (или отсутствует).';
 $wb['paypal_email_error_isemail'] = 'Пожалуйста, введите действующий адрес электронной почты PayPal.';
 $wb['paypal_email_txt'] = 'Адрес электронной почты PayPal';
-$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \"Custom\"!';
+$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \\"Custom\\"!';
 $wb['aps_limits_txt'] = 'Лимиты Установщика APS';
 $wb['limit_aps_txt'] = 'Макс. количество экземпляров APS';
 $wb['limit_aps_error_notint'] = 'Лимит экземпляров APS должен быть числом.';
diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng
index 4a177cccc8..998a886990 100644
--- a/interface/web/client/lib/lang/ru_reseller.lng
+++ b/interface/web/client/lib/lang/ru_reseller.lng
@@ -108,7 +108,7 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Принудительный шабл
 $wb['limit_openvz_vm_error_notint'] = 'Лимит виртуальных серверов должен быть числом.';
 $wb['web_php_options_notempty'] = 'Нет выбранных параметров PHP. Выберите по крайней мере один параметр PHP.';
 $wb['ssh_chroot_notempty'] = 'Не выбран параметр SSH-Chroot. Выберите по крайней мере один параметр SSH-Chroot.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['add_additional_template_txt'] = 'Добавить дополнительный шаблон';
 $wb['delete_additional_template_txt'] = 'Удалить дополнительный шаблон';
 $wb['limit_cgi_txt'] = 'CGI доступен';
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Дата добавления';
 $wb['limit_domainmodule_error_notint'] = 'Лимит модулей домена должен быть числом.';
 $wb['limit_domainmodule_txt'] = 'Лимит модулей домена';
 $wb['client_limits_txt'] = 'Лимиты Клиента';
-$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \"Custom\"!';
+$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \\"Custom\\"!';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
 $wb['email_error_empty'] = 'Адрес эл. почты пустой';
diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng
index 5232e95f55..2884302c18 100644
--- a/interface/web/client/lib/lang/se_client.lng
+++ b/interface/web/client/lib/lang/se_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Vänligen ange en giltig epostadress';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal epostadress';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng
index 553abe0aee..68e8a950f3 100644
--- a/interface/web/client/lib/lang/se_reseller.lng
+++ b/interface/web/client/lib/lang/se_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/sk_client.lng b/interface/web/client/lib/lang/sk_client.lng
index 6fff6bf3f0..3edec417cf 100644
--- a/interface/web/client/lib/lang/sk_client.lng
+++ b/interface/web/client/lib/lang/sk_client.lng
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
diff --git a/interface/web/client/lib/lang/sk_reseller.lng b/interface/web/client/lib/lang/sk_reseller.lng
index 34643c55b8..4ae3ef5b97 100644
--- a/interface/web/client/lib/lang/sk_reseller.lng
+++ b/interface/web/client/lib/lang/sk_reseller.lng
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['email_error_empty'] = 'Email is empty';
diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng
index 359095534a..765d9f1980 100644
--- a/interface/web/client/lib/lang/tr_client.lng
+++ b/interface/web/client/lib/lang/tr_client.lng
@@ -139,7 +139,7 @@ $wb['email_error_isemail'] = 'Lütfen geçerli bir e-posta adresi yazın.';
 $wb['customer_no_error_unique'] = 'Müşteri numarası eşsiz (ya da boş) olmalıdır.';
 $wb['paypal_email_error_isemail'] = 'Lütfen geçerli bir PayPal e-posta adresi yazın.';
 $wb['paypal_email_txt'] = 'PayPal E-posta Adresi';
-$wb['err_msg_master_tpl_set'] = '\"Özel\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
+$wb['err_msg_master_tpl_set'] = '\\"Özel\\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
 $wb['aps_limits_txt'] = 'APS Yükleyici Sınırları';
 $wb['limit_aps_txt'] = 'En Fazla APS Kopyası Sayısı';
 $wb['limit_aps_error_notint'] = 'APS kopya sayısı sınırı bir sayı olmalıdır.';
diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng
index 5e2a37e268..4906a894c0 100644
--- a/interface/web/client/lib/lang/tr_reseller.lng
+++ b/interface/web/client/lib/lang/tr_reseller.lng
@@ -156,7 +156,7 @@ $wb['added_date_txt'] = 'EklendiÄŸi Tarih';
 $wb['limit_domainmodule_error_notint'] = 'Alan adı modülü sınırı bir sayı olmalıdır.';
 $wb['limit_domainmodule_txt'] = 'Alan Adı Modülü Sınırı';
 $wb['client_limits_txt'] = 'Müşteri Sınırları';
-$wb['err_msg_master_tpl_set'] = '\"Özel\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
+$wb['err_msg_master_tpl_set'] = '\\"Özel\\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
 $wb['contact_firstname_txt'] = 'Contact firstname';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_database_user_txt'] = 'Max. Database users';
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
index 0f819f2a9d..da6cd6b513 100755
--- a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
@@ -11,7 +11,7 @@ $wb['limit_ftp_user_txt'] = 'Cantidad de usuarios FTP';
 $wb['limit_mailalias_txt'] = 'Cantidad de alias de correos';
 $wb['limit_mailaliasdomain_txt'] = 'Cantidad de alias de dominios';
 $wb['limit_mailbox_txt'] = 'Cantidad de buzones';
-$wb['limit_mailcatchall_txt'] = 'Cantidad de cuentas de correo \"recoge-todo\"';
+$wb['limit_mailcatchall_txt'] = 'Cantidad de cuentas de correo \\"recoge-todo\\"';
 $wb['limit_maildomain_txt'] = 'Cantidad de dominios para correo';
 $wb['limit_mailfilter_txt'] = 'Cantidad de filtros de correo';
 $wb['limit_mailforward_txt'] = 'Cantidad de reenviadores de correos';
diff --git a/interface/web/dns/lib/lang/br_dns_dmarc.lng b/interface/web/dns/lib/lang/br_dns_dmarc.lng
index 5b7201075f..8bb35318f8 100644
--- a/interface/web/dns/lib/lang/br_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/br_dns_dmarc.lng
@@ -2,7 +2,7 @@
 $wb['data_txt'] = 'Registro DMARC';
 $wb['domain_txt'] = 'Domínio';
 $wb['dmarc_policy_txt'] = 'Política de recepção de e-mails';
-$wb['dmarc_policy_note_txt'] = 'Como os \"ISPs\" devem tratar as mensagens SPF ou DKIM com falha (DMARC).';
+$wb['dmarc_policy_note_txt'] = 'Como os \\"ISPs\\" devem tratar as mensagens SPF ou DKIM com falha (DMARC).';
 $wb['dmarc_policy_none_txt'] = 'não fazer nada';
 $wb['dmarc_policy_quarantine_txt'] = 'quarentena';
 $wb['dmarc_policy_reject_txt'] = 'rejeitar';
@@ -11,16 +11,16 @@ $wb['dmarc_rua_note_txt'] = 'Endereços de e-mail para receber relatórios do si
 $wb['dmarc_ruf_txt'] = 'Relatório forense de dados por endereço';
 $wb['dmarc_ruf_note_txt'] = 'Endereços de e-mail para receber amostras de mensagens com falha e controles DMARC do domínio (separados por espaço em branco)';
 $wb['dmarc_fo_txt'] = 'Opções de relatório forense';
-$wb['dmarc_fo0_txt'] = 'Gerar relatórios se todos os mecanismos de autenticação subjacentes deixarem de produzir um resultado DMARC \"pass\".';
+$wb['dmarc_fo0_txt'] = 'Gerar relatórios se todos os mecanismos de autenticação subjacentes deixarem de produzir um resultado DMARC \\"pass\\".';
 $wb['dmarc_fo1_txt'] = 'Gerar relatório se algum mecanismo falhar.';
 $wb['dmarc_fod_txt'] = 'Gerar relatório se assinatura DKIM falhar na verificação.';
 $wb['dmarc_fos_txt'] = 'Gerar relatório se o SPF falhar.';
 $wb['dmarc_adkim_txt'] = 'Parametrização do identificador DKIM';
-$wb['dmarc_adkim_note_txt'] = 'Modo \"strict\" exige combinação exata entre o DKIM do domínio e e-mails';
+$wb['dmarc_adkim_note_txt'] = 'Modo \\"strict\\" exige combinação exata entre o DKIM do domínio e e-mails';
 $wb['dmarc_adkim_r_txt'] = 'relaxed';
 $wb['dmarc_adkim_s_txt'] = 'strict';
 $wb['dmarc_aspf_txt'] = 'Parametrização do identificador SPF';
-$wb['dmarc_aspf_note_txt'] = 'Modo \"strict\" exige combinação exata entre o SPF do domínio e e-mails';
+$wb['dmarc_aspf_note_txt'] = 'Modo \\"strict\\" exige combinação exata entre o SPF do domínio e e-mails';
 $wb['dmarc_aspf_r_txt'] = 'relaxed';
 $wb['dmarc_aspf_s_txt'] = 'strict';
 $wb['dmarc_rf_txt'] = 'Formatação do relatório';
@@ -37,7 +37,7 @@ $wb['dmarc_sp_quarantine_txt'] = 'quarentena';
 $wb['dmarc_sp_reject_txt'] = 'rejeitar';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['dmarc_policy_error_txt'] = 'Somente a política \"nenhum\" é permitida para e-mails sem assinatura DKIM.';
+$wb['dmarc_policy_error_txt'] = 'Somente a política \\"nenhum\\" é permitida para e-mails sem assinatura DKIM.';
 $wb['dmarc_no_dkim_txt'] = 'Nenhum registro DKIM ativo.';
 $wb['dmarc_no_spf_txt'] = 'Nenhum registro SPF ativo.';
 $wb['dmarc_more_spf_txt'] = 'Mais de um registro SPF ativo.';
diff --git a/interface/web/dns/lib/lang/br_dns_tlsa.lng b/interface/web/dns/lib/lang/br_dns_tlsa.lng
index c78c6fd190..5e1bf2256e 100644
--- a/interface/web/dns/lib/lang/br_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/br_dns_tlsa.lng
@@ -9,8 +9,8 @@ $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
 $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
 $wb['name_error_empty'] = 'Descritor de serviço está em branco.';
-$wb['name_error_regex'] = 'Descritor de serviço é inválido. Formato correto: \"_&lt;port&gt;._(tcp|udp).&lt;hostname&gt;\".';
+$wb['name_error_regex'] = 'Descritor de serviço é inválido. Formato correto: \\"_&lt;port&gt;._(tcp|udp).&lt;hostname&gt;\\".';
 $wb['data_error_empty'] = 'Dados TLSA está em branco.';
-$wb['data_error_regex'] = 'Dados TLSA são inválidos. Formato correto: \"n n n HASH\".';
+$wb['data_error_regex'] = 'Dados TLSA são inválidos. Formato correto: \\"n n n HASH\\".';
 $wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_hinfo.lng b/interface/web/dns/lib/lang/ru_dns_hinfo.lng
index 830576fdf6..363ed0eef5 100644
--- a/interface/web/dns/lib/lang/ru_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/ru_dns_hinfo.lng
@@ -11,6 +11,6 @@ $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту за
 $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'Информация об узле отсутсвует';
-$wb['data_error_regex'] = 'Поле \"Информация о хосте\" имеет неправильный формат';
+$wb['data_error_regex'] = 'Поле \\"Информация о хосте\\" имеет неправильный формат';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/help/lib/lang/br_support_message.lng b/interface/web/help/lib/lang/br_support_message.lng
index 83097915bf..19ae309a1f 100644
--- a/interface/web/help/lib/lang/br_support_message.lng
+++ b/interface/web/help/lib/lang/br_support_message.lng
@@ -12,5 +12,5 @@ $wb['answer_to_support_request_txt'] = 'Você tem uma nova resposta para requisi
 $wb['answer_to_support_request_sent_txt'] = 'Sua resposta para requisição de suporte foi enviada. Por favor, não responda esse e-mail.';
 $wb['support_request_sent_txt'] = 'Sua requisição de suporte foi enviada. Por favor não responda este e-mail.';
 $wb['recipient_or_sender_email_address_not_valid_txt'] = 'A mensagem não foi enviada porque o e-mail do destinatário e/ou remetente não é válido.';
-$wb['subject_is_empty'] = 'Não é permitido o campo \"Assunto\" em branco.';
+$wb['subject_is_empty'] = 'Não é permitido o campo \\"Assunto\\" em branco.';
 ?>
diff --git a/interface/web/login/lib/lang/ar_login_as.lng b/interface/web/login/lib/lang/ar_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/ar_login_as.lng
+++ b/interface/web/login/lib/lang/ar_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/bg_login_as.lng b/interface/web/login/lib/lang/bg_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/bg_login_as.lng
+++ b/interface/web/login/lib/lang/bg_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/br_login_as.lng b/interface/web/login/lib/lang/br_login_as.lng
index 4c02c963c2..5d9fb269b9 100644
--- a/interface/web/login/lib/lang/br_login_as.lng
+++ b/interface/web/login/lib/lang/br_login_as.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['login_1_txt'] = 'Você deseja acessar como usuário';
-$wb['login_2_txt'] = 'Para retornar ao administrador, você pode \"voltar\" selecionando sair.';
+$wb['login_2_txt'] = 'Para retornar ao administrador, você pode \\"voltar\\" selecionando sair.';
 $wb['btn_yes_txt'] = 'Sim, acessar como cliente';
 $wb['btn_back_txt'] = 'Não, voltar a lista';
 $wb['udp_port_help_txt'] = 'Separado por vírgula';
diff --git a/interface/web/login/lib/lang/ca_login_as.lng b/interface/web/login/lib/lang/ca_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/ca_login_as.lng
+++ b/interface/web/login/lib/lang/ca_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/dk_login_as.lng b/interface/web/login/lib/lang/dk_login_as.lng
index a75ea7262a..bebcf165a7 100644
--- a/interface/web/login/lib/lang/dk_login_as.lng
+++ b/interface/web/login/lib/lang/dk_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Vil du logge ind som bruger';
-$wb['login_2_txt'] = 'Hvis du gør det, kan du \"Gå tilbage\" ved at klikke på logout.';
+$wb['login_2_txt'] = 'Hvis du gør det, kan du \\"Gå tilbage\\" ved at klikke på logout.';
 $wb['btn_yes_txt'] = 'Ja, log ind som Kunde';
 $wb['btn_back_txt'] = 'Nej, tilbage til listen';
 $wb['udp_port_help_txt'] = 'Adskilt af komma';
 $wb['active_txt'] = 'Aktiv';
 $wb['firewall_error_unique'] = 'Der er allerede en firewall post for denne server.';
-$wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i TCP port definition. Tilladt tegn er tal, \":\" og \",\".';
-$wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i UDP port definition. Tilladt tegn er tal, \":\" og \",\".';
+$wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i TCP port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
+$wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i UDP port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/el_login_as.lng b/interface/web/login/lib/lang/el_login_as.lng
index a6c2988017..435d3e9a69 100644
--- a/interface/web/login/lib/lang/el_login_as.lng
+++ b/interface/web/login/lib/lang/el_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Θέλετε να εισέλθετε ως χρήστης;';
-$wb['login_2_txt'] = 'Αν το κάνετε, μπορείτε να  \"επιστρέψετε\" κάνοντας αποσύνδεση.';
+$wb['login_2_txt'] = 'Αν το κάνετε, μπορείτε να  \\"επιστρέψετε\\" κάνοντας αποσύνδεση.';
 $wb['btn_yes_txt'] = 'Ναι, είσοδος ως Πελάτης';
 $wb['btn_back_txt'] = 'Όχι, επιστροφή στην λίστα';
 $wb['udp_port_help_txt'] = 'διαχωρισμός με κόμα';
 $wb['active_txt'] = 'Εν Ενεργεία';
 $wb['firewall_error_unique'] = 'Υπάρχει ήδη μια εγγραφή Firewall για αυτόν τον server.';
-$wb['tcp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας tcp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \":\" και οι \",\".';
-$wb['udp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας udp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \":\" και οι \",\".';
+$wb['tcp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας tcp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \\":\\" και οι \\",\\".';
+$wb['udp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας udp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \\":\\" και οι \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/es_login_as.lng b/interface/web/login/lib/lang/es_login_as.lng
index 10a8554bcb..b7f3e21f98 100755
--- a/interface/web/login/lib/lang/es_login_as.lng
+++ b/interface/web/login/lib/lang/es_login_as.lng
@@ -4,9 +4,9 @@ $wb['btn_back_txt'] = 'No, volver a la lista';
 $wb['btn_yes_txt'] = 'Sí, iniciar sesión como cliente';
 $wb['firewall_error_unique'] = 'Ya existe un registro de cortafuegos para este servidor.';
 $wb['login_1_txt'] = 'Desea iniciar sesión como usuario';
-$wb['login_2_txt'] = 'Si lo hace, puede \"volver\" haciendo clic en salir.';
-$wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \":\" y \",\".';
+$wb['login_2_txt'] = 'Si lo hace, puede \\"volver\\" haciendo clic en salir.';
+$wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
 $wb['udp_port_help_txt'] = 'Separado por comas';
-$wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \":\" y \",\".';
+$wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/fi_login_as.lng b/interface/web/login/lib/lang/fi_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/fi_login_as.lng
+++ b/interface/web/login/lib/lang/fi_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/hr_login_as.lng b/interface/web/login/lib/lang/hr_login_as.lng
index a94f659705..bcd13040d3 100644
--- a/interface/web/login/lib/lang/hr_login_as.lng
+++ b/interface/web/login/lib/lang/hr_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Odvojeno zarezom';
 $wb['active_txt'] = 'Aktivno';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/hu_login_as.lng b/interface/web/login/lib/lang/hu_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/hu_login_as.lng
+++ b/interface/web/login/lib/lang/hu_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/id_login_as.lng b/interface/web/login/lib/lang/id_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/id_login_as.lng
+++ b/interface/web/login/lib/lang/id_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/it_login_as.lng b/interface/web/login/lib/lang/it_login_as.lng
index fab2f1b088..3fa23da274 100644
--- a/interface/web/login/lib/lang/it_login_as.lng
+++ b/interface/web/login/lib/lang/it_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Desideri accedere come utente';
-$wb['login_2_txt'] = 'Se vuoi procedere puoi tornare indietro \"go back\" eseguendo il logout.';
+$wb['login_2_txt'] = 'Se vuoi procedere puoi tornare indietro \\"go back\\" eseguendo il logout.';
 $wb['btn_yes_txt'] = 'Si, login accedi come cliente';
 $wb['btn_back_txt'] = 'No, torna alla lista';
 $wb['udp_port_help_txt'] = 'Separato da virgola';
 $wb['active_txt'] = 'Attivo';
 $wb['firewall_error_unique'] = 'Esiste già un record firewall per questo server.';
-$wb['tcp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta tcp. Sono consentiti caratteri numerici, \":\" e \",\".';
-$wb['udp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta udp. ono consentiti caratteri numerici, \":\" e \",\".';
+$wb['tcp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta tcp. Sono consentiti caratteri numerici, \\":\\" e \\",\\".';
+$wb['udp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta udp. ono consentiti caratteri numerici, \\":\\" e \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/ja_login_as.lng b/interface/web/login/lib/lang/ja_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/ja_login_as.lng
+++ b/interface/web/login/lib/lang/ja_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/nl_login_as.lng b/interface/web/login/lib/lang/nl_login_as.lng
index 3061782706..d4d2715e7a 100644
--- a/interface/web/login/lib/lang/nl_login_as.lng
+++ b/interface/web/login/lib/lang/nl_login_as.lng
@@ -6,7 +6,7 @@ $wb['btn_back_txt'] = 'Nee, terug naar het overzicht';
 $wb['udp_port_help_txt'] = 'Gescheiden door komma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/pt_login_as.lng b/interface/web/login/lib/lang/pt_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/pt_login_as.lng
+++ b/interface/web/login/lib/lang/pt_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/ro_login_as.lng b/interface/web/login/lib/lang/ro_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/ro_login_as.lng
+++ b/interface/web/login/lib/lang/ro_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/ru_login_as.lng b/interface/web/login/lib/lang/ru_login_as.lng
index 46a3eab288..63031d4d09 100644
--- a/interface/web/login/lib/lang/ru_login_as.lng
+++ b/interface/web/login/lib/lang/ru_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Вы хотите войти как пользователь';
-$wb['login_2_txt'] = 'Если вы это сделаете, вы можете \"вернуться\", нажав на \"выход\".';
+$wb['login_2_txt'] = 'Если вы это сделаете, вы можете \\"вернуться\\", нажав на \\"выход\\".';
 $wb['btn_yes_txt'] = 'Да, войти как Клиент';
 $wb['btn_back_txt'] = 'Нет, назад к списку';
 $wb['udp_port_help_txt'] = 'Перечислить через запятую';
 $wb['active_txt'] = 'Активно';
 $wb['firewall_error_unique'] = 'Уже есть такая запись бредмауэра для этого сервера.';
-$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \":\" и \",\"';
-$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \":\" и \",\"';
+$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
+$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
 $wb['login_as_or_logout_txt'] = 'Вы хотите заново войти как {UTYPE} или выйти?';
 ?>
diff --git a/interface/web/login/lib/lang/se_login_as.lng b/interface/web/login/lib/lang/se_login_as.lng
index 203832c7b7..17a82080dc 100644
--- a/interface/web/login/lib/lang/se_login_as.lng
+++ b/interface/web/login/lib/lang/se_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Vill du loggga in som användare';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Ja, logga in som kund';
 $wb['btn_back_txt'] = 'Nej, tillbaka till listan';
 $wb['udp_port_help_txt'] = 'Avdelade med kommatecken';
 $wb['active_txt'] = 'Aktiv';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/sk_login_as.lng b/interface/web/login/lib/lang/sk_login_as.lng
index 68cb3318e5..cf75b54b47 100644
--- a/interface/web/login/lib/lang/sk_login_as.lng
+++ b/interface/web/login/lib/lang/sk_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Do you want to login as user';
-$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Yes, login as Client';
 $wb['btn_back_txt'] = 'No, back to list';
 $wb['udp_port_help_txt'] = 'Separated by comma';
 $wb['active_txt'] = 'Active';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/login/lib/lang/tr_login_as.lng b/interface/web/login/lib/lang/tr_login_as.lng
index a000d44342..f7f12feeff 100644
--- a/interface/web/login/lib/lang/tr_login_as.lng
+++ b/interface/web/login/lib/lang/tr_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Bu kullanıcı olarak oturum açmak ister misiniz';
-$wb['login_2_txt'] = '\"Geri dönmek\" için oturumu kapat üzerine tıklayın.';
+$wb['login_2_txt'] = '\\"Geri dönmek\\" için oturumu kapat üzerine tıklayın.';
 $wb['btn_yes_txt'] = 'Evet, Müşteri olarak oturum aç';
 $wb['btn_back_txt'] = 'Hayır, listeye geri dön';
 $wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['active_txt'] = 'Etkin';
 $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
-$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \":\" ve \",\" karakterleri kullanılabilir.';
-$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \":\" ve \",\" karakterleri kullanılabilir.';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
 ?>
diff --git a/interface/web/mail/lib/lang/ar.lng b/interface/web/mail/lib/lang/ar.lng
index e12b05e278..3d15a518a1 100644
--- a/interface/web/mail/lib/lang/ar.lng
+++ b/interface/web/mail/lib/lang/ar.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Global Filters';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
index af8e42f24b..d1b54151d2 100644
--- a/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Invalid domain name od domain contains invalid char
 $wb['limit_mailcatchall_txt'] = 'The max. number of email catchall accounts for your account is reached.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ar_mail_get.lng b/interface/web/mail/lib/lang/ar_mail_get.lng
index 5d6a72fbfb..8ae7712151 100644
--- a/interface/web/mail/lib/lang/ar_mail_get.lng
+++ b/interface/web/mail/lib/lang/ar_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Password is empty.';
 $wb['destination_error_isemail'] = 'No destination selected.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/ar_spamfilter_policy.lng b/interface/web/mail/lib/lang/ar_spamfilter_policy.lng
index e876330a68..683b378c21 100644
--- a/interface/web/mail/lib/lang/ar_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ar_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/bg.lng b/interface/web/mail/lib/lang/bg.lng
index a1299f4472..c117c863a2 100644
--- a/interface/web/mail/lib/lang/bg.lng
+++ b/interface/web/mail/lib/lang/bg.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Глобални филтри';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng b/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng
index 5db26b11a1..06f1f01e11 100644
--- a/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Грешен домейн или непозволе
 $wb['limit_mailcatchall_txt'] = 'Максималният брой записи за catchall в твоят акоунт е достигнат.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_get.lng b/interface/web/mail/lib/lang/bg_mail_get.lng
index 305256d5c6..e1b1935d32 100644
--- a/interface/web/mail/lib/lang/bg_mail_get.lng
+++ b/interface/web/mail/lib/lang/bg_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Password is empty.';
 $wb['destination_error_isemail'] = 'No destination selected.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_spamfilter_policy.lng b/interface/web/mail/lib/lang/bg_spamfilter_policy.lng
index e876330a68..683b378c21 100644
--- a/interface/web/mail/lib/lang/bg_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/bg_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/br.lng b/interface/web/mail/lib/lang/br.lng
index 3ae45b5db0..972e134bc8 100644
--- a/interface/web/mail/lib/lang/br.lng
+++ b/interface/web/mail/lib/lang/br.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Apelidos de domínio';
 $wb['Relay Recipients'] = 'Destinatários de retransmissão';
 $wb['Mailbox quota'] = 'Cota para contas de e-mails';
 $wb['Server'] = 'Servidor';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_domain_catchall.lng b/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
index df5fd39b9a..3c4c6a2628 100644
--- a/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'O domínio contém caracteres inválidos';
 $wb['limit_mailcatchall_txt'] = 'O limite de contas cata tudo para este domínio foi alcançado.';
 $wb['source_txt'] = 'Origem';
 $wb['destination_error_isemail'] = 'Destino não é um e-mail válido.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index a786566277..f91d40f625 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -35,7 +35,7 @@ $wb['name_txt'] = 'Nome real';
 $wb['name_optional_txt'] = '(Opcional)';
 $wb['autoresponder_active'] = 'Ativar autoresposta';
 $wb['cc_txt'] = 'Enviar cópia para';
-$wb['cc_error_isemail'] = 'O campo \"Enviar cópia para\" deve conter um endereço de e-mail válido';
+$wb['cc_error_isemail'] = 'O campo \\"Enviar cópia para\\" deve conter um endereço de e-mail válido';
 $wb['domain_txt'] = 'Domínio';
 $wb['now_txt'] = 'Agora';
 $wb['login_error_unique'] = 'O acesso já está em uso.';
@@ -48,7 +48,7 @@ $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['email_error_isascii'] = 'Por favor não use caracteres \"unicode\" para a senha. Esta ação poderá causar problemas com seu cliente de e-mail (mua).';
+$wb['email_error_isascii'] = 'Por favor não use caracteres \\"unicode\\" para a senha. Esta ação poderá causar problemas com seu cliente de e-mail (mua).';
 $wb['cc_note_txt'] = '(Múltiplos e-mails separados por vírgulas)';
 $wb['disablesmtp_txt'] = 'Desabilitar smtp (envio)';
 $wb['autoresponder_start_date_is_required'] = 'Data de início deve ser configurada quando \'autoresposta\' é habilitada.';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_policy.lng b/interface/web/mail/lib/lang/br_spamfilter_policy.lng
index 998f36d8fa..b5bb69db43 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Administrador para cabeçalhos inválidos';
 $wb['spam_admin_txt'] = 'Administrador para spam';
 $wb['message_size_limit_txt'] = 'Tamanho máximo da mensagem';
 $wb['banned_rulenames_txt'] = 'Regras de banimento';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/ca.lng b/interface/web/mail/lib/lang/ca.lng
index 1665346a82..0531f19bd0 100644
--- a/interface/web/mail/lib/lang/ca.lng
+++ b/interface/web/mail/lib/lang/ca.lng
@@ -45,4 +45,6 @@ $wb['Mailbox traffic'] = 'Trafic de la boite courriels';
 $wb['Domain Alias'] = 'Alias de domaine';
 $wb['Relay Recipients'] = 'Destinataires de relais';
 $wb['Mailbox quota'] = 'Quota courriel';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng
index 7e82c34ca2..feafd436f6 100644
--- a/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Nom de domaine invalide, ou contient des caractère
 $wb['limit_mailcatchall_txt'] = 'Le nombre maximal de comptes collecteurs pour votre compte a été atteint.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'La destination n\'est pas valide.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ca_mail_get.lng b/interface/web/mail/lib/lang/ca_mail_get.lng
index 9300a29049..a13a1b03f6 100644
--- a/interface/web/mail/lib/lang/ca_mail_get.lng
+++ b/interface/web/mail/lib/lang/ca_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Le mot de passe est vide.';
 $wb['destination_error_isemail'] = 'Pas de destination sélectionnée.';
 $wb['source_server_error_regex'] = 'Le serveur POP3 / IMAP n\'est pas un nom de domaine valide.';
 $wb['source_read_all_txt'] = 'Récupérer tous les courriels (incl. les courriels lus)';
-$wb['error_delete_read_all_combination'] = 'Combinaison d\'options non autorisée. Vous ne pouvez pas utiliser \"Supprimer les courriels après récupération\" = non avec \"Récupérer tous les courriels\" = oui';
+$wb['error_delete_read_all_combination'] = 'Combinaison d\'options non autorisée. Vous ne pouvez pas utiliser \\"Supprimer les courriels après récupération\\" = non avec \\"Récupérer tous les courriels\\" = oui';
 $wb['source_delete_note_txt'] = 'Please check first if courriel retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/ca_spamfilter_policy.lng b/interface/web/mail/lib/lang/ca_spamfilter_policy.lng
index d07b382ddf..7b593f0a16 100644
--- a/interface/web/mail/lib/lang/ca_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ca_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Admin mauvais entête';
 $wb['spam_admin_txt'] = 'Admin SPAM';
 $wb['message_size_limit_txt'] = 'Limite de taille de message';
 $wb['banned_rulenames_txt'] = 'Noms des règles bannir';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/cz.lng b/interface/web/mail/lib/lang/cz.lng
index d0f6157cb4..040a6d0de8 100644
--- a/interface/web/mail/lib/lang/cz.lng
+++ b/interface/web/mail/lib/lang/cz.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Přezdívky e-mailových domén';
 $wb['Relay Recipients'] = 'Relay adresáti';
 $wb['Statistics'] = 'Statistiky';
 $wb['Mailbox quota'] = 'Kvóty pro e-mailové schránky';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng b/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng
index ab4006df0c..d0ae7c7e4b 100644
--- a/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Chybné doménové jméno nebo doména obsahuje chy
 $wb['limit_mailcatchall_txt'] = 'Byl dosažen maximální počet košů účtů pro Váš účet.';
 $wb['source_txt'] = 'Zdroj';
 $wb['destination_error_isemail'] = 'Cílová e-mailová adresa není platná.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_get.lng b/interface/web/mail/lib/lang/cz_mail_get.lng
index 3dfee1a5ef..cdb39b09a1 100644
--- a/interface/web/mail/lib/lang/cz_mail_get.lng
+++ b/interface/web/mail/lib/lang/cz_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Heslo je prázdné.';
 $wb['destination_error_isemail'] = 'Nevybrán žádný cíl.';
 $wb['source_server_error_regex'] = 'POP3/IMAP server není validní doménový název.';
 $wb['source_read_all_txt'] = 'Načíst všechny e-maily (včetně již přečtené pošty)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Prosím, zkontrolujte nejprve, zda příjímání e-mailů funguje, než aktivujete tuto možnost.';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_mailinglist.lng b/interface/web/mail/lib/lang/cz_mail_mailinglist.lng
index f534d6c8e9..e1f7dfbfa5 100644
--- a/interface/web/mail/lib/lang/cz_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/cz_mail_mailinglist.lng
@@ -16,7 +16,7 @@ $wb['generate_password_txt'] = 'Generovat heslo';
 $wb['repeat_password_txt'] = 'Opakujte heslo';
 $wb['password_mismatch_txt'] = 'Hesla se neshodují.';
 $wb['password_match_txt'] = 'Hesla se shodují.';
-$wb['listname_error_unique'] = 'Na serveru je již shodný \"název seznamu\". Prosím, vyberte si jiný \"název seznamu\".';
+$wb['listname_error_unique'] = 'Na serveru je již shodný \\"název seznamu\\". Prosím, vyberte si jiný \\"název seznamu\\".';
 $wb['email_error_isemail'] = 'E-mailová adresa je neplatná.';
 $wb['mailinglist_txt'] = 'E-mailové konference';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_spamfilter_policy.lng b/interface/web/mail/lib/lang/cz_spamfilter_policy.lng
index c5765e807f..b8b8a2e78f 100644
--- a/interface/web/mail/lib/lang/cz_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/cz_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Špatná hlavička admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Limit velikosti zprávy';
 $wb['banned_rulenames_txt'] = 'Název pravidel zabanované';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/de.lng b/interface/web/mail/lib/lang/de.lng
index 91418972dd..e0f1e7cd3b 100644
--- a/interface/web/mail/lib/lang/de.lng
+++ b/interface/web/mail/lib/lang/de.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Globale Filter';
 $wb['Domain Alias'] = 'E-Mail Domain Alias';
 $wb['Relay Recipients'] = 'Relay Empfänger';
 $wb['Mailbox quota'] = 'E-Mail Konto Speichernutzung';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/de_spamfilter_policy.lng b/interface/web/mail/lib/lang/de_spamfilter_policy.lng
index 1efbcb6afc..1036fbf91c 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_policy.lng
@@ -42,10 +42,10 @@ $wb['rspamd_spam_tag_method_txt'] = 'SPAM-Markierungsmethode';
 $wb['rspamd_spam_kill_level_txt'] = 'SPAM-Reject-Level';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
-
 $wb['amavis_settings_txt'] = 'Einstellungen';
 $wb['amavis_taglevel_txt'] = 'Tag-Level';
 $wb['amavis_quarantine_txt'] = 'Quarantäne';
 $wb['amavis_other_txt'] = 'Sonstiges';
 $wb['add_header_txt'] = 'Header hinzufügen';
-$wb['rewrite_subject_txt'] = 'Betreff ändern';
\ No newline at end of file
+$wb['rewrite_subject_txt'] = 'Betreff ändern';
+?>
diff --git a/interface/web/mail/lib/lang/dk.lng b/interface/web/mail/lib/lang/dk.lng
index 7330253c23..3fe8d568ae 100644
--- a/interface/web/mail/lib/lang/dk.lng
+++ b/interface/web/mail/lib/lang/dk.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Global Filtere';
 $wb['Domain Alias'] = 'Domæne Alias';
 $wb['Relay Recipients'] = 'Relay Modtagere';
 $wb['Mailbox quota'] = 'Postboks kvota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng b/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng
index 0cdcad2098..8c0be49775 100644
--- a/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Ugyldigt domæne navn eller domæne, indeholder ugy
 $wb['limit_mailcatchall_txt'] = 'Max. antal af e-mail catchall konti for din konto er nået.';
 $wb['source_txt'] = 'Kilde';
 $wb['destination_error_isemail'] = 'Destinationen er ikke en gyldig e-mail adresse.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_mail_get.lng b/interface/web/mail/lib/lang/dk_mail_get.lng
index dc0b7455ac..1fa44cb6ad 100644
--- a/interface/web/mail/lib/lang/dk_mail_get.lng
+++ b/interface/web/mail/lib/lang/dk_mail_get.lng
@@ -15,5 +15,5 @@ $wb['source_username_error_isempty'] = 'Brugernavn er tom.';
 $wb['source_password_error_isempty'] = 'Adgangskode er tom.';
 $wb['destination_error_isemail'] = 'Ingen destination er valgt.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server er ikke et gyldigt domænenavn.';
-$wb['error_delete_read_all_combination'] = 'Ulovlig kombination af muligheder. Du kan ikke bruge \"Slet e-mails efter hentning\" = nej sammen med \"Hent alle e-mails\" = ja';
+$wb['error_delete_read_all_combination'] = 'Ulovlig kombination af muligheder. Du kan ikke bruge \\"Slet e-mails efter hentning\\" = nej sammen med \\"Hent alle e-mails\\" = ja';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_spamfilter_policy.lng b/interface/web/mail/lib/lang/dk_spamfilter_policy.lng
index b225eb48ac..97b02923d8 100644
--- a/interface/web/mail/lib/lang/dk_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/dk_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Meddelelses størrelse grænse';
 $wb['banned_rulenames_txt'] = 'Bandlyste reglnavne';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/el.lng b/interface/web/mail/lib/lang/el.lng
index f8cadc62f0..cb873eac2a 100644
--- a/interface/web/mail/lib/lang/el.lng
+++ b/interface/web/mail/lib/lang/el.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Καθολικά Φίλτρα';
 $wb['Domain Alias'] = 'Ψευδώνυμο Domain';
 $wb['Relay Recipients'] = 'Παραλήπτες Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_domain_catchall.lng b/interface/web/mail/lib/lang/el_mail_domain_catchall.lng
index 43c0bdf565..b04b43cfcc 100644
--- a/interface/web/mail/lib/lang/el_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/el_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Μη έγκρυρο όνομα domain ή το όν
 $wb['limit_mailcatchall_txt'] = 'Το μέγιστο πλήθος των email catchall για τον λογαριασμό σας, έχει εξαντληθεί.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_get.lng b/interface/web/mail/lib/lang/el_mail_get.lng
index cc2c261a5b..0ec9645c8f 100644
--- a/interface/web/mail/lib/lang/el_mail_get.lng
+++ b/interface/web/mail/lib/lang/el_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Το Συνθηματικό δεν έχ
 $wb['destination_error_isemail'] = 'Δεν επιλέχθηκε προορισμός.';
 $wb['source_server_error_regex'] = 'Το όνομα του Pop3/Imap Server δεν είναι έγκυρο.';
 $wb['source_read_all_txt'] = 'Ανάκτηση όλων των emails (συμπερ. αναγνωσμένων mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/el_spamfilter_policy.lng b/interface/web/mail/lib/lang/el_spamfilter_policy.lng
index 4ab7291697..0eed350239 100644
--- a/interface/web/mail/lib/lang/el_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/el_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Όριο μεγέθους μηνύματος';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/es.lng b/interface/web/mail/lib/lang/es.lng
index 787007a7fc..fdf4e5b00d 100755
--- a/interface/web/mail/lib/lang/es.lng
+++ b/interface/web/mail/lib/lang/es.lng
@@ -8,7 +8,7 @@ $wb['Domain'] = 'Dominio';
 $wb['Email Accounts'] = 'Cuentas de correo';
 $wb['Email Alias'] = 'Alias de correo';
 $wb['Email Blacklist'] = 'Lista negra de correo';
-$wb['Email Catchall'] = 'Correo \"recoge-todo\"';
+$wb['Email Catchall'] = 'Correo \\"recoge-todo\\"';
 $wb['Email filter'] = 'Filtro de correo';
 $wb['Email Forward'] = 'Reenvío de correo';
 $wb['Email Mailbox'] = 'Buzón de correo';
@@ -45,4 +45,6 @@ $wb['Tag-Level'] = 'Nivel de etiqueta';
 $wb['User / Domain'] = 'Usuario / Dominio';
 $wb['Users'] = 'Usuarios';
 $wb['Whitelist'] = 'Lista blanca';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
index ed6c9b5db4..68e03c8c37 100755
--- a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
@@ -3,9 +3,10 @@ $wb['active_txt'] = 'Habilitado';
 $wb['destination_error_isemail'] = 'El destinatario no es una dirección de correo válida.';
 $wb['destination_txt'] = 'Correo de destino';
 $wb['domain_error_regex'] = 'El nombre de dominio es inválido o contiene caracteres no permitidos.';
-$wb['domain_error_unique'] = 'Este dominio ya tiene un correo \"recoge-todo\".';
+$wb['domain_error_unique'] = 'Este dominio ya tiene un correo \\"recoge-todo\\".';
 $wb['domain_txt'] = 'Dominio';
-$wb['limit_mailcatchall_txt'] = 'Ha alcanzado el número máx. de correo \"recoge-todo\" para correo permitidos para su cuenta.';
+$wb['limit_mailcatchall_txt'] = 'Ha alcanzado el número máx. de correo \\"recoge-todo\\" para correo permitidos para su cuenta.';
 $wb['no_domain_perm'] = 'No tiene permisos para usar este dominio.';
 $wb['source_txt'] = 'Origen';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng
index fc3fde1956..8288430a18 100755
--- a/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
-$wb['add_new_record_txt'] = 'Añadir correo \"recoge-todo\"';
+$wb['add_new_record_txt'] = 'Añadir correo \\"recoge-todo\\"';
 $wb['destination_txt'] = 'Dirección de correo de destino';
 $wb['domain_txt'] = 'Dominio';
-$wb['list_head_txt'] = 'Correo \"recoge-todo\"';
+$wb['list_head_txt'] = 'Correo \\"recoge-todo\\"';
 $wb['server_id_txt'] = 'Servidor';
 $wb['source_txt'] = 'Origen';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_get.lng b/interface/web/mail/lib/lang/es_mail_get.lng
index 47529e27c6..81de60b038 100755
--- a/interface/web/mail/lib/lang/es_mail_get.lng
+++ b/interface/web/mail/lib/lang/es_mail_get.lng
@@ -2,7 +2,7 @@
 $wb['active_txt'] = 'Habilitado';
 $wb['destination_error_isemail'] = 'No ha seleccionado un destinatario.';
 $wb['destination_txt'] = 'Destino';
-$wb['error_delete_read_all_combination'] = 'Combinación incorrecta de opciones. No puede usar \"Borrar correos después de recuperarlos\" = NO al mismo tiempo que \"Recuperar todos los correos\" = SI';
+$wb['error_delete_read_all_combination'] = 'Combinación incorrecta de opciones. No puede usar \\"Borrar correos después de recuperarlos\\" = NO al mismo tiempo que \\"Recuperar todos los correos\\" = SI';
 $wb['limit_fetchmail_txt'] = 'Ha alcanzado el número máx. de registros de recuperación de correo permitidos para su cuenta.';
 $wb['server_id_txt'] = 'Servidor';
 $wb['source_delete_note_txt'] = 'Por favor, verifique que funcione la recuperación de correos antes de activar esta opción.';
diff --git a/interface/web/mail/lib/lang/es_spamfilter_policy.lng b/interface/web/mail/lib/lang/es_spamfilter_policy.lng
index 1cb1d43630..b7a168c983 100755
--- a/interface/web/mail/lib/lang/es_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/es_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['virus_quarantine_to_txt'] = 'Reenviar virus al correo';
 $wb['warnbadhrecip_txt'] = 'Avisar al receptor de la cabecera incorrecta.';
 $wb['warnbannedrecip_txt'] = 'Avisar al receptor del bloqueo.';
 $wb['warnvirusrecip_txt'] = 'Avisar al receptor del virus.';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/fi.lng b/interface/web/mail/lib/lang/fi.lng
index 3738c7fd64..78a4328336 100755
--- a/interface/web/mail/lib/lang/fi.lng
+++ b/interface/web/mail/lib/lang/fi.lng
@@ -45,4 +45,6 @@ $wb['Server'] = 'Palvelin';
 $wb['Domain Alias'] = 'Aliasverkkotunnus';
 $wb['Relay Recipients'] = 'Välityksen vastaanottajat';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng b/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng
index f835f5667a..085a116c2c 100755
--- a/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Vääränlainen verkkotunnus tai se sisältää kie
 $wb['limit_mailcatchall_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä CatchAll-tunnuksia.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_mail_get.lng b/interface/web/mail/lib/lang/fi_mail_get.lng
index 9eca1d8498..063a37bf04 100755
--- a/interface/web/mail/lib/lang/fi_mail_get.lng
+++ b/interface/web/mail/lib/lang/fi_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Salasana-kenttä on tyhjä.';
 $wb['destination_error_isemail'] = 'Ei kohdetta valittuna.';
 $wb['source_server_error_regex'] = 'Pop3/Imap-palvelin ei ole kelvollinen osoite.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_policy.lng b/interface/web/mail/lib/lang/fi_spamfilter_policy.lng
index 8f61ba411b..4f72021077 100755
--- a/interface/web/mail/lib/lang/fi_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/fi_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Otsikkovirhetunnisteiden ylläpitäjä';
 $wb['spam_admin_txt'] = 'Roskapostitunnisteiden ylläpitäjä';
 $wb['message_size_limit_txt'] = 'Viestin kokoraja';
 $wb['banned_rulenames_txt'] = 'Estojen sääntönimet';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/fr.lng b/interface/web/mail/lib/lang/fr.lng
index 3437d37100..a70f080295 100644
--- a/interface/web/mail/lib/lang/fr.lng
+++ b/interface/web/mail/lib/lang/fr.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Alias de domaine';
 $wb['Relay Recipients'] = 'Destinataires de relais';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['Email'] = 'Email';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng
index b7c4b60760..199cd47224 100644
--- a/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Nom de domaine invalide, ou contient des caractère
 $wb['limit_mailcatchall_txt'] = 'Le nombre maximal de comptes collecteurs pour votre compte a été atteint.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid e-mail address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_get.lng b/interface/web/mail/lib/lang/fr_mail_get.lng
index 118ab5ed32..00f72f0c8b 100644
--- a/interface/web/mail/lib/lang/fr_mail_get.lng
+++ b/interface/web/mail/lib/lang/fr_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Le mot de passe est vide.';
 $wb['destination_error_isemail'] = 'Pas de destination sélectionnée.';
 $wb['source_server_error_regex'] = 'Le serveur POP3 / IMAP n’est pas un nom de domaine valide.';
 $wb['source_read_all_txt'] = 'Récupérer tous les emails (incl. les emails lus)';
-$wb['error_delete_read_all_combination'] = 'Combinaison d’options non autorisée. Vous ne pouvez pas utiliser \"Supprimer les emails après récupération\" = non avec \"Récupérer tous les emails\" = oui';
+$wb['error_delete_read_all_combination'] = 'Combinaison d’options non autorisée. Vous ne pouvez pas utiliser \\"Supprimer les emails après récupération\\" = non avec \\"Récupérer tous les emails\\" = oui';
 $wb['source_delete_note_txt'] = 'Please check first if e-mail retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_spamfilter_policy.lng b/interface/web/mail/lib/lang/fr_spamfilter_policy.lng
index d07b382ddf..7b593f0a16 100644
--- a/interface/web/mail/lib/lang/fr_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/fr_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Admin mauvais entête';
 $wb['spam_admin_txt'] = 'Admin SPAM';
 $wb['message_size_limit_txt'] = 'Limite de taille de message';
 $wb['banned_rulenames_txt'] = 'Noms des règles bannir';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/hr.lng b/interface/web/mail/lib/lang/hr.lng
index 882f6d2b7e..877f8827f5 100644
--- a/interface/web/mail/lib/lang/hr.lng
+++ b/interface/web/mail/lib/lang/hr.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Alias domena';
 $wb['Relay Recipients'] = 'Relay primatelji';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['Domain'] = 'Domain';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng
index 2c8d23e218..1c8da72ab3 100644
--- a/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Neispravan naziv domene ili naziv sadrži nedozvolj
 $wb['limit_mailcatchall_txt'] = 'Iskorišten ja maksimalan broj email catchall računa.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_mail_get.lng b/interface/web/mail/lib/lang/hr_mail_get.lng
index 025bb136b0..18c53a4d53 100644
--- a/interface/web/mail/lib/lang/hr_mail_get.lng
+++ b/interface/web/mail/lib/lang/hr_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Password is empty.';
 $wb['destination_error_isemail'] = 'No destination selected.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_spamfilter_policy.lng b/interface/web/mail/lib/lang/hr_spamfilter_policy.lng
index e876330a68..683b378c21 100644
--- a/interface/web/mail/lib/lang/hr_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/hr_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/hu.lng b/interface/web/mail/lib/lang/hu.lng
index 752f4003a8..f3ffa4aef0 100644
--- a/interface/web/mail/lib/lang/hu.lng
+++ b/interface/web/mail/lib/lang/hu.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Server'] = 'Server';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng b/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng
index 8331f22101..e26795953d 100644
--- a/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Érvénytelen domain vagy a domain érvénytelen ka
 $wb['limit_mailcatchall_txt'] = 'Nincs több catchall lehetőség.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_get.lng b/interface/web/mail/lib/lang/hu_mail_get.lng
index a02a1fe114..59cb26dd6a 100644
--- a/interface/web/mail/lib/lang/hu_mail_get.lng
+++ b/interface/web/mail/lib/lang/hu_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Jelszó üres.';
 $wb['destination_error_isemail'] = 'Nem választott címzettet.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_spamfilter_policy.lng b/interface/web/mail/lib/lang/hu_spamfilter_policy.lng
index 391d4ab43a..c2b6b9244c 100644
--- a/interface/web/mail/lib/lang/hu_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/hu_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Hibás fejléc admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Levél méret limit';
 $wb['banned_rulenames_txt'] = 'Tiltószabály nevek';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/id.lng b/interface/web/mail/lib/lang/id.lng
index c9acaf27f1..3a2b5dfe45 100644
--- a/interface/web/mail/lib/lang/id.lng
+++ b/interface/web/mail/lib/lang/id.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Penyaringan Global';
 $wb['Domain Alias'] = 'Alias Domain';
 $wb['Relay Recipients'] = 'Penerima Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_domain_catchall.lng b/interface/web/mail/lib/lang/id_mail_domain_catchall.lng
index 435856c105..c380957fdc 100644
--- a/interface/web/mail/lib/lang/id_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/id_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Nama domain tidak valid atau domain mengandung kara
 $wb['limit_mailcatchall_txt'] = 'Jumlah maks akun catchall email untuk akun Anda sudah tercapai.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_get.lng b/interface/web/mail/lib/lang/id_mail_get.lng
index 7617cbc7df..cec2466f28 100644
--- a/interface/web/mail/lib/lang/id_mail_get.lng
+++ b/interface/web/mail/lib/lang/id_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Kata Sandi kosong.';
 $wb['destination_error_isemail'] = 'Tidak ada tujuan yang dipilih.';
 $wb['source_server_error_regex'] = 'Server Pop3/Imap bukan merupakan nama domain yang valid.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/id_spamfilter_policy.lng b/interface/web/mail/lib/lang/id_spamfilter_policy.lng
index afa0ba1a09..9813dec470 100644
--- a/interface/web/mail/lib/lang/id_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/id_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Admin Bad header';
 $wb['spam_admin_txt'] = 'Admin SPAM';
 $wb['message_size_limit_txt'] = 'Batasan ukuran pesan';
 $wb['banned_rulenames_txt'] = 'Nama aturan Banned';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/it.lng b/interface/web/mail/lib/lang/it.lng
index 715e2efb8e..15bc87ea3f 100644
--- a/interface/web/mail/lib/lang/it.lng
+++ b/interface/web/mail/lib/lang/it.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Filtri globali';
 $wb['Domain Alias'] = 'Alias dominio';
 $wb['Relay Recipients'] = 'Destinatari inoltro';
 $wb['Mailbox quota'] = 'Quota Casella di Posta';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_domain_catchall.lng b/interface/web/mail/lib/lang/it_mail_domain_catchall.lng
index 6ff4cbdf1c..3345bed9c7 100644
--- a/interface/web/mail/lib/lang/it_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/it_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Invalid domain name od domain contiene caratteri no
 $wb['limit_mailcatchall_txt'] = 'The max. number of email catchall accounts raggiunto per il tuo account.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_get.lng b/interface/web/mail/lib/lang/it_mail_get.lng
index 3b443a7268..70770c22d4 100644
--- a/interface/web/mail/lib/lang/it_mail_get.lng
+++ b/interface/web/mail/lib/lang/it_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Valore Password  vuoto.';
 $wb['destination_error_isemail'] = 'Nessuna destinazione selezionata.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server non è un nome dominio valido.';
 $wb['source_read_all_txt'] = 'Recupera tutte le email (incluso mail lette)';
-$wb['error_delete_read_all_combination'] = 'Combinazione di opzioni non conforme. Non puoi utilizzare \"Elimina mail dopo averle scaricate \" = NO assieme a  \"Recupera tutte le email\" = SI';
+$wb['error_delete_read_all_combination'] = 'Combinazione di opzioni non conforme. Non puoi utilizzare \\"Elimina mail dopo averle scaricate \\" = NO assieme a  \\"Recupera tutte le email\\" = SI';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/it_spamfilter_policy.lng b/interface/web/mail/lib/lang/it_spamfilter_policy.lng
index e876330a68..683b378c21 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/ja.lng b/interface/web/mail/lib/lang/ja.lng
index f8289d4907..818a3ed126 100644
--- a/interface/web/mail/lib/lang/ja.lng
+++ b/interface/web/mail/lib/lang/ja.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'グローバルフィルター';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng
index cb430fefe6..6da7d05c56 100644
--- a/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'ドメイン名が不正です。無効な文字を
 $wb['limit_mailcatchall_txt'] = 'キャッチオールアカウントが最大数に達したため、これ以上追加できません。';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_get.lng b/interface/web/mail/lib/lang/ja_mail_get.lng
index f1c45256bf..3c5c9ec092 100644
--- a/interface/web/mail/lib/lang/ja_mail_get.lng
+++ b/interface/web/mail/lib/lang/ja_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'パスワードを指定してくださ
 $wb['destination_error_isemail'] = '宛先を選択してください。';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_spamfilter_policy.lng b/interface/web/mail/lib/lang/ja_spamfilter_policy.lng
index 89d377a384..a23f28a766 100644
--- a/interface/web/mail/lib/lang/ja_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ja_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/nl.lng b/interface/web/mail/lib/lang/nl.lng
index e47cc65811..91d63a7abc 100644
--- a/interface/web/mail/lib/lang/nl.lng
+++ b/interface/web/mail/lib/lang/nl.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Globale filters';
 $wb['Domain Alias'] = 'Domein alias';
 $wb['Relay Recipients'] = 'Relay ontvangers';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng b/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng
index 06ad66c9be..ee9c1f7678 100644
--- a/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Ongeldige domeinnaam of domein bevat ongeldige kara
 $wb['limit_mailcatchall_txt'] = 'Het max. aantal e-mail catchall accounts voor uw account is bereikt.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_get.lng b/interface/web/mail/lib/lang/nl_mail_get.lng
index 6752b42cd8..5cbeab14e7 100644
--- a/interface/web/mail/lib/lang/nl_mail_get.lng
+++ b/interface/web/mail/lib/lang/nl_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Wachtwoord is niet ingvuld.';
 $wb['destination_error_isemail'] = 'Geen bestemming geselecteerd.';
 $wb['source_server_error_regex'] = 'Pop3/Imap server is geen geldige domeinnaam.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index acc2da94e1..94dd018332 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -36,7 +36,7 @@ $wb['name_txt'] = 'Echte naam';
 $wb['name_optional_txt'] = '(Optioneel)';
 $wb['autoresponder_active'] = 'Inschakelen autoresponder';
 $wb['cc_txt'] = 'Stuur kopie naar';
-$wb['cc_error_isemail'] = 'Het \"Stuur kopie naar\" veld bevat geen geldig e-mail adres';
+$wb['cc_error_isemail'] = 'Het \\"Stuur kopie naar\\" veld bevat geen geldig e-mail adres';
 $wb['domain_txt'] = 'Domain';
 $wb['now_txt'] = 'Now';
 $wb['login_error_unique'] = 'Login is already taken.';
@@ -60,6 +60,6 @@ $wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 $wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
-$wb['sender_cc_error_isemail'] = 'Het \"Stuur uitgaande kopie aan\" veld bevat geen geldig e-mail adres';
+$wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
 $wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_spamfilter_policy.lng b/interface/web/mail/lib/lang/nl_spamfilter_policy.lng
index 84d5242da9..4a7ab96152 100644
--- a/interface/web/mail/lib/lang/nl_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/nl_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Bericht grootte limiet';
 $wb['banned_rulenames_txt'] = 'Verbannen rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/pl.lng b/interface/web/mail/lib/lang/pl.lng
index 93861b784d..17b7701992 100644
--- a/interface/web/mail/lib/lang/pl.lng
+++ b/interface/web/mail/lib/lang/pl.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Globalne filtry';
 $wb['Domain Alias'] = 'Alias domeny';
 $wb['Relay Recipients'] = 'Odbiorcy przekierowania';
 $wb['Mailbox quota'] = 'Użycie skrzynek email';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng b/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng
index 3630b954bf..fad83875ca 100644
--- a/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Nieprawidłowa nazwa domeny. Domena zawiera niedozo
 $wb['limit_mailcatchall_txt'] = 'Maksymalna ilość kont e-mail catchall dla Twojej domeny została przekroczona.';
 $wb['source_txt'] = 'Źródło';
 $wb['destination_error_isemail'] = 'Cel nie jest poprawnym adresem email.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_spamfilter_policy.lng b/interface/web/mail/lib/lang/pl_spamfilter_policy.lng
index 8a825b5594..8291102308 100644
--- a/interface/web/mail/lib/lang/pl_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/pl_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Admin obsługi złych nagłowków';
 $wb['spam_admin_txt'] = 'Admin obsługi spamu';
 $wb['message_size_limit_txt'] = 'Limit wielkości wiadomości';
 $wb['banned_rulenames_txt'] = 'Zabronione nazwy zasad';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/pt.lng b/interface/web/mail/lib/lang/pt.lng
index 7a9a69cf83..d47eb6183b 100644
--- a/interface/web/mail/lib/lang/pt.lng
+++ b/interface/web/mail/lib/lang/pt.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Filtros Globais';
 $wb['Domain Alias'] = 'Domínios Alias';
 $wb['Relay Recipients'] = 'Recipientes de Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng b/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng
index 1fde21c020..e81afd74b9 100644
--- a/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'O nome do domínio contém caracteres inválidos';
 $wb['limit_mailcatchall_txt'] = 'O número máximo de catchall para este domínio foi atingido.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_get.lng b/interface/web/mail/lib/lang/pt_mail_get.lng
index f3ea6227fa..883279a2d5 100644
--- a/interface/web/mail/lib/lang/pt_mail_get.lng
+++ b/interface/web/mail/lib/lang/pt_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Senha em branco.';
 $wb['destination_error_isemail'] = 'Destino não seleccionado.';
 $wb['source_server_error_regex'] = 'Servidor Pop3/Imap não é um nome de domínio válido.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_spamfilter_policy.lng b/interface/web/mail/lib/lang/pt_spamfilter_policy.lng
index 1610aebdca..af960c99f6 100644
--- a/interface/web/mail/lib/lang/pt_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/pt_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Administrador de Bad header';
 $wb['spam_admin_txt'] = 'Administrador SPAM';
 $wb['message_size_limit_txt'] = 'Tamanho limite da mensagem';
 $wb['banned_rulenames_txt'] = 'Regras de Banimento';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/ro.lng b/interface/web/mail/lib/lang/ro.lng
index dbfa06bcc8..0c0e85995e 100644
--- a/interface/web/mail/lib/lang/ro.lng
+++ b/interface/web/mail/lib/lang/ro.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Filtre Global';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng
index 97add765ab..c0689ca044 100644
--- a/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'nume de domeniu invalid sau caractere nepermise';
 $wb['limit_mailcatchall_txt'] = 'numarul maxim de CATCHALL pe contul dumneavoatra a fost atins';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_get.lng b/interface/web/mail/lib/lang/ro_mail_get.lng
index 16a0b6aeb7..5e0a590f70 100644
--- a/interface/web/mail/lib/lang/ro_mail_get.lng
+++ b/interface/web/mail/lib/lang/ro_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Password este necompletat';
 $wb['destination_error_isemail'] = 'Nici o destinatie nu e selectata';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server is not a valid domain name.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_spamfilter_policy.lng b/interface/web/mail/lib/lang/ro_spamfilter_policy.lng
index 3645b3e1d1..f77d0f3e5a 100644
--- a/interface/web/mail/lib/lang/ro_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ro_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = ' header defect  admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned nume reguli';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/ru.lng b/interface/web/mail/lib/lang/ru.lng
index 124441ffa9..1b7995e024 100644
--- a/interface/web/mail/lib/lang/ru.lng
+++ b/interface/web/mail/lib/lang/ru.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Глобальные фильтры';
 $wb['Domain Alias'] = 'Алиасы доменов';
 $wb['Relay Recipients'] = 'Relay получатели';
 $wb['Mailbox quota'] = 'Квота почтового ящика';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng
index 60d3ebd326..25349ca497 100644
--- a/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Некорректное имя домена.';
 $wb['limit_mailcatchall_txt'] = 'Максимальное число Макс. количество учётных записей сводных почтовых ящиков достигнуто.';
 $wb['source_txt'] = 'Источник';
 $wb['destination_error_isemail'] = 'Не выбран получатель или запись некорректна.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_get.lng b/interface/web/mail/lib/lang/ru_mail_get.lng
index 0ce613cd05..b3f2f0b6bf 100644
--- a/interface/web/mail/lib/lang/ru_mail_get.lng
+++ b/interface/web/mail/lib/lang/ru_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Пустой пароль.';
 $wb['destination_error_isemail'] = 'Не выбран получатель или запись некорректна.';
 $wb['source_server_error_regex'] = 'Некорректное доменное имя для сервера POP3/IMAP.';
 $wb['source_read_all_txt'] = 'Получать все сообщения электронной почты (включая прочитанные письма)';
-$wb['error_delete_read_all_combination'] = 'Недопустимая комбинация параметров. Вы не можете использовать \"Удалить письма после получения\" = НЕТ вместе с \"Получить все письма\" = ДА';
+$wb['error_delete_read_all_combination'] = 'Недопустимая комбинация параметров. Вы не можете использовать \\"Удалить письма после получения\\" = НЕТ вместе с \\"Получить все письма\\" = ДА';
 $wb['source_delete_note_txt'] = 'Пожалуйста, прежде чем активировать этот параметр, убедитесь в том, что сборщик почты работает.';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_user_filter.lng b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
index ecc2d25b9d..c8306f9838 100644
--- a/interface/web/mail/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
@@ -6,7 +6,7 @@ $wb['active_txt'] = 'Активно';
 $wb['rulename_error_empty'] = 'Имя пустое.';
 $wb['searchterm_is_empty'] = 'Поле поиска пустое.';
 $wb['source_txt'] = 'Источник';
-$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \"a-z\", \"0-9\", \"-\", \".\", \"_\" и {пробел}';
+$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \\"a-z\\", \\"0-9\\", \\"-\\", \\".\\", \\"_\\" и {пробел}';
 $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.';
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
diff --git a/interface/web/mail/lib/lang/ru_spamfilter_policy.lng b/interface/web/mail/lib/lang/ru_spamfilter_policy.lng
index 7bae8a0fd0..bab0a9ba0c 100644
--- a/interface/web/mail/lib/lang/ru_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ru_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Админ: кривые заголовки';
 $wb['spam_admin_txt'] = 'Админ: СПАМ';
 $wb['message_size_limit_txt'] = 'Превышен размер сообщения';
 $wb['banned_rulenames_txt'] = 'Правила банов';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/se.lng b/interface/web/mail/lib/lang/se.lng
index 3edc2034d0..7a415aa901 100644
--- a/interface/web/mail/lib/lang/se.lng
+++ b/interface/web/mail/lib/lang/se.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Global Filters';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
index 7ef1116390..39c6e6c559 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Ogiltig domän eller domänen innehåller ogiltiga
 $wb['limit_mailcatchall_txt'] = 'Det maximala antalet catchall-adresser för ditt konto är uppnått.';
 $wb['source_txt'] = 'Källa';
 $wb['destination_error_isemail'] = 'Destinationen när inte en giltig epostadress.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/se_mail_get.lng b/interface/web/mail/lib/lang/se_mail_get.lng
index db4440210e..9ed9710055 100644
--- a/interface/web/mail/lib/lang/se_mail_get.lng
+++ b/interface/web/mail/lib/lang/se_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Lösenord är tomt.';
 $wb['destination_error_isemail'] = 'Ingen destination vald.';
 $wb['source_server_error_regex'] = 'POP3-/Imapserver är inte ett giltigt domännamn.';
 $wb['source_read_all_txt'] = 'Hämta all epost (även läst epost)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Vänligen kontrollera först om eposthämtning fungerar innan du aktiverar detta val..';
 ?>
diff --git a/interface/web/mail/lib/lang/se_spamfilter_policy.lng b/interface/web/mail/lib/lang/se_spamfilter_policy.lng
index e876330a68..683b378c21 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/sk.lng b/interface/web/mail/lib/lang/sk.lng
index 22773a574a..7b00f9d52c 100644
--- a/interface/web/mail/lib/lang/sk.lng
+++ b/interface/web/mail/lib/lang/sk.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Globálne Filtere';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng b/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng
index 38c37544e6..03c701c6db 100644
--- a/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Neplatný názov domény alebo doména obsahuje nep
 $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových doménových košov pre Váš účet je dosiahnutý.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_get.lng b/interface/web/mail/lib/lang/sk_mail_get.lng
index 8e180ca7a8..e43899965d 100644
--- a/interface/web/mail/lib/lang/sk_mail_get.lng
+++ b/interface/web/mail/lib/lang/sk_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Heslo je prázdne.';
 $wb['destination_error_isemail'] = 'Žiadny Cieľ nebol vybraný.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server nie je valídne doménové meno.';
 $wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_spamfilter_policy.lng b/interface/web/mail/lib/lang/sk_spamfilter_policy.lng
index b58988d60b..6a4d636259 100644
--- a/interface/web/mail/lib/lang/sk_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/sk_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Zlé hlavičky admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Limit veľkosti správy';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/tr.lng b/interface/web/mail/lib/lang/tr.lng
index e2deaca006..4f6f77a38a 100644
--- a/interface/web/mail/lib/lang/tr.lng
+++ b/interface/web/mail/lib/lang/tr.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Genel Süzgeçler';
 $wb['Domain Alias'] = 'Takma Alan Adı';
 $wb['Relay Recipients'] = 'Aktarılan Alıcılar';
 $wb['Mailbox quota'] = 'Posta Kutusu Kotası';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
index 037d2ad16e..c5f8725a72 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Alan adı geçersiz ya da geçersiz karakterler iç
 $wb['limit_mailcatchall_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla tümünü al hesabı sayısına ulaştınız.';
 $wb['source_txt'] = 'Kaynak';
 $wb['destination_error_isemail'] = 'Hedef e-posta adresi geçersiz.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_get.lng b/interface/web/mail/lib/lang/tr_mail_get.lng
index 3e29c26a71..b82b6c8c9a 100644
--- a/interface/web/mail/lib/lang/tr_mail_get.lng
+++ b/interface/web/mail/lib/lang/tr_mail_get.lng
@@ -15,5 +15,5 @@ $wb['source_username_error_isempty'] = 'Kullanıcı adı boş olamaz.';
 $wb['source_password_error_isempty'] = 'Parola boÅŸ olamaz.';
 $wb['destination_error_isemail'] = 'Hedef seçilmemiş.';
 $wb['source_server_error_regex'] = 'POP3/IMAP Sunucu alan adı geçersiz.';
-$wb['error_delete_read_all_combination'] = 'Seçenek kombinasyonu geçersiz. You can not use \"E-postalar alındıktan sonra silinsin\" = Hayır iken \"Tüm e-postalar alınsın\" = Evet olamaz';
+$wb['error_delete_read_all_combination'] = 'Seçenek kombinasyonu geçersiz. You can not use \\"E-postalar alındıktan sonra silinsin\\" = Hayır iken \\"Tüm e-postalar alınsın\\" = Evet olamaz';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_policy.lng b/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
index 721b0490f7..d7b76496a1 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Kötü üstbilgi yönetici';
 $wb['spam_admin_txt'] = 'Önemsiz posta yönetici';
 $wb['message_size_limit_txt'] = 'İleti boyutu sınırı';
 $wb['banned_rulenames_txt'] = 'Yasak kural adları';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
index f10dd4ddb2..d834e4057a 100644
--- a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
@@ -6,7 +6,7 @@ $wb['active_txt'] = 'Активно';
 $wb['rulename_error_empty'] = 'Имя пустое.';
 $wb['searchterm_is_empty'] = 'Поле поиска пустое.';
 $wb['source_txt'] = 'Источник';
-$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \"a-z\", \"0-9\", \"-\", \".\", \"_\" и {пробел}';
+$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \\"a-z\\", \\"0-9\\", \\"-\\", \\".\\", \\"_\\" и {пробел}';
 $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.';
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
diff --git a/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng b/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_list.lng b/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng b/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/el_dataloghistory_list.lng b/interface/web/monitor/lib/lang/el_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/el_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/el_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/es.lng b/interface/web/monitor/lib/lang/es.lng
index 3a95c6e9c2..f4acb3c45c 100755
--- a/interface/web/monitor/lib/lang/es.lng
+++ b/interface/web/monitor/lib/lang/es.lng
@@ -27,7 +27,7 @@ $wb['monitor_logs_mailerr_txt'] = 'Registros de errores de correo';
 $wb['monitor_logs_mailwarn_txt'] = 'Registros de advertencias de correo';
 $wb['monitor_logs_messages_txt'] = 'Registros de mensajes del sistema';
 $wb['monitor_norkhunter_txt'] = 'RKHunter no está instalado, por lo que no hay registros a mostrar';
-$wb['monitor_nosupportedraid1_txt'] = 'Por el momento, soportamos \"mdadm\" o \"mpt-status\" para supervisar el RAID.<br>No hemos podido encontrarlo en su servidor. </br> Por lo tanto no podemos monitorizar su RAID todavía.';
+$wb['monitor_nosupportedraid1_txt'] = 'Por el momento, soportamos \\"mdadm\\" o \\"mpt-status\\" para supervisar el RAID.<br>No hemos podido encontrarlo en su servidor. </br> Por lo tanto no podemos monitorizar su RAID todavía.';
 $wb['monitor_serverstate_beancountercritical_txt'] = 'Existen muchos errores en el Beancounter';
 $wb['monitor_serverstate_beancountererror_txt'] = 'Existen muchísimos errores en el Beancounter';
 $wb['monitor_serverstate_beancounterinfo_txt'] = 'Existen algún error en el Beancounter';
diff --git a/interface/web/monitor/lib/lang/es_dataloghistory_list.lng b/interface/web/monitor/lib/lang/es_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/es_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/es_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng b/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng b/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/id_dataloghistory_list.lng b/interface/web/monitor/lib/lang/id_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/id_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/id_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_list.lng b/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng b/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng b/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng b/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/se_dataloghistory_list.lng b/interface/web/monitor/lib/lang/se_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/se_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/se_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng b/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng
index 9f9afd6347..f1ba8c67b8 100644
--- a/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb["list_head_txt"] = 'Datalog History';
-$wb["tstamp_txt"] = 'Date';
-$wb["server_id_txt"] = 'Server';
-$wb["dbtable_txt"] = 'DB Table';
-$wb["action_txt"] = 'Action';
-$wb["status_txt"] = 'Status';
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
 ?>
diff --git a/interface/web/sites/lib/lang/ar.lng b/interface/web/sites/lib/lang/ar.lng
index bfd833292d..6ca61afae0 100644
--- a/interface/web/sites/lib/lang/ar.lng
+++ b/interface/web/sites/lib/lang/ar.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_aps.lng b/interface/web/sites/lib/lang/ar_aps.lng
index 3ff130f57e..881c146a4d 100644
--- a/interface/web/sites/lib/lang/ar_aps.lng
+++ b/interface/web/sites/lib/lang/ar_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/ar_web_childdomain.lng b/interface/web/sites/lib/lang/ar_web_childdomain.lng
index 604a81b68f..636505f248 100644
--- a/interface/web/sites/lib/lang/ar_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/ar_web_subdomain.lng b/interface/web/sites/lib/lang/ar_web_subdomain.lng
index 1295f36697..c5fa1711bb 100644
--- a/interface/web/sites/lib/lang/ar_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/bg.lng b/interface/web/sites/lib/lang/bg.lng
index 842b70ae02..0d28df2994 100644
--- a/interface/web/sites/lib/lang/bg.lng
+++ b/interface/web/sites/lib/lang/bg.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_aps.lng b/interface/web/sites/lib/lang/bg_aps.lng
index 612adcd429..6a5f981943 100644
--- a/interface/web/sites/lib/lang/bg_aps.lng
+++ b/interface/web/sites/lib/lang/bg_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/bg_web_childdomain.lng b/interface/web/sites/lib/lang/bg_web_childdomain.lng
index 7106438c34..c7549b76f7 100644
--- a/interface/web/sites/lib/lang/bg_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/bg_web_subdomain.lng b/interface/web/sites/lib/lang/bg_web_subdomain.lng
index f4218278d9..0df1e50594 100644
--- a/interface/web/sites/lib/lang/bg_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/br.lng b/interface/web/sites/lib/lang/br.lng
index 3fdd93585e..685ce6ed28 100644
--- a/interface/web/sites/lib/lang/br.lng
+++ b/interface/web/sites/lib/lang/br.lng
@@ -30,6 +30,6 @@ $wb['Available packages'] = 'Pacotes disponíveis';
 $wb['Installed packages'] = 'Pacotes instalados';
 $wb['Update Packagelist'] = 'Atualizar lista de pacotes';
 $wb['Subdomain (Vhost)'] = 'Subdomínio (vhost)';
-$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \"proxy\" exige uma url como caminho do redirecionamento.';
+$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \\"proxy\\" exige uma url como caminho do redirecionamento.';
 $wb['Domain'] = 'Domínio';
 ?>
diff --git a/interface/web/sites/lib/lang/br_cron.lng b/interface/web/sites/lib/lang/br_cron.lng
index eab5b9f688..2bbadf6d1b 100644
--- a/interface/web/sites/lib/lang/br_cron.lng
+++ b/interface/web/sites/lib/lang/br_cron.lng
@@ -19,8 +19,8 @@ $wb['run_wday_error_format'] = 'Formato dos dias da semana é inválido.';
 $wb['command_error_format'] = 'Formato de comando é inválido. Somente endereços url http/https são permitidos.';
 $wb['unknown_fieldtype_error'] = 'Um tipo desconhecido de campo foi usado.';
 $wb['server_id_error_empty'] = 'O ID do servidor está em branco.';
-$wb['limit_cron_url_txt'] = 'Somente url do cron. Por favor, insira uma url iniciando com \"http://\" e um comando do cron.';
+$wb['limit_cron_url_txt'] = 'Somente url do cron. Por favor, insira uma url iniciando com \\"http://\\" e um comando do cron.';
 $wb['command_error_empty'] = 'Comando está em branco.';
-$wb['command_hint_txt'] = 'Você poderá usar, por exemplo: \"/var/www/clients/clientX/webY/meu_script.sh\" ou \"http://www.dominio.com.br/path/script.php\" e também a palavra reservada \"[web_root]\" substituído por \"/var/www/clients/clientX/webY/web\".';
+$wb['command_hint_txt'] = 'Você poderá usar, por exemplo: \\"/var/www/clients/clientX/webY/meu_script.sh\\" ou \\"http://www.dominio.com.br/path/script.php\\" e também a palavra reservada \\"[web_root]\\" substituído por \\"/var/www/clients/clientX/webY/web\\".';
 $wb['log_output_txt'] = 'Saída do Log';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database.lng b/interface/web/sites/lib/lang/br_database.lng
index 57b97693eb..ac916feef1 100644
--- a/interface/web/sites/lib/lang/br_database.lng
+++ b/interface/web/sites/lib/lang/br_database.lng
@@ -23,7 +23,7 @@ $wb['database_remote_error_ips'] = 'Pelo menos um dos endereços IP informados n
 $wb['database_name_error_len'] = 'Nome do banco de dados - {db} - é muito longo. 64 caracteres, incluindo o prefixo, é o limite permitido.';
 $wb['database_user_error_len'] = 'Nome do usuário do banco de dados \'{user}\' é muito longo. 16 caracteres, incluindo o prefixo, é o limite permitido.';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['database_site_error_empty'] = 'Selecione o \"site\" ao qual o banco de dados pertence.';
+$wb['database_site_error_empty'] = 'Selecione o \\"site\\" ao qual o banco de dados pertence.';
 $wb['select_site_txt'] = '- Selecionar site -';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
diff --git a/interface/web/sites/lib/lang/br_database_user.lng b/interface/web/sites/lib/lang/br_database_user.lng
index 518f0296e1..59b9fce627 100644
--- a/interface/web/sites/lib/lang/br_database_user.lng
+++ b/interface/web/sites/lib/lang/br_database_user.lng
@@ -6,7 +6,7 @@ $wb['client_txt'] = 'Cliente';
 $wb['active_txt'] = 'Ativo';
 $wb['database_user_error_empty'] = 'Usuário do banco de dados está em branco.';
 $wb['database_user_error_unique'] = 'Já existe um usuário do banco de dados com este nome no servidor. Para configurar um nome exclusivo, use como prefixo o domínio para o nome do usuário.';
-$wb['database_user_error_regex'] = 'Usuário do banco de dados inválido! O nome do usuário pode conter os seguintes caracteres: \'\"a-z\', \'A-Z\', \'0-9\' e o \'underscore\'. Tamanho: 2 - 64 caracteres.';
+$wb['database_user_error_regex'] = 'Usuário do banco de dados inválido! O nome do usuário pode conter os seguintes caracteres: \'\\"a-z\', \'A-Z\', \'0-9\' e o \'underscore\'. Tamanho: 2 - 64 caracteres.';
 $wb['database_user_error_len'] = 'O usuário do banco de dados - {user} - é muito longo. O limite do nome do usuário, incluindo o prefixo, são 16 caracteres.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
diff --git a/interface/web/sites/lib/lang/br_ftp_user.lng b/interface/web/sites/lib/lang/br_ftp_user.lng
index bb8d99ceb0..3df741ed9e 100644
--- a/interface/web/sites/lib/lang/br_ftp_user.lng
+++ b/interface/web/sites/lib/lang/br_ftp_user.lng
@@ -25,8 +25,8 @@ $wb['directory_error_empty'] = 'Diretório está em branco.';
 $wb['directory_error_notinweb'] = 'O diretório não está dentro do diretório web principal.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
 $wb['quota_size_error_regex'] = 'Cota: insira -1 para ilimitado ou um número > 0';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \"./\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \\"./\\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/br_shell_user.lng b/interface/web/sites/lib/lang/br_shell_user.lng
index c92bf5baa4..3cbc911ab3 100644
--- a/interface/web/sites/lib/lang/br_shell_user.lng
+++ b/interface/web/sites/lib/lang/br_shell_user.lng
@@ -20,8 +20,8 @@ $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
 $wb['puser_txt'] = 'Usuário web';
 $wb['pgroup_txt'] = 'Grupo web';
 $wb['ssh_rsa_txt'] = 'Chave pública SSH-RSA (para acessos baseados em chave)';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido  \"./\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido  \\"./\\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain.lng b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
index 9d4f1951d8..4acadb2c54 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
@@ -14,7 +14,7 @@ $wb['ssl_bundle_txt'] = 'Pacote';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
-$wb['web_folder_error_regex'] = 'Pasta inválida inserida. Por favor, não use barra \"/\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida inserida. Por favor, não use barra \\"/\\".';
 $wb['type_txt'] = 'Tipo';
 $wb['parent_domain_id_txt'] = 'Site pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
@@ -62,7 +62,7 @@ $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São cara
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['ruby_txt'] = 'Ruby';
diff --git a/interface/web/sites/lib/lang/br_web_childdomain.lng b/interface/web/sites/lib/lang/br_web_childdomain.lng
index 1c53d16584..ecff0c2ae8 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain.lng
@@ -36,18 +36,18 @@ $wb['domain_error_empty'] = 'Domínio está em branco.';
 $wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
 $wb['domain_error_regex'] = 'Nome de domínio é inválido.';
 $wb['host_txt'] = 'Nome do servidor';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['domain_error_wildcard'] = 'Curingas para subdomínios não são permitidos.';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento \"proxy\" exige uma url no caminho de redirecionamento.';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento \\"proxy\\" exige uma url no caminho de redirecionamento.';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
 $wb['backup_copies_txt'] = 'Limite de cópias do backup';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_domain_txt'] = 'Domínio do SSL';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não use uma barra - \"/\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não use uma barra - \\"/\\".';
 $wb['ipv6_address_txt'] = 'Endereço IPv6';
 $wb['errordocs_txt'] = 'Pasta personalizada Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
diff --git a/interface/web/sites/lib/lang/br_web_domain.lng b/interface/web/sites/lib/lang/br_web_domain.lng
index 4b2e77b654..662fdb407c 100644
--- a/interface/web/sites/lib/lang/br_web_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_domain.lng
@@ -52,10 +52,10 @@ $wb['limit_web_quota_free_txt'] = 'Cota máxima de disco disponível';
 $wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \"a-z\", \'0-9\' e \'.,-_\'.';
+$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \\"a-z\\", \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
@@ -104,7 +104,7 @@ $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida! Por favor não insira barra \"/\".';
+$wb['web_folder_error_regex'] = 'Pasta informada é inválida! Por favor não insira barra \\"/\\".';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
 $wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php:';
 $wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache:';
diff --git a/interface/web/sites/lib/lang/br_web_subdomain.lng b/interface/web/sites/lib/lang/br_web_subdomain.lng
index 8abb050438..0ccc574805 100644
--- a/interface/web/sites/lib/lang/br_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_subdomain.lng
@@ -36,7 +36,7 @@ $wb['domain_error_empty'] = 'Domínio está em branco.';
 $wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
 $wb['domain_error_regex'] = 'Nome do domínio é inválido.';
 $wb['host_txt'] = 'Host';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['domain_error_wildcard'] = 'Curingas de subdomínios não são permitidos.';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index d30db9f189..4c72b1fd88 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -56,7 +56,7 @@ $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São cara
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['backup_interval_txt'] = 'Intervalo de backup';
@@ -106,7 +106,7 @@ $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
 $wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não insira barra - \"\".';
+$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não insira barra - \\"\\".';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com essas configurações.';
 $wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
 $wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
index 8a0c3e6a1f..fa6ddad484 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
@@ -19,7 +19,7 @@ $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['host_txt'] = 'Hostname';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida. Por favor, não insira barra - \"/\".';
+$wb['web_folder_error_regex'] = 'Pasta informada é inválida. Por favor, não insira barra - \\"/\\".';
 $wb['type_txt'] = 'Tipo';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
 $wb['redirect_path_txt'] = 'Caminho para redirecionamento';
@@ -60,13 +60,13 @@ $wb['client_group_id_txt'] = 'Cliente';
 $wb['stats_password_txt'] = 'Senha para estatísticas web';
 $wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Cota de disco';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. Caracteres válidos são: \'0-9\' e \".,-_\".';
+$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. Caracteres válidos são: \'0-9\' e \\".,-_\\".';
 $wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
 $wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. Caracteres válidos são: \'A-Z\'.';
 $wb['limit_traffic_quota_free_txt'] = 'Cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
 $wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
 $wb['ruby_txt'] = 'Ruby';
@@ -121,9 +121,9 @@ $wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas Permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 $wb['variables_txt'] = 'Variáveis';
 $wb['backup_excludes_txt'] = 'Diretórios Excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: \"web/cache/*,web/backup\".)';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: \\"web/cache/*,web/backup\\".)';
 $wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos.';
-$wb['subdomain_error_empty'] = 'O campo \"Subdomínio\" está em branco ou contém caracteres inválidos.';
+$wb['subdomain_error_empty'] = 'O campo \\"Subdomínio\\" está em branco ou contém caracteres inválidos.';
 $wb['http_port_txt'] = 'Porta HTTP';
 $wb['https_port_txt'] = 'Porta HTTPS';
 $wb['http_port_error_regex'] = 'Porta HTTP inválida.';
diff --git a/interface/web/sites/lib/lang/br_webdav_user.lng b/interface/web/sites/lib/lang/br_webdav_user.lng
index b135d5e0fa..4347f8ae36 100644
--- a/interface/web/sites/lib/lang/br_webdav_user.lng
+++ b/interface/web/sites/lib/lang/br_webdav_user.lng
@@ -12,8 +12,8 @@ $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
 $wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
 $wb['directory_error_empty'] = 'Diretório está em branco.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \"./\" no caminho.';
+$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \\"./\\" no caminho.';
 $wb['generate_password_txt'] = 'Gerar senha';
 $wb['repeat_password_txt'] = 'Repetir senha';
 $wb['password_mismatch_txt'] = 'A senhas não coincidem.';
diff --git a/interface/web/sites/lib/lang/ca.lng b/interface/web/sites/lib/lang/ca.lng
index c914ef002f..9acee9d061 100644
--- a/interface/web/sites/lib/lang/ca.lng
+++ b/interface/web/sites/lib/lang/ca.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Packages disponibles';
 $wb['Installed packages'] = 'Packages installés';
 $wb['Update Packagelist'] = 'Mise à jour de la liste des packages';
 $wb['Subdomain (Vhost)'] = 'Sous-domaine (Vhost)';
-$wb['error_proxy_requires_url'] = 'Type de redirection \"proxy\" nécessite une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Type de redirection \\"proxy\\" nécessite une URL comme chemin de redirection.';
 ?>
diff --git a/interface/web/sites/lib/lang/ca_aps.lng b/interface/web/sites/lib/lang/ca_aps.lng
index 7233c1f0dd..062d6ea589 100644
--- a/interface/web/sites/lib/lang/ca_aps.lng
+++ b/interface/web/sites/lib/lang/ca_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Le dossier d\'installation choisi est invalide
 $wb['error_license_agreement'] = 'Avant de continuer, vous devez accepter les conditions d\'utilisation (licence).';
 $wb['error_no_database_pw'] = 'Vous n\'avez pas renseigné de mot de passe BDD valide.';
 $wb['error_short_database_pw'] = 'Veuillez saisir un mot de passe BDD plus long.';
-$wb['error_no_value_for'] = 'Le champ \"%s\" ne peut pas être vide.';
-$wb['error_short_value_for'] = 'Le champ \"%s\" nécessite une valeur plus longue.';
-$wb['error_long_value_for'] = 'Le champ \"%s\" nécessite une valeur plus courte.';
-$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \"%s\".';
-$wb['error_inv_email_for'] = 'L\'adresse courriel saisie pour le champ \"%s\" est invalide.';
-$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \"%s\" est invalide.';
-$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \"%s\" est invalide.';
-$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \"%s\" est invalide.';
+$wb['error_no_value_for'] = 'Le champ \\"%s\\" ne peut pas être vide.';
+$wb['error_short_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus longue.';
+$wb['error_long_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus courte.';
+$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \\"%s\\".';
+$wb['error_inv_email_for'] = 'L\'adresse courriel saisie pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \\"%s\\" est invalide.';
 $wb['error_used_location'] = 'Le chemin de destination contient déjà un package d\'installation.';
 $wb['installation_task_txt'] = 'Installation prévue';
 $wb['installation_error_txt'] = 'Erreur d\'installation';
diff --git a/interface/web/sites/lib/lang/ca_web_childdomain.lng b/interface/web/sites/lib/lang/ca_web_childdomain.lng
index 1d838990e3..762acfe244 100644
--- a/interface/web/sites/lib/lang/ca_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_redirect_txt'] = 'No redirect';
 $wb['no_flag_txt'] = 'No flag';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/ca_web_subdomain.lng b/interface/web/sites/lib/lang/ca_web_subdomain.lng
index ec5980a91b..13fd0d66ef 100644
--- a/interface/web/sites/lib/lang/ca_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Aucun flag';
 $wb['domain_error_wildcard'] = 'Les sous-domaines joker ne sont pas autorisés.';
 $wb['proxy_directives_txt'] = 'Directives pour les Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Directives pour les Proxy Snippets disponibles :';
-$wb['error_proxy_requires_url'] = 'Les redirections de type \"proxy\" nécessitent une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Les redirections de type \\"proxy\\" nécessitent une URL comme chemin de redirection.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/cz.lng b/interface/web/sites/lib/lang/cz.lng
index 2e4276c817..4c16438e34 100644
--- a/interface/web/sites/lib/lang/cz.lng
+++ b/interface/web/sites/lib/lang/cz.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Dostupné balíčky';
 $wb['Installed packages'] = 'Nainstalované balíčky';
 $wb['Update Packagelist'] = 'Aktualizace seznamu balíčků';
 $wb['Subdomain (Vhost)'] = 'Subdoména (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_aps.lng b/interface/web/sites/lib/lang/cz_aps.lng
index bb8015951c..adf6ccf58e 100644
--- a/interface/web/sites/lib/lang/cz_aps.lng
+++ b/interface/web/sites/lib/lang/cz_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Instalace plánované';
 $wb['installation_error_txt'] = 'Chyba instalace';
diff --git a/interface/web/sites/lib/lang/cz_web_childdomain.lng b/interface/web/sites/lib/lang/cz_web_childdomain.lng
index 5a5091c89a..b159976b29 100644
--- a/interface/web/sites/lib/lang/cz_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_childdomain.lng
@@ -49,7 +49,7 @@ $wb['no_flag_txt'] = 'Žádný příznak';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['ipv6_address_txt'] = 'IPv6 adresa';
 $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.';
 $wb['hd_quota_error_empty'] = 'Harddisk quota is 0 or empty.';
diff --git a/interface/web/sites/lib/lang/cz_web_subdomain.lng b/interface/web/sites/lib/lang/cz_web_subdomain.lng
index 986f76acc8..cd301db143 100644
--- a/interface/web/sites/lib/lang/cz_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Žádný příznak';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/de_web_childdomain.lng b/interface/web/sites/lib/lang/de_web_childdomain.lng
index 561e8de968..05b1f1d51d 100644
--- a/interface/web/sites/lib/lang/de_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_redirect_txt'] = 'Kein Redirect';
 $wb['no_flag_txt'] = 'Kein Flag';
 $wb['proxy_directives_txt'] = 'Proxy-Direktiven';
 $wb['available_proxy_directive_snippets_txt'] = 'Verfügbare Proxy Direktiven Schnipsel:';
-$wb['error_proxy_requires_url'] = 'Weiterleitungstyp \"proxy\" erfordert eine URL als Weiterleitungspfad.';
+$wb['error_proxy_requires_url'] = 'Weiterleitungstyp \\"proxy\\" erfordert eine URL als Weiterleitungspfad.';
 $wb['backup_interval_txt'] = 'Backup-Intervall';
 $wb['backup_copies_txt'] = 'Anzahl der Backups';
 $wb['ssl_key_txt'] = 'SSL-Schlüssel';
diff --git a/interface/web/sites/lib/lang/de_web_subdomain.lng b/interface/web/sites/lib/lang/de_web_subdomain.lng
index a88918b09a..586c90adc3 100644
--- a/interface/web/sites/lib/lang/de_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_redirect_txt'] = 'Kein Redirect';
 $wb['no_flag_txt'] = 'Kein Flag';
 $wb['proxy_directives_txt'] = 'Proxy-Direktiven';
 $wb['available_proxy_directive_snippets_txt'] = 'Verfügbare Proxy Direktiven Schnipsel:';
-$wb['error_proxy_requires_url'] = 'Weiterleitungstyp \"proxy\" erfordert eine URL als Weiterleitungspfad.';
+$wb['error_proxy_requires_url'] = 'Weiterleitungstyp \\"proxy\\" erfordert eine URL als Weiterleitungspfad.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/dk.lng b/interface/web/sites/lib/lang/dk.lng
index a99760a66e..39974fef5d 100644
--- a/interface/web/sites/lib/lang/dk.lng
+++ b/interface/web/sites/lib/lang/dk.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Tilgængelig pakker';
 $wb['Installed packages'] = 'Installeret pakker';
 $wb['Update Packagelist'] = 'Opdater Pakkeliste';
 $wb['Subdomain (Vhost)'] = 'Sub-domæne (Vhost)';
-$wb['error_proxy_requires_url'] = 'Omdiriger Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Omdiriger Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/dk_aps.lng b/interface/web/sites/lib/lang/dk_aps.lng
index c3f2983cfd..ca006e2eb2 100644
--- a/interface/web/sites/lib/lang/dk_aps.lng
+++ b/interface/web/sites/lib/lang/dk_aps.lng
@@ -40,14 +40,14 @@ $wb['error_inv_main_location'] = 'Den oplyste installations mappe er ugyldig.';
 $wb['error_license_agreement'] = 'For at fortsætte skal du acceptere licensaftalen.';
 $wb['error_no_database_pw'] = 'Du har ikke oplyst en database adgangskode.';
 $wb['error_short_database_pw'] = 'Vælg en længer database adgangskode.';
-$wb['error_no_value_for'] = 'Feltet \"%s\" må ikke være tomt.';
-$wb['error_short_value_for'] = 'Feltet \"%s\" kræver en længere indtastnings værdi.';
-$wb['error_long_value_for'] = 'Feltet \"%s\" kræver en kortere indtastnings værdi.';
-$wb['error_inv_value_for'] = 'Du har indtastet en ugyldig værdi for feltet \"%s\".';
-$wb['error_inv_email_for'] = 'Du har indtastet en ugyldig mail adresse for feltet \"%s\".';
-$wb['error_inv_domain_for'] = 'Du har indtastet et ugyldigt domæne for feltet \"%s\".';
-$wb['error_inv_integer_for'] = 'Du har indtastet et ugyldigt tal for feltet \"%s\".';
-$wb['error_inv_float_for'] = 'Du har indtastet et ugyldigt floating point tal for feltet \"%s\".';
+$wb['error_no_value_for'] = 'Feltet \\"%s\\" må ikke være tomt.';
+$wb['error_short_value_for'] = 'Feltet \\"%s\\" kræver en længere indtastnings værdi.';
+$wb['error_long_value_for'] = 'Feltet \\"%s\\" kræver en kortere indtastnings værdi.';
+$wb['error_inv_value_for'] = 'Du har indtastet en ugyldig værdi for feltet \\"%s\\".';
+$wb['error_inv_email_for'] = 'Du har indtastet en ugyldig mail adresse for feltet \\"%s\\".';
+$wb['error_inv_domain_for'] = 'Du har indtastet et ugyldigt domæne for feltet \\"%s\\".';
+$wb['error_inv_integer_for'] = 'Du har indtastet et ugyldigt tal for feltet \\"%s\\".';
+$wb['error_inv_float_for'] = 'Du har indtastet et ugyldigt floating point tal for feltet \\"%s\\".';
 $wb['error_used_location'] = 'Installations stien indeholder allerede en pakke installation.';
 $wb['installation_task_txt'] = 'Installation planlagt';
 $wb['installation_error_txt'] = 'Installations fejl';
diff --git a/interface/web/sites/lib/lang/dk_web_childdomain.lng b/interface/web/sites/lib/lang/dk_web_childdomain.lng
index 1d838990e3..762acfe244 100644
--- a/interface/web/sites/lib/lang/dk_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_redirect_txt'] = 'No redirect';
 $wb['no_flag_txt'] = 'No flag';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/dk_web_subdomain.lng b/interface/web/sites/lib/lang/dk_web_subdomain.lng
index 4fffd59365..c14a347263 100644
--- a/interface/web/sites/lib/lang/dk_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_redirect_txt'] = 'Ingen redirect';
 $wb['no_flag_txt'] = 'Ingen flag';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Tilgængelig Proxy Direktiv Kodestykker:';
-$wb['error_proxy_requires_url'] = 'Omdiriger Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Omdiriger Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/el.lng b/interface/web/sites/lib/lang/el.lng
index 19bfc27349..2d726140fd 100644
--- a/interface/web/sites/lib/lang/el.lng
+++ b/interface/web/sites/lib/lang/el.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/el_aps.lng b/interface/web/sites/lib/lang/el_aps.lng
index 73cb49f106..0209737f61 100644
--- a/interface/web/sites/lib/lang/el_aps.lng
+++ b/interface/web/sites/lib/lang/el_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/el_web_childdomain.lng b/interface/web/sites/lib/lang/el_web_childdomain.lng
index a1cead28e3..3c5cb7a936 100644
--- a/interface/web/sites/lib/lang/el_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_childdomain.lng
@@ -45,7 +45,7 @@ $wb['no_flag_txt'] = 'Χωρίς Σημαία';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains δεν επιτρέπονται.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Διαθέσιμα Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Ο τύπος ανακατεύθυνσης \"proxy\" απαιτεί ένα URL ως μονοπάτι ανακατεύθυνσης.';
+$wb['error_proxy_requires_url'] = 'Ο τύπος ανακατεύθυνσης \\"proxy\\" απαιτεί ένα URL ως μονοπάτι ανακατεύθυνσης.';
 $wb['ssl_domain_txt'] = 'SSL Domain';
 $wb['web_folder_error_regex'] = 'Εισάγατε μη έγκυρο φάκελο. Μην εισάγετε την κάθετο.';
 $wb['ipv6_address_txt'] = 'Διεύθυνση IPv6';
diff --git a/interface/web/sites/lib/lang/el_web_subdomain.lng b/interface/web/sites/lib/lang/el_web_subdomain.lng
index b3f8e1312f..606137bc82 100644
--- a/interface/web/sites/lib/lang/el_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Χωρίς Σημαία';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/es.lng b/interface/web/sites/lib/lang/es.lng
index 78cfa3a609..7d128081f6 100755
--- a/interface/web/sites/lib/lang/es.lng
+++ b/interface/web/sites/lib/lang/es.lng
@@ -8,7 +8,7 @@ $wb['Cron'] = 'Trabajos programados';
 $wb['Database User'] = 'Usuarios de bases de datos';
 $wb['Database'] = 'Bases de datos';
 $wb['Domain'] = 'Dominio';
-$wb['error_proxy_requires_url'] = 'La redirección del tipo \"proxy\" requiere de una URL como ruta de redirección.';
+$wb['error_proxy_requires_url'] = 'La redirección del tipo \\"proxy\\" requiere de una URL como ruta de redirección.';
 $wb['Folder users'] = 'Usuarios de carpetas protegidas';
 $wb['Folder'] = 'Carpetas protegidas';
 $wb['FTP'] = 'FTP';
diff --git a/interface/web/sites/lib/lang/es_aps.lng b/interface/web/sites/lib/lang/es_aps.lng
index afecc225fc..3780b32edd 100755
--- a/interface/web/sites/lib/lang/es_aps.lng
+++ b/interface/web/sites/lib/lang/es_aps.lng
@@ -12,20 +12,20 @@ $wb['config_script_txt'] = 'Archivo de configuración';
 $wb['database_txt'] = 'Base de datos';
 $wb['description_txt'] = 'Descripción';
 $wb['details_txt'] = 'Detalles';
-$wb['error_inv_domain_for'] = 'Ha ingresado un dominio inválido en el campo \"%s\".';
-$wb['error_inv_email_for'] = 'Ha ingresado una dirección de correo inválida en el campo \"%s\".';
-$wb['error_inv_float_for'] = 'Ha introducido un número de punto flotante no válido para el campo \"%s\".';
-$wb['error_inv_integer_for'] = 'Ha ingresado un número inválido en el campo \"%s\".';
+$wb['error_inv_domain_for'] = 'Ha ingresado un dominio inválido en el campo \\"%s\\".';
+$wb['error_inv_email_for'] = 'Ha ingresado una dirección de correo inválida en el campo \\"%s\\".';
+$wb['error_inv_float_for'] = 'Ha introducido un número de punto flotante no válido para el campo \\"%s\\".';
+$wb['error_inv_integer_for'] = 'Ha ingresado un número inválido en el campo \\"%s\\".';
 $wb['error_inv_main_location'] = 'La ubicación de la carpeta de instalación proporcionada es inválida.';
-$wb['error_inv_value_for'] = 'Ha ingresado un valor inválido en el campo \"%s\".';
+$wb['error_inv_value_for'] = 'Ha ingresado un valor inválido en el campo \\"%s\\".';
 $wb['error_license_agreement'] = 'Para poder continuar debe aceptar el acuerdo de licencia.';
-$wb['error_long_value_for'] = 'El campo \"%s\" requiere una entrada más corta.';
+$wb['error_long_value_for'] = 'El campo \\"%s\\" requiere una entrada más corta.';
 $wb['error_main_domain'] = 'El dominio de la ruta de la instalación es inválido.';
 $wb['error_no_database_pw'] = 'No ha proporcionado una contraseña válida para la base de datos.';
 $wb['error_no_main_location'] = 'Ha proporcionado una ruta de instalación inválida.';
-$wb['error_no_value_for'] = 'El campo \"%s\" no puede estar vacío.';
+$wb['error_no_value_for'] = 'El campo \\"%s\\" no puede estar vacío.';
 $wb['error_short_database_pw'] = 'Por favor seleccione un contraseña más larga para la base de datos.';
-$wb['error_short_value_for'] = 'El campo \"%s\" requiere una entrada más larga.';
+$wb['error_short_value_for'] = 'El campo \\"%s\\" requiere una entrada más larga.';
 $wb['error_used_location'] = 'La ruta de instalación ya contiene un paquete instalado.';
 $wb['homepage_txt'] = 'Página de inicio';
 $wb['install_language_txt'] = 'Idioma de la interfaz';
diff --git a/interface/web/sites/lib/lang/es_web_childdomain.lng b/interface/web/sites/lib/lang/es_web_childdomain.lng
index 839110669f..25843a0e21 100644
--- a/interface/web/sites/lib/lang/es_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Sin flag';
 $wb['domain_error_wildcard'] = 'No se permiten subdominios comodín.';
 $wb['proxy_directives_txt'] = 'Directivas de Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Fragmentos de directivas de proxy disponibles:';
-$wb['error_proxy_requires_url'] = 'Tipo de redirección \"proxy\" necesita una URL como ruta de redirección.';
+$wb['error_proxy_requires_url'] = 'Tipo de redirección \\"proxy\\" necesita una URL como ruta de redirección.';
 $wb['backup_interval_txt'] = 'Intervalo de copia de seguridad';
 $wb['backup_copies_txt'] = 'Número de copias de seguridad';
 $wb['ssl_key_txt'] = 'Clave SSL';
@@ -104,7 +104,7 @@ $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout debe ser un valor entero positivo.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests debe ser un valor entero >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor ten en cuenta que debes tener una versión de PHP >= 5.3.9 para poder usar el gestor de procesos \"ondemand\". Si seleccionas \"ondemand\" para una versión de PHP anterior, ¡PHP dejará de funcionar!';
+$wb['pm_ondemand_hint_txt'] = 'Por favor ten en cuenta que debes tener una versión de PHP >= 5.3.9 para poder usar el gestor de procesos \\"ondemand\\". Si seleccionas \\"ondemand\\" para una versión de PHP anterior, ¡PHP dejará de funcionar!';
 $wb['generate_password_txt'] = 'Generar contraseña';
 $wb['repeat_password_txt'] = 'Repetir contraseña';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
diff --git a/interface/web/sites/lib/lang/es_web_subdomain.lng b/interface/web/sites/lib/lang/es_web_subdomain.lng
index 8bae76742c..2221a749c2 100644
--- a/interface/web/sites/lib/lang/es_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index 4a2b17cab7..f98c02db15 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -102,7 +102,7 @@ $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout debe ser un valor entero positivo.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests debe ser un valor entero >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor ten en cuenta que debes tener una versión de PHP >= 5.3.9 para poder usar el gestor de procesos \"ondemand\". Si seleccionas \"ondemand\" para una versión de PHP anterior, ¡PHP dejará de funcionar!';
+$wb['pm_ondemand_hint_txt'] = 'Por favor ten en cuenta que debes tener una versión de PHP >= 5.3.9 para poder usar el gestor de procesos \\"ondemand\\". Si seleccionas \\"ondemand\\" para una versión de PHP anterior, ¡PHP dejará de funcionar!';
 $wb['generate_password_txt'] = 'Generar contraseña';
 $wb['repeat_password_txt'] = 'Repetir contraseña';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
diff --git a/interface/web/sites/lib/lang/fi.lng b/interface/web/sites/lib/lang/fi.lng
index 5adab57775..ebf94bc190 100755
--- a/interface/web/sites/lib/lang/fi.lng
+++ b/interface/web/sites/lib/lang/fi.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_aps.lng b/interface/web/sites/lib/lang/fi_aps.lng
index cc8dc83588..d78701f272 100644
--- a/interface/web/sites/lib/lang/fi_aps.lng
+++ b/interface/web/sites/lib/lang/fi_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/fi_web_childdomain.lng b/interface/web/sites/lib/lang/fi_web_childdomain.lng
index 98c41088a1..5105ba3f2e 100755
--- a/interface/web/sites/lib/lang/fi_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/fi_web_subdomain.lng b/interface/web/sites/lib/lang/fi_web_subdomain.lng
index 7500fb7a61..7fe7103905 100644
--- a/interface/web/sites/lib/lang/fi_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/fr.lng b/interface/web/sites/lib/lang/fr.lng
index c914ef002f..9acee9d061 100644
--- a/interface/web/sites/lib/lang/fr.lng
+++ b/interface/web/sites/lib/lang/fr.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Packages disponibles';
 $wb['Installed packages'] = 'Packages installés';
 $wb['Update Packagelist'] = 'Mise à jour de la liste des packages';
 $wb['Subdomain (Vhost)'] = 'Sous-domaine (Vhost)';
-$wb['error_proxy_requires_url'] = 'Type de redirection \"proxy\" nécessite une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Type de redirection \\"proxy\\" nécessite une URL comme chemin de redirection.';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_aps.lng b/interface/web/sites/lib/lang/fr_aps.lng
index 0f067e78bc..6beef9939f 100644
--- a/interface/web/sites/lib/lang/fr_aps.lng
+++ b/interface/web/sites/lib/lang/fr_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Le dossier d’installation choisi est invalid
 $wb['error_license_agreement'] = 'Avant de continuer, vous devez accepter les conditions d’utilisation (licence).';
 $wb['error_no_database_pw'] = 'Vous n’avez pas renseigné de mot de passe BDD valide.';
 $wb['error_short_database_pw'] = 'Veuillez saisir un mot de passe BDD plus long.';
-$wb['error_no_value_for'] = 'Le champ \"%s\" ne peut pas être vide.';
-$wb['error_short_value_for'] = 'Le champ \"%s\" nécessite une valeur plus longue.';
-$wb['error_long_value_for'] = 'Le champ \"%s\" nécessite une valeur plus courte.';
-$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \"%s\".';
-$wb['error_inv_email_for'] = 'L’adresse e-mail saisie pour le champ \"%s\" est invalide.';
-$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \"%s\" est invalide.';
-$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \"%s\" est invalide.';
-$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \"%s\" est invalide.';
+$wb['error_no_value_for'] = 'Le champ \\"%s\\" ne peut pas être vide.';
+$wb['error_short_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus longue.';
+$wb['error_long_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus courte.';
+$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \\"%s\\".';
+$wb['error_inv_email_for'] = 'L’adresse e-mail saisie pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \\"%s\\" est invalide.';
 $wb['error_used_location'] = 'Le chemin de destination contient déjà un package d’installation.';
 $wb['installation_task_txt'] = 'Installation prévue';
 $wb['installation_error_txt'] = 'Erreur d’installation';
diff --git a/interface/web/sites/lib/lang/fr_web_childdomain.lng b/interface/web/sites/lib/lang/fr_web_childdomain.lng
index f33ca58f09..1be206e122 100644
--- a/interface/web/sites/lib/lang/fr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Aucun flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/fr_web_subdomain.lng b/interface/web/sites/lib/lang/fr_web_subdomain.lng
index 6dfc914a0a..957dfbfed6 100644
--- a/interface/web/sites/lib/lang/fr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Aucun flag';
 $wb['domain_error_wildcard'] = 'Les sous-domaines joker ne sont pas autorisés.';
 $wb['proxy_directives_txt'] = 'Directives pour les Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Directives pour les Proxy Snippets disponibles :';
-$wb['error_proxy_requires_url'] = 'Les redirections de type \"proxy\" nécessitent une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Les redirections de type \\"proxy\\" nécessitent une URL comme chemin de redirection.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/hr.lng b/interface/web/sites/lib/lang/hr.lng
index 4c53c89843..b6af1225ac 100644
--- a/interface/web/sites/lib/lang/hr.lng
+++ b/interface/web/sites/lib/lang/hr.lng
@@ -30,6 +30,6 @@ $wb['Available packages'] = 'Dostupni paketi';
 $wb['Installed packages'] = 'Instalirani paketi';
 $wb['Update Packagelist'] = 'Osvježi listu paketa';
 $wb['Subdomain (Vhost)'] = 'Poddomena (Vhost)';
-$wb['error_proxy_requires_url'] = '\"proxy\" redirekcija zahtijeva URL za redirekcijsku putanju.';
+$wb['error_proxy_requires_url'] = '\\"proxy\\" redirekcija zahtijeva URL za redirekcijsku putanju.';
 $wb['Domain'] = 'Domain';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_aps.lng b/interface/web/sites/lib/lang/hr_aps.lng
index 6169342e71..79d31cf7fa 100644
--- a/interface/web/sites/lib/lang/hr_aps.lng
+++ b/interface/web/sites/lib/lang/hr_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Instalacija u postupku';
 $wb['installation_error_txt'] = 'Instalacijska greška';
diff --git a/interface/web/sites/lib/lang/hr_web_childdomain.lng b/interface/web/sites/lib/lang/hr_web_childdomain.lng
index f0e69f24f8..99df0d2fdf 100644
--- a/interface/web/sites/lib/lang/hr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Bez markiranja';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/hr_web_subdomain.lng b/interface/web/sites/lib/lang/hr_web_subdomain.lng
index 18fe4630a4..76d7f39571 100644
--- a/interface/web/sites/lib/lang/hr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Bez markiranja';
 $wb['domain_error_wildcard'] = 'Wildcard poddomene nisu dozvoljene.';
 $wb['proxy_directives_txt'] = 'Proxy direktive';
 $wb['available_proxy_directive_snippets_txt'] = 'Dostupne proxy direktive:';
-$wb['error_proxy_requires_url'] = 'Vrsta redirekcije \"proxy\" zahtjeva URL kao redirekcijsku putanju.';
+$wb['error_proxy_requires_url'] = 'Vrsta redirekcije \\"proxy\\" zahtjeva URL kao redirekcijsku putanju.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/hu.lng b/interface/web/sites/lib/lang/hu.lng
index 1a3e31d3f9..2c156a4775 100644
--- a/interface/web/sites/lib/lang/hu.lng
+++ b/interface/web/sites/lib/lang/hu.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_aps.lng b/interface/web/sites/lib/lang/hu_aps.lng
index 9330a1fb45..88708732df 100644
--- a/interface/web/sites/lib/lang/hu_aps.lng
+++ b/interface/web/sites/lib/lang/hu_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/hu_web_childdomain.lng b/interface/web/sites/lib/lang/hu_web_childdomain.lng
index aa554d4bc4..5ac19c3bbc 100644
--- a/interface/web/sites/lib/lang/hu_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['redirect_error_regex'] = 'Invalid redirect path. Valid redirects are for ex
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/hu_web_subdomain.lng b/interface/web/sites/lib/lang/hu_web_subdomain.lng
index 79c9ecc700..84874b22c5 100644
--- a/interface/web/sites/lib/lang/hu_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['redirect_error_regex'] = 'Invalid redirect path. Valid redirects are for ex
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/id.lng b/interface/web/sites/lib/lang/id.lng
index 4fdae1813f..c8510df6cb 100644
--- a/interface/web/sites/lib/lang/id.lng
+++ b/interface/web/sites/lib/lang/id.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/id_aps.lng b/interface/web/sites/lib/lang/id_aps.lng
index 6f6d0bced2..b8c9af2152 100644
--- a/interface/web/sites/lib/lang/id_aps.lng
+++ b/interface/web/sites/lib/lang/id_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/id_web_childdomain.lng b/interface/web/sites/lib/lang/id_web_childdomain.lng
index 2b97dc223a..d5fd9711a4 100644
--- a/interface/web/sites/lib/lang/id_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/id_web_subdomain.lng b/interface/web/sites/lib/lang/id_web_subdomain.lng
index 7f51be8e44..c2d007e693 100644
--- a/interface/web/sites/lib/lang/id_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/it.lng b/interface/web/sites/lib/lang/it.lng
index 2237545be9..77473bd0f8 100644
--- a/interface/web/sites/lib/lang/it.lng
+++ b/interface/web/sites/lib/lang/it.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Pacchetti disponibili';
 $wb['Installed packages'] = 'Pacchetti  Installati';
 $wb['Update Packagelist'] = 'Aggiorna Elenco Pacchetti';
 $wb['Subdomain (Vhost)'] = 'Sottodominio (Vhost)';
-$wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \"proxy\" richiede una URL come percorso del reinderizzamento.';
+$wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \\"proxy\\" richiede una URL come percorso del reinderizzamento.';
 ?>
diff --git a/interface/web/sites/lib/lang/it_aps.lng b/interface/web/sites/lib/lang/it_aps.lng
index ade7808616..0a6365f98f 100644
--- a/interface/web/sites/lib/lang/it_aps.lng
+++ b/interface/web/sites/lib/lang/it_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'La cartella di installazione fornita non è va
 $wb['error_license_agreement'] = 'Per poter proseguire è necessario che prendi visione ed accetti l accordi di licenza.';
 $wb['error_no_database_pw'] = 'La password fornita non è valida.';
 $wb['error_short_database_pw'] = 'Per favore scegli una password di database più lunga.';
-$wb['error_no_value_for'] = 'Il campo \"%s\" non può essere vuoto.';
-$wb['error_short_value_for'] = 'Il campo \"%s\" richiede un valore immesso più lungo.';
-$wb['error_long_value_for'] = 'Il campo \"%s\" richiede un valore immesso più corto.';
-$wb['error_inv_value_for'] = 'Hai inserito un valore non valido per il campo \"%s\".';
-$wb['error_inv_email_for'] = 'Hai inserito un indirizzo email non valido per il campo \"%s\".';
-$wb['error_inv_domain_for'] = 'Hai inserito un dominio non valido per il campo \"%s\".';
-$wb['error_inv_integer_for'] = 'Hai inserito un numero non valido per il campo  \"%s\".';
-$wb['error_inv_float_for'] = 'Hai inserito un numero di floating point non valido per il campo \"%s\".';
+$wb['error_no_value_for'] = 'Il campo \\"%s\\" non può essere vuoto.';
+$wb['error_short_value_for'] = 'Il campo \\"%s\\" richiede un valore immesso più lungo.';
+$wb['error_long_value_for'] = 'Il campo \\"%s\\" richiede un valore immesso più corto.';
+$wb['error_inv_value_for'] = 'Hai inserito un valore non valido per il campo \\"%s\\".';
+$wb['error_inv_email_for'] = 'Hai inserito un indirizzo email non valido per il campo \\"%s\\".';
+$wb['error_inv_domain_for'] = 'Hai inserito un dominio non valido per il campo \\"%s\\".';
+$wb['error_inv_integer_for'] = 'Hai inserito un numero non valido per il campo  \\"%s\\".';
+$wb['error_inv_float_for'] = 'Hai inserito un numero di floating point non valido per il campo \\"%s\\".';
 $wb['error_used_location'] = 'L installazione della patch  contiene già un pacchetto di installazione.';
 $wb['installation_task_txt'] = 'Installazione pianificata';
 $wb['installation_error_txt'] = 'Errore di installazione';
diff --git a/interface/web/sites/lib/lang/it_web_childdomain.lng b/interface/web/sites/lib/lang/it_web_childdomain.lng
index edd32aa6db..3a214e298e 100644
--- a/interface/web/sites/lib/lang/it_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/it_web_subdomain.lng b/interface/web/sites/lib/lang/it_web_subdomain.lng
index 0019304914..956b5c3be0 100644
--- a/interface/web/sites/lib/lang/it_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Non sono ammessi caratteri jolly per i sottodomini.';
 $wb['proxy_directives_txt'] = 'Direttive Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Snippets Direttive Proxy disponibili:';
-$wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \"proxy\" richiede una URL come percorso di reinderizzamento.';
+$wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \\"proxy\\" richiede una URL come percorso di reinderizzamento.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/ja.lng b/interface/web/sites/lib/lang/ja.lng
index 470ec2baec..920064bc5e 100644
--- a/interface/web/sites/lib/lang/ja.lng
+++ b/interface/web/sites/lib/lang/ja.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_aps.lng b/interface/web/sites/lib/lang/ja_aps.lng
index 91f8ad102c..dc6b22edf7 100644
--- a/interface/web/sites/lib/lang/ja_aps.lng
+++ b/interface/web/sites/lib/lang/ja_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/ja_web_childdomain.lng b/interface/web/sites/lib/lang/ja_web_childdomain.lng
index fe885c8c3e..d59d7bbda5 100644
--- a/interface/web/sites/lib/lang/ja_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/ja_web_subdomain.lng b/interface/web/sites/lib/lang/ja_web_subdomain.lng
index f77c98444e..5eb45907ea 100644
--- a/interface/web/sites/lib/lang/ja_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/nl.lng b/interface/web/sites/lib/lang/nl.lng
index 89a4caa109..8e07a1844a 100644
--- a/interface/web/sites/lib/lang/nl.lng
+++ b/interface/web/sites/lib/lang/nl.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Beschikbare pakketten';
 $wb['Installed packages'] = 'Geïnstalleerde pakketten';
 $wb['Update Packagelist'] = 'Pakkettenlijst bijwerken';
 $wb['Subdomain (Vhost)'] = 'Subdomein (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_aps.lng b/interface/web/sites/lib/lang/nl_aps.lng
index dfd852dcd0..c0adacee99 100644
--- a/interface/web/sites/lib/lang/nl_aps.lng
+++ b/interface/web/sites/lib/lang/nl_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/nl_web_childdomain.lng b/interface/web/sites/lib/lang/nl_web_childdomain.lng
index 4c5b3dc2ad..e99616ce11 100644
--- a/interface/web/sites/lib/lang/nl_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/nl_web_subdomain.lng b/interface/web/sites/lib/lang/nl_web_subdomain.lng
index c644d8113d..2f4412afba 100644
--- a/interface/web/sites/lib/lang/nl_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Geen flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomeinen zijn niet toegestaan.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port niet correct.';
diff --git a/interface/web/sites/lib/lang/pl_aps.lng b/interface/web/sites/lib/lang/pl_aps.lng
index 398c74e4c0..c17bbca532 100644
--- a/interface/web/sites/lib/lang/pl_aps.lng
+++ b/interface/web/sites/lib/lang/pl_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Instalacja w podanym folderze jest niemożliwa
 $wb['error_license_agreement'] = 'Aby kontynuować musisz zaakceptować umowę licencyjną.';
 $wb['error_no_database_pw'] = 'Nie podałeś prawidłowego hasła do bazy danych.';
 $wb['error_short_database_pw'] = 'Wybierz dłuższe hasło do bazy.';
-$wb['error_no_value_for'] = 'Pole \"%s\" nie może być puste';
-$wb['error_short_value_for'] = 'Pole \"%s\" wymaga dłuższej wartości';
-$wb['error_long_value_for'] = 'Pole  \"%s\" wymaga krótszej wartości';
-$wb['error_inv_value_for'] = 'Wprowadziłeś nieprawidłową wartość w polu \"%s\"';
-$wb['error_inv_email_for'] = 'Wprowadziłeś nieprawidłowy adres email w polu \"%s\"';
-$wb['error_inv_domain_for'] = 'Wprowadziłeś nieprawidłową domenę w polu \"%s\"';
-$wb['error_inv_integer_for'] = 'Wprowadziłeś nieprawidłową liczbę w polu \"%s\"';
-$wb['error_inv_float_for'] = 'Wprowadziłeś nieprawidłową liczbę w polu \"%s\"';
+$wb['error_no_value_for'] = 'Pole \\"%s\\" nie może być puste';
+$wb['error_short_value_for'] = 'Pole \\"%s\\" wymaga dłuższej wartości';
+$wb['error_long_value_for'] = 'Pole  \\"%s\\" wymaga krótszej wartości';
+$wb['error_inv_value_for'] = 'Wprowadziłeś nieprawidłową wartość w polu \\"%s\\"';
+$wb['error_inv_email_for'] = 'Wprowadziłeś nieprawidłowy adres email w polu \\"%s\\"';
+$wb['error_inv_domain_for'] = 'Wprowadziłeś nieprawidłową domenę w polu \\"%s\\"';
+$wb['error_inv_integer_for'] = 'Wprowadziłeś nieprawidłową liczbę w polu \\"%s\\"';
+$wb['error_inv_float_for'] = 'Wprowadziłeś nieprawidłową liczbę w polu \\"%s\\"';
 $wb['error_used_location'] = 'Ścieżka instalacji zawiera już zainstalowany pakiet.';
 $wb['installation_task_txt'] = 'Instalacja planowana';
 $wb['installation_error_txt'] = 'BÅ‚Ä…d instalacji';
diff --git a/interface/web/sites/lib/lang/pt.lng b/interface/web/sites/lib/lang/pt.lng
index 6cd9798fa1..c1fca015b8 100644
--- a/interface/web/sites/lib/lang/pt.lng
+++ b/interface/web/sites/lib/lang/pt.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_aps.lng b/interface/web/sites/lib/lang/pt_aps.lng
index 33c4e87266..c17ef00914 100644
--- a/interface/web/sites/lib/lang/pt_aps.lng
+++ b/interface/web/sites/lib/lang/pt_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/pt_web_childdomain.lng b/interface/web/sites/lib/lang/pt_web_childdomain.lng
index 688af77bd2..4cbc032c19 100644
--- a/interface/web/sites/lib/lang/pt_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/pt_web_subdomain.lng b/interface/web/sites/lib/lang/pt_web_subdomain.lng
index 8f2fd70e46..8a4f1440fd 100644
--- a/interface/web/sites/lib/lang/pt_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/ro.lng b/interface/web/sites/lib/lang/ro.lng
index 418585ea55..f674e91b80 100644
--- a/interface/web/sites/lib/lang/ro.lng
+++ b/interface/web/sites/lib/lang/ro.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_aps.lng b/interface/web/sites/lib/lang/ro_aps.lng
index 3ff130f57e..881c146a4d 100644
--- a/interface/web/sites/lib/lang/ro_aps.lng
+++ b/interface/web/sites/lib/lang/ro_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/ro_web_childdomain.lng b/interface/web/sites/lib/lang/ro_web_childdomain.lng
index 5f56786510..30f83e7283 100644
--- a/interface/web/sites/lib/lang/ro_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/ro_web_subdomain.lng b/interface/web/sites/lib/lang/ro_web_subdomain.lng
index 436acc4cf9..f36685be8a 100644
--- a/interface/web/sites/lib/lang/ro_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/ru.lng b/interface/web/sites/lib/lang/ru.lng
index 6316c21d17..dbf2926043 100644
--- a/interface/web/sites/lib/lang/ru.lng
+++ b/interface/web/sites/lib/lang/ru.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Доступные пакеты';
 $wb['Installed packages'] = 'Установленные пакеты';
 $wb['Update Packagelist'] = 'Обновить список пакетов';
 $wb['Subdomain (Vhost)'] = 'Поддомен (Vhost)';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_aps.lng b/interface/web/sites/lib/lang/ru_aps.lng
index 3dd4ad0a8a..d2225358c1 100644
--- a/interface/web/sites/lib/lang/ru_aps.lng
+++ b/interface/web/sites/lib/lang/ru_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Вы  указали некорректную
 $wb['error_license_agreement'] = 'Для продолжения нужно принять лицензионное соглашение.';
 $wb['error_no_database_pw'] = 'Вы предоставили не правильный пароль базы данных.';
 $wb['error_short_database_pw'] = 'Пожалуйста, выберите более длинный пароль базы данных.';
-$wb['error_no_value_for'] = 'Поле \"%s\" не может быть пустым.';
-$wb['error_short_value_for'] = 'Поле \"%s\" требует более длинного входного значения.';
-$wb['error_long_value_for'] = 'Поле \"%s\"требует более короткого входного значения.';
-$wb['error_inv_value_for'] = 'Вы ввели неверное значение для поля \"%s\".';
-$wb['error_inv_email_for'] = 'Вы ввели некорректный адрес электронной почты для поля \"%s\".';
-$wb['error_inv_domain_for'] = 'Вы ввели некорректный домен для поля \"%s\".';
-$wb['error_inv_integer_for'] = 'Вы ввели некорректное число для поля \"%s\".';
-$wb['error_inv_float_for'] = 'Вы ввели некорректное число с плавающей точкой для поля \"%s\".';
+$wb['error_no_value_for'] = 'Поле \\"%s\\" не может быть пустым.';
+$wb['error_short_value_for'] = 'Поле \\"%s\\" требует более длинного входного значения.';
+$wb['error_long_value_for'] = 'Поле \\"%s\\"требует более короткого входного значения.';
+$wb['error_inv_value_for'] = 'Вы ввели неверное значение для поля \\"%s\\".';
+$wb['error_inv_email_for'] = 'Вы ввели некорректный адрес электронной почты для поля \\"%s\\".';
+$wb['error_inv_domain_for'] = 'Вы ввели некорректный домен для поля \\"%s\\".';
+$wb['error_inv_integer_for'] = 'Вы ввели некорректное число для поля \\"%s\\".';
+$wb['error_inv_float_for'] = 'Вы ввели некорректное число с плавающей точкой для поля \\"%s\\".';
 $wb['error_used_location'] = 'Путь установки уже содержит установочный пакет.';
 $wb['installation_task_txt'] = 'Запланирована установка';
 $wb['installation_error_txt'] = 'Ошибка установки';
diff --git a/interface/web/sites/lib/lang/ru_database.lng b/interface/web/sites/lib/lang/ru_database.lng
index b931b715f2..0f5eaf3180 100644
--- a/interface/web/sites/lib/lang/ru_database.lng
+++ b/interface/web/sites/lib/lang/ru_database.lng
@@ -13,7 +13,7 @@ $wb['database_name_error_unique'] = 'Имя базы данных уже сущ
 $wb['database_name_error_regex'] = 'Неверное имя базы данных. Имя базы данных может содержать только следующие символы: a-z, A-Z, 0-9 и нижний пробел _. Длина: 2 - 64 символа.';
 $wb['database_user_error_empty'] = 'Логин базы данных пустой';
 $wb['database_user_error_unique'] = 'Такой пользователь базы данных уже существует. Что бы получить уникальное имя, например, сложите название сайта и ваше имя.';
-$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \"_\". Длина: 2 - 16 символов.';
+$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \\"_\\". Длина: 2 - 16 символов.';
 $wb['limit_database_txt'] = 'Достигнуто максимальное количество БД.';
 $wb['database_name_change_txt'] = 'Имя базы данных не может быть изменено.';
 $wb['database_charset_change_txt'] = 'Кодировка базы данных не может быть изменена';
diff --git a/interface/web/sites/lib/lang/ru_database_user.lng b/interface/web/sites/lib/lang/ru_database_user.lng
index df927317ca..7de99a11dc 100644
--- a/interface/web/sites/lib/lang/ru_database_user.lng
+++ b/interface/web/sites/lib/lang/ru_database_user.lng
@@ -6,7 +6,7 @@ $wb['client_txt'] = 'Клиент';
 $wb['active_txt'] = 'Активно';
 $wb['database_user_error_empty'] = 'Логин базы данных пустой';
 $wb['database_user_error_unique'] = 'Такой пользователь базы данных уже существует. Что бы получить уникальное имя, например, сложите название сайта и ваше имя.';
-$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \"_\". Длина: 2 - 16 символов.';
+$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \\"_\\". Длина: 2 - 16 символов.';
 $wb['database_user_error_len'] = 'Логин для базы данных - {user} - cлишком длинный. Максимальная длина логина - 16 символов';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
diff --git a/interface/web/sites/lib/lang/ru_web_childdomain.lng b/interface/web/sites/lib/lang/ru_web_childdomain.lng
index 49905e77ea..af71669a47 100644
--- a/interface/web/sites/lib/lang/ru_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Нет флага';
 $wb['domain_error_wildcard'] = 'Wildcard поддомены не допускаются.';
 $wb['proxy_directives_txt'] = 'Директивы прокси';
 $wb['available_proxy_directive_snippets_txt'] = 'Доступные заготовки директив Proxy:';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 $wb['backup_interval_txt'] = 'Интервал резервного копирования';
 $wb['backup_copies_txt'] = 'Количество резервных копий';
 $wb['ssl_key_txt'] = 'SSL-ключ';
diff --git a/interface/web/sites/lib/lang/ru_web_subdomain.lng b/interface/web/sites/lib/lang/ru_web_subdomain.lng
index 46203a1815..376c789430 100644
--- a/interface/web/sites/lib/lang/ru_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Нет флага';
 $wb['domain_error_wildcard'] = 'Wildcard-поддомены не допускаются.';
 $wb['proxy_directives_txt'] = 'Директивы прокси';
 $wb['available_proxy_directive_snippets_txt'] = 'Доступные заготовки директив Proxy:';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 $wb['http_port_txt'] = 'Порт HTTP';
 $wb['https_port_txt'] = 'Порт HTTPS';
 $wb['http_port_error_regex'] = 'Некорректный порт HTTP.';
diff --git a/interface/web/sites/lib/lang/se.lng b/interface/web/sites/lib/lang/se.lng
index a63670545c..6b44cdcf7c 100644
--- a/interface/web/sites/lib/lang/se.lng
+++ b/interface/web/sites/lib/lang/se.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Tillgängliga paket';
 $wb['Installed packages'] = 'Installerade paket';
 $wb['Update Packagelist'] = 'Uppdatera paketlista';
 $wb['Subdomain (Vhost)'] = 'Underdomän (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/se_aps.lng b/interface/web/sites/lib/lang/se_aps.lng
index f399880dea..3b32095d62 100644
--- a/interface/web/sites/lib/lang/se_aps.lng
+++ b/interface/web/sites/lib/lang/se_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Installation planerad';
 $wb['installation_error_txt'] = 'Installationsfel';
diff --git a/interface/web/sites/lib/lang/se_web_childdomain.lng b/interface/web/sites/lib/lang/se_web_childdomain.lng
index 52fba020aa..eff6791c65 100644
--- a/interface/web/sites/lib/lang/se_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_childdomain.lng
@@ -43,7 +43,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/se_web_subdomain.lng b/interface/web/sites/lib/lang/se_web_subdomain.lng
index a2d73c012d..ec784641e8 100644
--- a/interface/web/sites/lib/lang/se_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Ingan flagga';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/sk.lng b/interface/web/sites/lib/lang/sk.lng
index 401ad2c65d..fabf52fda0 100644
--- a/interface/web/sites/lib/lang/sk.lng
+++ b/interface/web/sites/lib/lang/sk.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Available packages';
 $wb['Installed packages'] = 'Installed packages';
 $wb['Update Packagelist'] = 'Update Packagelist';
 $wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_aps.lng b/interface/web/sites/lib/lang/sk_aps.lng
index 2b3dc9a0ff..d6e6c7f4ca 100644
--- a/interface/web/sites/lib/lang/sk_aps.lng
+++ b/interface/web/sites/lib/lang/sk_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'The given install location folder is invalid.'
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
-$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
+$wb['error_no_value_for'] = 'The field \\"%s\\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \\"%s\\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \\"%s\\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \\"%s\\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \\"%s\\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \\"%s\\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \\"%s\\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \\"%s\\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Install planned';
 $wb['installation_error_txt'] = 'Install error';
diff --git a/interface/web/sites/lib/lang/sk_web_childdomain.lng b/interface/web/sites/lib/lang/sk_web_childdomain.lng
index c91bee49ac..e0d26667bc 100644
--- a/interface/web/sites/lib/lang/sk_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/sk_web_subdomain.lng b/interface/web/sites/lib/lang/sk_web_subdomain.lng
index d44bb27bd6..f6bcffd901 100644
--- a/interface/web/sites/lib/lang/sk_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/tr.lng b/interface/web/sites/lib/lang/tr.lng
index 4f8620c34a..d0570f6c12 100644
--- a/interface/web/sites/lib/lang/tr.lng
+++ b/interface/web/sites/lib/lang/tr.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Kullanılabilecek Paketler';
 $wb['Installed packages'] = 'Yüklü Paketler';
 $wb['Update Packagelist'] = 'Güncelleme Paketi Listesi';
 $wb['Subdomain (Vhost)'] = 'Alt alan adı (SSunucu)';
-$wb['error_proxy_requires_url'] = '\"Vekil Sunucu\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
+$wb['error_proxy_requires_url'] = '\\"Vekil Sunucu\\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_aps.lng b/interface/web/sites/lib/lang/tr_aps.lng
index f0eea59cba..1c6ccd49a6 100644
--- a/interface/web/sites/lib/lang/tr_aps.lng
+++ b/interface/web/sites/lib/lang/tr_aps.lng
@@ -40,14 +40,14 @@ $wb['error_inv_main_location'] = 'Yazdığınız yükleme konumunu klasörü ge
 $wb['error_license_agreement'] = 'Devam etmek için lisans anlaşmasını onaylamalısınız.';
 $wb['error_no_database_pw'] = 'Yazdığınız veritabanı parolası geçersiz.';
 $wb['error_short_database_pw'] = 'Lütfen daha uzun bir veritabanı parolası yazın.';
-$wb['error_no_value_for'] = '\"%s\" alanı boş olamaz.';
-$wb['error_short_value_for'] = '\"%s\" alanına daha uzun bir değer yazılmalıdır.';
-$wb['error_long_value_for'] = '\"%s\" alanına daha kısa bir değer yazılmalıdır.';
-$wb['error_inv_value_for'] = '\"%s\" alanına yazılan değer geçersiz.';
-$wb['error_inv_email_for'] = '\"%s\" alanına yazılan e-posta adresi geçersiz.';
-$wb['error_inv_domain_for'] = '\"%s\" alanına yazılan alan adı geçersiz.';
-$wb['error_inv_integer_for'] = '\"%s\" alanına yazılan sayı geçersiz.';
-$wb['error_inv_float_for'] = '\"%s\" alanına yazılan küsuratlı sayı geçersiz.';
+$wb['error_no_value_for'] = '\\"%s\\" alanı boş olamaz.';
+$wb['error_short_value_for'] = '\\"%s\\" alanına daha uzun bir değer yazılmalıdır.';
+$wb['error_long_value_for'] = '\\"%s\\" alanına daha kısa bir değer yazılmalıdır.';
+$wb['error_inv_value_for'] = '\\"%s\\" alanına yazılan değer geçersiz.';
+$wb['error_inv_email_for'] = '\\"%s\\" alanına yazılan e-posta adresi geçersiz.';
+$wb['error_inv_domain_for'] = '\\"%s\\" alanına yazılan alan adı geçersiz.';
+$wb['error_inv_integer_for'] = '\\"%s\\" alanına yazılan sayı geçersiz.';
+$wb['error_inv_float_for'] = '\\"%s\\" alanına yazılan küsuratlı sayı geçersiz.';
 $wb['error_used_location'] = 'Yükleme yoluna daha önce yüklenmiş bir paket var.';
 $wb['installation_task_txt'] = 'Yükleme planlandı';
 $wb['installation_error_txt'] = 'Yükleme hatası';
diff --git a/interface/web/sites/lib/lang/tr_web_childdomain.lng b/interface/web/sites/lib/lang/tr_web_childdomain.lng
index 5d68e809b3..e11c6a92b5 100644
--- a/interface/web/sites/lib/lang/tr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'No flag';
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
 $wb['backup_interval_txt'] = 'Backup interval';
 $wb['backup_copies_txt'] = 'Number of backup copies';
 $wb['ssl_key_txt'] = 'SSL Key';
diff --git a/interface/web/sites/lib/lang/tr_web_subdomain.lng b/interface/web/sites/lib/lang/tr_web_subdomain.lng
index c6e28bc6fa..188b257589 100644
--- a/interface/web/sites/lib/lang/tr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
 $wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
-$wb['error_proxy_requires_url'] = '\"Vekil Sunucu\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
+$wb['error_proxy_requires_url'] = '\\"Vekil Sunucu\\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/vm/lib/lang/dk_openvz_template.lng b/interface/web/vm/lib/lang/dk_openvz_template.lng
index 7016f41a67..9de4a6fd92 100644
--- a/interface/web/vm/lib/lang/dk_openvz_template.lng
+++ b/interface/web/vm/lib/lang/dk_openvz_template.lng
@@ -44,7 +44,7 @@ $wb['tcpsndbuf_desc_txt'] = 'Total størrelse af TCP send buffere.';
 $wb['tcprcvbuf_desc_txt'] = 'Total størrelse af TCP modtage buffere.';
 $wb['othersockbuf_desc_txt'] = 'Total størrelse af UNIX-domæne sokel buffere, UDP og andre datagram protokoller send buffere.';
 $wb['dgramrcvbuf_desc_txt'] = 'Modtage buffere af UDP og andre datagram protokoller.';
-$wb['oomguarpages_desc_txt'] = 'Den garanterede mængde hukommelse for det tilfælde hukommelsen er \"over-booked\" (out-of-memory kill guarantee), i sider.';
+$wb['oomguarpages_desc_txt'] = 'Den garanterede mængde hukommelse for det tilfælde hukommelsen er \\"over-booked\\" (out-of-memory kill guarantee), i sider.';
 $wb['privvmpages_desc_txt'] = 'Hukommelses grænse tildeling, i sider.';
 $wb['lockedpages_desc_txt'] = 'Proces-sider uden tiladelse til at blive byttet ud (pages locked by mlock(2)).';
 $wb['shmpages_desc_txt'] = 'Total størrelse af delt hukommelse (IPC, delt anonyme afbildninger og tmpfs objekter), i sider.';
diff --git a/interface/web/vm/lib/lang/es_openvz_template.lng b/interface/web/vm/lib/lang/es_openvz_template.lng
index 1868240d3e..1abd562ed5 100644
--- a/interface/web/vm/lib/lang/es_openvz_template.lng
+++ b/interface/web/vm/lib/lang/es_openvz_template.lng
@@ -44,7 +44,7 @@ $wb['tcpsndbuf_desc_txt'] = 'Tamaño total de los buffers de envío TCP.';
 $wb['tcprcvbuf_desc_txt'] = 'Tamaño total de los buffers de recepción TCP.';
 $wb['othersockbuf_desc_txt'] = 'Tamaño total de buffers de socket UNIX-domain, UDP y otros protocolos de envío para buffers de datagramas.';
 $wb['dgramrcvbuf_desc_txt'] = 'Recibir buffers de UDP y otros protocolos de datagrama.';
-$wb['oomguarpages_desc_txt'] = 'La cantidad de memoria garantizada en caso de que la memoria \"over-booked\" (garantizado para out-of-memory kill), en las páginas.';
+$wb['oomguarpages_desc_txt'] = 'La cantidad de memoria garantizada en caso de que la memoria \\"over-booked\\" (garantizado para out-of-memory kill), en las páginas.';
 $wb['privvmpages_desc_txt'] = 'Límite de asignación de memoria en las páginas.';
 $wb['lockedpages_desc_txt'] = 'Páginas de procesos sin permisos para sacar del swap (páginas bloqueadas por mlock(2)).';
 $wb['shmpages_desc_txt'] = 'Tamaño total de memoria compatida (IPC, asignaciones anónimas compartidas y objetos tmpfs), en las páginas.';
diff --git a/interface/web/vm/lib/lang/tr_openvz_template.lng b/interface/web/vm/lib/lang/tr_openvz_template.lng
index 2621212862..fb1452e885 100644
--- a/interface/web/vm/lib/lang/tr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_template.lng
@@ -44,7 +44,7 @@ $wb['tcpsndbuf_desc_txt'] = 'TCP gönderme arabelleğinin toplam boyutu.';
 $wb['tcprcvbuf_desc_txt'] = 'TCP alma arabelleÄŸinin toplam boyutu.';
 $wb['othersockbuf_desc_txt'] = 'UNIX alan adı soket arabelleğinin toplam boyutu, UDP ve diğer datagram iletişim kuralları gönderme ara bellekleri.';
 $wb['dgramrcvbuf_desc_txt'] = 'UDP ve diğer datagram iletişim kuralları alma ara bellekleri.';
-$wb['oomguarpages_desc_txt'] = 'Bellek sayfası cinsinden, bellek taşması durumlarında garanti edilen bellek miktarı\" (bellek bitti boşaltma garantisi).';
+$wb['oomguarpages_desc_txt'] = 'Bellek sayfası cinsinden, bellek taşması durumlarında garanti edilen bellek miktarı\\" (bellek bitti boşaltma garantisi).';
 $wb['privvmpages_desc_txt'] = 'Bellek sayfası cinsinden ayrılacak bellek sınırı.';
 $wb['lockedpages_desc_txt'] = 'İşlem sayfaları takasına izin verilmez (mlock(2) ile kilitlenmiş sayfalar).';
 $wb['shmpages_desc_txt'] = 'Bellek sayfası cinsinden, paylaşılan belleğin toplam boyutu (IPC, paylaşılan anonim haritalama ve tmpfs nesneleri).';
-- 
GitLab


From 9f745c2b9d37a496900e44565c2b47ce48802655 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 30 Jul 2019 22:16:39 +0200
Subject: [PATCH 132/571] Improve comments

---
 interface/lib/classes/remote.d/mail.inc.php | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php
index bda7e861ed..477743dfc3 100644
--- a/interface/lib/classes/remote.d/mail.inc.php
+++ b/interface/lib/classes/remote.d/mail.inc.php
@@ -710,7 +710,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* czarna lista e-mail
+	//* Add a new spamfilter blacklist
 	public function mail_spamfilter_blacklist_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_add'))
@@ -810,7 +810,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* polityki filtrów spamu e-mail
+	//* Add a spam policy
 	public function mail_policy_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_policy_add'))
@@ -860,7 +860,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* fetchmail
+	//* Add fetchmail
 	public function mail_fetchmail_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_fetchmail_add'))
@@ -960,7 +960,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* wpisy białej listy
+	//* Add blacklist
 	public function mail_blacklist_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_blacklist_add'))
@@ -1010,7 +1010,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* wpisy filtrow e-mail
+	//* Add mail filter
 	public function mail_filter_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_filter_add'))
-- 
GitLab


From c830e6e714737f97d149d93d63dd8c745d89ffe7 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 30 Jul 2019 22:17:15 +0200
Subject: [PATCH 133/571] codestyle

---
 interface/lib/classes/validate_autoresponder.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/validate_autoresponder.inc.php b/interface/lib/classes/validate_autoresponder.inc.php
index 8fefa33b30..25db68bdd9 100755
--- a/interface/lib/classes/validate_autoresponder.inc.php
+++ b/interface/lib/classes/validate_autoresponder.inc.php
@@ -53,8 +53,8 @@ class validate_autoresponder extends validate_datetime
 		
 		// Parse date
 		$datetimeformat = (isset($app->remoting_lib) ? $app->remoting_lib->datetimeformat : $app->tform->datetimeformat);
-		$start_date_array = date_parse_from_format($datetimeformat,$start_date);
-		$end_date_array = date_parse_from_format($datetimeformat,$field_value);
+		$start_date_array = date_parse_from_format($datetimeformat, $start_date);
+		$end_date_array = date_parse_from_format($datetimeformat, $field_value);
 		
 		//calculate timestamps
 		$start_date_tstamp = mktime($start_date_array['hour'], $start_date_array['minute'], $start_date_array['second'], $start_date_array['month'], $start_date_array['day'], $start_date_array['year']);
-- 
GitLab


From c7c1671b0a180bfdf9fb032f8e23484541af5958 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 30 Jul 2019 22:18:02 +0200
Subject: [PATCH 134/571] Add extra field explanation

---
 remoting_client/API-docs/mail_spamfilter_blacklist_add.html | 2 +-
 remoting_client/API-docs/mail_spamfilter_user_add.html      | 2 +-
 remoting_client/examples/mail_spamfilter_blacklist_add.php  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/remoting_client/API-docs/mail_spamfilter_blacklist_add.html b/remoting_client/API-docs/mail_spamfilter_blacklist_add.html
index c45c5d60f0..198f7b6b23 100644
--- a/remoting_client/API-docs/mail_spamfilter_blacklist_add.html
+++ b/remoting_client/API-docs/mail_spamfilter_blacklist_add.html
@@ -21,7 +21,7 @@
 <p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> wb&nbsp;&nbsp;(<span class="paratype">enum('W','B')</span>)</p>
-<p class="margin"> rid&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> rid&nbsp;&nbsp;(<span class="paratype">int(11)</span>) An ID from the spamfilter_users table.</p>
 <p class="margin"> email&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> priority&nbsp;&nbsp;(<span class="paratype">tinyint(3)</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
diff --git a/remoting_client/API-docs/mail_spamfilter_user_add.html b/remoting_client/API-docs/mail_spamfilter_user_add.html
index c23a9dbd42..888c74ab70 100644
--- a/remoting_client/API-docs/mail_spamfilter_user_add.html
+++ b/remoting_client/API-docs/mail_spamfilter_user_add.html
@@ -24,7 +24,7 @@
 <p class="margin"> policy_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> email&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> fullname&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> local&nbsp;&nbsp;(<span class="paratype">varchar(1)</span>)</p>
+<p class="margin"> local&nbsp;&nbsp;(<span class="paratype">varchar(1)</span>) 'Y' for a local account.</p>
 <p class="headgrp">Output: </p> 
 <p class="margin"> Returns the ID of the newly added spamfilter user.</p>
 <!--<b>Output:</b> 
diff --git a/remoting_client/examples/mail_spamfilter_blacklist_add.php b/remoting_client/examples/mail_spamfilter_blacklist_add.php
index d5768e2536..b5d8a7f80a 100644
--- a/remoting_client/examples/mail_spamfilter_blacklist_add.php
+++ b/remoting_client/examples/mail_spamfilter_blacklist_add.php
@@ -19,7 +19,7 @@ try {
 	$params = array(
 		'server_id' => 1,
 		'wb' => 'B',
-		'rid' => '',
+		'rid' => '', // Fill in an ID from the spamfilter_users table.
 		'email' => 'hmmnoe@test.int',
 		'priority' => 1,
 		'active' => 'y'
-- 
GitLab


From 96416c321a42f10d1abdd10a5e00137a1f45bb1d Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 30 Jul 2019 22:20:00 +0200
Subject: [PATCH 135/571] Add missing autoresponder_subject field in api docs

---
 remoting_client/API-docs/mail_user_add.html | 1 +
 remoting_client/examples/mail_user_add.php  | 1 +
 2 files changed, 2 insertions(+)

diff --git a/remoting_client/API-docs/mail_user_add.html b/remoting_client/API-docs/mail_user_add.html
index b88ec706cc..88ab952e6a 100644
--- a/remoting_client/API-docs/mail_user_add.html
+++ b/remoting_client/API-docs/mail_user_add.html
@@ -36,6 +36,7 @@
 <p class="margin"> autoresponder_start_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_end_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_text&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
+<p class="margin"> autoresponder_subject&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> custom_mailfilter&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> postfix&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
diff --git a/remoting_client/examples/mail_user_add.php b/remoting_client/examples/mail_user_add.php
index 3b7d240ecc..80a7358cf9 100644
--- a/remoting_client/examples/mail_user_add.php
+++ b/remoting_client/examples/mail_user_add.php
@@ -32,6 +32,7 @@ try {
 		'autoresponder_start_date' => '',
 		'autoresponder_end_date' => '',
 		'autoresponder_text' => 'hallo',
+		'autoresponder_subject' => 'Out of office reply',
 		'move_junk' => 'n',
 		'custom_mailfilter' => 'spam',
 		'postfix' => 'n',
-- 
GitLab


From 0efec5c38a5d51634a2ea07437ae97bffa1fb274 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 2 Aug 2019 22:31:51 +0200
Subject: [PATCH 136/571] Wrap long query for readability

---
 install/tpl/mysql-virtual_policy_greylist.cf.master | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/install/tpl/mysql-virtual_policy_greylist.cf.master b/install/tpl/mysql-virtual_policy_greylist.cf.master
index 00f504e082..55378b29ca 100644
--- a/install/tpl/mysql-virtual_policy_greylist.cf.master
+++ b/install/tpl/mysql-virtual_policy_greylist.cf.master
@@ -1,6 +1,10 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-query = SELECT 'greylisting' FROM (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1) as rules WHERE rules.greylisting = 'y'
+query = SELECT 'greylisting' FROM
+  (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' 
+  UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' 
+  UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1) as rules 
+  WHERE rules.greylisting = 'y'
 
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
-- 
GitLab


From 1f46e8a23e2975631c6d8e924aedb2098fcaf481 Mon Sep 17 00:00:00 2001
From: Ales Seifert <ales@web4people.com.au>
Date: Thu, 5 Sep 2019 09:19:47 +0200
Subject: [PATCH 137/571] updated to recognize newer Centos 7 releases & to
 recognize recent openSUSE even if not supported

---
 server/lib/classes/monitor_tools.inc.php | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index fefdbcd681..b2bd5ede30 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -249,6 +249,14 @@ class monitor_tools {
 			$distver = '11.2';
 			$distid = 'opensuse112';
 			$distbaseid = 'opensuse';
+		} elseif(stristr(file_get_contents('/etc/os-release'), 'opensuse')) {
+			$content = file_get_contents('/etc/os-release');
+            preg_match_all('/NAME=\"([\w ]+)\"/m', $content, $name);
+            preg_match_all('/VERSION_ID=\"([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*).$/m', $content, $version);
+			$distname = is_array($name) ? $name[1][0] : 'openSUSE';
+			$distver = is_array($version) ? implode('.', array_filter([$version[1][0],$version[2][0],$version[3][0]],'strlen')) : 'Unknown';
+			$distid = 'opensuse112';
+			$distbaseid = 'opensuse';
 		}  else {
 			$distname = 'openSUSE';
 			$distver = 'Unknown';
@@ -299,8 +307,9 @@ class monitor_tools {
 			$distid = 'centos53';
 			$distbaseid = 'fedora';
 		} elseif(stristr($content, 'CentOS Linux release 7')) {
+			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
 			$distname = 'CentOS';
-			$distver = 'Unknown';
+			$distver = is_array($version)? implode('.', array_filter([$version[1][0],$version[2][0],$version[3][0]],'strlen')) :'Unknown';
 			$distbaseid = 'fedora';
 			$var=explode(" ", $content);
 			$var=explode(".", $var[3]);
-- 
GitLab


From 8f4ed6281c06fcb677a981c74e62560a9573f18f Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Sat, 20 Oct 2018 21:52:03 +0200
Subject: [PATCH 138/571] typo

---
 install/dist/tpl/gentoo/amavisd-ispconfig.conf.master | 2 +-
 install/tpl/amavisd_user_config.master                | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master b/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master
index 5e1c8ebba6..7e42c8a362 100644
--- a/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master
+++ b/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master
@@ -67,7 +67,7 @@ $final_spam_destiny = D_DISCARD;
 $final_banned_destiny = D_BOUNCE;
 $final_bad_header_destiny = D_PASS;
 
-# Default settings, we st this very high to not filter aut emails accidently
+# Default settings, we set this very high to not filter out emails accidentally
 $sa_spam_subject_tag = '***SPAM*** ';
 $sa_tag_level_deflt  = 20.0;  # add spam info headers if at, or above that level
 $sa_tag2_level_deflt = 60.0; # add 'spam detected' headers at that level
diff --git a/install/tpl/amavisd_user_config.master b/install/tpl/amavisd_user_config.master
index 2738eac3a9..344ea9a152 100644
--- a/install/tpl/amavisd_user_config.master
+++ b/install/tpl/amavisd_user_config.master
@@ -49,7 +49,7 @@ $final_spam_destiny = D_DISCARD;
 $final_banned_destiny = D_BOUNCE;
 $final_bad_header_destiny = D_PASS;
 
-# Default settings, we st this very high to not filter aut emails accidently
+# Default settings, we set this very high to not filter out emails accidentally
 $sa_spam_subject_tag = '***SPAM*** ';
 $sa_tag_level_deflt  = 20.0;  # add spam info headers if at, or above that level
 $sa_tag2_level_deflt = 60.0; # add 'spam detected' headers at that level
-- 
GitLab


From 9e7a9eb1351f1d4eb23103fb5230caa5725645db Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 20 Jun 2019 13:53:49 +0200
Subject: [PATCH 139/571] Improve comments

---
 interface/lib/plugins/mail_user_filter_plugin.inc.php | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php
index 5afd1c0044..26c0b02b83 100644
--- a/interface/lib/plugins/mail_user_filter_plugin.inc.php
+++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php
@@ -55,9 +55,9 @@ class mail_user_filter_plugin {
 
 
 	/*
-		function to create the mail filter rule and insert it into the custom rules
-		field when a new mail filter is added or modified.
-	*/
+	 *	Render the mail filter rule in the desired format and insert it into the custom rules
+	 *	field when a new mail filter is added or modified.
+	 */
 	function mail_user_filter_edit($event_name, $page_form) {
 		global $app, $conf;
 
@@ -91,6 +91,9 @@ class mail_user_filter_plugin {
 
 	}
 
+	/*
+	 *	Remove the rendered filter from custom_mailfilter when a mail_user_filter is deleted
+	 */
 	function mail_user_filter_del($event_name, $page_form) {
 		global $app, $conf;
 
-- 
GitLab


From 92f977d3eec6b87aff217f83a4bd4baf2c899c56 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 20 Jun 2019 15:38:34 +0200
Subject: [PATCH 140/571] Consistent comments, German vs English

Some were already in English, most were still in German.
---
 .../admin/form/directive_snippets.tform.php   |  2 +-
 interface/web/admin/form/firewall.tform.php   |  2 +-
 .../web/admin/form/remote_user.tform.php      |  2 +-
 interface/web/admin/form/server.tform.php     |  4 ++--
 .../web/admin/form/server_config.tform.php    | 22 +++++++++----------
 interface/web/admin/form/server_php.tform.php |  4 ++--
 .../web/admin/form/system_config.tform.php    | 10 ++++-----
 interface/web/client/form/client.tform.php    |  2 +-
 interface/web/client/form/domain.tform.php    |  2 +-
 interface/web/client/form/reseller.tform.php  |  2 +-
 interface/web/dns/form/dns_a.tform.php        |  2 +-
 interface/web/dns/form/dns_aaaa.tform.php     |  2 +-
 interface/web/dns/form/dns_alias.tform.php    |  2 +-
 interface/web/dns/form/dns_cname.tform.php    |  2 +-
 interface/web/dns/form/dns_dkim.tform.php     |  2 +-
 interface/web/dns/form/dns_dmarc.tform.php    |  2 +-
 interface/web/dns/form/dns_ds.tform.php       |  2 +-
 interface/web/dns/form/dns_hinfo.tform.php    |  2 +-
 interface/web/dns/form/dns_loc.tform.php      |  2 +-
 interface/web/dns/form/dns_mx.tform.php       |  2 +-
 interface/web/dns/form/dns_ns.tform.php       |  2 +-
 interface/web/dns/form/dns_ptr.tform.php      |  2 +-
 interface/web/dns/form/dns_rp.tform.php       |  2 +-
 interface/web/dns/form/dns_slave.tform.php    |  2 +-
 interface/web/dns/form/dns_soa.tform.php      |  4 ++--
 interface/web/dns/form/dns_spf.tform.php      |  2 +-
 interface/web/dns/form/dns_srv.tform.php      |  2 +-
 interface/web/dns/form/dns_template.tform.php |  2 +-
 interface/web/dns/form/dns_tlsa.tform.php     |  2 +-
 interface/web/dns/form/dns_txt.tform.php      |  2 +-
 .../web/help/form/support_message.tform.php   |  2 +-
 interface/web/mail/form/mail_alias.tform.php  |  2 +-
 .../web/mail/form/mail_aliasdomain.tform.php  |  2 +-
 .../web/mail/form/mail_blacklist.tform.php    |  2 +-
 .../mail/form/mail_content_filter.tform.php   |  2 +-
 interface/web/mail/form/mail_domain.tform.php |  2 +-
 .../mail/form/mail_domain_catchall.tform.php  |  2 +-
 .../web/mail/form/mail_forward.tform.php      |  2 +-
 interface/web/mail/form/mail_get.tform.php    |  2 +-
 .../mail/form/mail_relay_recipient.tform.php  |  2 +-
 .../web/mail/form/mail_spamfilter.tform.php   |  2 +-
 .../web/mail/form/mail_transport.tform.php    |  2 +-
 interface/web/mail/form/mail_user.tform.php   |  2 +-
 .../web/mail/form/mail_user_filter.tform.php  |  2 +-
 .../web/mail/form/mail_whitelist.tform.php    |  2 +-
 .../mail/form/spamfilter_blacklist.tform.php  |  2 +-
 .../web/mail/form/spamfilter_config.tform.php |  6 ++---
 .../web/mail/form/spamfilter_policy.tform.php |  6 ++---
 .../web/mail/form/spamfilter_users.tform.php  |  2 +-
 .../mail/form/spamfilter_whitelist.tform.php  |  2 +-
 .../mailuser/form/mail_user_filter.tform.php  |  2 +-
 interface/web/sites/form/cron.tform.php       |  2 +-
 interface/web/sites/form/database.tform.php   |  2 +-
 .../web/sites/form/database_user.tform.php    |  2 +-
 interface/web/sites/form/ftp_user.tform.php   |  6 ++---
 interface/web/sites/form/shell_user.tform.php |  4 ++--
 .../web/sites/form/web_childdomain.tform.php  |  4 ++--
 interface/web/sites/form/web_folder.tform.php |  2 +-
 .../web/sites/form/web_folder_user.tform.php  |  2 +-
 .../web/sites/form/web_vhost_domain.tform.php | 12 +++++-----
 .../web/sites/form/webdav_user.tform.php      |  2 +-
 61 files changed, 91 insertions(+), 91 deletions(-)

diff --git a/interface/web/admin/form/directive_snippets.tform.php b/interface/web/admin/form/directive_snippets.tform.php
index 544cb8b855..d451a50795 100644
--- a/interface/web/admin/form/directive_snippets.tform.php
+++ b/interface/web/admin/form/directive_snippets.tform.php
@@ -123,7 +123,7 @@ $form["tabs"]['directive_snippets'] = array (
 			'separator' => ',',
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/firewall.tform.php b/interface/web/admin/form/firewall.tform.php
index 75f190b3f0..e136b345be 100644
--- a/interface/web/admin/form/firewall.tform.php
+++ b/interface/web/admin/form/firewall.tform.php
@@ -103,7 +103,7 @@ $form["tabs"]['firewall'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/remote_user.tform.php b/interface/web/admin/form/remote_user.tform.php
index 895d9418a9..3b920ccb4a 100644
--- a/interface/web/admin/form/remote_user.tform.php
+++ b/interface/web/admin/form/remote_user.tform.php
@@ -151,7 +151,7 @@ $form["tabs"]['remote_user'] = array (
 		)
 
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/server.tform.php b/interface/web/admin/form/server.tform.php
index 95dca6c33b..f205758a8d 100644
--- a/interface/web/admin/form/server.tform.php
+++ b/interface/web/admin/form/server.tform.php
@@ -135,7 +135,7 @@ $form["tabs"]['services'] = array (
 			'value'  => array(0 => 'No', 1 => 'Yes')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -160,7 +160,7 @@ $form["tabs"]['config'] = array (
 			'maxlength'	=> ''
 		),
 	##################################
-	# ENDE Datatable fields
+	# END Datatable fields
 	##################################
 	)
 );
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 1c19d0928b..2663cdd0e0 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -413,7 +413,7 @@ $form["tabs"]['server'] = array(
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -699,7 +699,7 @@ $form["tabs"]['mail'] = array(
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -727,7 +727,7 @@ $form["tabs"]['getmail'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1408,7 +1408,7 @@ $form["tabs"]['web'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1498,7 +1498,7 @@ $form["tabs"]['dns'] = array(
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1615,7 +1615,7 @@ $form["tabs"]['fastcgi'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1778,7 +1778,7 @@ $form["tabs"]['jailkit'] = array(
 			'maxlength' => '1000'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1841,7 +1841,7 @@ $form["tabs"]['ufw_firewall'] = array (
 			'value'		=> array('low' => 'low', 'medium' => 'medium', 'high' => 'high')
 		)
 	##################################
-	# ENDE Datatable fields
+	# END Datatable fields
 	##################################
 	)
 );
@@ -1870,7 +1870,7 @@ $form["tabs"]['vlogger'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1928,7 +1928,7 @@ $form["tabs"]['cron'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1972,7 +1972,7 @@ $form["tabs"]['rescue'] = array(
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/server_php.tform.php b/interface/web/admin/form/server_php.tform.php
index 67e54ec6b5..6d443e8d50 100644
--- a/interface/web/admin/form/server_php.tform.php
+++ b/interface/web/admin/form/server_php.tform.php
@@ -174,7 +174,7 @@ $form["tabs"]['php_fastcgi'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -230,7 +230,7 @@ $form["tabs"]['php_fpm'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 3fe7f0c7e3..cb37cbefdd 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -211,7 +211,7 @@ $form["tabs"]['sites'] = array (
 			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -397,7 +397,7 @@ $form["tabs"]['mail'] = array (
 			'name'  => 'default_mailserver'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -433,7 +433,7 @@ $form["tabs"]['dns'] = array (
 			'name'  => 'default_slave_dnsserver'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -463,7 +463,7 @@ $form["tabs"]['domains'] = array (
 			'value'  => ''
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -735,7 +735,7 @@ $form["tabs"]['misc'] = array (
 			'value'  => array('' => 'None', '1' => 'strength_1', '2' => 'strength_2', '3' => 'strength_3', '4' => 'strength_4', '5' => 'strength_5')
 		)
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 07ca813bf5..5b45ffb972 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -1518,7 +1518,7 @@ $form["tabs"]['ipaddress'] = array (
 			'separator'	=> ';'
 		),
 	##################################
-	# ENDE Datatable fields
+	# END Datatable fields
 	##################################
 	)
 );
diff --git a/interface/web/client/form/domain.tform.php b/interface/web/client/form/domain.tform.php
index 549617e713..2d3e1dbdd1 100644
--- a/interface/web/client/form/domain.tform.php
+++ b/interface/web/client/form/domain.tform.php
@@ -109,7 +109,7 @@ $form["tabs"]['domain'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php
index 6231895f28..174c18081d 100644
--- a/interface/web/client/form/reseller.tform.php
+++ b/interface/web/client/form/reseller.tform.php
@@ -1560,7 +1560,7 @@ $form["tabs"]['ipaddress'] = array (
 			'separator'	=> ';'
 		),
 	##################################
-	# ENDE Datatable fields
+	# END Datatable fields
 	##################################
 	)
 );
diff --git a/interface/web/dns/form/dns_a.tform.php b/interface/web/dns/form/dns_a.tform.php
index d9ed197c51..aa00e9cb50 100644
--- a/interface/web/dns/form/dns_a.tform.php
+++ b/interface/web/dns/form/dns_a.tform.php
@@ -159,7 +159,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_aaaa.tform.php b/interface/web/dns/form/dns_aaaa.tform.php
index 018657b838..05f52ca67b 100644
--- a/interface/web/dns/form/dns_aaaa.tform.php
+++ b/interface/web/dns/form/dns_aaaa.tform.php
@@ -152,7 +152,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_alias.tform.php b/interface/web/dns/form/dns_alias.tform.php
index 55833b7ec7..0e82ee6da2 100644
--- a/interface/web/dns/form/dns_alias.tform.php
+++ b/interface/web/dns/form/dns_alias.tform.php
@@ -170,7 +170,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_cname.tform.php b/interface/web/dns/form/dns_cname.tform.php
index d04c1d01af..290e83f54b 100644
--- a/interface/web/dns/form/dns_cname.tform.php
+++ b/interface/web/dns/form/dns_cname.tform.php
@@ -168,7 +168,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_dkim.tform.php b/interface/web/dns/form/dns_dkim.tform.php
index 550255da46..d47a622b0d 100644
--- a/interface/web/dns/form/dns_dkim.tform.php
+++ b/interface/web/dns/form/dns_dkim.tform.php
@@ -148,7 +148,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_dmarc.tform.php b/interface/web/dns/form/dns_dmarc.tform.php
index a1ecaa40c8..625fddc98c 100644
--- a/interface/web/dns/form/dns_dmarc.tform.php
+++ b/interface/web/dns/form/dns_dmarc.tform.php
@@ -154,7 +154,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// End Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_ds.tform.php b/interface/web/dns/form/dns_ds.tform.php
index fe8528f9c8..04ee9a1f0b 100644
--- a/interface/web/dns/form/dns_ds.tform.php
+++ b/interface/web/dns/form/dns_ds.tform.php
@@ -152,7 +152,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_hinfo.tform.php b/interface/web/dns/form/dns_hinfo.tform.php
index 76c8c79dc0..972a07dff8 100644
--- a/interface/web/dns/form/dns_hinfo.tform.php
+++ b/interface/web/dns/form/dns_hinfo.tform.php
@@ -160,7 +160,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_loc.tform.php b/interface/web/dns/form/dns_loc.tform.php
index 5749a866b2..37df8b24c9 100644
--- a/interface/web/dns/form/dns_loc.tform.php
+++ b/interface/web/dns/form/dns_loc.tform.php
@@ -157,7 +157,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_mx.tform.php b/interface/web/dns/form/dns_mx.tform.php
index 9aace37ae7..3681c1a67a 100644
--- a/interface/web/dns/form/dns_mx.tform.php
+++ b/interface/web/dns/form/dns_mx.tform.php
@@ -169,7 +169,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_ns.tform.php b/interface/web/dns/form/dns_ns.tform.php
index e20a7892bf..fdfb92b54f 100644
--- a/interface/web/dns/form/dns_ns.tform.php
+++ b/interface/web/dns/form/dns_ns.tform.php
@@ -168,7 +168,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_ptr.tform.php b/interface/web/dns/form/dns_ptr.tform.php
index 4cc0462522..cf50577764 100644
--- a/interface/web/dns/form/dns_ptr.tform.php
+++ b/interface/web/dns/form/dns_ptr.tform.php
@@ -168,7 +168,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_rp.tform.php b/interface/web/dns/form/dns_rp.tform.php
index 5f4610a45b..fc85ad98e8 100644
--- a/interface/web/dns/form/dns_rp.tform.php
+++ b/interface/web/dns/form/dns_rp.tform.php
@@ -161,7 +161,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_slave.tform.php b/interface/web/dns/form/dns_slave.tform.php
index 2f287dbfd7..0b4457b700 100644
--- a/interface/web/dns/form/dns_slave.tform.php
+++ b/interface/web/dns/form/dns_slave.tform.php
@@ -144,7 +144,7 @@ $form["tabs"]['dns_slave'] = array (
 			'value'  => array(0 => 'N', 1 => 'Y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index 6fab657baa..e56211782a 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -289,7 +289,7 @@ $form["tabs"]['dns_soa'] = array (
  			'maxlength' => '10000'
  		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -304,7 +304,7 @@ $form["tabs"]['dns_records'] = array (
 		//#################################
 
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	),
 	'plugins' => array (
diff --git a/interface/web/dns/form/dns_spf.tform.php b/interface/web/dns/form/dns_spf.tform.php
index ea2cf8310c..62b6b5283b 100644
--- a/interface/web/dns/form/dns_spf.tform.php
+++ b/interface/web/dns/form/dns_spf.tform.php
@@ -154,7 +154,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// End Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_srv.tform.php b/interface/web/dns/form/dns_srv.tform.php
index ee0674fd19..5d1c106695 100644
--- a/interface/web/dns/form/dns_srv.tform.php
+++ b/interface/web/dns/form/dns_srv.tform.php
@@ -159,7 +159,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_template.tform.php b/interface/web/dns/form/dns_template.tform.php
index 2c53f32ec1..5655c3e4cd 100644
--- a/interface/web/dns/form/dns_template.tform.php
+++ b/interface/web/dns/form/dns_template.tform.php
@@ -106,7 +106,7 @@ $form["tabs"]['template'] = array (
 			'value'  => array(0 => 'N', 1 => 'Y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_tlsa.tform.php b/interface/web/dns/form/dns_tlsa.tform.php
index ef6f2a05b1..b86252cc31 100644
--- a/interface/web/dns/form/dns_tlsa.tform.php
+++ b/interface/web/dns/form/dns_tlsa.tform.php
@@ -148,7 +148,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_txt.tform.php b/interface/web/dns/form/dns_txt.tform.php
index 3aee920dd9..564e26aa18 100644
--- a/interface/web/dns/form/dns_txt.tform.php
+++ b/interface/web/dns/form/dns_txt.tform.php
@@ -165,7 +165,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/help/form/support_message.tform.php b/interface/web/help/form/support_message.tform.php
index caf1a010c6..6313b4da67 100644
--- a/interface/web/help/form/support_message.tform.php
+++ b/interface/web/help/form/support_message.tform.php
@@ -136,7 +136,7 @@ $form["tabs"]['message'] = array (
 			'maxlength' => '30'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_alias.tform.php b/interface/web/mail/form/mail_alias.tform.php
index a004203622..9434ba3eec 100644
--- a/interface/web/mail/form/mail_alias.tform.php
+++ b/interface/web/mail/form/mail_alias.tform.php
@@ -137,7 +137,7 @@ $form["tabs"]['alias'] = array (
 			'value'  => array(1 => 'y', 0 => 'n')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_aliasdomain.tform.php b/interface/web/mail/form/mail_aliasdomain.tform.php
index 66db01e5aa..a0d1024989 100644
--- a/interface/web/mail/form/mail_aliasdomain.tform.php
+++ b/interface/web/mail/form/mail_aliasdomain.tform.php
@@ -128,7 +128,7 @@ $form["tabs"]['alias'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_blacklist.tform.php b/interface/web/mail/form/mail_blacklist.tform.php
index 8b268147fb..957f35b95b 100644
--- a/interface/web/mail/form/mail_blacklist.tform.php
+++ b/interface/web/mail/form/mail_blacklist.tform.php
@@ -107,7 +107,7 @@ $form["tabs"]['blacklist'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_content_filter.tform.php b/interface/web/mail/form/mail_content_filter.tform.php
index 550ae6b5d6..88f16298f7 100644
--- a/interface/web/mail/form/mail_content_filter.tform.php
+++ b/interface/web/mail/form/mail_content_filter.tform.php
@@ -107,7 +107,7 @@ $form["tabs"]['filter'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_domain.tform.php b/interface/web/mail/form/mail_domain.tform.php
index 06fb0906c3..5c8fa0185a 100644
--- a/interface/web/mail/form/mail_domain.tform.php
+++ b/interface/web/mail/form/mail_domain.tform.php
@@ -143,7 +143,7 @@ $form["tabs"]['domain'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_domain_catchall.tform.php b/interface/web/mail/form/mail_domain_catchall.tform.php
index 81ce24c7b5..34d26088cd 100644
--- a/interface/web/mail/form/mail_domain_catchall.tform.php
+++ b/interface/web/mail/form/mail_domain_catchall.tform.php
@@ -138,7 +138,7 @@ $form["tabs"]['catchall'] = array (
 			'value'  => array(1 => 'y', 0 => 'n')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_forward.tform.php b/interface/web/mail/form/mail_forward.tform.php
index 3c902b4221..003e678455 100644
--- a/interface/web/mail/form/mail_forward.tform.php
+++ b/interface/web/mail/form/mail_forward.tform.php
@@ -133,7 +133,7 @@ $form["tabs"]['forward'] = array (
 			'value'  => array(1 => 'y', 0 => 'n')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_get.tform.php b/interface/web/mail/form/mail_get.tform.php
index 9f7de76e01..9082c36866 100644
--- a/interface/web/mail/form/mail_get.tform.php
+++ b/interface/web/mail/form/mail_get.tform.php
@@ -173,7 +173,7 @@ $form["tabs"]['mailget'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_relay_recipient.tform.php b/interface/web/mail/form/mail_relay_recipient.tform.php
index 34c23861e4..e3d8faa1ed 100644
--- a/interface/web/mail/form/mail_relay_recipient.tform.php
+++ b/interface/web/mail/form/mail_relay_recipient.tform.php
@@ -107,7 +107,7 @@ $form["tabs"]['relay_recipient'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_spamfilter.tform.php b/interface/web/mail/form/mail_spamfilter.tform.php
index d726a3eb74..2890cfb8b6 100644
--- a/interface/web/mail/form/mail_spamfilter.tform.php
+++ b/interface/web/mail/form/mail_spamfilter.tform.php
@@ -145,7 +145,7 @@ $form["tabs"]['spamfilter'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_transport.tform.php b/interface/web/mail/form/mail_transport.tform.php
index f55541346c..b40ad86e8a 100644
--- a/interface/web/mail/form/mail_transport.tform.php
+++ b/interface/web/mail/form/mail_transport.tform.php
@@ -122,7 +122,7 @@ $form["tabs"]['transport'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 631c507f90..da386f5844 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -472,7 +472,7 @@ if ($backup_available) {
 				'value'         => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')
 			),
 		##################################
-		# ENDE Datatable fields
+		# END Datatable fields
 		##################################
 		),
 		'plugins' => array (
diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index becb09351e..b00aacb9db 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -137,7 +137,7 @@ $form["tabs"]['filter'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_whitelist.tform.php b/interface/web/mail/form/mail_whitelist.tform.php
index 00fc971647..edd3248371 100644
--- a/interface/web/mail/form/mail_whitelist.tform.php
+++ b/interface/web/mail/form/mail_whitelist.tform.php
@@ -113,7 +113,7 @@ $form["tabs"]['whitelist'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_blacklist.tform.php b/interface/web/mail/form/spamfilter_blacklist.tform.php
index 3514eed434..7d212d9317 100644
--- a/interface/web/mail/form/spamfilter_blacklist.tform.php
+++ b/interface/web/mail/form/spamfilter_blacklist.tform.php
@@ -127,7 +127,7 @@ $form["tabs"]['blacklist'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_config.tform.php b/interface/web/mail/form/spamfilter_config.tform.php
index 39c1b35621..2217cbbd31 100644
--- a/interface/web/mail/form/spamfilter_config.tform.php
+++ b/interface/web/mail/form/spamfilter_config.tform.php
@@ -121,7 +121,7 @@ $form["tabs"]['server'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -247,7 +247,7 @@ $form["tabs"]['mail'] = array (
 			'maxlength' => '15'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -272,7 +272,7 @@ $form["tabs"]['getmail'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_policy.tform.php b/interface/web/mail/form/spamfilter_policy.tform.php
index 57aa4f2bf5..ef777a8884 100644
--- a/interface/web/mail/form/spamfilter_policy.tform.php
+++ b/interface/web/mail/form/spamfilter_policy.tform.php
@@ -88,7 +88,7 @@ $form["tabs"]['policy'] = array (
 			'value'  => array('N' => 'No', 'Y' => 'Yes')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -458,7 +458,7 @@ $form["tabs"]['amavis'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -502,7 +502,7 @@ $form["tabs"]['rspamd'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_users.tform.php b/interface/web/mail/form/spamfilter_users.tform.php
index 8ef3c4e131..65f196b987 100644
--- a/interface/web/mail/form/spamfilter_users.tform.php
+++ b/interface/web/mail/form/spamfilter_users.tform.php
@@ -133,7 +133,7 @@ $form["tabs"]['users'] = array (
 		),
 
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_whitelist.tform.php b/interface/web/mail/form/spamfilter_whitelist.tform.php
index f0802fa491..202a3c6810 100644
--- a/interface/web/mail/form/spamfilter_whitelist.tform.php
+++ b/interface/web/mail/form/spamfilter_whitelist.tform.php
@@ -127,7 +127,7 @@ $form["tabs"]['whitelist'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mailuser/form/mail_user_filter.tform.php b/interface/web/mailuser/form/mail_user_filter.tform.php
index b785ae0263..adf7716317 100644
--- a/interface/web/mailuser/form/mail_user_filter.tform.php
+++ b/interface/web/mailuser/form/mail_user_filter.tform.php
@@ -128,7 +128,7 @@ $form["tabs"]['filter'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/cron.tform.php b/interface/web/sites/form/cron.tform.php
index 4a169c3a67..aedfcb26ca 100644
--- a/interface/web/sites/form/cron.tform.php
+++ b/interface/web/sites/form/cron.tform.php
@@ -185,7 +185,7 @@ $form["tabs"]['cron'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/database.tform.php b/interface/web/sites/form/database.tform.php
index 3bb2f9af73..dd3910c043 100644
--- a/interface/web/sites/form/database.tform.php
+++ b/interface/web/sites/form/database.tform.php
@@ -185,7 +185,7 @@ $form["tabs"]['database'] = array (
 			'searchable' => 2
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/database_user.tform.php b/interface/web/sites/form/database_user.tform.php
index 09d2c32b2c..5f91cbd1f3 100644
--- a/interface/web/sites/form/database_user.tform.php
+++ b/interface/web/sites/form/database_user.tform.php
@@ -125,7 +125,7 @@ $form["tabs"]['database_user'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php
index 5e77de4b5f..0b48d7a92d 100644
--- a/interface/web/sites/form/ftp_user.tform.php
+++ b/interface/web/sites/form/ftp_user.tform.php
@@ -146,7 +146,7 @@ $form["tabs"]['ftp'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -256,7 +256,7 @@ if($app->auth->is_admin()) {
 				'maxlength' => '7'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
@@ -290,7 +290,7 @@ if($app->auth->is_admin()) {
 				'maxlength' => '255'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
diff --git a/interface/web/sites/form/shell_user.tform.php b/interface/web/sites/form/shell_user.tform.php
index 4268fc08ec..f4e83a1b57 100644
--- a/interface/web/sites/form/shell_user.tform.php
+++ b/interface/web/sites/form/shell_user.tform.php
@@ -164,7 +164,7 @@ $form["tabs"]['shell'] = array (
 			'maxlength' => '600'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -248,7 +248,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
 				'maxlength' => '255'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
diff --git a/interface/web/sites/form/web_childdomain.tform.php b/interface/web/sites/form/web_childdomain.tform.php
index 6cfaa38c2a..01132a75dc 100644
--- a/interface/web/sites/form/web_childdomain.tform.php
+++ b/interface/web/sites/form/web_childdomain.tform.php
@@ -146,7 +146,7 @@ $form["tabs"]['domain'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -193,7 +193,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
 				'maxlength' => '255'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
diff --git a/interface/web/sites/form/web_folder.tform.php b/interface/web/sites/form/web_folder.tform.php
index 5fec523a69..9f8418446c 100644
--- a/interface/web/sites/form/web_folder.tform.php
+++ b/interface/web/sites/form/web_folder.tform.php
@@ -99,7 +99,7 @@ $form["tabs"]['folder'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/web_folder_user.tform.php b/interface/web/sites/form/web_folder_user.tform.php
index c3386a5a22..b5f0b711c6 100644
--- a/interface/web/sites/form/web_folder_user.tform.php
+++ b/interface/web/sites/form/web_folder_user.tform.php
@@ -119,7 +119,7 @@ $form["tabs"]['user'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index e131a7cbaf..838445e361 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -299,7 +299,7 @@ $form["tabs"]['domain'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	),
 	'plugins' => array (
@@ -435,7 +435,7 @@ $form["tabs"]['redirect'] = array (
 			)
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -601,7 +601,7 @@ if($ssl_available) {
 				)
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
@@ -641,7 +641,7 @@ $form["tabs"]['stats'] = array (
 			'value'  => array('webalizer' => 'Webalizer', 'awstats' => 'AWStats', '' => 'None')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -683,7 +683,7 @@ if ($backup_available) {
 				'maxlength' => '255'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		),
 		'plugins' => array (
@@ -972,7 +972,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin'
 				'maxlength' => '4'
 			)
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
diff --git a/interface/web/sites/form/webdav_user.tform.php b/interface/web/sites/form/webdav_user.tform.php
index b7db858546..73ea898b68 100644
--- a/interface/web/sites/form/webdav_user.tform.php
+++ b/interface/web/sites/form/webdav_user.tform.php
@@ -142,7 +142,7 @@ $form["tabs"]['webdav'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
-- 
GitLab


From d77b1219c5d1a7968501c135551b8f3887ca2dcc Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 20 Jun 2019 15:42:26 +0200
Subject: [PATCH 141/571] remove old commented code

---
 interface/web/mail/form/mail_user_filter.tform.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index b00aacb9db..c1134c5e41 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -94,7 +94,6 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			//'value'  => array('contains'=>'contains_txt','is' => 'Is','begins'=>'Begins with','ends'=>'Ends with')
 			'value'  => array('contains'=>'contains_txt', 'is' => 'is_txt', 'begins'=>'begins_with_txt', 'ends'=>'ends_with_txt')
 		),
 		'searchterm' => array (
-- 
GitLab


From e0c9b5c74fb36365fa1b5bbc951a35f6b02f37b7 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Fri, 6 Sep 2019 13:00:22 +0200
Subject: [PATCH 142/571] Check explicitly for session username, fixes #5389

---
 interface/lib/classes/db_mysql.inc.php | 2 +-
 server/lib/classes/db_mysql.inc.php    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index 7d7b568980..227fab73fa 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -709,7 +709,7 @@ class db
 
 		if($diff_num > 0) {
 			$diffstr = serialize($diffrec_full);
-			if(isset($_SESSION)) {
+			if(!empty($_SESSION['s']['user']['username'])) {
 				$username = $_SESSION['s']['user']['username'];
 			} else {
 				$username = 'admin';
diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 7d7b568980..227fab73fa 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -709,7 +709,7 @@ class db
 
 		if($diff_num > 0) {
 			$diffstr = serialize($diffrec_full);
-			if(isset($_SESSION)) {
+			if(!empty($_SESSION['s']['user']['username'])) {
 				$username = $_SESSION['s']['user']['username'];
 			} else {
 				$username = 'admin';
-- 
GitLab


From 065d5ff93fb92b2b87a85c9bd3ee690726941fae Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 10 Sep 2019 15:39:42 +0200
Subject: [PATCH 143/571] - when using pigz tar arguments for backup are in
 wrong order, fixes #5393

---
 server/lib/classes/cron.d/500-backup.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index 579e0174ba..f261daf468 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -135,7 +135,7 @@ class cronjob_backup extends cronjob {
 								//* Create a tar.gz backup as root user
 								$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.tar.gz';
 								if ($use_pigz) {
-									$app->system->exec_safe('tar pcf - --directory ? . --exclude=./backup\*'.$backup_excludes.' | pigz > ?', $web_path, $web_backup_dir.'/'.$web_backup_file);
+									$app->system->exec_safe('tar pcf - --exclude=./backup\*'.$backup_excludes.' --directory ? . | pigz > ?', $web_path, $web_backup_dir.'/'.$web_backup_file);
 									$retval = $app->system->last_exec_retcode();
 								} else {
 									$app->system->exec_safe('tar pczf ? --exclude=./backup\*'.$backup_excludes.' --directory ? .', $web_backup_dir.'/'.$web_backup_file, $web_path);
-- 
GitLab


From f2ec8695499cee62cc4eeea7e245d09f0463a97e Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 11 Sep 2019 12:25:37 +0200
Subject: [PATCH 144/571] Set file mode explicitly for rspamd
 worker-controller.inc config file to not rely on system umask.

---
 install/lib/installer_base.lib.php                     | 3 ++-
 server/plugins-available/postfix_server_plugin.inc.php | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index dd4fe9c306..4f72c6920b 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1644,7 +1644,8 @@ class installer_base {
 		$tpl = new tpl();
 		$tpl->newTemplate('rspamd_worker-controller.inc.master');
 		$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
-		wf('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());		
+		wf('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());
+		chmod('/etc/rspamd/local.d/worker-controller.inc', 0644);
 	}
 
 	public function configure_spamassassin() {
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index bec1c5498d..77ac689077 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -242,6 +242,7 @@ class postfix_server_plugin {
 			$tpl->newTemplate('rspamd_worker-controller.inc.master');
 			$tpl->setVar('rspamd_password', $rspamd_password);
 			$app->system->file_put_contents('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());
+			chmod('/etc/rspamd/local.d/worker-controller.inc', 0644);
 			$app->services->restartServiceDelayed('rspamd', 'reload');
 		}
 
-- 
GitLab


From 0d3e2987ce608d3e342f5d3fcab340bc8f615107 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 12 Sep 2019 08:55:07 +0200
Subject: [PATCH 145/571] - fixed missing template file for rspamd

---
 install/tpl/rspamd_users.conf.master | 44 +---------------------------
 server/conf/rspamd_users.conf.master | 43 +++++++++++++++++++++++++++
 2 files changed, 44 insertions(+), 43 deletions(-)
 mode change 100644 => 120000 install/tpl/rspamd_users.conf.master
 create mode 100644 server/conf/rspamd_users.conf.master

diff --git a/install/tpl/rspamd_users.conf.master b/install/tpl/rspamd_users.conf.master
deleted file mode 100644
index 73d437d6cb..0000000000
--- a/install/tpl/rspamd_users.conf.master
+++ /dev/null
@@ -1,43 +0,0 @@
-settings {
-	authenticated {
-		priority = 10;
-		authenticated = yes;
-		#apply "default" { groups_disabled = ["rbl", "spf"]; }
-		apply "default" {
-			#symbols_enabled = [];
-			symbols_disabled = [];
-			#groups_enabled = [];
-			groups_disabled = ["rbl"];
-		}
-	}
-	whitelist {
-		priority = 10;
-		rcpt = "postmaster";
-		rcpt = "hostmaster";
-		rcpt = "abuse";
-		want_spam = yes;
-	}
-	whitelist-ip {
-		priority = 10;
-<tmpl_loop name="whitelist_ips">
-		ip = "<tmpl_var name='ip'>";
-</tmpl_loop>
-		
-		want_spam = yes;
-	}
-#	whitelist-timmehosting {
-#		priority = 20;
-#		from = "@xxx";
-#		from = "@xxx";
-#		want_spam = yes;
-#	}
-	whitelist-ca {
-		priority = 20;
-		from = "@comodo.com";
-		from = "@geotrust.com";
-		from = "@geotrusteurope.com";
-		want_spam = yes;
-	}
-	.include(try=true; glob=true) "$LOCAL_CONFDIR/local.d/users/*.conf"
-	.include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/users.local.conf"
-}
diff --git a/install/tpl/rspamd_users.conf.master b/install/tpl/rspamd_users.conf.master
new file mode 120000
index 0000000000..3aa7af3185
--- /dev/null
+++ b/install/tpl/rspamd_users.conf.master
@@ -0,0 +1 @@
+../../server/conf/rspamd_users.conf.master
\ No newline at end of file
diff --git a/server/conf/rspamd_users.conf.master b/server/conf/rspamd_users.conf.master
new file mode 100644
index 0000000000..73d437d6cb
--- /dev/null
+++ b/server/conf/rspamd_users.conf.master
@@ -0,0 +1,43 @@
+settings {
+	authenticated {
+		priority = 10;
+		authenticated = yes;
+		#apply "default" { groups_disabled = ["rbl", "spf"]; }
+		apply "default" {
+			#symbols_enabled = [];
+			symbols_disabled = [];
+			#groups_enabled = [];
+			groups_disabled = ["rbl"];
+		}
+	}
+	whitelist {
+		priority = 10;
+		rcpt = "postmaster";
+		rcpt = "hostmaster";
+		rcpt = "abuse";
+		want_spam = yes;
+	}
+	whitelist-ip {
+		priority = 10;
+<tmpl_loop name="whitelist_ips">
+		ip = "<tmpl_var name='ip'>";
+</tmpl_loop>
+		
+		want_spam = yes;
+	}
+#	whitelist-timmehosting {
+#		priority = 20;
+#		from = "@xxx";
+#		from = "@xxx";
+#		want_spam = yes;
+#	}
+	whitelist-ca {
+		priority = 20;
+		from = "@comodo.com";
+		from = "@geotrust.com";
+		from = "@geotrusteurope.com";
+		want_spam = yes;
+	}
+	.include(try=true; glob=true) "$LOCAL_CONFDIR/local.d/users/*.conf"
+	.include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/users.local.conf"
+}
-- 
GitLab


From 0a18e943449be72cd9e733602ff2be9fdb2b32e6 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 18 Sep 2019 10:59:10 +0200
Subject: [PATCH 146/571] - better log messages on rspamd plugin - ignore @/*@
 targets for spamfilter_user in rspamd plugin

---
 server/plugins-available/rspamd_plugin.inc.php | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 49eb87165e..cb2af0f8f3 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -131,7 +131,11 @@ class rspamd_plugin {
 		$is_domain = false;
 		$email_address = $data[$use_data][$identifier];
 		$settings_name =  $email_address;
-		if(!$email_address) {
+		if($email_address === '*@' || $email_address === '@') {
+			// we will ignore those global targets
+			$app->log('Ignoring @ spamfilter_user as rspamd does not support it this way.', LOGLEVEL_DEBUG);
+			return;
+		} elseif(!$email_address) {
 			// problem reading identifier
 			$app->log('Empty email address in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN);
 			return;
@@ -145,7 +149,7 @@ class rspamd_plugin {
 		
 		if($settings_name == '') {
 			// missing settings file name
-			$app->log('Empty email address in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN);
+			$app->log('Empty rspamd identifier in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN);
 			return;
 		}
 		
-- 
GitLab


From 3b0ec62c98e32af10a4d8b31aca6a749d377e8ed Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 18 Sep 2019 12:57:28 +0200
Subject: [PATCH 147/571] - fixed problem in rspamd plugin handling deleting of
 domains or users, fixes #5401

---
 server/plugins-available/rspamd_plugin.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index cb2af0f8f3..f6bb5d5a8e 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -94,10 +94,10 @@ class rspamd_plugin {
 		}
 		
 		$use_data = 'new';
-		if(substr($event_name, -7) === 'delete') {
+		if(substr($event_name, -7) === '_delete') {
 			$mode = 'delete';
 			$use_data = 'old';
-		} elseif(substr($event_name, -7) === 'insert') {
+		} elseif(substr($event_name, -7) === '_insert') {
 			$mode = 'insert';
 		} else {
 			$mode = 'update';
-- 
GitLab


From ba8971de0cb5f8ff01f3e943b4787658f4d6b5bb Mon Sep 17 00:00:00 2001
From: Ales Seifert <ales@web4people.com.au>
Date: Wed, 18 Sep 2019 17:42:29 +0200
Subject: [PATCH 148/571] Added option to select Local Mail server for remote
 email accounts import

---
 interface/web/tools/import_ispconfig.php        | 17 ++++++++++++++++-
 .../web/tools/lib/lang/en_import_ispconfig.lng  |  1 +
 .../web/tools/templates/import_ispconfig.htm    |  6 ++++++
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/interface/web/tools/import_ispconfig.php b/interface/web/tools/import_ispconfig.php
index e2b8bad647..716ed2f934 100644
--- a/interface/web/tools/import_ispconfig.php
+++ b/interface/web/tools/import_ispconfig.php
@@ -107,6 +107,17 @@ if(isset($_POST['connected'])) {
 		}
 		$app->tpl->setVar("client_group_id", $client_select);
 
+		//* Fill the mail server select field
+		$sql = "SELECT server_id, server_name FROM server WHERE mail_server = 1 and mirror_server_id = 0";
+		$mail_servers = $app->db->queryAllRecords($sql);
+		$mail_server_select = "";
+		if(is_array($mail_servers)) {
+			foreach( $mail_servers as $m_server) {
+				$selected = @($m_server['server_id'] == $_POST['local_server_id'])?'SELECTED':'';
+				$mail_server_select .= "<option value='$m_server[server_id]' $selected>$m_server[server_name]</option>\r\n";
+			}
+		}
+		$app->tpl->setVar("local_server_id", $mail_server_select);
 
 		try {
 			//* Allow connections to self signed SSL certs
@@ -161,6 +172,7 @@ $app->tpl->setVar('connected', $connected);
 $app->tpl->setVar('remote_session_id', $remote_session_id);
 $app->tpl->setVar('msg', $msg);
 $app->tpl->setVar('error', $error);
+$app->tpl->setVar('local_server_id', $_POST['local_server_id'], true);
 
 //* SET csrf token
 $csrf_token = $app->auth->csrf_token_get('ispconfig_import');
@@ -188,7 +200,10 @@ function start_domain_import($mail_domain) {
 	$server_id = intval($tmp['server_id']);
 	unset($tmp);
 	if($server_id == 0) $server_id = 1;
-
+	
+    if (isset($_POST['local_server_id']) && intval($_POST['local_server_id']) !== $server_id){
+        $server_id = intval($_POST['local_server_id']);
+    }
 	//* get the mail domain record
 	$mail_domain_rec = $client->mail_domain_get($remote_session_id, array('domain' => $mail_domain));
 	if(is_array($mail_domain_rec)) {
diff --git a/interface/web/tools/lib/lang/en_import_ispconfig.lng b/interface/web/tools/lib/lang/en_import_ispconfig.lng
index 65ea145980..73002f8868 100644
--- a/interface/web/tools/lib/lang/en_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/en_import_ispconfig.lng
@@ -20,5 +20,6 @@ $wb['import_alias_txt'] = 'Import email alias';
 $wb['import_forward_txt'] = 'Import forward';
 $wb['import_user_filter_txt'] = 'Import user filter';
 $wb['import_spamfilter_txt'] = 'Import spamfilter';
+$wb['local_server_txt'] = 'Local Mail Server';
 
 ?>
\ No newline at end of file
diff --git a/interface/web/tools/templates/import_ispconfig.htm b/interface/web/tools/templates/import_ispconfig.htm
index 1d63df2a6d..9d845701f6 100644
--- a/interface/web/tools/templates/import_ispconfig.htm
+++ b/interface/web/tools/templates/import_ispconfig.htm
@@ -36,6 +36,12 @@
                         {tmpl_var name='client_group_id'}
                     </select></div>
                 </div>
+                <div class="form-group">
+                    <label for="local_server_id" class="col-sm-3 control-label">{tmpl_var name='local_server_txt'}</label>
+                    <div class="col-sm-9"><select name="local_server_id" id="local_server_id" class="form-control">
+                        {tmpl_var name='local_server_id'}
+                    </select></div>
+                </div>
                 <div class="form-group">
                     <label class="col-sm-3 control-label">{tmpl_var name="import_mailbox_txt"}</label>
                     <div class="col-sm-9"><input class="form-control" type="checkbox" id="import_mailbox" value="1" name="import_mailbox" checked="checked" /></div>
-- 
GitLab


From 6d9985346ad660e36f62805ff3fa4ebf1e0afe6b Mon Sep 17 00:00:00 2001
From: Helmo <rink@initfour.nl>
Date: Tue, 24 Sep 2019 10:55:11 +0200
Subject: [PATCH 149/571] More Dutch, mail_user_filter

Some form of inheritance might be nice to reduce the amount of duplication in these files.
---
 .../lib/lang/nl_software_package_list.lng     |  2 +-
 interface/web/mail/lib/lang/nl.lng            |  2 +-
 interface/web/mail/lib/lang/nl_mail_get.lng   |  6 +--
 interface/web/mail/lib/lang/nl_mail_user.lng  |  7 ++--
 .../web/mail/lib/lang/nl_mail_user_filter.lng | 30 +++++++--------
 .../web/mail/lib/lang/nl_mail_user_list.lng   |  4 +-
 .../web/mail/lib/lang/nl_spamfilter_users.lng |  2 +-
 interface/web/mailuser/lib/lang/nl.lng        |  6 +--
 .../lib/lang/nl_mail_user_autoresponder.lng   | 22 +++++------
 .../mailuser/lib/lang/nl_mail_user_filter.lng | 38 +++++++++----------
 10 files changed, 59 insertions(+), 60 deletions(-)

diff --git a/interface/web/admin/lib/lang/nl_software_package_list.lng b/interface/web/admin/lib/lang/nl_software_package_list.lng
index 33e66022bc..44aaa563ad 100644
--- a/interface/web/admin/lib/lang/nl_software_package_list.lng
+++ b/interface/web/admin/lib/lang/nl_software_package_list.lng
@@ -6,7 +6,7 @@ $wb['package_description_txt'] = 'Omschrijving';
 $wb['action_txt'] = 'Actie';
 $wb['toolsarea_head_txt'] = 'Pakketten';
 $wb['repoupdate_txt'] = 'Update pakketlijst';
-$wb['package_id_txt'] = 'locaal App-ID';
+$wb['package_id_txt'] = 'lokaal App-ID';
 $wb['no_packages_txt'] = 'No packages available';
 $wb['edit_txt'] = 'Edit';
 $wb['delete_txt'] = 'Delete';
diff --git a/interface/web/mail/lib/lang/nl.lng b/interface/web/mail/lib/lang/nl.lng
index 91d63a7abc..6664809b46 100644
--- a/interface/web/mail/lib/lang/nl.lng
+++ b/interface/web/mail/lib/lang/nl.lng
@@ -13,7 +13,7 @@ $wb['Spamfilter'] = 'Spamfilter';
 $wb['Email Routing'] = 'Email routing';
 $wb['Email transport'] = 'Email transport';
 $wb['Mailbox'] = 'Mailbox';
-$wb['Autoresponder'] = 'Autoresponder';
+$wb['Autoresponder'] = 'Autobeantwoorden';
 $wb['Mail Filter'] = 'Mail filter';
 $wb['Custom Rules'] = 'Custom rules';
 $wb['Email filter'] = 'E-mail filter';
diff --git a/interface/web/mail/lib/lang/nl_mail_get.lng b/interface/web/mail/lib/lang/nl_mail_get.lng
index 5cbeab14e7..738f93e663 100644
--- a/interface/web/mail/lib/lang/nl_mail_get.lng
+++ b/interface/web/mail/lib/lang/nl_mail_get.lng
@@ -13,7 +13,7 @@ $wb['source_username_error_isempty'] = 'Gebruikersnaam is niet ingvuld.';
 $wb['source_password_error_isempty'] = 'Wachtwoord is niet ingvuld.';
 $wb['destination_error_isemail'] = 'Geen bestemming geselecteerd.';
 $wb['source_server_error_regex'] = 'Pop3/Imap server is geen geldige domeinnaam.';
-$wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
-$wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
+$wb['source_read_all_txt'] = 'Haal alle berichten op (incl. reeds gelezen)';
+$wb['error_delete_read_all_combination'] = 'Ongeldige combinatie van opties. \\"Verwijder e-mails na ontvangst\\" en \\"Haal alle berichten op (incl. reeds gelezen)\\" werken niet samen.';
+$wb['source_delete_note_txt'] = 'Controleer voor het activeren van deze optie of het ophalen van berichten naar verwachting werkt.';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 94dd018332..65d89a32af 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -9,7 +9,6 @@ $wb['email_error_unique'] = 'Duplicaat e-mail adres.';
 $wb['autoresponder_text_txt'] = 'Tekst';
 $wb['autoresponder_txt'] = 'Actief';
 $wb['autoresponder_start_date_txt'] = 'Start op';
-$wb['autoresponder_start_date_ispast'] = 'Start datum mag niet in het verleden liggen.';
 $wb['autoresponder_end_date_txt'] = 'Eindigt op';
 $wb['autoresponder_end_date_isgreater'] = 'Einddatum moet later zijn dan de startdatum.';
 $wb['no_domain_perm'] = 'U heeft geen toestemming voor dit domein.';
@@ -34,11 +33,11 @@ $wb['quota_error_value'] = 'Ongeldige quota waarde. Toegestane waarden zijn: 0 =
 $wb['move_junk_txt'] = 'Verplaats SPAM e-mails naar junk folder';
 $wb['name_txt'] = 'Echte naam';
 $wb['name_optional_txt'] = '(Optioneel)';
-$wb['autoresponder_active'] = 'Inschakelen autoresponder';
+$wb['autoresponder_active'] = 'Inschakelen autobeantwoorden';
 $wb['cc_txt'] = 'Stuur kopie naar';
 $wb['cc_error_isemail'] = 'Het \\"Stuur kopie naar\\" veld bevat geen geldig e-mail adres';
 $wb['domain_txt'] = 'Domain';
-$wb['now_txt'] = 'Now';
+$wb['now_txt'] = 'Nu';
 $wb['login_error_unique'] = 'Login is already taken.';
 $wb['login_error_regex'] = 'Valid characters are A-Z, a-z, 0-9, ., _ and -.';
 $wb['login_txt'] = 'Login (optional)';
@@ -58,7 +57,7 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 $wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
+$wb['autoresponder_start_date_is_required'] = 'Een startdatun is vereist voor het inschakelen van Autobeantwoorden.';
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
 $wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
 $wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
diff --git a/interface/web/mail/lib/lang/nl_mail_user_filter.lng b/interface/web/mail/lib/lang/nl_mail_user_filter.lng
index 903b610729..95af45d96e 100644
--- a/interface/web/mail/lib/lang/nl_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user_filter.lng
@@ -7,23 +7,23 @@ $wb['rulename_error_empty'] = 'Naam is niet ingvuld.';
 $wb['searchterm_is_empty'] = 'Zoekterm is niet ingvuld.';
 $wb['source_txt'] = 'Bron';
 $wb['target_error_regex'] = 'Het doel mag alleen de volgende karakters bevatten: a-z, 0-9, -, ., _, en {spatie}';
-$wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
-$wb['subject_txt'] = 'Subject';
-$wb['from_txt'] = 'From';
-$wb['to_txt'] = 'To';
-$wb['contains_txt'] = 'Contains';
+$wb['limit_mailfilter_txt'] = 'Het max. aantal e-mail filters voor uw account is bereikt.';
+$wb['subject_txt'] = 'Onderwerp';
+$wb['from_txt'] = 'Afzender';
+$wb['to_txt'] = 'Bestemming';
+$wb['contains_txt'] = 'Bevat';
 $wb['is_txt'] = 'Is';
-$wb['begins_with_txt'] = 'Begins with';
-$wb['ends_with_txt'] = 'Ends with';
-$wb['delete_txt'] = 'Delete';
-$wb['move_stop_txt'] = 'Move to';
+$wb['begins_with_txt'] = 'Begint met';
+$wb['ends_with_txt'] = 'Eindigt in';
+$wb['delete_txt'] = 'Verwijderen';
+$wb['move_stop_txt'] = 'Verplaatsen naar';
 $wb['header_txt'] = 'Header';
-$wb['size_over_txt'] = 'Email size over (KB)';
-$wb['size_under_txt'] = 'Email size under (KB)';
+$wb['size_over_txt'] = 'Email grootte bove (KB)';
+$wb['size_under_txt'] = 'Email grootte onder (KB)';
 $wb['localpart_txt'] = 'Localpart';
-$wb['domain_txt'] = 'Domain';
-$wb['keep_txt'] = 'Keep';
-$wb['reject_txt'] = 'Reject';
+$wb['domain_txt'] = 'Domein';
+$wb['keep_txt'] = 'Behouden';
+$wb['reject_txt'] = 'Afwijzen';
 $wb['stop_txt'] = 'Stop';
-$wb['move_to_txt'] = 'Move to';
+$wb['move_to_txt'] = 'Verplaatsen naar';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user_list.lng b/interface/web/mail/lib/lang/nl_mail_user_list.lng
index e421af0ecc..39125af2e0 100644
--- a/interface/web/mail/lib/lang/nl_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user_list.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['list_head_txt'] = 'Mailbox';
 $wb['email_txt'] = 'E-mail';
-$wb['autoresponder_txt'] = 'Autoresponder';
+$wb['autoresponder_txt'] = 'Autobeantwoorden';
 $wb['add_new_record_txt'] = 'Toevoegen mailbox';
 $wb['name_txt'] = 'Echte naam';
 $wb['login_txt'] = 'Login';
-$wb['postfix_txt'] = 'Receiving';
+$wb['postfix_txt'] = 'Ontvangen';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
diff --git a/interface/web/mail/lib/lang/nl_spamfilter_users.lng b/interface/web/mail/lib/lang/nl_spamfilter_users.lng
index 4b7144b1f3..697e130b35 100644
--- a/interface/web/mail/lib/lang/nl_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/nl_spamfilter_users.lng
@@ -4,7 +4,7 @@ $wb['priority_txt'] = 'Prioriteit';
 $wb['policy_id_txt'] = 'Policy';
 $wb['email_txt'] = 'E-mail (Patroon)';
 $wb['fullname_txt'] = 'Naam';
-$wb['local_txt'] = 'Locaal';
+$wb['local_txt'] = 'Lokaal';
 $wb['email_error_notempty'] = 'The email address must not be empty.';
 $wb['fullname_error_notempty'] = 'The name must not be empty.';
 $wb['10 - highest'] = '10 - highest';
diff --git a/interface/web/mailuser/lib/lang/nl.lng b/interface/web/mailuser/lib/lang/nl.lng
index 114dec9b91..6383a82864 100644
--- a/interface/web/mailuser/lib/lang/nl.lng
+++ b/interface/web/mailuser/lib/lang/nl.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['Email Account'] = 'Email Account';
-$wb['Overview'] = 'Overview';
-$wb['Password'] = 'Password';
-$wb['Autoresponder'] = 'Autoresponder';
+$wb['Overview'] = 'Overzicht';
+$wb['Password'] = 'Wachtwoord';
+$wb['Autoresponder'] = 'Autobeantwoorden';
 $wb['Send copy'] = 'Send copy';
 $wb['Spamfilter'] = 'Spamfilter';
 $wb['Email Filters'] = 'Email Filters';
diff --git a/interface/web/mailuser/lib/lang/nl_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/nl_mail_user_autoresponder.lng
index 79f386a7dc..7c8283c838 100644
--- a/interface/web/mailuser/lib/lang/nl_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/nl_mail_user_autoresponder.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['mailbox_autoresponder_txt'] = 'Autoresponder';
-$wb['autoresponder_subject'] = 'Out of office reply';
-$wb['autoresponder_text_txt'] = 'Text';
-$wb['autoresponder_txt'] = 'Active';
-$wb['autoresponder_start_date_txt'] = 'Start on';
-$wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
-$wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
-$wb['autoresponder_active'] = 'Enable the autoresponder';
-$wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['mailbox_autoresponder_txt'] = 'Autobeantwoorden';
+$wb['autoresponder_subject'] = 'Out of office antwoord';
+$wb['autoresponder_text_txt'] = 'Tekst';
+$wb['autoresponder_txt'] = 'Actief';
+$wb['autoresponder_start_date_txt'] = 'Start op';
+$wb['autoresponder_start_date_isfuture'] = 'Startdatum mag niet in het verleden liggen.';
+$wb['autoresponder_end_date_txt'] = 'Eindigt op';
+$wb['autoresponder_end_date_isgreater'] = 'Einddatum moet later zijn dan de startdatum.';
+$wb['autoresponder_active'] = 'Inschakelen autobeantwoorden';
+$wb['now_txt'] = 'Nu';
+$wb['autoresponder_subject_txt'] = 'E-mail onderwerp';
 ?>
diff --git a/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng b/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
index 4069a15351..0092c288a0 100644
--- a/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
@@ -1,21 +1,21 @@
 <?php
-$wb['rulename_txt'] = 'Name';
-$wb['action_txt'] = 'Action';
-$wb['target_txt'] = 'Folder';
-$wb['active_txt'] = 'Active';
-$wb['rulename_error_empty'] = 'Name is empty.';
-$wb['searchterm_is_empty'] = 'Search term is empty.';
-$wb['source_txt'] = 'Source';
-$wb['target_error_regex'] = 'The target may only contain these characters: a-z, 0-9, -, ., _, and {space}';
-$wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
-$wb['subject_txt'] = 'Subject';
-$wb['from_txt'] = 'From';
-$wb['to_txt'] = 'To';
-$wb['contains_txt'] = 'Contains';
-$wb['is_txt'] = 'Is';
-$wb['begins_with_txt'] = 'Begins with';
-$wb['ends_with_txt'] = 'Ends with';
-$wb['move_to_txt'] = 'Move to';
-$wb['delete_txt'] = 'Delete';
-$wb['mailbox_filter_txt'] = 'Mailbox filter';
+$wb['rulename_txt'] = "Naam";
+$wb['action_txt'] = "Actie";
+$wb['target_txt'] = "Map";
+$wb['active_txt'] = "Actief";
+$wb['rulename_error_empty'] = "Naam is niet ingevuld.";
+$wb['searchterm_is_empty'] = "Zoekterm is niet ingvuld.";
+$wb['source_txt'] = "Bron";
+$wb['target_error_regex'] = 'Het doel mag alleen de volgende karakters bevatten: a-z, 0-9, -, ., _, en {spatie}';
+$wb['limit_mailfilter_txt'] = "Het max. aantal e-mail filters voor uw account is bereikt.";
+$wb['subject_txt'] = "Onderwerp";
+$wb['from_txt'] = "Afzender";
+$wb['to_txt'] = "Bestemming";
+$wb['contains_txt'] = "Bevat";
+$wb['is_txt'] = "Is";
+$wb['begins_with_txt'] = "Begint met";
+$wb['ends_with_txt'] = "Endigt in";
+$wb['move_to_txt'] = "Verplaatsen naar";
+$wb['delete_txt'] = "Verwijderen";
+$wb['mailbox_filter_txt'] = "Mailbox filter";
 ?>
-- 
GitLab


From 090607b01bc9f4d9674ae3542316ef0e06085159 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 27 Sep 2019 17:56:29 +0200
Subject: [PATCH 150/571] Fixes #5410 rspamd mail aliases don't get updated
 when policy is changed

---
 .../lib/plugins/mail_mail_domain_plugin.inc.php    | 10 ++++++++++
 interface/web/mail/spamfilter_policy_edit.php      | 14 ++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/interface/lib/plugins/mail_mail_domain_plugin.inc.php b/interface/lib/plugins/mail_mail_domain_plugin.inc.php
index df6e3ffeb0..598fe74f09 100644
--- a/interface/lib/plugins/mail_mail_domain_plugin.inc.php
+++ b/interface/lib/plugins/mail_mail_domain_plugin.inc.php
@@ -116,6 +116,16 @@ class mail_mail_domain_plugin {
 			$app->db->query("UPDATE spamfilter_users SET email=REPLACE(email, ?, ?), sys_userid = ?, sys_groupid = ? WHERE email LIKE ?", $page_form->oldDataRecord['domain'], $domain, $client_user_id, $sys_groupid, "%@" . $page_form->oldDataRecord['domain']);
 
 		} // end if domain name changed
+		
+		//* Force-update the aliases (required for spamfilter changes)
+		$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source LIKE ? OR destination LIKE ?", "%@" . $domain, "%@" . $domain);
+		
+		if(is_array($forwardings)) {
+			foreach($forwardings as $rec) {
+				$app->db->datalogUpdate('mail_forwarding', array("source" => $rec['source']), 'forwarding_id', $rec['forwarding_id'],true);
+			}
+		}
+		
 	}
 
 }
diff --git a/interface/web/mail/spamfilter_policy_edit.php b/interface/web/mail/spamfilter_policy_edit.php
index 8226ae6048..572a184020 100644
--- a/interface/web/mail/spamfilter_policy_edit.php
+++ b/interface/web/mail/spamfilter_policy_edit.php
@@ -105,6 +105,20 @@ class page_action extends tform_actions {
 			if(is_array($spamfilter_users) && !empty($spamfilter_users)){
 				foreach($spamfilter_users as $spamfilter_user){
 					$app->db->datalogUpdate('spamfilter_users', $spamfilter_user, 'id', $spamfilter_user["id"], true);
+					
+					// check if this is an email domain
+					if(substr($spamfilter_user['email'],0,1) == '@') {
+						$domain = substr($spamfilter_user['email'],1);
+						$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source LIKE ? OR destination LIKE ?", "%@" . $domain, "%@" . $domain);
+						
+						// Force-update aliases and forwards
+						if(is_array($forwardings)) {
+							foreach($forwardings as $rec) {
+								$app->db->datalogUpdate('mail_forwarding', array("source" => $rec['source']), 'forwarding_id', $rec['forwarding_id'],true);
+							}
+						}
+					}
+					
 				}
 			}
 		}
-- 
GitLab


From b08a125644ab9b2d48a41a69721d87767ee73312 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 3 Oct 2019 16:56:09 +0200
Subject: [PATCH 151/571] Fix for issue #5415

---
 interface/lib/classes/auth.inc.php            | 23 ++++++++++++++-----
 .../lib/classes/listform_actions.inc.php      | 10 ++++++--
 interface/lib/classes/tform_actions.inc.php   |  3 +++
 .../templates/directive_snippets_list.htm     |  2 +-
 .../web/admin/templates/firewall_list.htm     |  2 +-
 interface/web/admin/templates/groups_list.htm |  2 +-
 .../web/admin/templates/iptables_list.htm     |  2 +-
 .../admin/templates/server_config_list.htm    |  2 +-
 .../web/admin/templates/server_ip_list.htm    |  2 +-
 .../admin/templates/server_ip_map_list.htm    |  2 +-
 interface/web/admin/templates/server_list.htm |  2 +-
 .../web/admin/templates/server_php_list.htm   |  2 +-
 .../admin/templates/software_repo_list.htm    |  2 +-
 interface/web/admin/templates/users_list.htm  |  2 +-
 .../client/templates/client_circle_list.htm   |  2 +-
 .../client_message_template_list.htm          |  2 +-
 .../client/templates/client_template_list.htm |  2 +-
 .../web/client/templates/clients_list.htm     |  2 +-
 .../web/client/templates/domain_list.htm      |  2 +-
 .../templates/message_template_list.htm       |  2 +-
 .../web/client/templates/resellers_list.htm   |  2 +-
 interface/web/dns/templates/dns_a_list.htm    |  2 +-
 .../dns/templates/dns_slave_admin_list.htm    |  2 +-
 .../web/dns/templates/dns_slave_list.htm      |  2 +-
 .../web/dns/templates/dns_soa_admin_list.htm  |  2 +-
 interface/web/dns/templates/dns_soa_list.htm  |  2 +-
 .../web/dns/templates/dns_template_list.htm   |  2 +-
 .../help/templates/support_message_list.htm   |  2 +-
 .../web/mail/templates/mail_alias_list.htm    |  2 +-
 .../mail/templates/mail_aliasdomain_list.htm  |  2 +-
 .../mail/templates/mail_blacklist_list.htm    |  2 +-
 .../templates/mail_content_filter_list.htm    |  2 +-
 .../mail/templates/mail_domain_admin_list.htm |  2 +-
 .../templates/mail_domain_catchall_list.htm   |  2 +-
 .../web/mail/templates/mail_domain_list.htm   |  2 +-
 .../web/mail/templates/mail_forward_list.htm  |  2 +-
 .../web/mail/templates/mail_get_list.htm      |  2 +-
 .../mail/templates/mail_mailinglist_list.htm  |  2 +-
 .../templates/mail_relay_recipient_list.htm   |  2 +-
 .../mail/templates/mail_transport_list.htm    |  2 +-
 .../mail/templates/mail_user_filter_list.htm  |  2 +-
 .../web/mail/templates/mail_user_list.htm     |  2 +-
 .../mail/templates/mail_whitelist_list.htm    |  2 +-
 .../templates/spamfilter_blacklist_list.htm   |  2 +-
 .../mail/templates/spamfilter_config_list.htm |  2 +-
 .../mail/templates/spamfilter_policy_list.htm |  2 +-
 .../mail/templates/spamfilter_users_list.htm  |  2 +-
 .../templates/spamfilter_whitelist_list.htm   |  2 +-
 .../mail/templates/xmpp_domain_admin_list.htm |  2 +-
 .../web/mail/templates/xmpp_domain_list.htm   |  2 +-
 .../web/mail/templates/xmpp_user_list.htm     |  2 +-
 .../templates/mail_user_filter_list.htm       |  2 +-
 .../web/monitor/templates/datalog_list.htm    |  2 +-
 .../web/monitor/templates/syslog_list.htm     |  4 ++--
 interface/web/sites/templates/cron_list.htm   |  2 +-
 .../sites/templates/database_admin_list.htm   |  2 +-
 .../web/sites/templates/database_list.htm     |  2 +-
 .../templates/database_user_admin_list.htm    |  2 +-
 .../sites/templates/database_user_list.htm    |  2 +-
 .../web/sites/templates/ftp_user_list.htm     |  2 +-
 .../web/sites/templates/shell_user_list.htm   |  2 +-
 .../sites/templates/web_childdomain_list.htm  |  2 +-
 .../web/sites/templates/web_folder_list.htm   |  2 +-
 .../sites/templates/web_folder_user_list.htm  |  2 +-
 .../templates/web_vhost_domain_admin_list.htm |  2 +-
 .../sites/templates/web_vhost_domain_list.htm |  2 +-
 .../web/sites/templates/webdav_user_list.htm  |  2 +-
 interface/web/vm/templates/openvz_ip_list.htm |  2 +-
 .../vm/templates/openvz_ostemplate_list.htm   |  2 +-
 .../web/vm/templates/openvz_template_list.htm |  2 +-
 interface/web/vm/templates/openvz_vm_list.htm |  2 +-
 71 files changed, 97 insertions(+), 77 deletions(-)

diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index afe50ac692..2075c7b90d 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -268,16 +268,27 @@ class auth {
 		return array('csrf_id' => $_csrf_id,'csrf_key' => $_csrf_key);
 	}
 	
-	public function csrf_token_check() {
+	public function csrf_token_check($method = 'POST') {
 		global $app;
 		
-		if(isset($_POST) && is_array($_POST)) {
+		if($method == 'POST') {
+			$input_vars = $_POST;
+		} elseif ($method == 'GET') {
+			$input_vars = $_GET;
+		} else {
+			$app->error('Unknown CSRF verification method.');
+		}
+		
+		//print_r($input_vars);
+		//die(print_r($_SESSION['_csrf']));
+		
+		if(isset($input_vars) && is_array($input_vars)) {
 			$_csrf_valid = false;
-			if(isset($_POST['_csrf_id']) && isset($_POST['_csrf_key'])) {
-				$_csrf_id = trim($_POST['_csrf_id']);
-				$_csrf_key = trim($_POST['_csrf_key']);
+			if(isset($input_vars['_csrf_id']) && isset($input_vars['_csrf_key'])) {
+				$_csrf_id = trim($input_vars['_csrf_id']);
+				$_csrf_key = trim($input_vars['_csrf_key']);
 				if(isset($_SESSION['_csrf']) && isset($_SESSION['_csrf'][$_csrf_id]) && isset($_SESSION['_csrf_timeout']) && isset($_SESSION['_csrf_timeout'][$_csrf_id])) {
-					if($_SESSION['_csrf'][$_csrf_id] === $_csrf_key && $_SESSION['_csrf_timeout'] >= time()) $_csrf_valid = true;
+					if($_SESSION['_csrf'][$_csrf_id] === $_csrf_key && $_SESSION['_csrf_timeout'][$_csrf_id] >= time()) $_csrf_valid = true;
 				}
 			}
 			if($_csrf_valid !== true) {
diff --git a/interface/lib/classes/listform_actions.inc.php b/interface/lib/classes/listform_actions.inc.php
index 1b8426b894..4a463fe015 100644
--- a/interface/lib/classes/listform_actions.inc.php
+++ b/interface/lib/classes/listform_actions.inc.php
@@ -129,13 +129,19 @@ class listform_actions {
 
 		// Getting Datasets from DB
 		$records = $app->db->queryAllRecords($this->getQueryString($php_sort));
+		
+		$csrf_token = $app->auth->csrf_token_get($app->listform->listDef['name']);
+		$_csrf_id = $csrf_token['csrf_id'];
+		$_csrf_key = $csrf_token['csrf_key'];
 
 		$this->DataRowColor = "#FFFFFF";
 		$records_new = array();
 		if(is_array($records)) {
 			$this->idx_key = $app->listform->listDef["table_idx"];
-			foreach($records as $rec) {
-				$records_new[] = $this->prepareDataRow($rec);
+			foreach($records as $key => $rec) {
+				$records_new[$key] = $this->prepareDataRow($rec);
+				$records_new[$key]['csrf_id'] = $_csrf_id;
+				$records_new[$key]['csrf_key'] = $_csrf_key;
 			}
 		}
 
diff --git a/interface/lib/classes/tform_actions.inc.php b/interface/lib/classes/tform_actions.inc.php
index f277c51274..d83ec0d3d7 100644
--- a/interface/lib/classes/tform_actions.inc.php
+++ b/interface/lib/classes/tform_actions.inc.php
@@ -297,6 +297,9 @@ class tform_actions {
 	 */
 	function onDelete() {
 		global $app, $conf, $list_def_file, $tform_def_file;
+		
+		// Check CSRF Token
+		$app->auth->csrf_token_check('GET');
 
 		include_once $list_def_file;
 
diff --git a/interface/web/admin/templates/directive_snippets_list.htm b/interface/web/admin/templates/directive_snippets_list.htm
index 602c71a07c..8433282496 100644
--- a/interface/web/admin/templates/directive_snippets_list.htm
+++ b/interface/web/admin/templates/directive_snippets_list.htm
@@ -40,7 +40,7 @@
 							<td><a href="#" data-load-content="admin/directive_snippets_edit.php?id={tmpl_var name='id'}">{tmpl_var name="customer_viewable"}</a></td>
 							<td><a href="#" data-load-content="admin/directive_snippets_edit.php?id={tmpl_var name='id'}">{tmpl_var name="master_directive_snippets_id"}</a></td>
                             <td class="text-right">
-                                <tmpl_if name='is_master'></tmpl_else><a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/directive_snippets_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a></tmpl_if>
+                                <tmpl_if name='is_master'></tmpl_else><a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/directive_snippets_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a></tmpl_if>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/firewall_list.htm b/interface/web/admin/templates/firewall_list.htm
index ac85f7e4fe..b40414a5da 100644
--- a/interface/web/admin/templates/firewall_list.htm
+++ b/interface/web/admin/templates/firewall_list.htm
@@ -40,7 +40,7 @@
                             <td><a href="#" data-load-content="admin/firewall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="tcp_port"}</a></td>
                             <td><a href="#" data-load-content="admin/firewall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="udp_port"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/firewall_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/firewall_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/groups_list.htm b/interface/web/admin/templates/groups_list.htm
index d53ee58b24..972ae64144 100644
--- a/interface/web/admin/templates/groups_list.htm
+++ b/interface/web/admin/templates/groups_list.htm
@@ -35,7 +35,7 @@
                             <td><a href="#" data-load-content="admin/groups_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
                             <td><a href="#" data-load-content="admin/groups_edit.php?id={tmpl_var name='id'}">{tmpl_var name="description"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/groups_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/groups_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/iptables_list.htm b/interface/web/admin/templates/iptables_list.htm
index e1fcb3dc03..2adbd04627 100644
--- a/interface/web/admin/templates/iptables_list.htm
+++ b/interface/web/admin/templates/iptables_list.htm
@@ -51,7 +51,7 @@
                             <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="state"}</a></td>
                             <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="target"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/iptables_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/iptables_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/server_config_list.htm b/interface/web/admin/templates/server_config_list.htm
index ef0935552a..9284c5c354 100644
--- a/interface/web/admin/templates/server_config_list.htm
+++ b/interface/web/admin/templates/server_config_list.htm
@@ -24,7 +24,7 @@
                         <tr>
                             <td><a href="#" data-load-content="admin/server_config_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_config_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_config_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/server_ip_list.htm b/interface/web/admin/templates/server_ip_list.htm
index 892c263f20..c612e1ca64 100644
--- a/interface/web/admin/templates/server_ip_list.htm
+++ b/interface/web/admin/templates/server_ip_list.htm
@@ -45,7 +45,7 @@
                             <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virtualhost"}</a></td>
                             <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virtualhost_port"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/server_ip_map_list.htm b/interface/web/admin/templates/server_ip_map_list.htm
index a186e49b03..ea23856022 100644
--- a/interface/web/admin/templates/server_ip_map_list.htm
+++ b/interface/web/admin/templates/server_ip_map_list.htm
@@ -32,7 +32,7 @@
 					<td><a href="#" data-load-content="admin/server_ip_map_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source_ip"}</a></td>
 					<td><a href="#" data-load-content="admin/server_ip_map_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination_ip"}</a></td>
 					<td class="text-right">
-						<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_map_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+						<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_map_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
 					</td>
 				</tr>
 			</tmpl_loop>
diff --git a/interface/web/admin/templates/server_list.htm b/interface/web/admin/templates/server_list.htm
index 1152909320..313fad7ff1 100644
--- a/interface/web/admin/templates/server_list.htm
+++ b/interface/web/admin/templates/server_list.htm
@@ -45,7 +45,7 @@
                             <td>{tmpl_var name="vserver_server"}</td>
                             <td>{tmpl_var name="xmpp_server"}</td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/server_php_list.htm b/interface/web/admin/templates/server_php_list.htm
index 5a6392eea3..9833eb1e7e 100644
--- a/interface/web/admin/templates/server_php_list.htm
+++ b/interface/web/admin/templates/server_php_list.htm
@@ -39,7 +39,7 @@
                             <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
                             <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_php_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_php_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/software_repo_list.htm b/interface/web/admin/templates/software_repo_list.htm
index 8b1a48b562..d408896de6 100644
--- a/interface/web/admin/templates/software_repo_list.htm
+++ b/interface/web/admin/templates/software_repo_list.htm
@@ -37,7 +37,7 @@
                             <td><a href="#" data-load-content="admin/software_repo_edit.php?id={tmpl_var name='id'}">{tmpl_var name="repo_name"}</a></td>
                             <td><a href="#" data-load-content="admin/software_repo_edit.php?id={tmpl_var name='id'}">{tmpl_var name="repo_url"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_repo_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_repo_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/users_list.htm b/interface/web/admin/templates/users_list.htm
index b7872527ff..8db81c6c8d 100644
--- a/interface/web/admin/templates/users_list.htm
+++ b/interface/web/admin/templates/users_list.htm
@@ -43,7 +43,7 @@
                             <td class="text-right">
                                 <tmpl_if name="username" op="!=" value="admin">
                                     <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='client_id'}"><span class="icon icon-loginas"></span></a>
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/users_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                             </td>
                         </tr>
diff --git a/interface/web/client/templates/client_circle_list.htm b/interface/web/client/templates/client_circle_list.htm
index 56bce62d6c..2cfbdf36e3 100644
--- a/interface/web/client/templates/client_circle_list.htm
+++ b/interface/web/client/templates/client_circle_list.htm
@@ -40,7 +40,7 @@
                             <td><a href="#" data-load-content="client/client_circle_edit.php?id={tmpl_var name='id'}">{tmpl_var name="circle_name"}</a></td>
                             <td><a href="#" data-load-content="client/client_circle_edit.php?id={tmpl_var name='id'}">{tmpl_var name="description"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_circle_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_circle_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/client/templates/client_message_template_list.htm b/interface/web/client/templates/client_message_template_list.htm
index d83a9f7dec..2f586c1ed7 100644
--- a/interface/web/client/templates/client_message_template_list.htm
+++ b/interface/web/client/templates/client_message_template_list.htm
@@ -32,7 +32,7 @@
             <td><a href="#" data-load-content="client/message_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
             <td class="text-right">
               <div class="buttons icons16">
-                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/message_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/message_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
               </div>
             </td>
           </tr>
diff --git a/interface/web/client/templates/client_template_list.htm b/interface/web/client/templates/client_template_list.htm
index 37564f7197..887072b438 100644
--- a/interface/web/client/templates/client_template_list.htm
+++ b/interface/web/client/templates/client_template_list.htm
@@ -40,7 +40,7 @@
                             <td><a href="#" data-load-content="client/client_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_type"}</a></td>
                             <td><a href="#" data-load-content="client/client_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/client/templates/clients_list.htm b/interface/web/client/templates/clients_list.htm
index 7a538eba22..2ffd7dfa78 100644
--- a/interface/web/client/templates/clients_list.htm
+++ b/interface/web/client/templates/clients_list.htm
@@ -68,7 +68,7 @@
                                 <tmpl_elseif name="is_reseller">
                                     <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='id'}"><span class="icon icon-loginas"></span></a>
                                 </tmpl_if>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/client/templates/domain_list.htm b/interface/web/client/templates/domain_list.htm
index 8dda689cba..818812ddd9 100644
--- a/interface/web/client/templates/domain_list.htm
+++ b/interface/web/client/templates/domain_list.htm
@@ -32,7 +32,7 @@
                     <td><a href="#" data-load-content="client/domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                     <td><a href="#" data-load-content="client/domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
                     <td class="text-right">
-                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                     </td>
                 </tr>
                 </tmpl_loop>
diff --git a/interface/web/client/templates/message_template_list.htm b/interface/web/client/templates/message_template_list.htm
index 5efaf5f23e..71011634f9 100644
--- a/interface/web/client/templates/message_template_list.htm
+++ b/interface/web/client/templates/message_template_list.htm
@@ -28,7 +28,7 @@
             <td><a href="#" data-load-content="billing/invoice_message_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
             <td class="text-right">
               <div class="buttons icons16">    
-                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('billing/invoice_message_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('billing/invoice_message_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
               </div>
             </td>
           </tr>
diff --git a/interface/web/client/templates/resellers_list.htm b/interface/web/client/templates/resellers_list.htm
index 8edfa08546..1ccaffa07e 100644
--- a/interface/web/client/templates/resellers_list.htm
+++ b/interface/web/client/templates/resellers_list.htm
@@ -50,7 +50,7 @@
                             <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}"><span class="flags flag-{tmpl_var name="countryiso"}">{tmpl_var name="country"}</span></a></td>
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='id'}"><span class="icon icon-loginas"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/reseller_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/reseller_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm
index 67bf8ac910..5a4a5eeb68 100644
--- a/interface/web/dns/templates/dns_a_list.htm
+++ b/interface/web/dns/templates/dns_a_list.htm
@@ -75,7 +75,7 @@
                         <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="aux"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ttl"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_rr_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_rr_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_slave_admin_list.htm b/interface/web/dns/templates/dns_slave_admin_list.htm
index f4395849be..3afaa91175 100644
--- a/interface/web/dns/templates/dns_slave_admin_list.htm
+++ b/interface/web/dns/templates/dns_slave_admin_list.htm
@@ -59,7 +59,7 @@
                         <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_slave_list.htm b/interface/web/dns/templates/dns_slave_list.htm
index 27916f4b25..799f14ba28 100644
--- a/interface/web/dns/templates/dns_slave_list.htm
+++ b/interface/web/dns/templates/dns_slave_list.htm
@@ -56,7 +56,7 @@
                         <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
index fbdc0398ed..79faa645fe 100644
--- a/interface/web/dns/templates/dns_soa_admin_list.htm
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -64,7 +64,7 @@
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
                         <td class="text-right">   
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm
index 22cd19484e..df579e852a 100644
--- a/interface/web/dns/templates/dns_soa_list.htm
+++ b/interface/web/dns/templates/dns_soa_list.htm
@@ -61,7 +61,7 @@
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
                         <td class="text-right">   
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_template_list.htm b/interface/web/dns/templates/dns_template_list.htm
index f7816cf4d8..7622666940 100644
--- a/interface/web/dns/templates/dns_template_list.htm
+++ b/interface/web/dns/templates/dns_template_list.htm
@@ -34,7 +34,7 @@
                         <td><a href="#" data-load-content="dns/dns_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="visible"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/help/templates/support_message_list.htm b/interface/web/help/templates/support_message_list.htm
index 3094b96728..c0b4b75d74 100644
--- a/interface/web/help/templates/support_message_list.htm
+++ b/interface/web/help/templates/support_message_list.htm
@@ -37,7 +37,7 @@
                             <td><a href="#" data-load-content="help/support_message_edit.php?id={tmpl_var name='id'}">{tmpl_var name="subject"}</a></td>
 							<td><a href="#" data-load-content="help/support_message_edit.php?id={tmpl_var name='id'}">{tmpl_var name="tstamp"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/support_message_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/support_message_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_alias_list.htm b/interface/web/mail/templates/mail_alias_list.htm
index 5f19fba138..f65e40a908 100644
--- a/interface/web/mail/templates/mail_alias_list.htm
+++ b/interface/web/mail/templates/mail_alias_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_alias_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_alias_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_alias_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_alias_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_aliasdomain_list.htm b/interface/web/mail/templates/mail_aliasdomain_list.htm
index 6ce208b48b..06166ae3c4 100644
--- a/interface/web/mail/templates/mail_aliasdomain_list.htm
+++ b/interface/web/mail/templates/mail_aliasdomain_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_aliasdomain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_aliasdomain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_blacklist_list.htm b/interface/web/mail/templates/mail_blacklist_list.htm
index b023f54042..a52c797e8b 100644
--- a/interface/web/mail/templates/mail_blacklist_list.htm
+++ b/interface/web/mail/templates/mail_blacklist_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="mail/mail_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_blacklist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_blacklist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_content_filter_list.htm b/interface/web/mail/templates/mail_content_filter_list.htm
index 01689aa4d6..5dcd8e7ff9 100644
--- a/interface/web/mail/templates/mail_content_filter_list.htm
+++ b/interface/web/mail/templates/mail_content_filter_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="mail/mail_content_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="pattern"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_content_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="action"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_content_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_content_filter_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_domain_admin_list.htm b/interface/web/mail/templates/mail_domain_admin_list.htm
index 1b2b41f392..69680cf308 100644
--- a/interface/web/mail/templates/mail_domain_admin_list.htm
+++ b/interface/web/mail/templates/mail_domain_admin_list.htm
@@ -39,7 +39,7 @@
                             <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_domain_catchall_list.htm b/interface/web/mail/templates/mail_domain_catchall_list.htm
index 29483ae3d0..a9c0d9acd7 100644
--- a/interface/web/mail/templates/mail_domain_catchall_list.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_catchall_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_catchall_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_domain_list.htm b/interface/web/mail/templates/mail_domain_list.htm
index bb1eba146b..f0d6e532e7 100644
--- a/interface/web/mail/templates/mail_domain_list.htm
+++ b/interface/web/mail/templates/mail_domain_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_forward_list.htm b/interface/web/mail/templates/mail_forward_list.htm
index bb4b95ed12..c4d7e1f60a 100644
--- a/interface/web/mail/templates/mail_forward_list.htm
+++ b/interface/web/mail/templates/mail_forward_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_forward_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_forward_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_forward_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_forward_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_get_list.htm b/interface/web/mail/templates/mail_get_list.htm
index 58a550a7d1..747220c2da 100644
--- a/interface/web/mail/templates/mail_get_list.htm
+++ b/interface/web/mail/templates/mail_get_list.htm
@@ -59,7 +59,7 @@
                             <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source_username"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_get_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_get_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_mailinglist_list.htm b/interface/web/mail/templates/mail_mailinglist_list.htm
index 7e15df3aad..78e216dc08 100644
--- a/interface/web/mail/templates/mail_mailinglist_list.htm
+++ b/interface/web/mail/templates/mail_mailinglist_list.htm
@@ -52,7 +52,7 @@
                                 <tmpl_if name="mailmailinglist_link">
                                     <a class="btn btn-default formbutton-default formbutton-narrow" href="mail/mailinglist.php?id={tmpl_var name='id'}" target="mailmailinglist"><span class="icon icon-mail"></span></a>
                                 </tmpl_if>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_mailinglist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_mailinglist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_relay_recipient_list.htm b/interface/web/mail/templates/mail_relay_recipient_list.htm
index 7dac3e7ce5..3aeeb12e6c 100644
--- a/interface/web/mail/templates/mail_relay_recipient_list.htm
+++ b/interface/web/mail/templates/mail_relay_recipient_list.htm
@@ -52,7 +52,7 @@
                             <td><a href="#" data-load-content="mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_relay_recipient_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_relay_recipient_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_transport_list.htm b/interface/web/mail/templates/mail_transport_list.htm
index 4b4b2d9e53..9795f0093e 100644
--- a/interface/web/mail/templates/mail_transport_list.htm
+++ b/interface/web/mail/templates/mail_transport_list.htm
@@ -59,7 +59,7 @@
                             <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="transport"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sort_order"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_transport_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_transport_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_user_filter_list.htm b/interface/web/mail/templates/mail_user_filter_list.htm
index 990558bd11..c38df26a8e 100644
--- a/interface/web/mail/templates/mail_user_filter_list.htm
+++ b/interface/web/mail/templates/mail_user_filter_list.htm
@@ -42,7 +42,7 @@
                     <tr>
                         <td><a href="#" data-load-content="mail/mail_user_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rulename"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_filter_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm
index 4e2fedd50c..6d800de57e 100644
--- a/interface/web/mail/templates/mail_user_list.htm
+++ b/interface/web/mail/templates/mail_user_list.htm
@@ -75,7 +75,7 @@
                             <tmpl_if name="mailboxlist_webmail_link">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" href="mail/webmailer.php?id={tmpl_var name='id'}" target="webmail"><span class="icon icon-mail"></span></a>
                             </tmpl_if>
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_whitelist_list.htm b/interface/web/mail/templates/mail_whitelist_list.htm
index cb3b783e7f..dcc018f717 100644
--- a/interface/web/mail/templates/mail_whitelist_list.htm
+++ b/interface/web/mail/templates/mail_whitelist_list.htm
@@ -40,7 +40,7 @@
                             <td><a href="#" data-load-content="mail/mail_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_whitelist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_whitelist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_blacklist_list.htm b/interface/web/mail/templates/spamfilter_blacklist_list.htm
index 91a45916ba..ae013bdff4 100644
--- a/interface/web/mail/templates/spamfilter_blacklist_list.htm
+++ b/interface/web/mail/templates/spamfilter_blacklist_list.htm
@@ -43,7 +43,7 @@
                             <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rid"}</a></td>
                             <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_blacklist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_blacklist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_config_list.htm b/interface/web/mail/templates/spamfilter_config_list.htm
index 486a79e6d9..3bcac6767a 100644
--- a/interface/web/mail/templates/spamfilter_config_list.htm
+++ b/interface/web/mail/templates/spamfilter_config_list.htm
@@ -31,7 +31,7 @@
                         <tr>
                             <td><a href="#" data-load-content="mail/spamfilter_config_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_config_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_config_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_policy_list.htm b/interface/web/mail/templates/spamfilter_policy_list.htm
index 0dd72dee54..665fa613af 100644
--- a/interface/web/mail/templates/spamfilter_policy_list.htm
+++ b/interface/web/mail/templates/spamfilter_policy_list.htm
@@ -49,7 +49,7 @@
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="bad_header_lover"}</a></td>
 						</tmpl_if>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_policy_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_policy_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_users_list.htm b/interface/web/mail/templates/spamfilter_users_list.htm
index 5f8ef83bae..d13fe32ccb 100644
--- a/interface/web/mail/templates/spamfilter_users_list.htm
+++ b/interface/web/mail/templates/spamfilter_users_list.htm
@@ -43,7 +43,7 @@
                         <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="policy_id"}</a></td>
                         <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="fullname"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_users_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_whitelist_list.htm b/interface/web/mail/templates/spamfilter_whitelist_list.htm
index 87ef0bde23..614f2a8f5e 100644
--- a/interface/web/mail/templates/spamfilter_whitelist_list.htm
+++ b/interface/web/mail/templates/spamfilter_whitelist_list.htm
@@ -43,7 +43,7 @@
                             <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rid"}</a></td>
                             <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_whitelist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_whitelist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/xmpp_domain_admin_list.htm b/interface/web/mail/templates/xmpp_domain_admin_list.htm
index ccda2d5032..c6338037f1 100644
--- a/interface/web/mail/templates/xmpp_domain_admin_list.htm
+++ b/interface/web/mail/templates/xmpp_domain_admin_list.htm
@@ -39,7 +39,7 @@
                             <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/xmpp_domain_list.htm b/interface/web/mail/templates/xmpp_domain_list.htm
index 79579142d7..dff0adb399 100644
--- a/interface/web/mail/templates/xmpp_domain_list.htm
+++ b/interface/web/mail/templates/xmpp_domain_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/xmpp_user_list.htm b/interface/web/mail/templates/xmpp_user_list.htm
index 68668b4928..bb8e91c6d0 100644
--- a/interface/web/mail/templates/xmpp_user_list.htm
+++ b/interface/web/mail/templates/xmpp_user_list.htm
@@ -53,7 +53,7 @@
                         <td><a href="#" data-load-content="mail/xmpp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="is_domain_admin"}</a></td>
                         <td><a href="#" data-load-content="mail/xmpp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="is_muc_admin"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/mailuser/templates/mail_user_filter_list.htm b/interface/web/mailuser/templates/mail_user_filter_list.htm
index 32d093844e..b81793b631 100644
--- a/interface/web/mailuser/templates/mail_user_filter_list.htm
+++ b/interface/web/mailuser/templates/mail_user_filter_list.htm
@@ -30,7 +30,7 @@
                 <tr>
                     <td><a href="#" data-load-content="mailuser/mail_user_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rulename"}</a></td>
                     <td class="text-right">
-                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mailuser/mail_user_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mailuser/mail_user_filter_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                     </td>
                 </tr>
                 </tmpl_loop>
diff --git a/interface/web/monitor/templates/datalog_list.htm b/interface/web/monitor/templates/datalog_list.htm
index eb79f46b54..53ca89997f 100644
--- a/interface/web/monitor/templates/datalog_list.htm
+++ b/interface/web/monitor/templates/datalog_list.htm
@@ -33,7 +33,7 @@
                             <td>{tmpl_var name="action"}</td>
                             <td>{tmpl_var name="dbtable"}</td>
                             <td class="text-right">    
-                                <!--<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/datalog_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a> -->
+                                <!--<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/datalog_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a> -->
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/monitor/templates/syslog_list.htm b/interface/web/monitor/templates/syslog_list.htm
index 8f62422a84..7196e3ab02 100644
--- a/interface/web/monitor/templates/syslog_list.htm
+++ b/interface/web/monitor/templates/syslog_list.htm
@@ -34,10 +34,10 @@
                             <td>{tmpl_var name="message"}</td>
                             <td class="text-right">
                                 <tmpl_if name="loglevel" op="==" value="Error">
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                                 <tmpl_if name="loglevel" op="==" value="Warning">
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                             </td>
                         </tr>
diff --git a/interface/web/sites/templates/cron_list.htm b/interface/web/sites/templates/cron_list.htm
index b38a6224a5..fbca26a844 100644
--- a/interface/web/sites/templates/cron_list.htm
+++ b/interface/web/sites/templates/cron_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='command'}">{tmpl_var name="command"}</a></td>
                             <td class="text-right">
                                 <div class="buttons icons16">    
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/cron_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/cron_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </div>
                             </td>
                         </tr>
diff --git a/interface/web/sites/templates/database_admin_list.htm b/interface/web/sites/templates/database_admin_list.htm
index aad56db337..724027ca91 100644
--- a/interface/web/sites/templates/database_admin_list.htm
+++ b/interface/web/sites/templates/database_admin_list.htm
@@ -61,7 +61,7 @@
                                     <a class="btn btn-default formbutton-default formbutton-narrow" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span class="icon icon-dbadmin"></span></a>
                                 </tmpl_if>
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/database_list.htm b/interface/web/sites/templates/database_list.htm
index 0d0aaca923..208741ff5a 100644
--- a/interface/web/sites/templates/database_list.htm
+++ b/interface/web/sites/templates/database_list.htm
@@ -75,7 +75,7 @@
                                     <a class="btn btn-default formbutton-default formbutton-narrow" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span class="icon icon-dbadmin"></span></a>
                                 </tmpl_if>
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/database_user_admin_list.htm b/interface/web/sites/templates/database_user_admin_list.htm
index 2d7ece0b87..0b7eb1be09 100644
--- a/interface/web/sites/templates/database_user_admin_list.htm
+++ b/interface/web/sites/templates/database_user_admin_list.htm
@@ -33,7 +33,7 @@
                             <td><a href="#" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>                            
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/database_user_list.htm b/interface/web/sites/templates/database_user_list.htm
index b29d5c0600..3cca7ec510 100644
--- a/interface/web/sites/templates/database_user_list.htm
+++ b/interface/web/sites/templates/database_user_list.htm
@@ -46,7 +46,7 @@
                             <td><a href="#" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_user"}</a></td>
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/ftp_user_list.htm b/interface/web/sites/templates/ftp_user_list.htm
index 43650dac89..bd807c5072 100644
--- a/interface/web/sites/templates/ftp_user_list.htm
+++ b/interface/web/sites/templates/ftp_user_list.htm
@@ -59,7 +59,7 @@
                             <tmpl_if name="webftp_link">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" href="{tmpl_var name='webftp_url'}" target="_blank"><span class="icon icon-dbadmin"></span></button>
                             </tmpl_if>
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/ftp_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/ftp_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/shell_user_list.htm b/interface/web/sites/templates/shell_user_list.htm
index 9be1d8485d..53eb6906fa 100644
--- a/interface/web/sites/templates/shell_user_list.htm
+++ b/interface/web/sites/templates/shell_user_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="sites/shell_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                             <td><a href="#" data-load-content="sites/shell_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/shell_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/shell_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/web_childdomain_list.htm b/interface/web/sites/templates/web_childdomain_list.htm
index 51aadc157a..8aa5dc3447 100644
--- a/interface/web/sites/templates/web_childdomain_list.htm
+++ b/interface/web/sites/templates/web_childdomain_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="sites/web_childdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                             <td><a href="#" data-load-content="sites/web_childdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_childdomain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_childdomain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/web_folder_list.htm b/interface/web/sites/templates/web_folder_list.htm
index aaccb48895..e512b8b594 100644
--- a/interface/web/sites/templates/web_folder_list.htm
+++ b/interface/web/sites/templates/web_folder_list.htm
@@ -55,7 +55,7 @@
                         <td><a href="#" data-load-content="sites/web_folder_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                         <td><a href="#" data-load-content="sites/web_folder_edit.php?id={tmpl_var name='id'}">{tmpl_var name="path"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/sites/templates/web_folder_user_list.htm b/interface/web/sites/templates/web_folder_user_list.htm
index 6b67e0591c..8e1d77e25d 100644
--- a/interface/web/sites/templates/web_folder_user_list.htm
+++ b/interface/web/sites/templates/web_folder_user_list.htm
@@ -52,7 +52,7 @@
                         <td><a href="#" data-load-content="sites/web_folder_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="web_folder_id"}</a></td>
                         <td><a href="#" data-load-content="sites/web_folder_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/sites/templates/web_vhost_domain_admin_list.htm b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
index 6f0e8f39ca..1ab14300d0 100644
--- a/interface/web/sites/templates/web_vhost_domain_admin_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
@@ -47,7 +47,7 @@
                         <td class="text-right">
 							<a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></a>
 							<a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="glyphicon glyphicon-signal"></span></a>
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm
index b784f15965..105dac9399 100644
--- a/interface/web/sites/templates/web_vhost_domain_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_list.htm
@@ -61,7 +61,7 @@
                         <td class="text-right">
 							<a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></button>
                             <a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="glyphicon glyphicon-signal"></span></a>
-							<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+							<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/sites/templates/webdav_user_list.htm b/interface/web/sites/templates/webdav_user_list.htm
index 01764cc2fe..866bcc9826 100644
--- a/interface/web/sites/templates/webdav_user_list.htm
+++ b/interface/web/sites/templates/webdav_user_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="sites/webdav_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                             <td><a href="#" data-load-content="sites/webdav_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/webdav_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/webdav_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/vm/templates/openvz_ip_list.htm b/interface/web/vm/templates/openvz_ip_list.htm
index fd12694c37..ff98e2df55 100644
--- a/interface/web/vm/templates/openvz_ip_list.htm
+++ b/interface/web/vm/templates/openvz_ip_list.htm
@@ -39,7 +39,7 @@
                             <td><a href="#" data-load-content="vm/openvz_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_address"}</a></td>
                             <td><a href="#" data-load-content="vm/openvz_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="reserved"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ip_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ip_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/vm/templates/openvz_ostemplate_list.htm b/interface/web/vm/templates/openvz_ostemplate_list.htm
index 85f46e6732..d800686e1c 100644
--- a/interface/web/vm/templates/openvz_ostemplate_list.htm
+++ b/interface/web/vm/templates/openvz_ostemplate_list.htm
@@ -42,7 +42,7 @@
                             <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="allservers"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ostemplate_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ostemplate_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/vm/templates/openvz_template_list.htm b/interface/web/vm/templates/openvz_template_list.htm
index 5ec0cb7913..2c20427901 100644
--- a/interface/web/vm/templates/openvz_template_list.htm
+++ b/interface/web/vm/templates/openvz_template_list.htm
@@ -33,7 +33,7 @@
                             <td><a href="#" data-load-content="vm/openvz_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
                             <td><a href="#" data-load-content="vm/openvz_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/vm/templates/openvz_vm_list.htm b/interface/web/vm/templates/openvz_vm_list.htm
index 516b536bb3..ee4084f4d1 100644
--- a/interface/web/vm/templates/openvz_vm_list.htm
+++ b/interface/web/vm/templates/openvz_vm_list.htm
@@ -49,7 +49,7 @@
                             <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_address"}</a></td>
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="vm/openvz_action.php?id={tmpl_var name='id'}"><span class="icon icon-action"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_vm_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_vm_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
-- 
GitLab


From e958363340da23d59f2dd69bf25bda98b3913850 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 3 Oct 2019 16:56:59 +0200
Subject: [PATCH 152/571] Fixedm code typo in nginx_plugin.inc.php

---
 server/plugins-available/nginx_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 86d5aba14f..a8a3c3bf16 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -694,7 +694,7 @@ class nginx_plugin {
 			
 			//* Copy the web skeleton files only when there is no index.ph or index.html file yet
 			if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php')) {
-				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language']), 0, 2)) {
+				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2))) {
 					if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html');
 
 					if(is_file($conf['rootpath'] . '/conf-custom/index/favicon.ico')) {
-- 
GitLab


From 9d5bde2cf44500d2815a93d7f60deb61ca5db9e2 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 4 Oct 2019 10:32:48 +0200
Subject: [PATCH 153/571] - Don't pass password to useradd and use chpasswd
 with proc_open instead, fixes #5416

---
 server/lib/classes/system.inc.php             | 27 +++++++++++++++++++
 .../shelluser_base_plugin.inc.php             | 12 +++++++--
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index c05d5ddf00..525bd7bda1 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -2191,4 +2191,31 @@ class system{
 		return true;
 	}
 	
+	
+	public function pipe_exec($cmd, $stdin, &$retval = null, &$stderr = null) {
+		$descriptors = array(
+			0 => array('pipe', 'r'),
+			1 => array('pipe', 'w'),
+			2 => array('pipe', 'w')
+		);
+		
+		$result = '';
+		$pipes = null;
+		$proc = proc_open($cmd, $descriptors, $pipes);
+		if(is_resource($proc)) {
+			fwrite($pipes[0], $stdin);
+			fclose($pipes[0]);
+			
+			$result = stream_get_contents($pipes[1]);
+			$stderr = stream_get_contents($pipes[2]);
+			fclose($pipes[1]);
+			fclose($pipes[2]);
+			
+			$retval = proc_close($proc);
+			
+			return $result;
+		} else {
+			return false;
+		}
+	}
 }
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index b4e47b4e97..9f19c2be58 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -129,12 +129,20 @@ class shelluser_base_plugin {
 					$app->system->chgrp($homedir,$data['new']['pgroup'],false);
 				}
 				$command = 'useradd -d ? -g ? -o'; // non unique
-				if($data['new']['password'] != '') $command .= ' -p ' . escapeshellarg($data['new']['password']);
 				$command .= ' -s ? -u ? ?';
 				$app->system->exec_safe($command, $homedir, $data['new']['pgroup'], $data['new']['shell'], $uid, $data['new']['username']);
 				$app->log("Executed command: ".$command, LOGLEVEL_DEBUG);
 				$app->log("Added shelluser: ".$data['new']['username'], LOGLEVEL_DEBUG);
-				
+
+				if($data['new']['password'] != '') {
+					$retval = null;
+					$stderr = '';
+					$app->system->pipe_exec('chpasswd -e ' . escapeshellarg($data['new']['username']), $data['new']['username'] . ':' . $data['new']['password'], $retval, $stderr);
+					if($retval != 0) {
+						$app->log("Command chpasswd failed for user ".$data['new']['username'] . ' with code ' . $retval . ': ' . $stderr, LOGLEVEL_WARN);
+					}
+				}
+			
 				$app->system->chown($data['new']['dir'],$data['new']['username'],false);
 				$app->system->chgrp($data['new']['dir'],$data['new']['pgroup'],false);
 				
-- 
GitLab


From 126290c8e8d4a4bbba21f08b2f5dee4578d9224d Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 4 Oct 2019 12:05:35 +0200
Subject: [PATCH 154/571] - added possibility to execute mkdirpath,
 file_put_contents and file_get_contents as unprivileged user, partly
 implements #5417

---
 server/lib/classes/system.inc.php | 78 +++++++++++++++++++++++++++----
 1 file changed, 69 insertions(+), 9 deletions(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 525bd7bda1..3db57c510f 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -834,23 +834,55 @@ class system{
 		}
 	}
 
-	function file_put_contents($filename, $data, $allow_symlink = false) {
+	function file_put_contents($filename, $data, $allow_symlink = false, $run_as_user = null) {
 		global $app;
 		if($allow_symlink == false && $this->checkpath($filename) == false) {
 			$app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
 			return false;
 		}
-		if(file_exists($filename)) unlink($filename);
-		return file_put_contents($filename, $data);
+		if($run_as_user !== null && $run_as_user !== 'root') {
+			if(!$this->check_run_as_user($run_as_user)) {
+				$app->log("Action aborted, invalid run-as-user: $run_as_user", LOGLEVEL_WARN);
+				return false;
+			}
+			if(file_exists($filename)) {
+				$cmd = $this->get_sudo_command('rm ' . escapeshellarg($filename), $run_as_user);
+				$this->exec_safe($cmd);
+			}
+			$cmd = $this->get_sudo_command('cat - > ' . escapeshellarg($filename), $run_as_user);
+			$retval = null;
+			$stderr = '';
+			$this->pipe_exec($cmd, $data, $retval, $stderr);
+			if($retval > 0) {
+				$app->log("Safe file_put_contents failed: $stderr", LOGLEVEL_WARN);
+				return false;
+			} else {
+				$size = filesize($filename);
+				return $size;
+			}
+		} else {
+			if(file_exists($filename)) unlink($filename);
+			return file_put_contents($filename, $data);
+		}
 	}
 
-	function file_get_contents($filename, $allow_symlink = false) {
+	function file_get_contents($filename, $allow_symlink = false, $run_as_user = null) {
 		global $app;
 		if($allow_symlink == false && $this->checkpath($filename) == false) {
 			$app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
 			return false;
 		}
-		return file_get_contents($filename, $data);
+		
+		if($run_as_user !== null && $run_as_user !== 'root') {
+			if(!$this->check_run_as_user($run_as_user)) {
+				$app->log("Action aborted, invalid run-as-user: $run_as_user", LOGLEVEL_WARN);
+				return false;
+			}
+			$cmd = $this->get_sudo_command('cat ' . escapeshellarg($filename), $run_as_user) . ' 2>/dev/null';
+			return $this->system_safe($cmd);
+		} else {
+			return file_get_contents($filename);
+		}
 	}
 
 	function rename($filename, $new_filename, $allow_symlink = false) {
@@ -862,13 +894,29 @@ class system{
 		return rename($filename, $new_filename);
 	}
 
-	function mkdir($dirname, $allow_symlink = false, $mode = 0777, $recursive = false) {
+	function mkdir($dirname, $allow_symlink = false, $mode = 0777, $recursive = false, $run_as_user = null) {
 		global $app;
 		if($allow_symlink == false && $this->checkpath($dirname) == false) {
 			$app->log("Action aborted, file is a symlink: $dirname", LOGLEVEL_WARN);
 			return false;
 		}
-		if(@mkdir($dirname, $mode, $recursive)) {
+		if($run_as_user !== null && !$this->check_run_as_user($run_as_user)) {
+			$app->log("Action aborted, invalid run-as-user: $run_as_user", LOGLEVEL_WARN);
+			return false;
+		}
+		$success = false;
+		if($run_as_user !== null && $run_as_user !== 'root') {
+			$cmd = $this->get_sudo_command('mkdir ' . ($recursive ? '-p ' : '') . escapeshellarg($dirname), $run_as_user) . ' >/dev/null 2>&1';
+			$this->exec_safe($cmd);
+			if($this->last_exec_retcode() != 0) {
+				$success = false;
+			} else {
+				$success = true;
+			}
+		} else {
+			$success = @mkdir($dirname, $mode, $recursive);
+		}
+		if($success) {
 			return true;
 		} else {
 			$app->log("mkdir failed: $dirname", LOGLEVEL_DEBUG);
@@ -1677,14 +1725,14 @@ class system{
 	}
 
 	//* Function to create directory paths and chown them to a user and group
-	function mkdirpath($path, $mode = 0755, $user = '', $group = '') {
+	function mkdirpath($path, $mode = 0755, $user = '', $group = '', $run_as_user = null) {
 		$path_parts = explode('/', $path);
 		$new_path = '';
 		if(is_array($path_parts)) {
 			foreach($path_parts as $part) {
 				$new_path .= '/'.$part;
 				if(!@is_dir($new_path)) {
-					$this->mkdir($new_path);
+					$this->mkdir($new_path, false, 0777, false, $run_as_user);
 					$this->chmod($new_path, $mode);
 					if($user != '') $this->chown($new_path, $user);
 					if($group != '') $this->chgrp($new_path, $group);
@@ -2218,4 +2266,16 @@ class system{
 			return false;
 		}
 	}
+	
+	private function get_sudo_command($cmd, $run_as_user) {
+		return 'sudo -u ' . escapeshellarg($run_as_user) . ' sh -c ' . escapeshellarg($cmd);
+	}
+	
+	private function check_run_as_user($username) {
+		if(preg_match('/^[a-zA-Z0-9_\-]+$/', $username)) {
+			return true;
+		} else{
+			return false;
+		}
+	}
 }
-- 
GitLab


From ed8922b48a67f981c44ee933633c403f27a1b882 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 4 Oct 2019 14:38:48 +0200
Subject: [PATCH 155/571] For issue #5415

---
 interface/web/client/client_del.php | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/interface/web/client/client_del.php b/interface/web/client/client_del.php
index 2bddd02a07..d92dc56008 100644
--- a/interface/web/client/client_del.php
+++ b/interface/web/client/client_del.php
@@ -58,9 +58,14 @@ class page_action extends tform_actions {
 		if(!is_object($app->tform)) $app->uses('tform');
 
 		if($_POST["confirm"] == 'yes') {
+			if(isset($_POST['_csrf_id'])) $_GET['_csrf_id'] = $_POST['_csrf_id'];
+			if(isset($_POST['_csrf_key'])) $_GET['_csrf_key'] = $_POST['_csrf_key'];
 			parent::onDelete();
 		} else {
 
+			// Check CSRF Token
+			$app->auth->csrf_token_check('GET');
+			
 			$app->uses('tpl');
 			$app->tpl->newTemplate("form.tpl.htm");
 			$app->tpl->setInclude('content_tpl', 'templates/client_del.htm');
@@ -100,6 +105,11 @@ class page_action extends tform_actions {
 			$lng_file = 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'_client_del.lng';
 			include $lng_file;
 			$app->tpl->setVar($wb);
+			
+			// get new csrf token
+			$csrf_token = $app->auth->csrf_token_get('client_del');
+			$app->tpl->setVar('_csrf_id', $csrf_token['csrf_id']);
+			$app->tpl->setVar('_csrf_key', $csrf_token['csrf_key']);
 
 			$app->tpl_defaults();
 			$app->tpl->pparse();
-- 
GitLab


From 559c694e648bcf52d7eb057a7b54a95de169738f Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 4 Oct 2019 17:33:43 +0200
Subject: [PATCH 156/571] Various fixes related to #5415

---
 interface/web/sites/aps_do_operation.php             |  3 +++
 interface/web/sites/aps_install_package.php          | 10 ++++++++--
 interface/web/sites/aps_installedpackages_list.php   | 10 ++++++++--
 interface/web/sites/templates/aps_instances_list.htm |  2 +-
 interface/web/sites/templates/aps_packages_list.htm  |  2 +-
 5 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/interface/web/sites/aps_do_operation.php b/interface/web/sites/aps_do_operation.php
index ff0705f9bb..8de3ed4e29 100644
--- a/interface/web/sites/aps_do_operation.php
+++ b/interface/web/sites/aps_do_operation.php
@@ -64,6 +64,9 @@ if($_GET['action'] == 'change_status')
 }
 else if($_GET['action'] == 'delete_instance')
 	{
+		// Check CSRF Token
+		$app->auth->csrf_token_check('GET');
+		
 		// Make sure a valid package ID is given (also corresponding to the calling user)
 		$client_id = 0;
 		$is_admin = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
diff --git a/interface/web/sites/aps_install_package.php b/interface/web/sites/aps_install_package.php
index 4739e25b8a..1a38190a9f 100644
--- a/interface/web/sites/aps_install_package.php
+++ b/interface/web/sites/aps_install_package.php
@@ -93,6 +93,9 @@ if(!empty($domains_assoc)) foreach($domains_assoc as $domain) $domains[] = $doma
 	$result['input'] = array();
 if(count($_POST) > 1)
 {
+	// Check CSRF Token
+	$app->auth->csrf_token_check();
+	
 	$result = $gui->validateInstallerInput($_POST, $details, $domains, $settings);
 	if(empty($result['error']))
 	{
@@ -117,13 +120,16 @@ foreach($details as $key => $value)
 	else if($key == 'Requirements PHP settings') $app->tpl->setLoop('pkg_requirements_php_settings', $details['Requirements PHP settings']);
 }
 
+// get new csrf token
+$csrf_token = $app->auth->csrf_token_get('aps_install_package');
+$app->tpl->setVar('_csrf_id', $csrf_token['csrf_id']);
+$app->tpl->setVar('_csrf_key', $csrf_token['csrf_key']);
+
 // Parse the template as far as possible, then do the rest manually
 $app->tpl_defaults();
 $parsed_tpl = $app->tpl->grab();
 
 
-// ISPConfig has a very old and functionally limited template engine. We have to style parts on our own...
-
 // Print the domain list
 $domains_tpl = '';
 if(!empty($domains))
diff --git a/interface/web/sites/aps_installedpackages_list.php b/interface/web/sites/aps_installedpackages_list.php
index 28f334019f..32849ad740 100644
--- a/interface/web/sites/aps_installedpackages_list.php
+++ b/interface/web/sites/aps_installedpackages_list.php
@@ -112,12 +112,16 @@ if(!$is_admin) {
 $records = $app->db->queryAllRecords($query);
 $app->listform_actions->DataRowColor = '#FFFFFF';
 
+$csrf_token = $app->auth->csrf_token_get($app->listform->listDef['name']);
+$_csrf_id = $csrf_token['csrf_id'];
+$_csrf_key = $csrf_token['csrf_key'];
+
 // Re-form all result entries and add extra entries
 $records_new = array();
 if(is_array($records))
 {
 	$app->listform_actions->idx_key = $app->listform->listDef["table_idx"];
-	foreach($records as $rec)
+	foreach($records as $key => $rec)
 	{
 		// Set an abbreviated install location to beware the page layout
 		$ils = '';
@@ -129,7 +133,9 @@ if(is_array($records))
 		if($rec['instance_status'] != INSTANCE_REMOVE && $rec['instance_status'] != INSTANCE_INSTALL)
 			$rec['delete_possible'] = 'true';
 
-		$records_new[] = $app->listform_actions->prepareDataRow($rec);
+		$records_new[$key] = $app->listform_actions->prepareDataRow($rec);
+		$records_new[$key]['csrf_id'] = $_csrf_id;
+		$records_new[$key]['csrf_key'] = $_csrf_key;
 	}
 }
 $app->tpl->setLoop('records', $records_new);
diff --git a/interface/web/sites/templates/aps_instances_list.htm b/interface/web/sites/templates/aps_instances_list.htm
index cfde591b19..ae3d095e7b 100644
--- a/interface/web/sites/templates/aps_instances_list.htm
+++ b/interface/web/sites/templates/aps_instances_list.htm
@@ -40,7 +40,7 @@
                             <td><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='instance_status'}</span></td>
                             <td class="text-right">
                                 <tmpl_if name='delete_possible'>
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}','{tmpl_var name='pkg_delete_confirmation'}')"><span class="icon icon-delete"></span></button>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}','{tmpl_var name='pkg_delete_confirmation'}')"><span class="icon icon-delete"></span></button>
                                 </tmpl_if>
                             </td>        
                         </tr>
diff --git a/interface/web/sites/templates/aps_packages_list.htm b/interface/web/sites/templates/aps_packages_list.htm
index 501e7aeedd..fa3582ed74 100644
--- a/interface/web/sites/templates/aps_packages_list.htm
+++ b/interface/web/sites/templates/aps_packages_list.htm
@@ -31,7 +31,7 @@
                             <td>{tmpl_var name='version'}-{tmpl_var name='release'}</td>
                             <td>{tmpl_var name='category'}</td>
                                 <tmpl_if name='is_admin'>
-                                    <td><a href="javascript:ISPConfig.loadContentInto('status_content{tmpl_var name='__ROWNUM__'}', 'sites/aps_do_operation.php?action=change_status&id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='package_status'}</span></a></td>
+                                    <td><a href="javascript:ISPConfig.loadContentInto('status_content{tmpl_var name='__ROWNUM__'}', 'sites/aps_do_operation.php?action=change_status&id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}');"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='package_status'}</span></a></td>
                                 </tmpl_if>
                             <td class="text-right">&nbsp;</td>
                         </tr>
-- 
GitLab


From 58b341857c056db03999e9a79404ffcffe153ec4 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 8 Oct 2019 18:26:11 +0200
Subject: [PATCH 157/571] Implemented #5420 Improve input filters for Tools >
 Interface settings

---
 interface/web/admin/form/users.tform.php             | 12 ++++++++++++
 interface/web/admin/lib/lang/en_users.lng            |  4 ++++
 .../web/tools/form/interface_settings.tform.php      | 12 ++++++++++++
 interface/web/tools/interface_settings.php           |  5 +++--
 interface/web/tools/lib/lang/en_interface.lng        |  4 ++++
 5 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/form/users.tform.php b/interface/web/admin/form/users.tform.php
index 6a23559f12..b7f00b4eef 100644
--- a/interface/web/admin/form/users.tform.php
+++ b/interface/web/admin/form/users.tform.php
@@ -199,6 +199,12 @@ $form['tabs']['users'] = array (
 		'startmodule' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'startmodule_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'startmodule_regex'),
+			),
 			'regex'  => '',
 			'errmsg' => '',
 			'default' => '',
@@ -212,6 +218,12 @@ $form['tabs']['users'] = array (
 		'app_theme' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'RADIO',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'app_theme_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'app_theme_regex'),
+			),
 			'regex'  => '',
 			'errmsg' => '',
 			'default' => 'default',
diff --git a/interface/web/admin/lib/lang/en_users.lng b/interface/web/admin/lib/lang/en_users.lng
index 81f3742a35..931c73e8eb 100644
--- a/interface/web/admin/lib/lang/en_users.lng
+++ b/interface/web/admin/lib/lang/en_users.lng
@@ -33,4 +33,8 @@ $wb['username_error_collision'] = 'The username may not be web or web plus a num
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
+$wb['startmodule_empty'] = 'Startmodule empty.';
+$wb['startmodule_regex'] = 'Invalid chars in Startmodule.';
+$wb['app_theme_empty'] = 'App theme empty.';
+$wb['app_theme_regex'] = 'Invalid chars in App theme.';
 ?>
diff --git a/interface/web/tools/form/interface_settings.tform.php b/interface/web/tools/form/interface_settings.tform.php
index f213605bf7..9ab49eb0f1 100644
--- a/interface/web/tools/form/interface_settings.tform.php
+++ b/interface/web/tools/form/interface_settings.tform.php
@@ -144,6 +144,12 @@ $form['tabs']['main'] = array (
 		'startmodule' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'startmodule_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'startmodule_regex'),
+			),
 			'regex'  => '',
 			'errmsg' => '',
 			'default' => '',
@@ -157,6 +163,12 @@ $form['tabs']['main'] = array (
 		'app_theme' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'app_theme_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'app_theme_regex'),
+			),
 			'regex' => '',
 			'errmsg' => '',
 			'default' => 'default',
diff --git a/interface/web/tools/interface_settings.php b/interface/web/tools/interface_settings.php
index d7a1333b59..b14b637375 100644
--- a/interface/web/tools/interface_settings.php
+++ b/interface/web/tools/interface_settings.php
@@ -81,7 +81,6 @@ class page_action extends tform_actions {
 		if(!in_array($this->dataRecord['startmodule'], $this->dataRecord['modules'])) {
 			$app->tform->errorMessage .= $app->tform->wordbook['startmodule_err'];
 		}
-		$this->updateSessionTheme();
 	}
 
 	function onInsert() {
@@ -96,7 +95,6 @@ class page_action extends tform_actions {
 		if(@is_array($this->dataRecord['modules']) && !in_array($this->dataRecord['startmodule'], $this->dataRecord['modules'])) {
 			$app->tform->errorMessage .= $app->tform->wordbook['startmodule_err'];
 		}
-		$this->updateSessionTheme();
 	}
 
 	function updateSessionTheme() {
@@ -120,6 +118,9 @@ class page_action extends tform_actions {
 	}
 
 	function onAfterUpdate() {
+		
+		$this->updateSessionTheme();
+		
 		if($this->_theme_changed == true) {
 			// not the best way, but it works
 			header('Content-Type: text/html');
diff --git a/interface/web/tools/lib/lang/en_interface.lng b/interface/web/tools/lib/lang/en_interface.lng
index b15c7334b2..7cb0e2d8bc 100644
--- a/interface/web/tools/lib/lang/en_interface.lng
+++ b/interface/web/tools/lib/lang/en_interface.lng
@@ -4,4 +4,8 @@ $wb["interface_desc_txt"] = 'Modify your interface';
 $wb["language_txt"] = 'Language';
 $wb["startmodule_txt"] = 'Startmodule';
 $wb["app_theme_txt"] = 'Design';
+$wb['startmodule_empty'] = 'Startmodule empty.';
+$wb['startmodule_regex'] = 'Invalid chars in Startmodule.';
+$wb['app_theme_empty'] = 'App theme empty.';
+$wb['app_theme_regex'] = 'Invalid chars in App theme.';
 ?>
\ No newline at end of file
-- 
GitLab


From a1d4fd4828408ba33c53dfcfe14b1618f4a68c56 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 9 Oct 2019 10:48:24 +0200
Subject: [PATCH 158/571] More fixes for issue #5415

---
 interface/web/admin/software_package_del.php            | 3 +++
 interface/web/admin/software_package_install.php        | 7 +++++++
 interface/web/admin/software_package_list.php           | 7 ++++++-
 interface/web/admin/templates/software_package_list.htm | 2 +-
 4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/software_package_del.php b/interface/web/admin/software_package_del.php
index 31aeb1c09b..e1387f39c4 100644
--- a/interface/web/admin/software_package_del.php
+++ b/interface/web/admin/software_package_del.php
@@ -36,6 +36,9 @@ $app->auth->check_module_permissions('admin');
 $app->auth->check_security_permissions('admin_allow_software_packages');
 if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
 
+// Check CSRF Token
+$app->auth->csrf_token_check('GET');
+
 $software_update_inst_id = $app->functions->intval($_GET['software_update_inst_id']);
 
 if($software_update_inst_id > 0) {
diff --git a/interface/web/admin/software_package_install.php b/interface/web/admin/software_package_install.php
index ccbfd73ebe..6a5326d51a 100644
--- a/interface/web/admin/software_package_install.php
+++ b/interface/web/admin/software_package_install.php
@@ -38,6 +38,13 @@ $app->auth->check_security_permissions('admin_allow_software_packages');
 //* This is only allowed for administrators
 if(!$app->auth->is_admin()) die('only allowed for administrators.');
 
+// Check CSRF Token
+if(count($_POST) > 0) {
+	$app->auth->csrf_token_check('POST');
+} else {
+	$app->auth->csrf_token_check('GET');
+}
+
 $package_name = $_REQUEST['package'];
 $install_server_id = $app->functions->intval($_REQUEST['server_id']);
 $install_key = trim($_REQUEST['install_key']);
diff --git a/interface/web/admin/software_package_list.php b/interface/web/admin/software_package_list.php
index b6664d4234..8a21696c7f 100644
--- a/interface/web/admin/software_package_list.php
+++ b/interface/web/admin/software_package_list.php
@@ -145,6 +145,9 @@ $app->uses('tpl');
 $app->tpl->newTemplate("form.tpl.htm");
 $app->tpl->setInclude('content_tpl', 'templates/software_package_list.htm');
 
+$csrf_token = $app->auth->csrf_token_get('software_package_list');
+$_csrf_id = $csrf_token['csrf_id'];
+$_csrf_key = $csrf_token['csrf_key'];
 
 $servers = $app->db->queryAllRecords('SELECT server_id, server_name FROM server ORDER BY server_name');
 $packages = $app->db->queryAllRecords('SELECT * FROM software_package');
@@ -167,12 +170,14 @@ if(is_array($packages) && count($packages) > 0) {
 				if($p['package_installable'] == 'no') {
 					$installed_txt .= $s['server_name'].": ".$app->lng("Package can not be installed.")."<br />";
 				} else {
-					$installed_txt .= $s['server_name'].": <a href=\"#\" data-load-content=\"admin/software_package_install.php?package=".$p["package_name"]."&server_id=".$s["server_id"]."\">Install now</a><br />";
+					$installed_txt .= $s['server_name'].": <a href=\"#\" data-load-content=\"admin/software_package_install.php?package=".$p["package_name"]."&server_id=".$s["server_id"]."&_csrf_key=".$_csrf_key."&_csrf_id=".$_csrf_id."\">Install now</a><br />";
 				}
 			}
 		}
 		$packages[$key]['software_update_inst_id'] = intval($inst['software_update_inst_id']);
 		$packages[$key]['installed'] = $installed_txt;
+		$packages[$key]['csrf_id'] = $_csrf_id;
+		$packages[$key]['csrf_key'] = $_csrf_key;
 	}
 	$app->tpl->setVar('has_packages', 1);
 } else {
diff --git a/interface/web/admin/templates/software_package_list.htm b/interface/web/admin/templates/software_package_list.htm
index 31969c0575..e69e3780af 100644
--- a/interface/web/admin/templates/software_package_list.htm
+++ b/interface/web/admin/templates/software_package_list.htm
@@ -33,7 +33,7 @@
                             <td>ispapp{tmpl_var name="package_id"}</td>
 							<td class="text-right">
 								<a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="admin/software_package_edit.php?id={tmpl_var name='package_id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_package_del.php?software_update_inst_id={tmpl_var name='software_update_inst_id'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_package_del.php?software_update_inst_id={tmpl_var name='software_update_inst_id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
 						</tmpl_if>
-- 
GitLab


From 92184cbe2c093ddbcda168e63613e87d593947c4 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 9 Oct 2019 16:03:58 +0200
Subject: [PATCH 159/571] Updated Brazilian Portuguese and Turkish language
 files.

---
 interface/lib/lang/br.lng                     | 108 ++--
 interface/lib/lang/tr.lng                     | 127 ++---
 interface/web/admin/lib/lang/br.lng           |  35 +-
 .../admin/lib/lang/br_directive_snippets.lng  |  10 +-
 .../lib/lang/br_directive_snippets_list.lng   |   4 +-
 interface/web/admin/lib/lang/br_firewall.lng  |  10 +-
 .../web/admin/lib/lang/br_firewall_list.lng   |   2 +-
 interface/web/admin/lib/lang/br_groups.lng    |   2 +-
 .../web/admin/lib/lang/br_groups_list.lng     |   6 +-
 interface/web/admin/lib/lang/br_iptables.lng  |  10 +-
 .../web/admin/lib/lang/br_iptables_list.lng   |   8 +-
 .../web/admin/lib/lang/br_language_add.lng    |   4 +-
 .../admin/lib/lang/br_language_complete.lng   |   2 +-
 .../web/admin/lib/lang/br_language_edit.lng   |   4 +-
 .../web/admin/lib/lang/br_language_export.lng |   4 +-
 .../web/admin/lib/lang/br_language_import.lng |   6 +-
 .../web/admin/lib/lang/br_language_list.lng   |   6 +-
 .../web/admin/lib/lang/br_package_install.lng |   2 +-
 .../web/admin/lib/lang/br_remote_action.lng   |  14 +-
 .../web/admin/lib/lang/br_remote_user.lng     |  96 ++--
 .../admin/lib/lang/br_remote_user_list.lng    |   6 +-
 interface/web/admin/lib/lang/br_server.lng    |  16 +-
 .../web/admin/lib/lang/br_server_config.lng   | 506 +++++++++---------
 interface/web/admin/lib/lang/br_server_ip.lng |  12 +-
 .../web/admin/lib/lang/br_server_ip_list.lng  |   4 +-
 .../web/admin/lib/lang/br_server_ip_map.lng   |  14 +-
 .../admin/lib/lang/br_server_ip_map_list.lng  |   6 +-
 .../web/admin/lib/lang/br_server_list.lng     |   6 +-
 .../web/admin/lib/lang/br_server_php.lng      |  16 +-
 .../web/admin/lib/lang/br_server_php_list.lng |   4 +-
 .../lib/lang/br_software_package_list.lng     |   8 +-
 .../web/admin/lib/lang/br_software_repo.lng   |   2 +-
 .../lib/lang/br_software_update_list.lng      |   8 +-
 .../web/admin/lib/lang/br_system_config.lng   | 127 +++--
 .../admin/lib/lang/br_tpl_default_admin.lng   |  22 +-
 interface/web/admin/lib/lang/br_users.lng     |  36 +-
 .../web/admin/lib/lang/br_users_list.lng      |   8 +-
 interface/web/admin/lib/lang/tr.lng           |  30 +-
 .../admin/lib/lang/tr_directive_snippets.lng  |  16 +-
 .../lib/lang/tr_directive_snippets_list.lng   |  10 +-
 interface/web/admin/lib/lang/tr_firewall.lng  |   5 +-
 interface/web/admin/lib/lang/tr_groups.lng    |   2 +-
 interface/web/admin/lib/lang/tr_iptables.lng  |   2 +
 .../web/admin/lib/lang/tr_iptables_list.lng   |   2 +
 .../web/admin/lib/lang/tr_language_import.lng |   4 +-
 interface/web/admin/lib/lang/tr_login_as.lng  |  12 +
 .../web/admin/lib/lang/tr_remote_action.lng   |  10 +-
 .../web/admin/lib/lang/tr_remote_user.lng     |  48 +-
 interface/web/admin/lib/lang/tr_server.lng    |   6 +-
 .../web/admin/lib/lang/tr_server_config.lng   | 230 ++++----
 interface/web/admin/lib/lang/tr_server_ip.lng |   6 +-
 .../web/admin/lib/lang/tr_server_ip_list.lng  |   4 +-
 .../web/admin/lib/lang/tr_server_ip_map.lng   |  20 +-
 .../admin/lib/lang/tr_server_ip_map_list.lng  |  10 +-
 .../web/admin/lib/lang/tr_server_list.lng     |   4 +-
 .../web/admin/lib/lang/tr_server_php.lng      |   2 +-
 .../web/admin/lib/lang/tr_server_php_list.lng |   2 +-
 .../admin/lib/lang/tr_software_package.lng    |   2 +-
 .../lib/lang/tr_software_update_list.lng      |   2 +-
 .../web/admin/lib/lang/tr_system_config.lng   |  70 ++-
 interface/web/admin/lib/lang/tr_users.lng     |  20 +-
 .../web/admin/lib/lang/tr_users_list.lng      |   2 +-
 interface/web/client/lib/lang/br.lng          |  20 +-
 interface/web/client/lib/lang/br_client.lng   | 258 ++++-----
 .../web/client/lib/lang/br_client_circle.lng  |   4 +-
 .../client/lib/lang/br_client_circle_list.lng |   6 +-
 .../web/client/lib/lang/br_client_del.lng     |   2 +-
 .../web/client/lib/lang/br_client_message.lng |  16 +-
 .../lib/lang/br_client_message_template.lng   |  10 +-
 .../lang/br_client_message_template_list.lng  |   2 +-
 .../client/lib/lang/br_client_template.lng    | 179 ++++---
 .../lib/lang/br_client_template_list.lng      |   8 +-
 .../web/client/lib/lang/br_clients_list.lng   |  10 +-
 interface/web/client/lib/lang/br_domain.lng   |   6 +-
 interface/web/client/lib/lang/br_reseller.lng | 288 +++++-----
 .../web/client/lib/lang/br_resellers_list.lng |   2 +-
 interface/web/client/lib/lang/tr.lng          |  17 +-
 interface/web/client/lib/lang/tr_client.lng   | 180 ++++---
 .../lib/lang/tr_client_message_template.lng   |  12 +-
 .../lang/tr_client_message_template_list.lng  |   4 +-
 .../client/lib/lang/tr_client_template.lng    | 141 ++---
 .../lib/lang/tr_client_template_list.lng      |   8 +-
 .../web/client/lib/lang/tr_clients_list.lng   |   8 +-
 interface/web/client/lib/lang/tr_domain.lng   |   8 +-
 .../web/client/lib/lang/tr_domain_list.lng    |   6 +-
 interface/web/client/lib/lang/tr_reseller.lng | 184 +++----
 .../web/client/lib/lang/tr_resellers_list.lng |   2 +-
 interface/web/dashboard/lib/lang/br.lng       |   2 +-
 .../lib/lang/br_dashlet_customer.lng          |   2 +-
 .../lib/lang/br_dashlet_databasequota.lng     |   4 +-
 .../br_dashlet_invoice_client_settings.lng    |   2 +-
 .../lib/lang/br_dashlet_invoices.lng          |   8 +-
 .../dashboard/lib/lang/br_dashlet_limits.lng  |  62 +--
 .../lib/lang/br_dashlet_mailquota.lng         |   4 +-
 .../dashboard/lib/lang/br_dashlet_modules.lng |   2 +-
 .../lib/lang/br_dashlet_products.lng          |   4 +-
 .../dashboard/lib/lang/br_dashlet_quota.lng   |   4 +-
 .../dashboard/lib/lang/br_dashlet_shop.lng    |   6 +-
 .../lib/lang/tr_dashlet_customer.lng          |   4 +-
 .../lib/lang/tr_dashlet_databasequota.lng     |  10 +-
 .../dashboard/lib/lang/tr_dashlet_donate.lng  |  10 +-
 .../tr_dashlet_invoice_client_settings.lng    |   4 +-
 .../lib/lang/tr_dashlet_invoices.lng          |  32 +-
 .../dashboard/lib/lang/tr_dashlet_limits.lng  |  32 +-
 .../lib/lang/tr_dashlet_mailquota.lng         |   2 +-
 .../dashboard/lib/lang/tr_dashlet_modules.lng |   2 +-
 .../lib/lang/tr_dashlet_products.lng          |  14 +-
 .../dashboard/lib/lang/tr_dashlet_quota.lng   |   6 +-
 .../dashboard/lib/lang/tr_dashlet_shop.lng    |  12 +-
 interface/web/dns/lib/lang/br.lng             |  10 +-
 interface/web/dns/lib/lang/br_dns_a.lng       |  16 +-
 interface/web/dns/lib/lang/br_dns_a_list.lng  |   8 +-
 interface/web/dns/lib/lang/br_dns_aaaa.lng    |  16 +-
 interface/web/dns/lib/lang/br_dns_alias.lng   |  16 +-
 interface/web/dns/lib/lang/br_dns_caa.lng     |  32 +-
 interface/web/dns/lib/lang/br_dns_cname.lng   |  18 +-
 interface/web/dns/lib/lang/br_dns_dkim.lng    |  14 +-
 interface/web/dns/lib/lang/br_dns_dmarc.lng   |  64 +--
 interface/web/dns/lib/lang/br_dns_ds.lng      |  17 +-
 interface/web/dns/lib/lang/br_dns_hinfo.lng   |  18 +-
 interface/web/dns/lib/lang/br_dns_import.lng  |  20 +-
 interface/web/dns/lib/lang/br_dns_loc.lng     |  16 +-
 interface/web/dns/lib/lang/br_dns_mx.lng      |  18 +-
 interface/web/dns/lib/lang/br_dns_ns.lng      |  16 +-
 interface/web/dns/lib/lang/br_dns_ptr.lng     |  14 +-
 interface/web/dns/lib/lang/br_dns_rp.lng      |  16 +-
 interface/web/dns/lib/lang/br_dns_slave.lng   |  16 +-
 .../dns/lib/lang/br_dns_slave_admin_list.lng  |   4 +-
 .../web/dns/lib/lang/br_dns_slave_list.lng    |   4 +-
 interface/web/dns/lib/lang/br_dns_soa.lng     |  48 +-
 .../dns/lib/lang/br_dns_soa_admin_list.lng    |   9 +-
 .../web/dns/lib/lang/br_dns_soa_list.lng      |   7 +-
 interface/web/dns/lib/lang/br_dns_spf.lng     |  22 +-
 interface/web/dns/lib/lang/br_dns_srv.lng     |  18 +-
 .../web/dns/lib/lang/br_dns_template.lng      |   4 +-
 .../web/dns/lib/lang/br_dns_template_list.lng |   4 +-
 interface/web/dns/lib/lang/br_dns_tlsa.lng    |  12 +-
 interface/web/dns/lib/lang/br_dns_txt.lng     |  22 +-
 interface/web/dns/lib/lang/br_dns_wizard.lng  |  44 +-
 interface/web/dns/lib/lang/tr.lng             |   5 +-
 interface/web/dns/lib/lang/tr_dns_a.lng       |   6 +-
 interface/web/dns/lib/lang/tr_dns_a_list.lng  |   2 +-
 interface/web/dns/lib/lang/tr_dns_aaaa.lng    |   8 +-
 interface/web/dns/lib/lang/tr_dns_alias.lng   |   4 +-
 interface/web/dns/lib/lang/tr_dns_cname.lng   |   4 +-
 interface/web/dns/lib/lang/tr_dns_dkim.lng    |  22 +-
 interface/web/dns/lib/lang/tr_dns_dmarc.lng   |  96 ++--
 interface/web/dns/lib/lang/tr_dns_ds.lng      |  31 +-
 interface/web/dns/lib/lang/tr_dns_hinfo.lng   |   4 +-
 interface/web/dns/lib/lang/tr_dns_import.lng  |  16 +-
 interface/web/dns/lib/lang/tr_dns_loc.lng     |  28 +-
 interface/web/dns/lib/lang/tr_dns_mx.lng      |  10 +-
 interface/web/dns/lib/lang/tr_dns_ns.lng      |   4 +-
 interface/web/dns/lib/lang/tr_dns_rp.lng      |   4 +-
 interface/web/dns/lib/lang/tr_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/tr_dns_soa.lng     |  24 +-
 .../dns/lib/lang/tr_dns_soa_admin_list.lng    |   2 +-
 .../web/dns/lib/lang/tr_dns_soa_list.lng      |   4 +-
 interface/web/dns/lib/lang/tr_dns_spf.lng     |  46 +-
 interface/web/dns/lib/lang/tr_dns_srv.lng     |   4 +-
 .../web/dns/lib/lang/tr_dns_template.lng      |   1 -
 interface/web/dns/lib/lang/tr_dns_tlsa.lng    |  28 +-
 interface/web/dns/lib/lang/tr_dns_txt.lng     |  10 +-
 interface/web/dns/lib/lang/tr_dns_wizard.lng  |  32 +-
 interface/web/help/lib/lang/br.lng            |  14 +-
 interface/web/help/lib/lang/br_faq_form.lng   |   6 +-
 .../lib/lang/br_faq_manage_questions_list.lng |  10 +-
 .../help/lib/lang/br_faq_sections_form.lng    |   2 +-
 .../lib/lang/br_help_faq_sections_list.lng    |   8 +-
 .../web/help/lib/lang/br_support_message.lng  |  20 +-
 .../help/lib/lang/br_support_message_list.lng |   6 +-
 interface/web/help/lib/lang/tr.lng            |   1 +
 .../web/help/lib/lang/tr_support_message.lng  |   4 +-
 interface/web/login/lib/lang/br.lng           |   8 +-
 interface/web/login/lib/lang/br_login_as.lng  |  14 +-
 interface/web/login/lib/lang/tr.lng           |  16 +-
 interface/web/login/lib/lang/tr_login_as.lng  |   9 +-
 interface/web/mail/lib/lang/br.lng            |  78 +--
 .../mail/lib/lang/br_backup_stats_list.lng    |  10 +-
 interface/web/mail/lib/lang/br_mail_alias.lng |  16 +-
 .../web/mail/lib/lang/br_mail_alias_list.lng  |   8 +-
 .../web/mail/lib/lang/br_mail_aliasdomain.lng |   8 +-
 .../lib/lang/br_mail_aliasdomain_list.lng     |   5 +-
 .../web/mail/lib/lang/br_mail_backup_list.lng |  20 +-
 .../web/mail/lib/lang/br_mail_blacklist.lng   |   4 +-
 .../mail/lib/lang/br_mail_blacklist_list.lng  |   6 +-
 .../mail/lib/lang/br_mail_content_filter.lng  |   6 +-
 .../lib/lang/br_mail_content_filter_list.lng  |   2 +-
 .../web/mail/lib/lang/br_mail_domain.lng      |  26 +-
 .../mail/lib/lang/br_mail_domain_catchall.lng |  13 +-
 .../lib/lang/br_mail_domain_catchall_list.lng |   6 +-
 .../web/mail/lib/lang/br_mail_forward.lng     |  16 +-
 .../mail/lib/lang/br_mail_forward_list.lng    |   6 +-
 interface/web/mail/lib/lang/br_mail_get.lng   |  22 +-
 .../web/mail/lib/lang/br_mail_get_list.lng    |   2 +-
 .../web/mail/lib/lang/br_mail_mailinglist.lng |  26 +-
 .../lib/lang/br_mail_mailinglist_list.lng     |   2 +-
 .../mail/lib/lang/br_mail_relay_recipient.lng |   4 +-
 .../lib/lang/br_mail_relay_recipient_list.lng |   4 +-
 .../web/mail/lib/lang/br_mail_spamfilter.lng  |  18 +-
 .../mail/lib/lang/br_mail_spamfilter_list.lng |   8 +-
 .../web/mail/lib/lang/br_mail_transport.lng   |   4 +-
 .../mail/lib/lang/br_mail_transport_list.lng  |   4 +-
 interface/web/mail/lib/lang/br_mail_user.lng  |  86 +--
 .../web/mail/lib/lang/br_mail_user_filter.lng |  20 +-
 .../lib/lang/br_mail_user_filter_list.lng     |   2 +-
 .../mail/lib/lang/br_mail_user_stats_list.lng |   2 +-
 .../web/mail/lib/lang/br_mail_whitelist.lng   |   6 +-
 .../mail/lib/lang/br_mail_whitelist_list.lng  |   6 +-
 .../mail/lib/lang/br_spamfilter_blacklist.lng |   6 +-
 .../lib/lang/br_spamfilter_blacklist_list.lng |   6 +-
 .../mail/lib/lang/br_spamfilter_config.lng    |  30 +-
 .../lib/lang/br_spamfilter_config_list.lng    |   4 +-
 .../mail/lib/lang/br_spamfilter_policy.lng    |  82 +--
 .../lib/lang/br_spamfilter_policy_list.lng    |  10 +-
 .../web/mail/lib/lang/br_spamfilter_users.lng |   2 +-
 .../lib/lang/br_spamfilter_users_list.lng     |   8 +-
 .../mail/lib/lang/br_spamfilter_whitelist.lng |   6 +-
 .../lib/lang/br_spamfilter_whitelist_list.lng |   6 +-
 .../lib/lang/br_user_quota_stats_list.lng     |   4 +-
 .../web/mail/lib/lang/br_xmpp_domain.lng      |  74 +--
 .../web/mail/lib/lang/br_xmpp_domain_list.lng |   2 +-
 interface/web/mail/lib/lang/br_xmpp_user.lng  |  12 +-
 .../web/mail/lib/lang/br_xmpp_user_list.lng   |   2 +-
 interface/web/mail/lib/lang/tr.lng            |  35 +-
 .../mail/lib/lang/tr_backup_stats_list.lng    |  14 +-
 interface/web/mail/lib/lang/tr_mail_alias.lng |  12 +-
 .../web/mail/lib/lang/tr_mail_aliasdomain.lng |  12 +-
 .../lib/lang/tr_mail_aliasdomain_list.lng     |   5 +-
 .../web/mail/lib/lang/tr_mail_backup_list.lng |  28 +-
 .../web/mail/lib/lang/tr_mail_blacklist.lng   |   2 +-
 .../mail/lib/lang/tr_mail_blacklist_list.lng  |   2 +-
 .../mail/lib/lang/tr_mail_content_filter.lng  |   4 +-
 .../web/mail/lib/lang/tr_mail_domain.lng      |  34 +-
 .../lib/lang/tr_mail_domain_admin_list.lng    |   6 +-
 .../mail/lib/lang/tr_mail_domain_catchall.lng |  10 +-
 .../lib/lang/tr_mail_domain_catchall_list.lng |   4 +-
 .../web/mail/lib/lang/tr_mail_domain_list.lng |   6 +-
 .../web/mail/lib/lang/tr_mail_forward.lng     |  12 +-
 interface/web/mail/lib/lang/tr_mail_get.lng   |   8 +-
 .../web/mail/lib/lang/tr_mail_mailinglist.lng |  14 +-
 .../lib/lang/tr_mail_mailinglist_list.lng     |   4 +-
 .../mail/lib/lang/tr_mail_relay_recipient.lng |   2 +-
 .../web/mail/lib/lang/tr_mail_spamfilter.lng  |   6 +-
 .../mail/lib/lang/tr_mail_spamfilter_list.lng |   4 +-
 .../web/mail/lib/lang/tr_mail_transport.lng   |   4 +-
 .../mail/lib/lang/tr_mail_transport_list.lng  |   2 +-
 interface/web/mail/lib/lang/tr_mail_user.lng  |  52 +-
 .../web/mail/lib/lang/tr_mail_user_filter.lng |   4 +-
 .../web/mail/lib/lang/tr_mail_user_list.lng   |   6 +-
 .../mail/lib/lang/tr_mail_user_stats_list.lng |   2 +-
 .../web/mail/lib/lang/tr_mail_whitelist.lng   |   2 +-
 .../mail/lib/lang/tr_mail_whitelist_list.lng  |   2 +-
 .../lib/lang/tr_spamfilter_blacklist_list.lng |   2 +-
 .../mail/lib/lang/tr_spamfilter_config.lng    |  12 +-
 .../lib/lang/tr_spamfilter_config_list.lng    |   2 +-
 .../mail/lib/lang/tr_spamfilter_policy.lng    |  71 +--
 .../lib/lang/tr_spamfilter_policy_list.lng    |   6 +-
 .../lib/lang/tr_spamfilter_users_list.lng     |   4 +-
 .../lib/lang/tr_spamfilter_whitelist_list.lng |   2 +-
 .../lib/lang/tr_user_quota_stats_list.lng     |   2 +-
 .../web/mail/lib/lang/tr_xmpp_domain.lng      | 120 ++---
 .../lib/lang/tr_xmpp_domain_admin_list.lng    |  12 +-
 .../web/mail/lib/lang/tr_xmpp_domain_list.lng |  10 +-
 interface/web/mail/lib/lang/tr_xmpp_user.lng  |  26 +-
 .../web/mail/lib/lang/tr_xmpp_user_list.lng   |  12 +-
 interface/web/mailuser/lib/lang/br.lng        |  10 +-
 interface/web/mailuser/lib/lang/br_index.lng  |  10 +-
 .../lib/lang/br_mail_user_autoresponder.lng   |  14 +-
 .../web/mailuser/lib/lang/br_mail_user_cc.lng |  10 +-
 .../mailuser/lib/lang/br_mail_user_filter.lng |  14 +-
 .../lib/lang/br_mail_user_filter_list.lng     |   2 +-
 .../lib/lang/br_mail_user_password.lng        |  10 +-
 .../lib/lang/br_mail_user_spamfilter.lng      |   2 +-
 interface/web/mailuser/lib/lang/tr.lng        |   2 +-
 interface/web/mailuser/lib/lang/tr_index.lng  |   8 +-
 .../mailuser/lib/lang/tr_mail_user_filter.lng |   4 +-
 .../lib/lang/tr_mail_user_filter_list.lng     |   2 +-
 .../lib/lang/tr_mail_user_password.lng        |   8 +-
 .../lib/lang/tr_mail_user_spamfilter.lng      |   4 +-
 interface/web/monitor/lib/lang/br.lng         | 225 ++++----
 .../web/monitor/lib/lang/br_datalog_list.lng  |   4 +-
 .../lib/lang/br_dataloghistory_list.lng       |  12 +-
 .../lib/lang/br_dataloghistory_undo.lng       |  10 +-
 .../lib/lang/br_dataloghistory_view.lng       |  46 +-
 .../web/monitor/lib/lang/br_syslog_list.lng   |   6 +-
 interface/web/monitor/lib/lang/tr.lng         |  69 ++-
 interface/web/sites/lib/lang/br.lng           |  21 +-
 interface/web/sites/lib/lang/br_aps.lng       |  76 +--
 .../sites/lib/lang/br_aps_instances_list.lng  |   2 +-
 .../sites/lib/lang/br_aps_packages_list.lng   |   2 +-
 .../lib/lang/br_aps_update_packagelist.lng    |   4 +-
 .../sites/lib/lang/br_backup_stats_list.lng   |  10 +-
 interface/web/sites/lib/lang/br_cron.lng      |  28 +-
 interface/web/sites/lib/lang/br_cron_list.lng |  10 +-
 interface/web/sites/lib/lang/br_database.lng  |  54 +-
 .../sites/lib/lang/br_database_admin_list.lng |   6 +-
 .../web/sites/lib/lang/br_database_list.lng   |   6 +-
 .../lib/lang/br_database_quota_stats_list.lng |   8 +-
 .../web/sites/lib/lang/br_database_user.lng   |  20 +-
 .../lib/lang/br_database_user_admin_list.lng  |   4 +-
 .../sites/lib/lang/br_database_user_list.lng  |   4 +-
 .../lib/lang/br_ftp_sites_stats_list.lng      |   4 +-
 interface/web/sites/lib/lang/br_ftp_user.lng  |  39 +-
 .../web/sites/lib/lang/br_shell_user.lng      |  46 +-
 .../web/sites/lib/lang/br_shell_user_list.lng |   2 +-
 .../lib/lang/br_user_quota_stats_list.lng     |   6 +-
 .../web/sites/lib/lang/br_web_aliasdomain.lng | 134 ++---
 .../lib/lang/br_web_aliasdomain_list.lng      |  10 +-
 .../web/sites/lib/lang/br_web_backup_list.lng |  27 +-
 .../web/sites/lib/lang/br_web_childdomain.lng | 148 ++---
 .../lib/lang/br_web_childdomain_list.lng      |  14 +-
 .../web/sites/lib/lang/br_web_domain.lng      | 179 +++----
 .../web/sites/lib/lang/br_web_folder.lng      |   2 +-
 .../web/sites/lib/lang/br_web_folder_user.lng |  10 +-
 .../lib/lang/br_web_folder_user_list.lng      |   4 +-
 .../web/sites/lib/lang/br_web_subdomain.lng   |  34 +-
 .../sites/lib/lang/br_web_vhost_domain.lng    | 199 +++----
 .../lang/br_web_vhost_domain_admin_list.lng   |   4 +-
 .../lib/lang/br_web_vhost_domain_list.lng     |   6 +-
 .../sites/lib/lang/br_web_vhost_subdomain.lng | 159 +++---
 .../web/sites/lib/lang/br_webdav_user.lng     |  18 +-
 interface/web/sites/lib/lang/tr.lng           |  12 +-
 interface/web/sites/lib/lang/tr_aps.lng       |  23 +-
 .../sites/lib/lang/tr_aps_instances_list.lng  |   4 +-
 .../sites/lib/lang/tr_backup_stats_list.lng   |  14 +-
 interface/web/sites/lib/lang/tr_cron.lng      |   6 +-
 interface/web/sites/lib/lang/tr_database.lng  |  30 +-
 .../sites/lib/lang/tr_database_admin_list.lng |   8 +-
 .../web/sites/lib/lang/tr_database_list.lng   |   2 +-
 .../lib/lang/tr_database_quota_stats_list.lng |  14 +-
 .../web/sites/lib/lang/tr_database_user.lng   |  12 +-
 .../lib/lang/tr_ftp_sites_stats_list.lng      |  16 +-
 interface/web/sites/lib/lang/tr_ftp_user.lng  |   7 +-
 .../web/sites/lib/lang/tr_shell_user.lng      |   4 +-
 .../web/sites/lib/lang/tr_shell_user_list.lng |   6 +-
 .../lib/lang/tr_user_quota_stats_list.lng     |   2 +-
 .../web/sites/lib/lang/tr_web_aliasdomain.lng |  66 +--
 .../lib/lang/tr_web_aliasdomain_list.lng      |  16 +-
 .../web/sites/lib/lang/tr_web_backup_list.lng |  15 +-
 .../web/sites/lib/lang/tr_web_childdomain.lng | 178 +++---
 .../lib/lang/tr_web_childdomain_list.lng      |  20 +-
 .../lib/lang/tr_web_directive_snippets.lng    |   2 +-
 .../web/sites/lib/lang/tr_web_domain.lng      |  80 +--
 .../lib/lang/tr_web_domain_admin_list.lng     |   2 +-
 .../web/sites/lib/lang/tr_web_domain_list.lng |   2 +-
 .../web/sites/lib/lang/tr_web_folder_user.lng |   4 +-
 .../lib/lang/tr_web_sites_stats_list.lng      |   2 +-
 .../web/sites/lib/lang/tr_web_subdomain.lng   |  38 +-
 .../sites/lib/lang/tr_web_subdomain_list.lng  |   6 +-
 .../sites/lib/lang/tr_web_vhost_domain.lng    | 123 ++---
 .../lang/tr_web_vhost_domain_admin_list.lng   |  24 +-
 .../lib/lang/tr_web_vhost_domain_list.lng     |  14 +-
 .../sites/lib/lang/tr_web_vhost_subdomain.lng |  77 +--
 .../lib/lang/tr_web_vhost_subdomain_list.lng  |   6 +-
 .../web/sites/lib/lang/tr_webdav_user.lng     |   4 +-
 .../lib/lang/br_strengthmeter.lng             |   4 +-
 interface/web/tools/lib/lang/br.lng           |  12 +-
 .../tools/lib/lang/br_import_ispconfig.lng    |  26 +-
 .../web/tools/lib/lang/br_import_vpopmail.lng |   9 +-
 interface/web/tools/lib/lang/br_index.lng     |   2 +-
 interface/web/tools/lib/lang/br_interface.lng |   6 +-
 interface/web/tools/lib/lang/br_resync.lng    |  72 +--
 .../web/tools/lib/lang/br_tpl_default.lng     |   4 +-
 .../web/tools/lib/lang/br_usersettings.lng    |  12 +-
 interface/web/tools/lib/lang/tr.lng           |  10 +-
 .../tools/lib/lang/tr_import_ispconfig.lng    |  37 +-
 .../web/tools/lib/lang/tr_import_vpopmail.lng |  11 +-
 interface/web/tools/lib/lang/tr_index.lng     |   2 +-
 interface/web/tools/lib/lang/tr_interface.lng |   2 +-
 interface/web/tools/lib/lang/tr_resync.lng    |  98 ++--
 .../web/tools/lib/lang/tr_usersettings.lng    |   6 +-
 interface/web/vm/lib/lang/br.lng              |   6 +-
 .../web/vm/lib/lang/br_openvz_action.lng      |  18 +-
 interface/web/vm/lib/lang/br_openvz_ip.lng    |   6 +-
 .../web/vm/lib/lang/br_openvz_ip_list.lng     |   2 +-
 .../web/vm/lib/lang/br_openvz_ostemplate.lng  |   6 +-
 .../vm/lib/lang/br_openvz_ostemplate_list.lng |   6 +-
 .../web/vm/lib/lang/br_openvz_template.lng    | 146 ++---
 .../vm/lib/lang/br_openvz_template_list.lng   |   4 +-
 interface/web/vm/lib/lang/br_openvz_vm.lng    |  43 +-
 .../web/vm/lib/lang/br_openvz_vm_list.lng     |   6 +-
 interface/web/vm/lib/lang/tr.lng              |   6 +-
 .../web/vm/lib/lang/tr_openvz_action.lng      |  15 +-
 interface/web/vm/lib/lang/tr_openvz_ip.lng    |   2 +-
 .../vm/lib/lang/tr_openvz_ostemplate_list.lng |   2 +-
 .../web/vm/lib/lang/tr_openvz_template.lng    |  22 +-
 interface/web/vm/lib/lang/tr_openvz_vm.lng    |  20 +-
 .../web/vm/lib/lang/tr_openvz_vm_list.lng     |   4 +-
 389 files changed, 4516 insertions(+), 4450 deletions(-)
 create mode 100644 interface/web/admin/lib/lang/tr_login_as.lng

diff --git a/interface/lib/lang/br.lng b/interface/lib/lang/br.lng
index 7db654bd05..60a0dcf910 100644
--- a/interface/lib/lang/br.lng
+++ b/interface/lib/lang/br.lng
@@ -1,45 +1,48 @@
 <?php
-$wb['conf_format_dateshort'] = 'd/m/Y';
+$wb['conf_format_dateshort'] = 'd-m-Y';
+$wb['conf_format_dateshort_human_readable'] = 'dd-mm-yyyy';
 $wb['conf_format_datelong'] = 'l dS de F Y';
 $wb['conf_format_timeshort'] = 'H:i';
 $wb['conf_format_timelong'] = 'H:i:s';
-$wb['conf_format_datetime'] = 'd/m/Y H:i';
+$wb['conf_format_datetime'] = 'd-m-Y H:i';
 $wb['number_format_decimals'] = '4';
 $wb['number_format_decimals_client'] = '2';
 $wb['number_format_dec_point'] = '.';
 $wb['number_format_thousands_sep'] = '.';
 $wb['error_301'] = 'Módulo não permitido para o usuário atual.';
-$wb['error_302'] = 'Módulo é inválido.';
-$wb['error_1001'] = 'Usuário ou senha em branco!';
-$wb['error_1002'] = 'Usuário ou senha incorretos!';
-$wb['error_1003'] = 'Usuário inativo!';
-$wb['delete_confirmation'] = 'Tem certeza de que deseja remover este registro?';
-$wb['error_no_view_permission'] = 'Você não tem permissão para visualizar este registro ou o mesmo não existe!';
+$wb['error_302'] = 'Módulo inválido.';
+$wb['error_1001'] = 'Usuário e/ou senha está em branco!';
+$wb['error_1002'] = 'Usuário e/ou senha incorretos!';
+$wb['error_1003'] = 'Usuário desabilitado!';
+$wb['delete_confirmation'] = 'Você tem certeza que deseja remover o registro?';
+$wb['error_no_view_permission'] = 'Você não tem permissão para visualizar este registro ou o registro não existe!';
 $wb['error_no_delete_permission'] = 'Você não tem permissão para remover este registro!';
 $wb['page_txt'] = 'Página';
 $wb['page_of_txt'] = 'de';
-$wb['page_next_txt'] = 'Próximo';
-$wb['page_back_txt'] = 'Voltar';
+$wb['page_and_txt'] = 'e';
+$wb['page_next_txt'] = 'Próxima';
+$wb['page_back_txt'] = 'Anterior';
 $wb['delete_txt'] = 'Remover';
 $wb['filter_txt'] = 'Filtrar';
 $wb['add_new_record_txt'] = 'Adicionar novo registro';
 $wb['btn_save_txt'] = 'Salvar';
-$wb['btn_cancel_txt'] = 'Voltar';
-$wb['toolsarea_head_txt'] = 'Extras';
-$wb['page_and_txt'] = 'e';
+$wb['btn_cancel_txt'] = 'Cancelar';
 $wb['top_menu_system'] = 'Sistema';
 $wb['top_menu_client'] = 'Clientes';
-$wb['top_menu_email'] = 'e-Mails';
+$wb['top_menu_email'] = 'e-Mail';
 $wb['top_menu_monitor'] = 'Monitor';
 $wb['top_menu_sites'] = 'Sites';
 $wb['top_menu_dns'] = 'DNS';
-$wb['top_menu_tools'] = 'Extras';
+$wb['top_menu_tools'] = 'Ferramentas';
 $wb['top_menu_help'] = 'Ajuda';
-$wb['top_menu_billing'] = 'Faturas';
+$wb['top_menu_billing'] = 'Faturamento';
+$wb['top_menu_mailuser'] = 'Contas de e-mail';
 $wb['top_menu_domain'] = 'Domínios';
 $wb['top_menu_dashboard'] = 'Início';
-$wb['latest_news_txt'] = 'Últimas notícias';
 $wb['top_menu_vm'] = 'VPS';
+$wb['toolsarea_head_txt'] = 'Ferramentas';
+$wb['latest_news_txt'] = 'Novidades';
+$wb['logout_txt'] = 'Sair';
 $wb['daynamesmin_su'] = 'Do';
 $wb['daynamesmin_mo'] = 'Se';
 $wb['daynamesmin_tu'] = 'Te';
@@ -68,27 +71,24 @@ $wb['monthnamesshort_nov'] = 'Nov';
 $wb['monthnamesshort_dec'] = 'Dez';
 $wb['datepicker_nextText'] = 'Próximo';
 $wb['datepicker_prevText'] = 'Anterior';
-$wb['logout_txt'] = 'Sair';
-$wb['conf_format_dateshort_human_readable'] = 'dd-mm-aaaa';
-$wb['submit_confirmation'] = 'Você tem certeza que gostaria de executar esta ação?';
-$wb['top_menu_mailuser'] = 'e-Mails';
+$wb['submit_confirmation'] = 'Você tem certeza que deseja realizar esta ação?';
 $wb['globalsearch_resultslimit_of_txt'] = 'de';
 $wb['globalsearch_resultslimit_results_txt'] = 'resultados';
 $wb['globalsearch_noresults_text_txt'] = 'Sem resultados.';
 $wb['globalsearch_noresults_limit_txt'] = '0 resultados';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Pesquisar';
 $wb['globalsearch_suggestions_text_txt'] = 'Sugestões';
-$wb['global_tabchange_warning_txt'] = 'As alterações efetuadas nesta aba terão efeito após você pressionar OK. Se cancelar, as alterações serão descartadas.';
-$wb['global_tabchange_discard_txt'] = 'Você não salvou as alterações nesta aba. As alterações serão descartadas se continuar.';
-$wb['datalog_changes_txt'] = 'As seguintes alterações ainda não foram realizadas em todos os servidores.';
-$wb['datalog_changes_end_txt'] = 'Gravar as atualizações pode demorar alguns minutos. Por favor, seja paciente.';
+$wb['global_tabchange_warning_txt'] = 'Para alterar dados nesta aba clique OK. Cancelar descarta todas as alterações.';
+$wb['global_tabchange_discard_txt'] = 'Você não salvou as alterações nesta aba. Todas as alterações serão descartadas caso prossiga.';
+$wb['datalog_changes_txt'] = 'As alterações ainda não propagaram em todos os servidores:';
+$wb['datalog_changes_end_txt'] = 'Gravar alterações pode levar alguns minutos. Por favor, seja paciente.';
 $wb['datalog_status_i_web_database'] = 'Adicionar novo banco de dados';
 $wb['datalog_status_u_web_database'] = 'Atualizar banco de dados';
 $wb['datalog_status_d_web_database'] = 'Remover banco de dados';
-$wb['datalog_status_i_web_database_user'] = 'Adicionar usuário do banco de dados';
-$wb['datalog_status_u_web_database_user'] = 'Atualizar usuário do banco de dados';
-$wb['datalog_status_d_web_database_user'] = 'Remover usuário do banco de dados';
-$wb['datalog_status_i_web_domain'] = 'Adicionar novo site';
+$wb['datalog_status_i_web_database_user'] = 'Adicionar novo usuário de banco de dados';
+$wb['datalog_status_u_web_database_user'] = 'Atualizar usuário de banco de dados';
+$wb['datalog_status_d_web_database_user'] = 'Remover usuário de banco de dados';
+$wb['datalog_status_i_web_domain'] = 'Adicionar site';
 $wb['datalog_status_u_web_domain'] = 'Atualizar site';
 $wb['datalog_status_d_web_domain'] = 'Remover site';
 $wb['datalog_status_i_ftp_user'] = 'Adicionar usuário ftp';
@@ -100,9 +100,12 @@ $wb['datalog_status_d_mail_domain'] = 'Remover domínio de e-mail';
 $wb['datalog_status_i_mail_user'] = 'Adicionar conta de e-mail';
 $wb['datalog_status_u_mail_user'] = 'Atualizar conta de e-mail';
 $wb['datalog_status_d_mail_user'] = 'Remover conta de e-mail';
-$wb['datalog_status_i_mail_forwarding'] = 'Adicionar encaminhamento de e-mail';
-$wb['datalog_status_u_mail_forwarding'] = 'Atualizar encaminhamento de e-mail';
-$wb['datalog_status_d_mail_forwarding'] = 'Remover encaminhamento de e-mail';
+$wb['datalog_status_i_spamfilter_users'] = 'Adicionar filtros anti-spam';
+$wb['datalog_status_u_spamfilter_users'] = 'Atualizar filtros anti-spam';
+$wb['datalog_status_d_spamfilter_users'] = 'Remover filtros anti-spam';
+$wb['datalog_status_i_mail_forwarding'] = 'Adicionar endereço de e-mail';
+$wb['datalog_status_u_mail_forwarding'] = 'Atualizar endereço de e-mail';
+$wb['datalog_status_d_mail_forwarding'] = 'Remover endereço de e-mail';
 $wb['datalog_status_i_dns_rr'] = 'Adicionar registro dns';
 $wb['datalog_status_u_dns_rr'] = 'Atualizar registro dns';
 $wb['datalog_status_d_dns_rr'] = 'Remover registro dns';
@@ -112,50 +115,47 @@ $wb['datalog_status_d_dns_soa'] = 'Remover zona dns';
 $wb['datalog_status_i_cron'] = 'Adicionar tarefa no cron';
 $wb['datalog_status_u_cron'] = 'Atualizar tarefa no cron';
 $wb['datalog_status_d_cron'] = 'Remover tarefa no cron';
-$wb['datalog_status_i_mail_get'] = 'Adicionar conta de busca de e-mails';
-$wb['datalog_status_u_mail_get'] = 'Atualizar conta de busca de e-mails';
-$wb['datalog_status_d_mail_get'] = 'Remover conta de busca de e-mails';
+$wb['datalog_status_i_mail_get'] = 'Adicionar conta de busca de e-mail';
+$wb['datalog_status_u_mail_get'] = 'Atualizar conta de busca de e-mail';
+$wb['datalog_status_d_mail_get'] = 'Remover conta de busca de e-mail';
 $wb['datalog_status_i_mail_mailinglist'] = 'Adicionar lista de e-mails';
 $wb['datalog_status_u_mail_mailinglist'] = 'Atualizar lista de e-mails';
 $wb['datalog_status_d_mail_mailinglist'] = 'Remover lista de e-mails';
-$wb['datalog_status_i_shell_user'] = 'Adicionar usuário shell';
-$wb['datalog_status_u_shell_user'] = 'Atualizar usuário shell';
-$wb['datalog_status_d_shell_user'] = 'Remover usuário shell';
+$wb['datalog_status_i_shell_user'] = 'Adicionar usuário do shell';
+$wb['datalog_status_u_shell_user'] = 'Atualizar usuário do shell';
+$wb['datalog_status_d_shell_user'] = 'Remover usuário do shell';
 $wb['datalog_status_i_web_folder'] = 'Adicionar pasta protegida';
 $wb['datalog_status_u_web_folder'] = 'Atualizar pasta protegida';
 $wb['datalog_status_d_web_folder'] = 'Remover pasta protegida';
 $wb['datalog_status_i_web_folder_user'] = 'Adicionar usuário de pasta protegida';
 $wb['datalog_status_u_web_folder_user'] = 'Atualizar usuário de pasta protegida';
 $wb['datalog_status_d_web_folder_user'] = 'Remover usuário de pasta protegida';
-$wb['datalog_status_i_spamfilter_users'] = 'Adicionar configurações de filtro anti-spam';
-$wb['datalog_status_u_spamfilter_users'] = 'Atualizar configurações de filtro anti-spam';
-$wb['datalog_status_d_spamfilter_users'] = 'Remover configurações de filtro anti-spam';
+$wb['datalog_status_i_xmpp_domain'] = 'Adicionar domínio xmpp';
+$wb['datalog_status_u_xmpp_domain'] = 'Atualizar domínio xmpp';
+$wb['datalog_status_d_xmpp_domain'] = 'Remover domínio xmpp';
+$wb['datalog_status_i_xmpp_user'] = 'Adicionar usuário xmpp';
+$wb['datalog_status_u_xmpp_user'] = 'Atualizar usuário xmpp';
+$wb['datalog_status_d_xmpp_user'] = 'Remover usuário xmpp';
+$wb['err_csrf_attempt_blocked'] = 'Tentativa de CSRF bloqueada.';
 $wb['login_as_txt'] = 'Acessar como';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
 $wb['no_destination_perm'] = 'Você não tem permissão para este destino.';
-$wb['client_you_are_locked'] = 'Você não tem permissão para alterar quaisquer configurações.';
+$wb['client_you_are_locked'] = 'Você não tem permissão para alterar nenhuma configuração.';
 $wb['gender_m_txt'] = 'Sr.';
 $wb['gender_f_txt'] = 'Sra.';
 $wb['client_cannot_be_deleted_because_of_billing_module_txt'] = 'Este cliente possui registros no módulo de faturamento, portanto não pode ser removido.';
 $wb['yes_txt'] = 'Sim';
 $wb['no_txt'] = 'Não';
+$wb['None'] = 'Nenhum';
 $wb['strength_1'] = 'Fraca';
 $wb['strength_2'] = 'Razoável';
 $wb['strength_3'] = 'Boa';
 $wb['strength_4'] = 'Forte';
 $wb['strength_5'] = 'Muito Forte';
-$wb['weak_password_txt'] = 'A senha escolhida não corresponde às diretrizes de segurança. São necessários no mínimo {chars} caracteres e dificuldade {strength}.';
-$wb['weak_password_length_txt'] = 'A senha escolhida não corresponde às diretrizes de segurança. São necessários no mínimo {chars} caracteres.';
-$wb['security_check1_txt'] = 'Verifique se há permissão de segurança:';
-$wb['security_check2_txt'] = 'falha';
-$wb['err_csrf_attempt_blocked'] = 'CSRF temporariamente bloqueado.';
+$wb['weak_password_txt'] = 'A senha configurada não obedece as diretivas de segurança. A senha deve possuir ao menos {chars} caracteres e ao menos um caractere maiúsculoe um caractere especial e dificuldade "{strength}".';
+$wb['weak_password_length_txt'] = 'A senha configurada não obedece as diretivas de segurança. A senha deve possuir ao menos {chars} de comprimento.';
+$wb['security_check1_txt'] = 'Verifique as permissões de segurança:';
+$wb['security_check2_txt'] = 'falhou.';
 $wb['select_directive_snippet_txt'] = 'Diretiva de trechos de código';
 $wb['select_master_directive_snippet_txt'] = 'Diretiva mestre de trechos de código';
-$wb['None'] = 'Nenhum';
-$wb['datalog_status_i_xmpp_domain'] = 'Adicionar domínio XMPP';
-$wb['datalog_status_u_xmpp_domain'] = 'Atualizar domínio XMPP';
-$wb['datalog_status_d_xmpp_domain'] = 'Remover domínio XMPP';
-$wb['datalog_status_i_xmpp_user'] = 'Adicionar usuário XMPP';
-$wb['datalog_status_u_xmpp_user'] = 'Atualizar usuário XMPP';
-$wb['datalog_status_d_xmpp_user'] = 'Remover usuário XMPP';
 ?>
diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng
index 115bc890bb..cf4491ad5d 100644
--- a/interface/lib/lang/tr.lng
+++ b/interface/lib/lang/tr.lng
@@ -36,10 +36,10 @@ $wb['top_menu_dns'] = 'DNS';
 $wb['top_menu_tools'] = 'Araçlar';
 $wb['top_menu_help'] = 'Yardım';
 $wb['top_menu_billing'] = 'Faturalama';
-$wb['top_menu_mailuser'] = 'Posta Kullanıcısı';
+$wb['top_menu_mailuser'] = 'E-posta Kullanıcısı';
 $wb['top_menu_domain'] = 'Alan Adları';
 $wb['top_menu_dashboard'] = 'Açılış';
-$wb['top_menu_vm'] = 'SSunucu';
+$wb['top_menu_vm'] = 'sSunucu';
 $wb['toolsarea_head_txt'] = 'Araçlar';
 $wb['latest_news_txt'] = 'Haberler';
 $wb['logout_txt'] = 'Oturumu Kapat';
@@ -74,65 +74,72 @@ $wb['datepicker_prevText'] = 'Önceki';
 $wb['submit_confirmation'] = 'Bu iÅŸlemi yapmak istiyor musunuz?';
 $wb['globalsearch_resultslimit_of_txt'] = '/';
 $wb['globalsearch_resultslimit_results_txt'] = 'sonuç';
-$wb['globalsearch_noresults_text_txt'] = 'Sonuç yok.';
+$wb['globalsearch_noresults_text_txt'] = 'Uygun bir sonuç bulunamadı.';
 $wb['globalsearch_noresults_limit_txt'] = '0 sonuç';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Arama';
 $wb['globalsearch_suggestions_text_txt'] = 'Öneriler';
-$wb['global_tabchange_warning_txt'] = 'Bu sekmedeki değişiklikler Tamam düğmesine tıklandığında kaydedilir. İptal düğmesine tıklandığında yoksayılır.';
-$wb['global_tabchange_discard_txt'] = 'Bu sekmede kaydedilmemiş değişiklikler var. Devam ederseniz değişiklikler yoksayılacak.';
+$wb['global_tabchange_warning_txt'] = 'Bu sekmedeki değişiklikler Tamam düğmesine tıklandığında kaydedilir. İptal düğmesine tıklandığında yok sayılır.';
+$wb['global_tabchange_discard_txt'] = 'Bu sekmede kaydedilmemiş değişiklikler var. Devam ederseniz değişiklikler yok sayılacak.';
+
 $wb['datalog_changes_txt'] = 'Şu değişiklikler henüz tüm sunuculara dağıtılmadı:';
 $wb['datalog_changes_end_txt'] = 'Güncellemelerin kaydedilmesi bir dakika kadar sürecek. Lütfen bekleyin.';
-$wb['datalog_status_i_web_database'] = 'Veritabanı ekle';
-$wb['datalog_status_u_web_database'] = 'Veritabanını güncelle';
-$wb['datalog_status_d_web_database'] = 'Veritabanını sil';
-$wb['datalog_status_i_web_database_user'] = 'Veritabanı kullanıcısı ekle';
-$wb['datalog_status_u_web_database_user'] = 'Veritabanı kullanıcısını güncelle';
-$wb['datalog_status_d_web_database_user'] = 'Veritabanı kullanıcısını sil';
-$wb['datalog_status_i_web_domain'] = 'Web sitesi ekle';
-$wb['datalog_status_u_web_domain'] = 'Web sitesi ayarlarını güncelle';
-$wb['datalog_status_d_web_domain'] = 'Web sitesini sil';
-$wb['datalog_status_i_ftp_user'] = 'FTP kullanıcısı ekle';
-$wb['datalog_status_u_ftp_user'] = 'FTP kullanıcısını güncelle';
-$wb['datalog_status_d_ftp_user'] = 'FTP kullanıcısını sil';
-$wb['datalog_status_i_mail_domain'] = 'E-posta alan adı ekle';
-$wb['datalog_status_u_mail_domain'] = 'E-posta alan adını güncelle';
-$wb['datalog_status_d_mail_domain'] = 'E-posta alan adını sil';
-$wb['datalog_status_i_mail_user'] = 'E-posta kullanıcısı ekle';
-$wb['datalog_status_u_mail_user'] = 'E-posta kullanıcısını güncelle';
-$wb['datalog_status_d_mail_user'] = 'E-posta kullanıcısını sil';
-$wb['datalog_status_i_spamfilter_users'] = 'Spam süzgeci ayarları ekle';
-$wb['datalog_status_u_spamfilter_users'] = 'Spam süzgeci ayarlarını güncelle';
-$wb['datalog_status_d_spamfilter_users'] = 'Spam süzgeci ayarlarını sil';
-$wb['datalog_status_i_mail_forwarding'] = 'E-posta adresi ekle';
-$wb['datalog_status_u_mail_forwarding'] = 'E-posta adresini güncelle';
-$wb['datalog_status_d_mail_forwarding'] = 'E-posta adresini sil';
-$wb['datalog_status_i_dns_rr'] = 'DNS kaydı ekle';
-$wb['datalog_status_u_dns_rr'] = 'DNS kaydını güncelle';
-$wb['datalog_status_d_dns_rr'] = 'DNS kaydını sil';
-$wb['datalog_status_i_dns_soa'] = 'DNS bölgesi ekle';
-$wb['datalog_status_u_dns_soa'] = 'DNS bölgesini güncelle';
-$wb['datalog_status_d_dns_soa'] = 'DNS bölgesini sil';
-$wb['datalog_status_i_cron'] = 'Zamanlanmış görev ekle';
-$wb['datalog_status_u_cron'] = 'Zamanlanmış görevi güncelle';
-$wb['datalog_status_d_cron'] = 'Zamanlanmış görevi sil';
-$wb['datalog_status_i_mail_get'] = 'E-posta alma hesabı ekle';
-$wb['datalog_status_u_mail_get'] = 'E-posta alma hesabını güncelle';
-$wb['datalog_status_d_mail_get'] = 'E-posta alma hesabını sil';
-$wb['datalog_status_i_mail_mailinglist'] = 'E-posta listesi ekle';
-$wb['datalog_status_u_mail_mailinglist'] = 'E-posta listesini güncelle';
-$wb['datalog_status_d_mail_mailinglist'] = 'E-posta listesini sil';
-$wb['datalog_status_i_shell_user'] = 'Kabuk kullanıcısı ekle';
-$wb['datalog_status_u_shell_user'] = 'Kabuk kullanıcısını güncelle';
-$wb['datalog_status_d_shell_user'] = 'Kabuk kullanıcısını sil';
-$wb['datalog_status_i_web_folder'] = 'Klasör koruması ekle';
-$wb['datalog_status_u_web_folder'] = 'Klasör korumasını güncelle';
-$wb['datalog_status_d_web_folder'] = 'Klasör korumasını sil';
-$wb['datalog_status_i_web_folder_user'] = 'Klasör koruma kullanıcısı ekle';
-$wb['datalog_status_u_web_folder_user'] = 'Klasör koruma kullanıcısını güncelle';
-$wb['datalog_status_d_web_folder_user'] = 'Klasör koruma kullanıcısını sil';
+$wb['datalog_status_i_web_database'] = 'Veritabanı Ekle';
+$wb['datalog_status_u_web_database'] = 'Veritabanını Güncelle';
+$wb['datalog_status_d_web_database'] = 'Veritabanını Sil';
+$wb['datalog_status_i_web_database_user'] = 'Veritabanı Kullanıcısı Ekle';
+$wb['datalog_status_u_web_database_user'] = 'Veritabanı Kullanıcısını Güncelle';
+$wb['datalog_status_d_web_database_user'] = 'Veritabanı Kullanıcısını Sil';
+$wb['datalog_status_i_web_domain'] = 'Web Sitesi Ekle';
+$wb['datalog_status_u_web_domain'] = 'Web Sitesi Ayarlarını Güncelle';
+$wb['datalog_status_d_web_domain'] = 'Web Sitesini Sil';
+$wb['datalog_status_i_ftp_user'] = 'FTP Kullanıcısı Ekle';
+$wb['datalog_status_u_ftp_user'] = 'FTP Kullanıcısını Güncelle';
+$wb['datalog_status_d_ftp_user'] = 'FTP Kullanıcısını Sil';
+$wb['datalog_status_i_mail_domain'] = 'E-posta Etki Alanı Ekle';
+$wb['datalog_status_u_mail_domain'] = 'E-posta Etki Alanını Güncelle';
+$wb['datalog_status_d_mail_domain'] = 'E-posta Etki Alanını Sil';
+$wb['datalog_status_i_mail_user'] = 'E-posta Kullanıcısı Ekle';
+$wb['datalog_status_u_mail_user'] = 'E-posta Kullanıcısını Güncelle';
+$wb['datalog_status_d_mail_user'] = 'E-posta Kullanıcısını Sil';
+$wb['datalog_status_i_spamfilter_users'] = 'Spam Süzgeci Ayarları Ekle';
+$wb['datalog_status_u_spamfilter_users'] = 'Spam Süzgeci Ayarlarını Güncelle';
+$wb['datalog_status_d_spamfilter_users'] = 'Spam Süzgeci Ayarlarını Sil';
+$wb['datalog_status_i_mail_forwarding'] = 'E-posta Adresi Ekle';
+$wb['datalog_status_u_mail_forwarding'] = 'E-posta Adresini Güncelle';
+$wb['datalog_status_d_mail_forwarding'] = 'E-posta Adresini Sil';
+$wb['datalog_status_i_dns_rr'] = 'DNS Kaydı Ekle';
+$wb['datalog_status_u_dns_rr'] = 'DNS Kaydını Güncelle';
+$wb['datalog_status_d_dns_rr'] = 'DNS Kaydını Sil';
+$wb['datalog_status_i_dns_soa'] = 'DNS Bölgesi Ekle';
+$wb['datalog_status_u_dns_soa'] = 'DNS Bölgesini Güncelle';
+$wb['datalog_status_d_dns_soa'] = 'DNS Bölgesini Sil';
+$wb['datalog_status_i_cron'] = 'Zamanlanmış Görev Ekle';
+$wb['datalog_status_u_cron'] = 'Zamanlanmış Görevi Güncelle';
+$wb['datalog_status_d_cron'] = 'Zamanlanmış Görevi Sil';
+$wb['datalog_status_i_mail_get'] = 'E-posta Alma Hesabı Ekle';
+$wb['datalog_status_u_mail_get'] = 'E-posta Alma Hesabını Güncelle';
+$wb['datalog_status_d_mail_get'] = 'E-posta Alma Hesabını Sil';
+$wb['datalog_status_i_mail_mailinglist'] = 'E-posta Listesi Ekle';
+$wb['datalog_status_u_mail_mailinglist'] = 'E-posta Listesini Güncelle';
+$wb['datalog_status_d_mail_mailinglist'] = 'E-posta Listesini Sil';
+$wb['datalog_status_i_shell_user'] = 'Kabuk Kullanıcısı Ekle';
+$wb['datalog_status_u_shell_user'] = 'Kabuk Kullanıcısını Güncelle';
+$wb['datalog_status_d_shell_user'] = 'Kabuk Kullanıcısını Sil';
+$wb['datalog_status_i_web_folder'] = 'Klasör Koruması Ekle';
+$wb['datalog_status_u_web_folder'] = 'Klasör Korumasını Güncelle';
+$wb['datalog_status_d_web_folder'] = 'Klasör Korumasını Sil';
+$wb['datalog_status_i_web_folder_user'] = 'Klasör Koruma Kullanıcısı Ekle';
+$wb['datalog_status_u_web_folder_user'] = 'Klasör Koruma Kullanıcısını Güncelle';
+$wb['datalog_status_d_web_folder_user'] = 'Klasör Koruma Kullanıcısını Sil';
+$wb['datalog_status_i_xmpp_domain'] = 'XMPP etki alanı ekle';
+$wb['datalog_status_u_xmpp_domain'] = 'XMPP etki alanını düzenle';
+$wb['datalog_status_d_xmpp_domain'] = 'XMPP etki alanını sil';
+$wb['datalog_status_i_xmpp_user'] = 'XMPP kullanıcısı ekle';
+$wb['datalog_status_u_xmpp_user'] = 'XMPP kullanıcısını güncelle';
+$wb['datalog_status_d_xmpp_user'] = 'XMPP kullanıcısını sil';
 $wb['err_csrf_attempt_blocked'] = 'CSRF giriÅŸimi engellendi.';
 $wb['login_as_txt'] = 'Müşteri adıyla oturum aç';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
 $wb['no_destination_perm'] = 'Bu hedef için izniniz yok.';
 $wb['client_you_are_locked'] = 'Herhangi bir ayarı değiştirme izniniz yok.';
 $wb['gender_m_txt'] = 'Bay';
@@ -146,16 +153,10 @@ $wb['strength_2'] = 'Yeterli';
 $wb['strength_3'] = 'Ä°yi';
 $wb['strength_4'] = 'Güçlü';
 $wb['strength_5'] = 'Çok Güçlü';
-$wb['weak_password_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda ve \\"{strength}\\" güçlüğünde olmalı.';
+$wb['weak_password_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda ve "{strength}" güçlüğünde olmalı.';
 $wb['weak_password_length_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda olmalı.';
 $wb['security_check1_txt'] = 'Güvenlik iznini denetle:';
 $wb['security_check2_txt'] = 'başarısız.';
-$wb['select_directive_snippet_txt'] = 'Directive Snippets';
-$wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets';
-$wb['datalog_status_i_xmpp_domain'] = 'Create XMPP domain';
-$wb['datalog_status_u_xmpp_domain'] = 'Update XMPP domain';
-$wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
-$wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
-$wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
-$wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['select_directive_snippet_txt'] = 'Yönerge Kod Parçaları';
+$wb['select_master_directive_snippet_txt'] = 'Ana Komut Parçaları';
 ?>
diff --git a/interface/web/admin/lib/lang/br.lng b/interface/web/admin/lib/lang/br.lng
index c4df3fe58b..b558a1510e 100644
--- a/interface/web/admin/lib/lang/br.lng
+++ b/interface/web/admin/lib/lang/br.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['1001'] = 'Usuário ou senha está em branco.';
-$wb['1002'] = 'Usuário ou senha errados.';
+$wb['error_1001'] = 'Usuário ou senha está em branco.';
+$wb['error_1002'] = 'Usuário ou senha é inválido.';
 $wb['Groups'] = 'Grupos';
-$wb['groups_description'] = 'Edição dos grupos de usuários do sistema';
+$wb['groups_description'] = 'Editar grupos e usuários do sistema.';
 $wb['Servers'] = 'Servidores';
 $wb['Config'] = 'Configuração';
 $wb['Add user'] = 'Adicionar usuário';
@@ -11,30 +11,36 @@ $wb['Add group'] = 'Adicionar grupo';
 $wb['Edit group'] = 'Editar grupo';
 $wb['Edit server'] = 'Editar servidor';
 $wb['Sync. Now'] = 'Sincronizar agora';
-$wb['DB Sync.'] = 'Sincronizar banco de dados';
-$wb['User Management'] = 'Gerenciamento de usuários';
-$wb['CP Users'] = 'Usuários do painel';
+$wb['DB Sync.'] = 'Sincronização do BD.';
+$wb['User Management'] = 'Gerência de usuário';
+$wb['CP Users'] = 'Usuários ISPConfig';
 $wb['Remote Users'] = 'Usuários remotos';
 $wb['System'] = 'Sistema';
 $wb['Server Services'] = 'Serviços do servidor';
 $wb['Services'] = 'Serviços';
 $wb['Server Config'] = 'Configuração do servidor';
-$wb['Mail'] = 'E-mails';
+$wb['Server'] = 'Servidor';
+$wb['Mail'] = 'e-Mail';
 $wb['Getmail'] = 'Getmail';
-$wb['Web'] = 'Sites';
+$wb['Web'] = 'Web';
 $wb['FastCGI'] = 'FastCGI';
 $wb['Jailkit'] = 'Jailkit';
 $wb['Rescue'] = 'Manutenção';
-$wb['Server IP addresses'] = 'Endereço IP do servidor';
+$wb['Server IP addresses'] = 'Endereços IP do servidor';
+$wb['Server IPv4 mapping'] = 'Mapeamento IPv4 do servidor';
 $wb['Additional PHP Versions'] = 'Versões adicionais do php';
+$wb['Directive Snippets'] = 'Diretiva de trechos de código';
 $wb['Firewall'] = 'Firewall';
 $wb['Interface'] = 'Interface';
 $wb['Interface Config'] = 'Configuração principal';
+$wb['Sites'] = 'Sites';
+$wb['DNS'] = 'DNS';
 $wb['Domains'] = 'Domínios';
 $wb['Misc'] = 'Diversos';
-$wb['Software'] = 'Software';
+$wb['Software'] = 'APPs e complementos';
 $wb['Repositories'] = 'Repositórios';
 $wb['Packages'] = 'Pacotes';
+$wb['Updates'] = 'Atualizações';
 $wb['Language Editor'] = 'Editor de idiomas';
 $wb['Languages'] = 'Idiomas';
 $wb['New Language'] = 'Novo idioma';
@@ -42,11 +48,6 @@ $wb['Merge'] = 'Mesclar';
 $wb['Export'] = 'Exportar';
 $wb['Import'] = 'Importar';
 $wb['Remote Actions'] = 'Ações remotas';
-$wb['Do OS-Update'] = 'Atualização do SO';
-$wb['Do ISPConfig-Update'] = 'Atualização do ISPConfig';
-$wb['Directive Snippets'] = 'Diretivas de trechos de código';
-$wb['Sites'] = 'Sites';
-$wb['DNS'] = 'DNS';
-$wb['Server'] = 'Servidor';
-$wb['Updates'] = 'Atualizações';
+$wb['Do OS-Update'] = 'Atualizar sistema operacional';
+$wb['Do ISPConfig-Update'] = 'Atualizar o ISPConfig';
 ?>
diff --git a/interface/web/admin/lib/lang/br_directive_snippets.lng b/interface/web/admin/lib/lang/br_directive_snippets.lng
index ae56153844..43c46c69b9 100644
--- a/interface/web/admin/lib/lang/br_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/br_directive_snippets.lng
@@ -2,11 +2,11 @@
 $wb['Directive Snippets'] = 'Diretiva de trechos de código';
 $wb['name_txt'] = 'Nome da diretiva';
 $wb['type_txt'] = 'Tipo';
-$wb['snippet_txt'] = 'Diretiva';
+$wb['snippet_txt'] = 'Trecho de código';
 $wb['active_txt'] = 'Ativo';
-$wb['directive_snippets_name_empty'] = 'Por favor, insira um nome para a diretiva';
-$wb['directive_snippets_name_error_unique'] = 'Já existe uma diretiva de trechos de código com este nome.';
+$wb['directive_snippets_name_empty'] = 'Por favor, insira um nome para a diretiva.';
+$wb['directive_snippets_name_error_unique'] = 'Já existe uma diretiva com este nome.';
 $wb['variables_txt'] = 'Variáveis';
-$wb['customer_viewable_txt'] = 'Visualizada pelo cliente';
-$wb['required_php_snippets_txt'] = 'Diretiva obrigatória para PHP';
+$wb['customer_viewable_txt'] = 'Visualização personalizada';
+$wb['required_php_snippets_txt'] = 'Trecho de código exige php';
 ?>
diff --git a/interface/web/admin/lib/lang/br_directive_snippets_list.lng b/interface/web/admin/lib/lang/br_directive_snippets_list.lng
index 8e08580ad2..70af844dd6 100644
--- a/interface/web/admin/lib/lang/br_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/br_directive_snippets_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Diretivas de trechos de código';
+$wb['list_head_txt'] = 'Diretiva de trechos de código';
 $wb['active_txt'] = 'Ativo';
 $wb['name_txt'] = 'Nome da diretiva';
 $wb['type_txt'] = 'Tipo';
-$wb['add_new_record_txt'] = 'Adicionar nova diretiva';
+$wb['add_new_record_txt'] = 'Adicionar diretiva';
 $wb['customer_viewable_txt'] = 'Visível para o cliente';
 ?>
diff --git a/interface/web/admin/lib/lang/br_firewall.lng b/interface/web/admin/lib/lang/br_firewall.lng
index 0bd3cdc74f..da0936b007 100644
--- a/interface/web/admin/lib/lang/br_firewall.lng
+++ b/interface/web/admin/lib/lang/br_firewall.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['tcp_port_txt'] = 'Portas TCP abertas';
-$wb['udp_port_txt'] = 'Portas UDP abertas';
+$wb['tcp_port_txt'] = 'Portas tcp abertas';
+$wb['udp_port_txt'] = 'Portas udp abertas';
 $wb['tcp_port_help_txt'] = 'Separado por vírgula';
 $wb['udp_port_help_txt'] = 'Separado por vírgula';
 $wb['active_txt'] = 'Ativo';
-$wb['firewall_error_unique'] = 'Já existe uma regra de firewall para este servidor!';
-$wb['tcp_ports_error_regex'] = 'Caractere não permitido para definição de porta tcp. São permitidos somente números, \':\' e \',\'.';
-$wb['udp_ports_error_regex'] = 'Caractere não permitido para definição de porta udp. São permitidos somente números, \':\' e \',\'.';
+$wb['firewall_error_unique'] = 'Já existe uma regra de firewall idêntica para este servidor.';
+$wb['tcp_ports_error_regex'] = 'Caractere não permitido para configuração de porta tcp: Caracteres permitidos são números, ":" e ",".';
+$wb['udp_ports_error_regex'] = 'Caractere não permitido para configuração de porta udp: Caracteres permitidos são números, ":" e ",".';
 ?>
diff --git a/interface/web/admin/lib/lang/br_firewall_list.lng b/interface/web/admin/lib/lang/br_firewall_list.lng
index 8ff52ee241..94ef3aab7d 100644
--- a/interface/web/admin/lib/lang/br_firewall_list.lng
+++ b/interface/web/admin/lib/lang/br_firewall_list.lng
@@ -4,5 +4,5 @@ $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['tcp_port_txt'] = 'Portas tcp abertas';
 $wb['udp_port_txt'] = 'Portas udp abertas';
-$wb['add_new_record_txt'] = 'Adicionar regra de firewall';
+$wb['add_new_record_txt'] = 'Adicionar nova regra';
 ?>
diff --git a/interface/web/admin/lib/lang/br_groups.lng b/interface/web/admin/lib/lang/br_groups.lng
index 735bd864a9..22a1a5c63d 100644
--- a/interface/web/admin/lib/lang/br_groups.lng
+++ b/interface/web/admin/lib/lang/br_groups.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['description_txt'] = 'Descrição';
 $wb['name_txt'] = 'Grupo';
-$wb['name_err'] = 'O nome do grupo deve conter de 1 a 30 caracteres!';
+$wb['name_err'] = 'O grupo deve conter no mínimo 1 e no máximo 30 caracteres.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_groups_list.lng b/interface/web/admin/lib/lang/br_groups_list.lng
index f31a85d126..74a414f52d 100644
--- a/interface/web/admin/lib/lang/br_groups_list.lng
+++ b/interface/web/admin/lib/lang/br_groups_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Grupos de usuários do sistema';
+$wb['list_head_txt'] = 'Grupos';
 $wb['description_txt'] = 'Descrição';
 $wb['name_txt'] = 'Grupo';
-$wb['add_new_record_txt'] = 'Adicionar novo Grupo';
-$wb['warning_txt'] = '<b>AVISO:</b> Não modifique ou edite qualquer configuração de usuário aqui. Use o módulo de clientes ou revendas. Modificar ou alterar usuários e grupos aqui pode ocasionar perda de dados!';
+$wb['add_new_record_txt'] = 'Adicionar novo grupo';
+$wb['warning_txt'] = '<b>ALERTA:</b> Não editar ou alterar qualquer configuração de usuário aqui. Use o módulo de clientes e revendas para isso. Editar ou alterar usuários ou grupos aqui pode causar perda de dados!';
 ?>
diff --git a/interface/web/admin/lib/lang/br_iptables.lng b/interface/web/admin/lib/lang/br_iptables.lng
index e44fcf1e68..f899d53178 100644
--- a/interface/web/admin/lib/lang/br_iptables.lng
+++ b/interface/web/admin/lib/lang/br_iptables.lng
@@ -1,13 +1,13 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['multiport_txt'] = 'Múltiplas portas';
-$wb['singleport_txt'] = 'Porta simples';
+$wb['multiport_txt'] = 'Multi-portas';
+$wb['singleport_txt'] = 'Portas simples';
 $wb['protocol_txt'] = 'Protocolo';
 $wb['table_txt'] = 'Tabela';
 $wb['target_txt'] = 'Alvo';
 $wb['state_txt'] = 'Estado';
-$wb['destination_ip_txt'] = 'Endereço IP de destino';
-$wb['source_ip_txt'] = 'Endereço IP de origem';
+$wb['destination_ip_txt'] = 'Endereço de destino';
+$wb['source_ip_txt'] = 'Endereço de origem';
 $wb['active_txt'] = 'Ativo';
-$wb['iptables_error_unique'] = 'Já existe um registro de firewall igual para este servidor.';
+$wb['iptables_error_unique'] = 'Já existe uma regra de firewall idêntica para este servidor.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_iptables_list.lng b/interface/web/admin/lib/lang/br_iptables_list.lng
index 2cd7fdfb53..3326ac060a 100644
--- a/interface/web/admin/lib/lang/br_iptables_list.lng
+++ b/interface/web/admin/lib/lang/br_iptables_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Firewall';
-$wb['add_new_rule_txt'] = 'Adicionar nova regra';
+$wb['add_new_rule_txt'] = 'Adicionar regra de firewall';
 $wb['server_id_txt'] = 'Servidor';
 $wb['multiport_txt'] = 'Multi portas';
 $wb['singleport_txt'] = 'Porta simples';
@@ -8,8 +8,8 @@ $wb['protocol_txt'] = 'Protocolo';
 $wb['table_txt'] = 'Tabela';
 $wb['target_txt'] = 'Alvo';
 $wb['state_txt'] = 'Estado';
-$wb['destination_ip_txt'] = 'Endereço IP de destino';
-$wb['source_ip_txt'] = 'Endereço IP de origem';
+$wb['destination_ip_txt'] = 'Endereço de destino';
+$wb['source_ip_txt'] = 'Endereço de origem';
 $wb['active_txt'] = 'Ativo';
-$wb['iptables_error_unique'] = 'Já existe um registro de firewall igual para este servidor.';
+$wb['iptables_error_unique'] = 'Já existe uma regra idêntica para este servidor.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_language_add.lng b/interface/web/admin/lib/lang/br_language_add.lng
index eaa0808199..f63441c55d 100644
--- a/interface/web/admin/lib/lang/br_language_add.lng
+++ b/interface/web/admin/lib/lang/br_language_add.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['list_head_txt'] = 'Adicionar novo idioma';
-$wb['language_select_txt'] = 'Selecionar o idioma base';
+$wb['language_select_txt'] = 'Selecionar idioma base';
 $wb['language_new_txt'] = 'Novo idioma';
-$wb['language_new_hint_txt'] = '2 letras código ISO 639-1 (veja http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
+$wb['language_new_hint_txt'] = '2 caracteres ISO 639-1 para o código do idioma (veja em http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
 $wb['btn_save_txt'] = 'Adicionar novo conjunto de idiomas';
 $wb['btn_cancel_txt'] = 'Voltar';
 ?>
diff --git a/interface/web/admin/lib/lang/br_language_complete.lng b/interface/web/admin/lib/lang/br_language_complete.lng
index 84d5e3393c..cb0ea2eb24 100644
--- a/interface/web/admin/lib/lang/br_language_complete.lng
+++ b/interface/web/admin/lib/lang/br_language_complete.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Mesclar idioma';
+$wb['list_head_txt'] = 'Mesclar idiomas';
 $wb['list_desc_txt'] = 'Mesclar o arquivo de idioma selecionado com o arquivo de idioma principal (em inglês). <br />Isto permite completar qualquer falha de tradução, com o arquivo principal original em inglês.';
 $wb['language_select_txt'] = 'Selecionar idioma';
 $wb['btn_save_txt'] = 'Mesclar arquivos agora';
diff --git a/interface/web/admin/lib/lang/br_language_edit.lng b/interface/web/admin/lib/lang/br_language_edit.lng
index 887080b6d5..ed0e6bb84d 100644
--- a/interface/web/admin/lib/lang/br_language_edit.lng
+++ b/interface/web/admin/lib/lang/br_language_edit.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Editor de idiomas';
-$wb['language_select_txt'] = 'Selecione o idioma';
+$wb['list_head_txt'] = 'Editor de arquivos de idiomas';
+$wb['language_select_txt'] = 'Selecionar idioma';
 $wb['module_txt'] = 'Módulo';
 $wb['lang_file_txt'] = 'Arquivo de idioma';
 $wb['btn_save_txt'] = 'Salvar';
diff --git a/interface/web/admin/lib/lang/br_language_export.lng b/interface/web/admin/lib/lang/br_language_export.lng
index d484661389..7d75f7b6dd 100644
--- a/interface/web/admin/lib/lang/br_language_export.lng
+++ b/interface/web/admin/lib/lang/br_language_export.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Exportar arquivos de idioma';
-$wb['language_select_txt'] = 'Selecione o idioma';
-$wb['btn_save_txt'] = 'Exportar idioma selecionado para um arquivo';
+$wb['language_select_txt'] = 'Selecionar idioma';
+$wb['btn_save_txt'] = 'Exportar arquivo de idioma selecionado';
 $wb['btn_cancel_txt'] = 'Voltar';
 ?>
diff --git a/interface/web/admin/lib/lang/br_language_import.lng b/interface/web/admin/lib/lang/br_language_import.lng
index e99756b376..99db339812 100644
--- a/interface/web/admin/lib/lang/br_language_import.lng
+++ b/interface/web/admin/lib/lang/br_language_import.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['list_head_txt'] = 'Importar arquivo de idioma';
-$wb['language_import_txt'] = 'Buscar arquivo de idioma';
+$wb['list_desc_txt'] = 'ALERTA: Não importe arquivos de idioma de origem desconhecida.';
+$wb['language_import_txt'] = 'Selecionar arquivo de idioma';
 $wb['btn_save_txt'] = 'Importar arquivo de idioma selecionado';
-$wb['language_overwrite_txt'] = 'Sobrescrever o arquivo se existir.';
+$wb['language_overwrite_txt'] = 'Sobrescrever arquivo, se existir.';
 $wb['btn_cancel_txt'] = 'Voltar';
 $wb['ignore_version_txt'] = 'Ignorar verificação da versão do ISPConfig';
-$wb['list_desc_txt'] = 'ATENÇÃO: Não importe arquivos de idioma de fontes desconhecidas.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_language_list.lng b/interface/web/admin/lib/lang/br_language_list.lng
index cd00833419..37941c4472 100644
--- a/interface/web/admin/lib/lang/br_language_list.lng
+++ b/interface/web/admin/lib/lang/br_language_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Editor de arquivo de idioma';
-$wb['language_select_txt'] = 'Selecione o idioma';
+$wb['list_head_txt'] = 'Editor de arquivos de idioma';
+$wb['language_select_txt'] = 'Selecionar idioma';
 $wb['module_txt'] = 'Módulo';
-$wb['lang_file_txt'] = 'Arquido de idioma';
+$wb['lang_file_txt'] = 'Arquivo de idioma';
 $wb['lang_file_date_txt'] = 'Última modificação';
 ?>
diff --git a/interface/web/admin/lib/lang/br_package_install.lng b/interface/web/admin/lib/lang/br_package_install.lng
index 5b54c3080a..bbe518549a 100644
--- a/interface/web/admin/lib/lang/br_package_install.lng
+++ b/interface/web/admin/lib/lang/br_package_install.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['repo_name_txt'] = 'Repositório';
 $wb['repo_url_txt'] = 'URL';
-$wb['repo_username_txt'] = 'Usuário (opcional)';
+$wb['repo_username_txt'] = 'Usário (opcional)';
 $wb['repo_password_txt'] = 'Senha (opcional)';
 $wb['active_txt'] = 'Ativo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_remote_action.lng b/interface/web/admin/lib/lang/br_remote_action.lng
index e06a6382b9..80d3a05c53 100644
--- a/interface/web/admin/lib/lang/br_remote_action.lng
+++ b/interface/web/admin/lib/lang/br_remote_action.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['select_server_txt'] = 'Selecione o Servidor';
+$wb['select_server_txt'] = 'Selecionar servidor';
 $wb['btn_do_txt'] = 'Executar ação';
-$wb['do_osupdate_caption'] = 'Atualização do sistema operacional no servidor';
-$wb['do_osupdate_desc'] = 'Este comando fará um aptitude -y upgrade no servidor selecionado.<br><br><strong>UTILIZE POR SUA CONTA E RISCO!</strong>';
-$wb['do_ispcupdate_caption'] = 'Atualização do ISPConfig 3 no servidor';
-$wb['do_ispcupdate_desc'] = 'Esta ação fará uma atualização do ISPConfig3 no servidor selecionado.<br><br><strong>UTILIZE POR SUA CONTA E RISCO!</strong>';
-$wb['action_scheduled'] = 'Esta ação está agendada para execução';
+$wb['do_osupdate_caption'] = 'Atualizar sistema operacional no servidor remoto';
+$wb['do_osupdate_desc'] = 'Esta ação fará o comando \'aptitude -y upgrade\' no servidor selecionado.<br><br><strong>UTILIZE POR SUA CONTA E RISCO!</strong>';
+$wb['do_ispcupdate_caption'] = 'Atualizar ISPConfig 3 - Atualizar o servidor remoto';
+$wb['do_ispcupdate_desc'] = 'Esta ação atualizará o ISPConfig3 no servidor selecionado.<br><br><strong>UTILIZE POR SUA CONTA E RISCO!</strong>';
+$wb['action_scheduled'] = 'A ação foi agendada.';
 $wb['select_all_server'] = 'Todos os servidores';
 $wb['ispconfig_update_title'] = 'Instruções de atualização do ISPConfig';
-$wb['ispconfig_update_text'] = 'Acesse como root no shell do seu servidor e execute os seguintes comandos<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />para iniciar a atualização do ISPConfig.<br /><br /><a href=http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/ target=_blank>Clique aqui para instruções detalhadas sobre atualização</a>';
+$wb['ispconfig_update_text'] = 'Acesse com o usuário root no shell do servidor e execute o comando<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />para iniciar a atualização do ISPConfig.<br /><br /><a href=\'http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\' target=\'_blank\'>Clique aqui para instruções detalhadas</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/br_remote_user.lng b/interface/web/admin/lib/lang/br_remote_user.lng
index 95657a283d..fcaa6732c8 100644
--- a/interface/web/admin/lib/lang/br_remote_user.lng
+++ b/interface/web/admin/lib/lang/br_remote_user.lng
@@ -1,50 +1,68 @@
 <?php
-$wb['username_txt'] = 'Nome do usuário';
+$wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['function_txt'] = 'Funções';
-$wb['username_error_unique'] = 'O nome de usuário deve ser exclusivo';
-$wb['username_error_empty'] = 'O nome de usuário não pode estar em branco';
-$wb['password_error_empty'] = 'A senha não pode estar em branco';
+$wb['username_error_unique'] = 'Nome do usuário deve ser exclusivo.';
+$wb['username_error_empty'] = 'Nome do usuário está em branco.';
+$wb['password_error_empty'] = 'Senha do usuário está em branco.';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
+$wb['Server functions'] = 'Funções de servidor';
+$wb['Record permission changes'] = 'Permissões de alteração de registros';
+$wb['Domaintool functions'] = 'Funções ferramentas de domínios';
+$wb['Quota functions'] = 'Funções de cotas';
 $wb['Mail domain functions'] = 'Funções de domínios de e-mail';
-$wb['Mail user functions'] = 'Funções de usuários de e-mail';
-$wb['Mail alias functions'] = 'Funções de apelidos de domínio de e-mail';
-$wb['Mail forward functions'] = 'Funções de encaminhamento de e-mail';
-$wb['Mail catchall functions'] = 'Funções de de contas cata tudo';
-$wb['Mail transport functions'] = 'Funções de transporte de e-mail';
-$wb['Mail whitelist functions'] = 'Funções de lista branca de e-mail';
-$wb['Mail blacklist functions'] = 'Funções de lista negra de e-mail';
-$wb['Mail spamfilter user functions'] = 'Funções de filtros anti-spam para contas de e-mail';
-$wb['Mail spamfilter policy functions'] = 'Funções de política de anti-spam para contas de e-mail';
+$wb['Mail domain alias functions'] = 'Funções de alias de domínios de e-mail';
+$wb['Mail mailinglist functions'] = 'Funções de lista de e-mails';
+$wb['Mail user functions'] = 'Funções de contas de e-mails';
+$wb['Mail alias functions'] = 'Funções de alias de e-mails';
+$wb['Mail forward functions'] = 'Funções de encaminhamento de e-mails';
+$wb['Mail relay functions'] = 'Funções de retransmissão de e-mails';
+$wb['Mail catchall functions'] = 'Funções de contas cata-tudo';
+$wb['Mail transport functions'] = 'Funções de transporte de e-mails';
+$wb['Mail whitelist functions'] = 'Funções de lista branca';
+$wb['Mail blacklist functions'] = 'Funções de lista negra';
+$wb['Mail spamfilter user functions'] = 'Funções de filtros anti-spam';
+$wb['Mail spamfilter policy functions'] = 'Funções de políticas anti-spam';
 $wb['Mail fetchmail functions'] = 'Funções de contas de busca de e-mails';
-$wb['Mail user filter functions'] = 'Funções de filtro de e-mails para contas de e-mail';
-$wb['Mail filter functions'] = 'Funções de filtros de e-mail';
+$wb['Mail spamfilter whitelist functions'] = 'Funções de lista branca de e-mails';
+$wb['Mail spamfilter blacklist functions'] = 'Funções de lista negra de e-mails';
+$wb['Mail user filter functions'] = 'Funções de filtros de e-mails para contas de e-mails';
+$wb['Mail Backup functions'] = 'Funções de backup de e-mails';
+$wb['Mail filter functions'] = 'Funções de filtros de e-mails';
+$wb['Monitor functions'] = 'Funções de monitoramento';
 $wb['Client functions'] = 'Funções de cliente';
-$wb['Sites cron functions'] = 'Funções de tarefas no cron para sites';
-$wb['Sites database functions'] = 'Funções de banco de dados para sites';
-$wb['Sites FTP-User functions'] = 'Funções de usuários ftp para sites';
-$wb['Sites Shell-User functions'] = 'Funções de usuários shell para sites';
+$wb['Sites cron functions'] = 'Funções de tarefas no cron';
+$wb['Sites database functions'] = 'Funções de banco de dados';
+$wb['Sites Protected folder functions'] = 'Funções de pastas protegidas';
+$wb['Sites FTP-User functions'] = 'Funções de usuários ftp';
+$wb['Sites Shell-User functions'] = 'Funções de usuários do shell';
 $wb['Sites Domain functions'] = 'Funções de domínios de sites';
-$wb['Sites Aliasdomain functions'] = 'Função de apelidos de domínio de sites';
-$wb['Sites Subdomain functions'] = 'Função de subdomínio de sites';
-$wb['DNS zone functions'] = 'Funções de zona dns';
+$wb['Sites Backup functions'] = 'Funções de backup de sites';
+$wb['Sites Aliasdomain functions'] = 'Funções de alias de domínios de sites';
+$wb['Sites Subdomain functions'] = 'Funções de subdomínios de sites';
+$wb['Sites APS functions'] = 'Funções de apps e complementos';
+$wb['Sites WebDAV-User functions'] = 'Funções de usuários webdav';
+$wb['DNS zone functions'] = 'Funções de zonas dns';
 $wb['DNS a functions'] = 'Funções de registro A dns';
 $wb['DNS aaaa functions'] = 'Funções de registro AAAA dns';
-$wb['DNS alias functions'] = 'Funções de registro Alias dns';
-$wb['DNS cname functions'] = 'Funções de registro CNAME dns';
-$wb['DNS hinfo functions'] = 'Funções de registro HINFO dns';
-$wb['DNS mx functions'] = 'Funções de registro MX dns';
-$wb['DNS ns functions'] = 'Funções de registro NS dns';
-$wb['DNS ptr functions'] = 'Funções de registro PTR dns';
-$wb['DNS rp functions'] = 'Funções de registro RP dns';
-$wb['DNS srv functions'] = 'Funções de registro SRV dns';
-$wb['DNS txt functions'] = 'Funções de registro TXT dns';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['remote_access_txt'] = 'Acesso remoto';
-$wb['remote_ips_txt'] = 'Endereço(s) IPs ou nome do servidor com acesso remoto (separado por vírgula ou em branco para qualquer <i>um</i>)';
-$wb['remote_user_error_ips'] = 'Ao menos um endereço IP ou nome do servidor é inválido.';
-$wb['Mail mailing list functions'] = 'Mail mailinglist functions';
+$wb['DNS alias functions'] = 'Funções de ALIAS dns';
+$wb['DNS cname functions'] = 'Funções de CNAME dns';
+$wb['DNS hinfo functions'] = 'Funções de HINFO dns';
+$wb['DNS mx functions'] = 'Funções de MX dns';
+$wb['DNS ns functions'] = 'Funções de NS dns';
+$wb['DNS ptr functions'] = 'Funções de PTR dns';
+$wb['DNS rp functions'] = 'Funções de RP dns';
+$wb['DNS srv functions'] = 'Funções de SVR dns';
+$wb['DNS txt functions'] = 'Funções de TXT dns';
+$wb['DNS ds functions'] = 'Funções de DS dns';
+$wb['DNS loc functions'] = 'Funções de LOC dns';
+$wb['DNS tlsa functions'] = 'Funções de TLSA dns';
+$wb['OpenVZ VM functions'] = 'Funções do openvz';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['remote_access_txt'] = 'Acesso Remoto';
+$wb['remote_ips_txt'] = 'Endereços IPs ou nome(s) do(s) host(s) para acesso remoto (separado por vírgula e deixar em branco para <i>qualquer um</i>)';
+$wb['remote_user_error_ips'] = 'Ao menos um endereço IP ou nome do host informado é inválido.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_remote_user_list.lng b/interface/web/admin/lib/lang/br_remote_user_list.lng
index f95d782ce6..0f0381a6f4 100644
--- a/interface/web/admin/lib/lang/br_remote_user_list.lng
+++ b/interface/web/admin/lib/lang/br_remote_user_list.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['list_head_txt'] = 'Usuários remotos';
-$wb['list_desc_txt'] = '';
+$wb['list_desc_txt'] = 'Usuário remoto';
 $wb['add_new_record_txt'] = 'Adicionar novo usuário';
-$wb['parent_remote_userid_txt'] = 'ID';
-$wb['username_txt'] = 'Nome do usuário';
+$wb['parent_remote_userid_txt'] = 'ID do usuário';
+$wb['username_txt'] = 'Nome';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server.lng b/interface/web/admin/lib/lang/br_server.lng
index 930b990f42..a896d0b49a 100644
--- a/interface/web/admin/lib/lang/br_server.lng
+++ b/interface/web/admin/lib/lang/br_server.lng
@@ -2,15 +2,15 @@
 $wb['config_txt'] = 'Configuração';
 $wb['server_name_txt'] = 'Nome do servidor';
 $wb['mail_server_txt'] = 'Servidor de e-mails';
-$wb['web_server_txt'] = 'Servidor de páginas';
+$wb['web_server_txt'] = 'Servidor web';
 $wb['dns_server_txt'] = 'Servidor dns';
-$wb['file_server_txt'] = 'Servidor de arquivo';
+$wb['file_server_txt'] = 'Servidor ftp';
 $wb['db_server_txt'] = 'Servidor de banco de dados';
-$wb['vserver_server_txt'] = 'Servidor virtual';
-$wb['active_txt'] = 'Ativo';
-$wb['mirror_server_id_txt'] = 'É um espelho de servidor?';
-$wb['- None -'] = '- Nenhum -';
+$wb['vserver_server_txt'] = 'Servidor de virtualização';
 $wb['proxy_server_txt'] = 'Servidor proxy';
-$wb['firewall_server_txt'] = 'Servidor de firewall';
-$wb['xmpp_server_txt'] = 'Servidor XMPP';
+$wb['firewall_server_txt'] = 'Servidor firewall';
+$wb['active_txt'] = 'Ativo';
+$wb['mirror_server_id_txt'] = 'É um espelho de servidor';
+$wb['- None -'] = '-Nenhum-';
+$wb['xmpp_server_txt'] = 'Servidor xmpp';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 25ffb06996..f57a2310f2 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -1,303 +1,303 @@
 <?php
-$wb['jailkit_chroot_home_txt'] = 'Raiz do chroot jailkit';
-$wb['jailkit_chroot_app_sections_txt'] = 'Aplicações no jailkit chroot (sessões)';
-$wb['jailkit_chroot_app_programs_txt'] = 'Aplicações no jailkit em ambiente chroot';
+$wb['ufw_enable_txt'] = 'Habilitar';
+$wb['ufw_manage_builtins_txt'] = 'Gerenciar regras embutidas';
+$wb['ufw_ipv6_txt'] = 'Habilitar IPv6';
+$wb['ufw_default_input_policy_txt'] = 'Política de entrada padrão';
+$wb['ufw_default_output_policy_txt'] = 'Política de saída padrão';
+$wb['ufw_default_forward_policy_txt'] = 'Política de encaminhamento padrão';
+$wb['ufw_default_application_policy_txt'] = 'Política de aplicações padrão';
+$wb['ufw_log_level_txt'] = 'Nível do log';
+$wb['jailkit_chroot_home_txt'] = 'Diretório em chroot do jailkit';
+$wb['jailkit_chroot_app_sections_txt'] = 'Seções de aplicações em chroot no jailkit';
+$wb['jailkit_chroot_app_programs_txt'] = 'Aplicações em chroot no jailkit';
+$wb['jailkit_chroot_cron_programs_txt'] = 'Tarefas de aplicações em chroot no jailkit';
 $wb['website_path_txt'] = 'Caminho do site';
-$wb['website_symlinks_txt'] = 'Site symlinks: links simbólicos';
-$wb['website_symlinks_rel_txt'] = 'Criar links simbólicos relativos';
-$wb['website_basedir_txt'] = 'Site basedir: Diretório base ';
-$wb['vhost_conf_dir_txt'] = 'Diretório de configuração para vhost';
-$wb['vhost_conf_enabled_dir_txt'] = 'Diretório de configuração para vhost ativo';
+$wb['website_symlinks_txt'] = 'Links simbólicos de sites';
+$wb['website_symlinks_rel_txt'] = 'Adicionar links simbólicos relativos';
+$wb['website_basedir_txt'] = 'Diretório base - site';
+$wb['website_autoalias_txt'] = 'Auto alias - site';
+$wb['website_autoalias_note_txt'] = 'Área reservada:';
+$wb['vhost_conf_dir_txt'] = 'Diretório de configuração vhost';
+$wb['vhost_conf_enabled_dir_txt'] = 'Diretório de configuração vhost habilitado';
 $wb['getmail_config_dir_txt'] = 'Diretório de configuração do getmail';
-$wb['fastcgi_starter_path_txt'] = 'FastCGI: Caminho do diretório do scritp de inicialização';
-$wb['fastcgi_starter_script_txt'] = 'FastCGI: Script de inicialização';
-$wb['fastcgi_alias_txt'] = 'FastCGI: Alias (apelido)';
-$wb['fastcgi_phpini_path_txt'] = 'FastCGI: Caminho do php.ini ';
-$wb['fastcgi_children_txt'] = 'FastCGI: Filhos';
-$wb['fastcgi_max_requests_txt'] = 'FastCGI: Limite de requisições';
-$wb['fastcgi_bin_txt'] = 'Binário do FastCGI';
+$wb['fastcgi_starter_path_txt'] = 'Caminho de inicialização do FastCGI';
+$wb['fastcgi_starter_script_txt'] = 'Script de inicialização do FastCGI';
+$wb['fastcgi_alias_txt'] = 'Alias FastCGI';
+$wb['fastcgi_phpini_path_txt'] = 'Caminho do php.ini FastCGI';
+$wb['fastcgi_children_txt'] = 'Processos filhos do FastCGI';
+$wb['fastcgi_max_requests_txt'] = 'Limite de requisições do FastCGI';
+$wb['fastcgi_bin_txt'] = 'Binário FastCGI';
 $wb['module_txt'] = 'Módulo';
-$wb['maildir_path_txt'] = 'Caminho do diretório maildir';
+$wb['maildir_path_txt'] = 'Caminho do maildir';
 $wb['maildir_format_txt'] = 'Formato do maildir';
-$wb['homedir_path_txt'] = 'Caminho do diretório home';
+$wb['homedir_path_txt'] = 'Caminho do homedir';
+$wb['dkim_path_txt'] = 'Caminho do DKIM';
 $wb['mailuser_uid_txt'] = 'UID do mailuser';
 $wb['mailuser_gid_txt'] = 'GID do mailuser';
 $wb['mailuser_name_txt'] = 'Nome do mailuser';
-$wb['mailuser_group_txt'] = 'Grupo do mailuser';
-$wb['mailbox_virtual_uidgid_maps_txt'] = 'Mapear UID Linux de sites para mailbox';
-$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'Configuração única para sites e servidor de e-mails permitida apenas em configuração de servidor individual';
-$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'UID não pode ser mapeado em uma configuração multiservidor.';
-$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Mapeamento de UID só pode ser usada com o dovecot.';
-$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Mapeamento de UID não pode ser modificada se já existirem e-mails cadastrados.';
+$wb['mailuser_group_txt'] = 'Grupo do maildir';
+$wb['mailbox_virtual_uidgid_maps_txt'] = 'Usar uid linux para sites e conta de e-mail';
+$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'Permitido apenas para configuração de servidor único.';
+$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'O uid linux não pode ser mapeado em configuração multi-servidor.';
+$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'O uid linux não pode ser usado com o dovecot.';
+$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'O uid não pode ser alterado se já existir contas de e-mail.';
 $wb['relayhost_txt'] = 'Servidor de retransmissão';
-$wb['relayhost_user_txt'] = 'Usuário do servidor de retransmissão';
-$wb['relayhost_password_txt'] = 'Senha do servidor de retransmissão';
-$wb['reject_sender_login_mismatch_txt'] = 'Rejeitar remetente e acesso com erros';
-$wb['mailbox_size_limit_txt'] = 'Limite da conta de e-mail';
-$wb['message_size_limit_txt'] = 'Limite do tamanho máximo das mensagens';
+$wb['relayhost_user_txt'] = 'Usuário de retransmissão';
+$wb['relayhost_password_txt'] = 'Senha do usuário de retransmissão';
+$wb['reject_sender_login_mismatch_txt'] = 'Rejeitar acesso com erro de usuário e/ou senha';
+$wb['mailbox_size_limit_txt'] = 'Limite do tamanho da conta de e-mail';
+$wb['message_size_limit_txt'] = 'Limite do tamanho da mensagem';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['netmask_txt'] = 'Máscara de rede';
+$wb['netmask_txt'] = 'Máscara';
 $wb['gateway_txt'] = 'Gateway';
-$wb['hostname_txt'] = 'Servidor';
-$wb['nameservers_txt'] = 'Servidores dns';
+$wb['hostname_txt'] = 'Nome do host';
+$wb['nameservers_txt'] = 'Servidor(es) dns';
 $wb['auto_network_configuration_txt'] = 'Configuração de rede';
-$wb['ip_address_error_wrong'] = 'Endereço IP inválido!';
-$wb['netmask_error_wrong'] = 'Máscara de rede inválida!';
-$wb['gateway_error_wrong'] = 'Gateway inválido!';
-$wb['hostname_error_empty'] = 'Por favor, insira o servidor.';
-$wb['nameservers_error_empty'] = 'Por favor, insira  o servidor dns.';
-$wb['jailkit_chroot_cron_programs_txt'] = 'Tarefas do cron para aplicações no Jailkit em ambiente chroot';
-$wb['config_dir_txt'] = 'Diretório de configuração';
+$wb['ip_address_error_wrong'] = 'Endereço IP com formato inválido.';
+$wb['netmask_error_wrong'] = 'Máscara de rede com formato inválido.';
+$wb['gateway_error_wrong'] = 'Gateway da rede com formado inválido.';
+$wb['hostname_error_empty'] = 'O nome do host está em branco.';
+$wb['hostname_error_regex'] = 'O nome do host é inválido.';
+$wb['nameservers_error_empty'] = 'O servidor(es) dns está em branco.';
+$wb['config_dir_txt'] = 'Diretório de configurações';
 $wb['init_script_txt'] = 'Nome do script de inicialização do cron';
-$wb['crontab_dir_txt'] = 'Caminho para tabelas de tarefas individuais no cron';
-$wb['wget_txt'] = 'Caminho para o wget';
-$wb['web_user_txt'] = 'Usuário apache';
-$wb['web_group_txt'] = 'Grupo apache';
+$wb['crontab_dir_txt'] = 'Caminho para crontabs individuais.';
+$wb['wget_txt'] = 'Caminho do binário wget';
+$wb['web_user_txt'] = 'Usuário do apache';
+$wb['web_group_txt'] = 'Grupo do apache';
 $wb['security_level_txt'] = 'Nível de segurança';
-$wb['loglevel_txt'] = 'Nível do log (Loglevel)';
-$wb['apps_vhost_port_txt'] = 'Porta para apps-vhost';
-$wb['apps_vhost_ip_txt'] = 'IP para apps-vhost';
-$wb['apps_vhost_servername_txt'] = 'Domínio para apps-vhost';
-$wb['bind_user_txt'] = 'Usuário bind';
-$wb['bind_group_txt'] = 'Grupo bind';
-$wb['bind_zonefiles_dir_txt'] = 'Diretório de arquivos de zona do bind';
+$wb['loglevel_txt'] = 'Nível do log';
+$wb['apps_vhost_port_txt'] = 'Porta dos apps-vhost';
+$wb['apps_vhost_ip_txt'] = 'IP dos apps-vhost';
+$wb['apps_vhost_servername_txt'] = 'Domínio dos apps-vhost';
+$wb['bind_user_txt'] = 'Usuário do bind';
+$wb['bind_group_txt'] = 'Grupo do bind';
+$wb['bind_zonefiles_dir_txt'] = 'Diretório de zonas';
 $wb['named_conf_path_txt'] = 'Caminho do named.conf';
 $wb['bind_user_error_empty'] = 'Usuário do bind está em branco.';
 $wb['bind_group_error_empty'] = 'Grupo do bind está em branco.';
-$wb['bind_zonefiles_dir_error_empty'] = 'Diretório de arquivos de zona está em branco.';
-$wb['named_conf_path_error_empty'] = 'Caminho do named.conf.';
+$wb['bind_zonefiles_dir_error_empty'] = 'Diretório de zonas está em branco.';
+$wb['named_conf_path_error_empty'] = 'Caminho do named.conf está em branco.';
 $wb['named_conf_local_path_error_empty'] = 'Caminho do named.conf.local está em branco.';
-$wb['mail_filter_syntax_txt'] = 'Sintaxe do mailfilter';
-$wb['pop3_imap_daemon_txt'] = 'Serviço POP3/IMAP';
-$wb['php_open_basedir_txt'] = 'Diretório PHP open_basedir';
-$wb['php_open_basedir_error_empty'] = 'Diretório PHP open_basedir está em branco.';
+$wb['mail_filter_syntax_txt'] = 'Sintaxe do filtro de e-mail';
+$wb['pop3_imap_daemon_txt'] = 'Daemon POP3/IMAP';
+$wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
+$wb['php_open_basedir_error_empty'] = 'O diretório do open_basedir PHP está em branco.';
 $wb['htaccess_allow_override_txt'] = 'Diretiva .htaccess AllowOverride';
 $wb['htaccess_allow_override_error_empty'] = 'Diretiva .htaccess AllowOverride está em branco.';
-$wb['awstats_conf_dir_txt'] = 'Diretório de configuração do awstats';
-$wb['awstats_data_dir_txt'] = 'Diretório de dados do awstats';
+$wb['awstats_conf_dir_txt'] = 'Pasta de configuração do awstats';
+$wb['awstats_data_dir_txt'] = 'Pasta de dados do awstats';
 $wb['awstats_pl_txt'] = 'Script awstats.pl';
 $wb['awstats_buildstaticpages_pl_txt'] = 'Script awstats_buildstaticpages.pl';
 $wb['backup_dir_txt'] = 'Diretório de backup';
+$wb['backup_tmp_txt'] = 'Diretório para backup temporário quando utilizado zip';
 $wb['named_conf_local_path_txt'] = 'Caminho do named.conf.local';
-$wb['php_ini_path_cgi_txt'] = 'Caminho do php.ini CGI';
-$wb['php_ini_path_apache_txt'] = 'Caminho do php.ini apache';
-$wb['check_apache_config_txt'] = 'Testar a configuração do apache ao reiniciar';
-$wb['network_config_warning_txt'] = 'A configuração de rede só está disponível para servidores Debian e Ubuntu. Não ative esta configuração se a adaptadora de rede no sistema for diferente de eth0.';
-$wb['CA_path_txt'] = 'Caminho do CA';
-$wb['CA_pass_txt'] = 'Senha do CA';
-$wb['ufw_enable_txt'] = 'Habilitar';
-$wb['ufw_manage_builtins_txt'] = 'Gerenciar regras embutidas';
-$wb['ufw_ipv6_txt'] = 'Habilitar IPv6';
-$wb['ufw_default_input_policy_txt'] = 'Política padrão para entrada';
-$wb['ufw_default_output_policy_txt'] = 'Política padrão para saída';
-$wb['ufw_default_forward_policy_txt'] = 'Política padrão para encaminhamento';
-$wb['ufw_default_application_policy_txt'] = 'Política padrão para aplicações';
-$wb['ufw_log_level_txt'] = 'Nível do log';
-$wb['fastcgi_config_syntax_txt'] = 'Sintaxe das configurações FastCGI';
-$wb['server_type_txt'] = 'Tipo de servidor';
-$wb['nginx_vhost_conf_dir_txt'] = 'Diretório de configuração do vhost nginx';
-$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Configuração do diretório do vhost nginx habilitada';
+$wb['php_ini_path_cgi_txt'] = 'Caminho do php.ini do cgi';
+$wb['php_ini_path_apache_txt'] = 'Caminho do php.ini do apache';
+$wb['check_apache_config_txt'] = 'Verificar as configurações do apache quando reiniciar';
+$wb['network_config_warning_txt'] = 'A configuração de rede está disponível apenas para servidores Debian e Ubuntu. Não habilite esta opção se a interface de rede for diferente de eth0.';
+$wb['CA_path_txt'] = 'Caminho da CA';
+$wb['CA_pass_txt'] = 'Senha da CA';
+$wb['fastcgi_config_syntax_txt'] = 'Sintaxe das configurações do FastCGI';
+$wb['backup_mode_txt'] = 'Modo do backup';
+$wb['backup_mode_userzip'] = 'Arquivos de backup com propriedade do usuário web e compactados como zip';
+$wb['backup_mode_rootgz'] = 'Todos os arquivos no diretório web com proprietário root';
+$wb['tmpdir_path_error_empty'] = 'Caminho do diretório temporário está em branco.';
+$wb['tmpdir_path_error_regex'] = 'Caminho do diretório temporário é inválido.';
+$wb['backup_time_txt'] = 'Hora do backup';
+$wb['server_type_txt'] = 'Tipo do servidor';
+$wb['nginx_vhost_conf_dir_txt'] = 'Diretório de configurações vhost do nginx';
+$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Diretório de configurações vhost do nginx habilitado';
 $wb['nginx_user_txt'] = 'Usuário nginx';
-$wb['nginx_group_txt'] = 'Grupo nginx';
-$wb['nginx_cgi_socket_txt'] = 'Soquete CGI nginx';
+$wb['nginx_group_txt'] = 'Grupo do nginx';
+$wb['nginx_cgi_socket_txt'] = 'Socket CGI do nginx';
 $wb['backup_dir_error_empty'] = 'Diretório de backup está em branco.';
 $wb['maildir_path_error_empty'] = 'Caminho do maildir está em branco.';
 $wb['homedir_path_error_empty'] = 'Caminho do homedir está em branco.';
-$wb['mailuser_uid_error_empty'] = 'UID do mailuser está em branco.';
-$wb['mailuser_gid_error_empty'] = 'GID do mailuser está em branco.';
-$wb['mailuser_name_error_empty'] = 'Nome do mailuser está em branco.';
-$wb['mailuser_group_error_empty'] = 'Grupo do mailuser está em branco.';
-$wb['getmail_config_dir_error_empty'] = 'Configuração do diretório getmail está em branco.';
-$wb['website_basedir_error_empty'] = 'Diretório padrão (basedir) do site está em branco.';
-$wb['website_path_error_empty'] = 'Caminho do diretório base (basedir) do site está em branco.';
-$wb['website_symlinks_error_empty'] = 'Links simbólicos para site está em branco.';
-$wb['vhost_conf_dir_error_empty'] = 'Configuração do diretório para vhost está em branco.';
-$wb['vhost_conf_enabled_dir_error_empty'] = 'Configuração habilitada do diretório vhost está em branco.';
-$wb['nginx_vhost_conf_dir_error_empty'] = 'Configuração do diretório vhost do nginx está em branco.';
-$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Configuração habilitada do diretório vhost do nginx está em branco.';
-$wb['apache_user_error_empty'] = 'Usuário apache está em branco.';
-$wb['apache_group_error_empty'] = 'Grupo apache está em branco.';
-$wb['nginx_user_error_empty'] = 'Usuário nginx está em branco.';
-$wb['nginx_group_error_empty'] = 'Grupo nginx está em branco.';
-$wb['php_ini_path_apache_error_empty'] = 'Caminho do php.ini apache está em branco.';
+$wb['mailuser_uid_error_empty'] = 'UID do mailuser UID está em branco.';
+$wb['mailuser_gid_error_empty'] = 'GID do mailuser GID está em branco.';
+$wb['mailuser_name_error_empty'] = 'Usuário do mailuser está em branco.';
+$wb['mailuser_group_error_empty'] = 'Grupo do mailuser Group está em branco.';
+$wb['getmail_config_dir_error_empty'] = 'Diretório de configurações do getmail está em branco.';
+$wb['website_basedir_error_empty'] = 'Diretório basedir de sites está em branco.';
+$wb['website_path_error_empty'] = 'Caminho do site está em branco.';
+$wb['website_symlinks_error_empty'] = 'Links simbólicos de site está em branco.';
+$wb['vhost_conf_dir_error_empty'] = 'Diretório de configurações do vhost está em branco.';
+$wb['vhost_conf_enabled_dir_error_empty'] = 'Diretório de configurações vhost habilitadas está em branco.';
+$wb['nginx_vhost_conf_dir_error_empty'] = 'Diretório de configurações vhost do nginx está em branco.';
+$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Diretório de configurações vhost habilitadas do nginx está em branco.';
+$wb['apache_user_error_empty'] = 'Usuário do apache está em branco.';
+$wb['apache_group_error_empty'] = 'Grupo do apache está em branco.';
+$wb['nginx_user_error_empty'] = 'Usuário do nginx está em branco.';
+$wb['nginx_group_error_empty'] = 'Grupo do nginx está em branco.';
+$wb['php_ini_path_apache_error_empty'] = 'Caminho do php.ini do apache está em branco.';
 $wb['php_ini_path_cgi_error_empty'] = 'Caminho do php.ini CGI está em branco.';
-$wb['nginx_cgi_socket_empty'] = 'Soquete do CGI nginx está em branco.';
-$wb['apps_vhost_port_error_empty'] = 'Porta de apps-vhost está em branco.';
-$wb['apps_vhost_ip_error_empty'] = 'IP para apps-vhost está em branco.';
-$wb['fastcgi_starter_path_error_empty'] = 'Caminho do programa de inicialização do FastCGI está em branco.';
+$wb['nginx_cgi_socket_empty'] = 'O socket CGI do nginx está em branco.';
+$wb['apps_vhost_port_error_empty'] = 'Portas de apps-vhost está em branco.';
+$wb['apps_vhost_ip_error_empty'] = 'IP do apps-vhost está em branco.';
+$wb['fastcgi_starter_path_error_empty'] = 'Caminho do script de inicialização do FastCGI está em branco.';
 $wb['fastcgi_starter_script_error_empty'] = 'Script de inicialização do FastCGI está em branco.';
-$wb['fastcgi_alias_error_empty'] = 'Alias (apelido) do FastCGI está em branco.';
-$wb['fastcgi_phpini_path_error_empty'] = 'Caminho do php.ini do FastCGI está em branco.';
-$wb['fastcgi_children_error_empty'] = 'Filhos do FastCGI está em branco.';
-$wb['fastcgi_max_requests_error_empty'] = 'Limite de requisições do FastCGI está em branco.';
-$wb['fastcgi_bin_error_empty'] = 'Binário do FastCGI está em branco.';
-$wb['jailkit_chroot_home_error_empty'] = 'Diretório raiz do jailkit está em branco.';
-$wb['jailkit_chroot_app_sections_error_empty'] = 'Aplicações no jailkit chroot (sessões) está em branco.';
-$wb['jailkit_chroot_app_programs_error_empty'] = 'Aplicações no jailkit em ambiente chroot está em branco.';
-$wb['jailkit_chroot_cron_programs_error_empty'] = 'Tarefas no cron de aplicações no jailkit em ambiente chroot está em branco.';
-$wb['vlogger_config_dir_error_empty'] = 'Diretório de configurações está em branco.';
-$wb['cron_init_script_error_empty'] = 'Nome do script de inicialização do cron está em branco.';
-$wb['crontab_dir_error_empty'] = 'Caminho para tabelas de tarefas individuais no cron está em branco.';
-$wb['cron_wget_error_empty'] = 'Caminho do programa wget está em branco.';
-$wb['php_fpm_init_script_txt'] = 'Script de inicialização do PHP-FPM';
-$wb['php_fpm_init_script_error_empty'] = 'Script de inicialização do PHP-FPM está em branco.';
-$wb['php_fpm_ini_path_txt'] = 'Caminho do php.ini do PHP-FPM';
-$wb['php_fpm_ini_path_error_empty'] = 'Caminho do php.ini do PHP-FPM está em branco.';
-$wb['php_fpm_pool_dir_txt'] = 'Diretório de faixas (pool) do PHP-FPM';
-$wb['php_fpm_pool_dir_error_empty'] = 'Diretório de faixas (pool) do PHP-FPM está em branco.';
-$wb['php_fpm_start_port_txt'] = 'Porta de inicialização do PHP-FPM';
-$wb['php_fpm_start_port_error_empty'] = 'Porta de inicialização do PHP-FPM está em branco.';
-$wb['php_fpm_socket_dir_txt'] = 'Diretório do soquete PHP-FPM';
-$wb['php_fpm_socket_dir_error_empty'] = 'Diretório do soquete PHP-FPM está em branco.';
-$wb['try_rescue_txt'] = 'Habilitar serviço de monitoramento e reiniciar em caso de falha';
-$wb['do_not_try_rescue_mysql_txt'] = 'Desabilitar monitoramento do MySQL';
-$wb['do_not_try_rescue_mail_txt'] = 'Desabilitar monitoramento do servidor de e-mails';
-$wb['rescue_description_txt'] = '<b>Informação:</b> Se você deseja desligar o MySQL deverá selecionar \'Desabilitar monitoramento do MySQL\' e aguardar em torno de 2 a 3 minutos...<br>se não aguardar em torno de 2 a 3 minutos, o serviço tentará reiniciar o MySQL!';
+$wb['fastcgi_alias_error_empty'] = 'Alias do FastCGI está em branco.';
+$wb['fastcgi_phpini_path_error_empty'] = 'O caminho do php.ini do FastCGI está em branco.';
+$wb['fastcgi_children_error_empty'] = 'Os processos filhos do FastCGI está em branco.';
+$wb['fastcgi_max_requests_error_empty'] = 'O limite de requisições FastCGI está em branco.';
+$wb['fastcgi_bin_error_empty'] = 'O binário do FastCGI está em branco.';
+$wb['jailkit_chroot_home_error_empty'] = 'O home em chroot do jailkit está em branco.';
+$wb['jailkit_chroot_app_sections_error_empty'] = 'Seções de aplicações no jailkit está em branco.';
+$wb['jailkit_chroot_app_programs_error_empty'] = 'Aplicações no jailkit está em branco.';
+$wb['jailkit_chroot_cron_programs_error_empty'] = 'Tarefas de aplicações no jailkit está em branco.';
+$wb['vlogger_config_dir_error_empty'] = 'Diretório de configuração está em branco.';
+$wb['cron_init_script_error_empty'] = 'Script de inicialização do cron está em branco.';
+$wb['crontab_dir_error_empty'] = 'Caminho para tarefas individuais no cron está em branco.';
+$wb['cron_wget_error_empty'] = 'Caminho do binário wget está em branco.';
+$wb['php_fpm_init_script_txt'] = 'Script de inicialização do php-fpm';
+$wb['php_fpm_init_script_error_empty'] = 'Script de inicialização do php-fpm está em branco.';
+$wb['php_fpm_ini_path_txt'] = 'Caminho do php.ini do php-fpm';
+$wb['php_fpm_ini_path_error_empty'] = 'Caminho do php.ini do php-fpm está em branco.';
+$wb['php_fpm_pool_dir_txt'] = 'Diretório de faixas do php-fpm';
+$wb['php_fpm_pool_dir_error_empty'] = 'Diretório de faixas do php-fpm está em branco.';
+$wb['php_fpm_start_port_txt'] = 'Porta do php-fpm';
+$wb['php_fpm_start_port_error_empty'] = 'Porta do php-fpm está em branco.';
+$wb['php_fpm_socket_dir_txt'] = 'Diretório do socket php-fpm';
+$wb['php_fpm_socket_dir_error_empty'] = 'O diretório do socket php-fpm está em branco.';
+$wb['try_rescue_txt'] = 'Habilitar monitoramento de reiniciar em caso de falha';
+$wb['do_not_try_rescue_httpd_txt'] = 'Desabilitar monitoramento do httpd';
+$wb['do_not_try_rescue_mongodb_txt'] = 'Desabilitar monitoramento do mongodb';
+$wb['do_not_try_rescue_mysql_txt'] = 'Desabilitar monitoramento do mysql';
+$wb['do_not_try_rescue_mail_txt'] = 'Desabilitar monitoramento de e-mail';
+$wb['rescue_description_txt'] = '<b>Informação:</b> Se o serviço mysql for desligado e estiver selecionado "Desabilitar monitoramento do mysql" aguarde entre 2 e 3 minutos sem abandonar a aba. <br>Se não aguardar o sistema de recuperação de falhas tentará reiniciar o mysql!';
 $wb['enable_sni_txt'] = 'Habilitar SNI';
-$wb['do_not_try_rescue_httpd_txt'] = 'Desabilitar monitoramento do HTTPD';
-$wb['set_folder_permissions_on_update_txt'] = 'Configurar permissões de pasta na atualização';
-$wb['add_web_users_to_sshusers_group_txt'] = 'Adicionar usuários de site (web) para grupo -sshusers-';
-$wb['connect_userid_to_webid_txt'] = 'Mapear userID Linux para webID';
-$wb['connect_userid_to_webid_start_txt'] = 'Iniciar ID para userID/webID se conectar';
-$wb['website_autoalias_txt'] = 'Auto apelido (alias) para sites';
-$wb['website_autoalias_note_txt'] = 'Área reservada:';
-$wb['backup_mode_txt'] = 'Modo do backup';
-$wb['backup_mode_userzip'] = 'Arquivos de backup com propriedade do usuário web e compactados como zip';
-$wb['backup_mode_rootgz'] = 'Todos os arquivos no diretório web com proprietário root';
-$wb['realtime_blackhole_list_txt'] = 'RBL em tempo real';
-$wb['realtime_blackhole_list_note_txt'] = '(Separar RBL\'s por vírgulas)';
+$wb['set_folder_permissions_on_update_txt'] = 'Configurar permissões de pasta quando atualizar';
+$wb['add_web_users_to_sshusers_group_txt'] = 'Adicionar novos usuários web para o grupo ssh';
+$wb['connect_userid_to_webid_txt'] = 'Conectar o UID do usuário no sistema para webID';
+$wb['connect_userid_to_webid_start_txt'] = 'Conexão do ID inicial do usuário com o webID';
+$wb['realtime_blackhole_list_txt'] = 'Lista RBL em tempo real';
+$wb['realtime_blackhole_list_note_txt'] = '(separar as RBLs com vírgulas)';
 $wb['ssl_settings_txt'] = 'Configurações SSL';
 $wb['permissions_txt'] = 'Permissões';
-$wb['php_settings_txt'] = 'Configurações PHP';
-$wb['apps_vhost_settings_txt'] = 'Configurações apps-vhost';
-$wb['awstats_settings_txt'] = 'Configurações awstats';
+$wb['php_settings_txt'] = 'Configurações php';
+$wb['apps_vhost_settings_txt'] = 'Configurações de apps vhost';
+$wb['awstats_settings_txt'] = 'Configurações do awstats';
 $wb['firewall_txt'] = 'Firewall';
-$wb['mailbox_quota_stats_txt'] = 'Estatísticas de cota das contas de e-mail';
-$wb['enable_ip_wildcard_txt'] = 'Habilitar curingas (*) para IP';
+$wb['mailbox_quota_stats_txt'] = 'Estatísticas das cotas das contas de e-mail';
+$wb['enable_ip_wildcard_txt'] = 'Habilitar curingas de IP (*)';
 $wb['web_folder_protection_txt'] = 'Tornar pastas web imutáveis (atributos estendidos)';
-$wb['overtraffic_notify_admin_txt'] = 'Enviar notificação de cota de tráfego excedida para o administrador';
-$wb['overtraffic_notify_client_txt'] = 'Enviar notificação de cota de tráfego excedida para o cliente';
-$wb['rbl_error_regex'] = 'Por favor, insira um nome de servidor válido para RBL.';
-$wb['overquota_notify_admin_txt'] = 'Enviar alertas de cota para o administrador';
-$wb['overquota_notify_client_txt'] = 'Enviar alertas de cota para o cliente';
-$wb['overquota_notify_onok_txt'] = 'Enviar mensagem de cota OK para o cliente';
-$wb['overquota_notify_freq_txt'] = 'Enviar alertas de cota a cada N dias';
-$wb['overquota_notify_freq_note_txt'] = '0 = enviar mensagem apenas uma vez, não repetir';
-$wb['admin_notify_events_txt'] = 'Enviar e-mail para o admin quando iniciando com o seguinte nível';
-$wb['no_notifications_txt'] = 'Sem Notificações';
-$wb['monit_url_txt'] = 'URL do Monit';
-$wb['monit_user_txt'] = 'Usuário do Monit';
-$wb['monit_password_txt'] = 'Senha do Monit';
-$wb['monit_url_error_regex'] = 'URL do Monit inválida.';
+$wb['overtraffic_notify_admin_txt'] = 'Enviar notificação de tráfego excedido para o administrador';
+$wb['overtraffic_notify_client_txt'] = 'Enviar notificação de tráfego excedido para o cliente';
+$wb['rbl_error_regex'] = 'Por favor, nomes de host válidos para RBLs.';
+$wb['overquota_notify_admin_txt'] = 'Enviar alerta da cota para o administrador';
+$wb['overquota_notify_client_txt'] = 'Enviar alerta da cota para o cliente';
+$wb['overquota_notify_onok_txt'] = 'Enviar mensagem da cota para o cliente';
+$wb['overquota_notify_freq_txt'] = 'Enviar alerta da cota a cada X dias';
+$wb['overquota_notify_freq_note_txt'] = '0 = enviar mensagem apenas uma vez, sem repetir';
+$wb['admin_notify_events_txt'] = 'Enviar e-mail para o administrador iniciando com o seguinte nível';
+$wb['no_notifications_txt'] = 'Sem notificações';
+$wb['monit_url_txt'] = 'URL de monitoramento do monit';
+$wb['monit_user_txt'] = 'Usuário do monit';
+$wb['monit_password_txt'] = 'Senha do monit';
+$wb['monit_url_error_regex'] = 'URL do monit é inválida';
 $wb['monit_url_note_txt'] = 'Área reservada:';
-$wb['munin_url_txt'] = 'URL do Munin';
-$wb['munin_user_txt'] = 'Usuário do Munin';
-$wb['munin_password_txt'] = 'Senha do Munin';
-$wb['munin_url_error_regex'] = 'URL do Munin inválida.';
+$wb['munin_url_txt'] = 'URL do munin';
+$wb['munin_user_txt'] = 'Usuário do munin';
+$wb['munin_password_txt'] = 'Senda do munin';
+$wb['munin_url_error_regex'] = 'URL do munin e inválida';
 $wb['munin_url_note_txt'] = 'Área reservada:';
-$wb['dkim_path_txt'] = 'Caminho do DKIM';
-$wb['backup_delete_txt'] = 'Remover backups do domínio/site';
 $wb['v6_prefix_txt'] = 'Prefixo IPv6';
-$wb['vhost_rewrite_v6_txt'] = 'Reescrever prefixo IPv6 no espelho';
-$wb['v6_prefix_length'] = 'Prefixo longo definido de acordo com IPv6';
-$wb['backup_dir_is_mount_txt'] = 'Diretório de backup está montado?';
-$wb['monitor_system_updates_txt'] = 'Verificar por atualizações Linux';
-$wb['hostname_error_regex'] = 'Nome do servidor é inválido.';
-$wb['invalid_apache_user_txt'] = 'Usuário do Apache é inválido.';
-$wb['invalid_apache_group_txt'] = 'Grupo do Apache é inválido.';
+$wb['vhost_rewrite_v6_txt'] = 'Reescrever IPv6 no espelho';
+$wb['v6_prefix_length'] = 'O prefixo é muito longo de acordo com as definições IPv6.';
+$wb['backup_dir_is_mount_txt'] = 'O diretório de backup está montando?';
+$wb['backup_dir_mount_cmd_txt'] = 'Comando mount, se o diretório não está montado';
+$wb['backup_delete_txt'] = 'Remover backups de domínios/site';
+$wb['overquota_db_notify_admin_txt'] = 'Enviar alerta da cota do banco de dados para o administrador';
+$wb['overquota_db_notify_client_txt'] = 'Enviar alerta da cota do banco de dados para o cliente';
+$wb['monitor_system_updates_txt'] = 'Verificar por atualizações do sistema';
+$wb['php_handler_txt'] = 'Manipulador padrão do php';
+$wb['php_fpm_incron_reload_txt'] = 'Instale o arquivo de disparo do incron para recarregar o php-fpm.';
+$wb['disabled_txt'] = 'Desabilitado';
+$wb['dkim_strength_txt'] = 'Dificuldade do DKIM';
+$wb['monitor_system_updates_txt'] = 'Verificar por atualizações do sistema';
+$wb['invalid_apache_user_txt'] = 'Usuário do apache é inválido.';
+$wb['invalid_apache_group_txt'] = 'Grupo do apache é inválido.';
 $wb['backup_dir_error_regex'] = 'Diretório de backup é inválido.';
-$wb['maildir_path_error_regex'] = 'Caminho do Maildir é inválido.';
-$wb['homedir_path_error_regex'] = 'Caminho do Home é inválido.';
-$wb['mailuser_name_error_regex'] = 'Nome do Mailuser é inválido.';
-$wb['mailuser_group_name_error_regex'] = 'Grupo do Mailuser é inválido.';
-$wb['mailuser_uid_error_range'] = 'A UID do Mailuser deve ser >= 2000';
-$wb['mailuser_gid_error_range'] = 'A GID do Mailuser deve ser >= 2000';
-$wb['getmail_config_dir_error_regex'] = 'Configuração do diretório do getmail inválida.';
-$wb['website_basedir_error_regex'] = 'Diretório base (basedir) para sites é inválido.';
-$wb['website_symlinks_error_regex'] = 'Links simbólicos para sites é inválido.';
-$wb['vhost_conf_dir_error_regex'] = 'Diretório de configurações para vhost é inválido.';
-$wb['vhost_conf_enabled_dir_error_regex'] = 'Diretório de configurações para vhost habilitado é inválido.';
+$wb['maildir_path_error_regex'] = 'Caminho do maildir é inválido.';
+$wb['homedir_path_error_regex'] = 'Caminho do homedir é inválido.';
+$wb['mailuser_name_error_regex'] = 'Caminho do mailuser é inválido.';
+$wb['mailuser_group_name_error_regex'] = 'Grupo do mailuser é inválido.';
+$wb['mailuser_uid_error_range'] = 'A UID do mailuser deve ser >= 2000.';
+$wb['mailuser_gid_error_range'] = 'A GID do mailuser deve ser >= 2000.';
+$wb['getmail_config_dir_error_regex'] = 'Diretório de configurações do getmail é inválido.';
+$wb['website_basedir_error_regex'] = 'Caminho do basedir para sites é inválido. Comprimento mínimo 5 caracteres.';
+$wb['website_symlinks_error_regex'] = 'Links simbólicos para site são inválidos.';
+$wb['vhost_conf_dir_error_regex'] = 'Diretório de configurações vhost é inválido.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Diretório de configuração vhost habilitado é inválido.';
 $wb['nginx_vhost_conf_dir_error_regex'] = 'Diretório de configurações do nginx é inválido.';
-$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Diretório de configurações nginx habilitado é inválido.';
-$wb['ca_path_error_regex'] = 'Caminho do CA é inválido.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Diretório de configurações do nginx habilitado é inválido.';
+$wb['ca_path_error_regex'] = 'Caminho da CA é inválido.';
 $wb['invalid_nginx_user_txt'] = 'Usuário do nginx é inválido.';
 $wb['invalid_nginx_group_txt'] = 'Grupo do nginx é inválido.';
-$wb['php_ini_path_apache_error_regex'] = 'Caminho do php.ini apache é inválido.';
-$wb['php_ini_path_cgi_error_regex'] = 'Caminho do php.ini CGI é inválido.';
-$wb['php_fpm_init_script_error_regex'] = 'Caminho do script de inicialização do PHP-FPM é inválido.';
-$wb['php_fpm_ini_path_error_regex'] = 'Caminho do php.ini PHP-FPM é inválido.';
-$wb['php_fpm_pool_dir_error_regex'] = 'Diretório de faixas (pool) PHP-FPM é inválido.';
-$wb['php_fpm_socket_dir_error_regex'] = 'Diretório do sqouete PHP-FPM é inválido.';
-$wb['php_open_basedir_error_regex'] = 'Diretório base (open_basedir) PHP é inválido.';
-$wb['awstats_data_dir_empty'] = 'Diretório de dados do awstats está em branco.';
-$wb['awstats_data_dir_error_regex'] = 'Diretório de dados do do awstats é inválido.';
-$wb['awstats_pl_empty'] = 'Configuração do script awstats.pl está em branco.';
-$wb['awstats_pl_error_regex'] = 'Caminho do script awstats.pl é inválido.';
-$wb['awstats_buildstaticpages_pl_empty'] = 'Script awstats_buildstaticpages.pl está em branco.';
-$wb['awstats_buildstaticpages_pl_error_regex'] = 'Camindho do script awstats_buildstaticpages.pl é inválido.';
-$wb['invalid_bind_user_txt'] = 'Usuário bind é inválido.';
-$wb['invalid_bind_group_txt'] = 'Grupo bind é inválido.';
-$wb['bind_zonefiles_dir_error_regex'] = 'Diretório de zonas do bind é inválido.';
-$wb['named_conf_path_error_regex'] = 'Caminho do named.conf é inválido.';
-$wb['named_conf_local_path_error_regex'] = 'Caminho do named.conf.local é inválido.';
-$wb['fastcgi_starter_path_error_regex'] = 'Caminho do scritp de inicialização FASTCGI é inválido.';
-$wb['fastcgi_starter_script_error_regex'] = 'Script de inicizalização FASTCGI é inválido.';
-$wb['fastcgi_alias_error_regex'] = 'Apelido (alias) do FASTCGI é inválido.';
-$wb['fastcgi_phpini_path_error_regex'] = 'Caminho do FASTCGI é inválido.';
-$wb['fastcgi_bin_error_regex'] = 'Binário do FASTCGI é inválido.';
-$wb['jailkit_chroot_home_error_regex'] = 'Raiz do chroot jailkit inválida.';
-$wb['jailkit_chroot_app_sections_error_regex'] = 'Aplicações no jailkit chroot (sessões) são inválidas.';
-$wb['jailkit_chroot_app_programs_error_regex'] = 'Aplicações no jailkit em ambiente chroot são inválidas.';
-$wb['jailkit_chroot_cron_programs_error_regex'] = 'Programas no cron em ambiente chroot jailkit são inválidos.';
-$wb['vlogger_config_dir_error_regex'] = 'Diretório de configuração do vlogger é inválido.';
-$wb['cron_init_script_error_regex'] = 'Script de inicialização do Cron é inválido.';
-$wb['crontab_dir_error_regex'] = 'Diretório para tabelas de tarefas individuais no cron é inválido.';
-$wb['cron_wget_error_regex'] = 'Caminho do wget para cron é inválido.';
+$wb['php_ini_path_apache_error_regex'] = 'Caminho do php.ini do apache é inválido.';
+$wb['php_ini_path_cgi_error_regex'] = 'Caminho do php.ini do cgi é inválido.';
+$wb['php_fpm_init_script_error_regex'] = 'Script de inicialização do php-fpm é inválido.';
+$wb['php_fpm_ini_path_error_regex'] = 'Caminho de inicialização do php-fpm é inválido.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Caminho do diretório de faixas do php-fpm é inválido.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Caminho do diretório de socket do php-fpm é inválido.';
+$wb['php_open_basedir_error_regex'] = 'Caminho do open_basedir do php é inválido.';
+$wb['awstats_data_dir_empty'] = 'O diretório de dados do awstats está em branco.';
+$wb['awstats_data_dir_error_regex'] = 'O diretório de dados do awstats é inválido.';
+$wb['awstats_pl_empty'] = 'A configuração do awstats.pl está em branco.';
+$wb['awstats_pl_error_regex'] = 'O caminho do awstats.pl é inválido.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'O awstats_buildstaticpages.pl está em branco';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'O caminho do awstats_buildstaticpages.pl é inválido.';
+$wb['invalid_bind_user_txt'] = 'O usuário do bind é inválido.';
+$wb['invalid_bind_group_txt'] = 'O grupo do bind é inválido.';
+$wb['bind_zonefiles_dir_error_regex'] = 'O diretório de zonas do bind é inválido.';
+$wb['named_conf_path_error_regex'] = 'O caminho do named.conf é inválido.';
+$wb['named_conf_local_path_error_regex'] = 'O caminho do named.conf.local é inválido.';
+$wb['fastcgi_starter_path_error_regex'] = 'O caminho do script de inicialização do fastcgi é inválido.';
+$wb['fastcgi_starter_script_error_regex'] = 'O script de inicialização do fastcgi é inválido.';
+$wb['fastcgi_alias_error_regex'] = 'O alias do fastcgi é inválido.';
+$wb['fastcgi_phpini_path_error_regex'] = 'O caminho do fastcgi é inválido.';
+$wb['fastcgi_bin_error_regex'] = 'O binário do fastcgi é inválido.';
+$wb['jailkit_chroot_home_error_regex'] = 'O diretório home em chroot do jailkit é inválido.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'As seções de aplicações no jaikit são inválidas.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'As aplicações em chroot no jailkit são inválidas.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'As tarefas de aplicações em chroot no jailkit são inválidas.';
+$wb['vlogger_config_dir_error_regex'] = 'Diretório de configurações do vlogger é inválido.';
+$wb['cron_init_script_error_regex'] = 'Script de inicialização do cron é inválido.';
+$wb['crontab_dir_error_regex'] = 'Diretório do cron é inválido.';
+$wb['cron_wget_error_regex'] = 'Caminho do wget no cron é inválido.';
 $wb['network_filesystem_txt'] = 'Sistema de arquivos de rede';
-$wb['disable_bind_log_txt'] = 'Desabilitar mensagens de alerta no log para bind9.';
-$wb['apps_vhost_enabled_txt'] = 'Habilitar apps-vhost';
-$wb['do_not_try_rescue_mongodb_txt'] = 'Desabilitar monitoramento do MongoDB';
-$wb['backup_dir_mount_cmd_txt'] = 'Usar o comando mount, se o diretório de backups não estiver montado';
-$wb['overquota_db_notify_admin_txt'] = 'Enviar mensagens de alerta de cota do banco de dados para o administrador';
-$wb['overquota_db_notify_client_txt'] = 'Enviar mensagens de alerta de cota do banco de dados para o cliente';
-$wb['php_handler_txt'] = 'Manipulador padrão PHP';
-$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
-$wb['disabled_txt'] = 'Desabilitado';
-$wb['dkim_strength_txt'] = 'Dificuldade do DKIM';
-$wb['php_ini_check_minutes_txt'] = 'Verificar modificações do php.ini a cada N minutos';
-$wb['php_ini_check_minutes_error_empty'] = 'Por favor, insira um valor de quantas vezes o php.ini deve ser verificado por modificações.';
-$wb['php_ini_check_minutes_info_txt'] = '0 = sem verificação';
+$wb['php_ini_check_minutes_txt'] = 'Verificar alterações no php.ini a cada X minutos';
+$wb['php_ini_check_minutes_error_empty'] = 'Por favor, insira um valor para verificação de alterações no php.ini.';
+$wb['php_ini_check_minutes_info_txt'] = '0 = sem verificações';
 $wb['enable_spdy_txt'] = 'Tornar SPDY/HTTP2 disponível';
-$wb['web_settings_txt'] = 'Servidor de páginas';
-$wb['xmpp_server_txt'] = 'Servidor XMPP';
+$wb['web_settings_txt'] = 'Servidor web';
+$wb['xmpp_server_txt'] = 'Servidor xmpp';
 $wb['xmpp_use_ipv6_txt'] = 'Usar IPv6';
-$wb['xmpp_bosh_max_inactivity_txt'] = 'O limite de tempo para falta de atividade BOSH';
-$wb['xmpp_bosh_timeout_range_wrong'] = 'Por favor, insira uma faixa de tempo - entre 15 e 360 - para verificar falta de atividade BOSH.';
-$wb['xmpp_module_saslauth'] = 'saslauth';
+$wb['xmpp_bosh_max_inactivity_txt'] = 'Tempo de inatividade do BOSH';
+$wb['xmpp_bosh_timeout_range_wrong'] = 'Por favor, insira um valor para o timeout do bosh entre 15 e 360.';
+$wb['xmpp_module_saslauth'] = 'Autenticação SASL';
 $wb['xmpp_server_admins_txt'] = 'Administradores do servidor (JIDs)';
-$wb['xmpp_modules_enabled_txt'] = 'Habilitar plugins no lado servidor (um por linha)';
+$wb['xmpp_modules_enabled_txt'] = 'Plugins habilitados no servidor (um por linha)';
 $wb['xmpp_ports_txt'] = 'Portas dos componentes';
-$wb['xmpp_port_http_txt'] = 'HTTP';
-$wb['xmpp_port_https_txt'] = 'HTTPS';
+$wb['xmpp_port_http_txt'] = 'http';
+$wb['xmpp_port_https_txt'] = 'https';
 $wb['xmpp_port_pastebin_txt'] = 'Pastebin';
 $wb['xmpp_port_bosh_txt'] = 'BOSH';
-$wb['backup_time_txt'] = 'Hora do backup';
+$wb['disable_bind_log_txt'] = 'Desabilitar mensagens de alerta do bind9';
+$wb['apps_vhost_enabled_txt'] = 'Habilitar apps-vhost';
 $wb['skip_le_check_txt'] = 'Ignorar verificação do Lets Encrypt';
-$wb['migration_mode_txt'] = 'Habilitar modo de migração do servidor';
-$wb['nginx_enable_pagespeed_txt'] = 'Makes Pagespeed available';
-$wb['backup_tmp_txt'] = 'Backup tmp directory for zip';
-$wb['tmpdir_path_error_empty'] = 'tmp-dir Path is empty.';
-$wb['tmpdir_path_error_regex'] = 'Invalid tmp-dir path.';
-$wb['logging_txt'] = 'Store website access and error logs';
-$wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
-$wb['log_retention_txt'] = 'Log retention (days)';
-$wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
-$wb['php_default_name_txt'] = 'Description Default PHP-Version';
-$wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
-$wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
-$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
-$wb['content_filter_txt'] = 'Content Filter';
-$wb['rspamd_url_txt'] = 'Rspamd URL';
-$wb['rspamd_user_txt'] = 'Rspamd User';
-$wb['rspamd_password_txt'] = 'Rspamd Password';
-?>
+$wb['migration_mode_txt'] = 'Modo migração de servidor';
+$wb['nginx_enable_pagespeed_txt'] = 'Tornar pagespeed disponível';
+$wb['logging_txt'] = 'Gravar logs de acesso e erros de sites';
+$wb['logging_desc_txt'] = 'Usar Ferramentas > Sicronizar para aplicar mudanças em sites existentes. Para o Apache, os logs de acesso e erros podem ser anonimizados. Para o nginx, apenas o log de acesso é anonimizado, o log de erros conterá endereços IP.';
+$wb['log_retention_txt'] = 'Tempo de retenção do log (dias)';
+$wb['log_retention_error_ispositive'] = 'O tempo de retenção do log deve ser um número > 0.';
+$wb['php_default_name_txt'] = 'Descrição da versão padrão do php';
+$wb['php_default_name_error_empty'] = 'A descrição da versão padrão do php está em branco.';
+$wb['error_mailbox_message_size_txt'] = 'O tamanho da cota da conta de e-mail deve ser maior ou igual o tamanho da cota de mensagens.';
+$wb['php_fpm_reload_mode_txt'] = 'Modo da recarga do php-fpm';
+$wb['content_filter_txt'] = 'Filtro de conteúdo';
+$wb['rspamd_url_txt'] = 'URL do rspamd';
+$wb['rspamd_user_txt'] = 'Usuário do rspamd';
+$wb['rspamd_password_txt'] = 'Senha do rspamd';
diff --git a/interface/web/admin/lib/lang/br_server_ip.lng b/interface/web/admin/lib/lang/br_server_ip.lng
index b921578940..b9bbd47949 100644
--- a/interface/web/admin/lib/lang/br_server_ip.lng
+++ b/interface/web/admin/lib/lang/br_server_ip.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['ip_address_txt'] = 'Endereço IP';
-$wb['virtualhost_txt'] = 'Nome do virtualHost http';
-$wb['ip_error_wrong'] = 'Endereço IP inválido!';
-$wb['ip_error_unique'] = 'O endereço IP deve ser exclusivo.';
 $wb['client_id_txt'] = 'Cliente';
 $wb['ip_type_txt'] = 'Tipo';
-$wb['virtualhost_port_txt'] = 'Portas http';
-$wb['error_port_syntax'] = 'Caracteres inválidos no campo -portas http-, insira somente números separados por vírgula. Exemplo: 80,443';
+$wb['ip_address_txt'] = 'Endereço IP';
+$wb['virtualhost_txt'] = 'Nome do vhost http';
+$wb['virtualhost_port_txt'] = 'Porta http';
+$wb['ip_error_wrong'] = 'O endereço IP é inválido.';
+$wb['ip_error_unique'] = 'O endereço IP deve ser exclusivo.';
+$wb['error_port_syntax'] = 'Caracteres inválidos para porta http, por favor, insira apenas uma porta ou separe portas por vírgula. Exemplo: 80,443.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_ip_list.lng b/interface/web/admin/lib/lang/br_server_ip_list.lng
index c7b22097bf..0ae892af87 100644
--- a/interface/web/admin/lib/lang/br_server_ip_list.lng
+++ b/interface/web/admin/lib/lang/br_server_ip_list.lng
@@ -1,10 +1,10 @@
 <?php
 $wb['list_head_txt'] = 'Endereço IP';
 $wb['server_id_txt'] = 'Servidor';
+$wb['client_id_txt'] = 'Cliente';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['add_new_record_txt'] = 'Adicionar novo endereço IP';
-$wb['client_id_txt'] = 'Cliente';
-$wb['virtualhost_txt'] = 'Vhost http';
+$wb['virtualhost_txt'] = 'Virtual host http';
 $wb['virtualhost_port_txt'] = 'Portas http';
 $wb['ip_type_txt'] = 'Tipo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_ip_map.lng b/interface/web/admin/lib/lang/br_server_ip_map.lng
index 44b7648277..81a2bb4b96 100644
--- a/interface/web/admin/lib/lang/br_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/br_server_ip_map.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['server_id_txt'] = 'Servidor';
+$wb['server_id_txt'] = 'Servidor para mapeamento IP';
 $wb['source_txt'] = 'Endereço IP de origem';
 $wb['destination_txt'] = 'Endereço IP de destino';
 $wb['active_txt'] = 'Ativo';
-$wb['ip_error_wrong'] = 'Endereço IP é inválido.';
-$wb['destination_ip_empty'] = 'Endereço IP de destino está em branco.';
-$wb['source_ip_empty'] = 'Endereço IP de origem está em branco.';
-$wb['server_empty_error'] = 'Servidor está em branco.';
-$wb['duplicate_mapping_error'] = 'Mapeamento já existe.';
-$wb['ip_mapping_error'] = 'Endereço IP de origem não pode ser um endereço IP do servidor.';
+$wb['ip_error_wrong'] = 'O endereço IP de destino é inválido.';
+$wb['destination_ip_empty'] = 'O endereço IP de destino está em branco.';
+$wb['source_ip_empty'] = 'O endereço IP de origem está em branco.';
+$wb['server_empty_error'] = 'O servidor está em branco.';
+$wb['duplicate_mapping_error'] = 'Este mapeamento IP já existe.';
+$wb['ip_mapping_error'] = 'Endereço IP de origem não pode ser o mesmo IP do servidor para o mapeamento.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_ip_map_list.lng b/interface/web/admin/lib/lang/br_server_ip_map_list.lng
index f5682f31ac..8cb0a1e20f 100644
--- a/interface/web/admin/lib/lang/br_server_ip_map_list.lng
+++ b/interface/web/admin/lib/lang/br_server_ip_map_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Mapeamento IPv4 - servidor web';
+$wb['list_head_txt'] = 'Mapeamento IPv4';
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_ip_txt'] = 'IP de origem';
-$wb['destination_ip_txt'] = 'IP de destino';
+$wb['source_ip_txt'] = 'Endereço de origem';
+$wb['destination_ip_txt'] = 'Endereço de destino';
 $wb['active_txt'] = 'Ativo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_list.lng b/interface/web/admin/lib/lang/br_server_list.lng
index b4a1fcafc6..ae3bb52810 100644
--- a/interface/web/admin/lib/lang/br_server_list.lng
+++ b/interface/web/admin/lib/lang/br_server_list.lng
@@ -1,14 +1,14 @@
 <?php
 $wb['list_head_txt'] = 'Servidor';
 $wb['server_name_txt'] = 'Nome';
-$wb['mail_server_txt'] = 'e-Mails';
-$wb['web_server_txt'] = 'Sites';
+$wb['mail_server_txt'] = 'E-MAIL';
+$wb['web_server_txt'] = 'SITES';
 $wb['dns_server_txt'] = 'DNS';
 $wb['file_server_txt'] = 'FTP';
 $wb['db_server_txt'] = 'BD';
 $wb['vserver_server_txt'] = 'VPS';
-$wb['add_new_record_txt'] = 'Adicionar novo servidor';
 $wb['proxy_server_txt'] = 'Proxy';
 $wb['firewall_server_txt'] = 'Firewall';
+$wb['add_new_record_txt'] = 'Adicionar novo servidor';
 $wb['xmpp_server_txt'] = 'XMPP';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_php.lng b/interface/web/admin/lib/lang/br_server_php.lng
index 459b4d9e0c..377763ce45 100644
--- a/interface/web/admin/lib/lang/br_server_php.lng
+++ b/interface/web/admin/lib/lang/br_server_php.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_id_txt'] = 'Cliente';
-$wb['name_txt'] = 'Nome do php';
+$wb['name_txt'] = 'Nome da versão do php';
 $wb['Name'] = 'Nome';
 $wb['FastCGI Settings'] = 'Configurações FastCGI';
 $wb['PHP-FPM Settings'] = 'Configurações PHP-FPM';
 $wb['Additional PHP Versions'] = 'Versões adicionais do php';
-$wb['Form to edit additional PHP versions'] = 'Formulário de edição de versões adicionais do php';
-$wb['server_php_name_error_empty'] = 'Nome está em branco.';
-$wb['php_fastcgi_binary_txt'] = 'Caminho do binário FastCGI';
-$wb['php_fastcgi_ini_dir_txt'] = 'Caminho do diretório do php.ini';
-$wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização do PHP-FPM';
+$wb['Form to edit additional PHP versions'] = 'Editar verões adicionais do php';
+$wb['server_php_name_error_empty'] = 'O campo nome está em branco.';
+$wb['php_fastcgi_binary_txt'] = 'Caminho do binário do FastCGI';
+$wb['php_fastcgi_ini_dir_txt'] = 'Diretório do php.ini';
+$wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização do php-fpm';
 $wb['php_fpm_ini_dir_txt'] = 'Caminho do diretório do php.ini';
-$wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório de faixas (pool) do PHP-FPM';
-$wb['active_txt'] = 'Active';
+$wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório pool do php-fpm';
+$wb['active_txt'] = 'Ativo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_php_list.lng b/interface/web/admin/lib/lang/br_server_php_list.lng
index 88f1e38d21..38ebdd3568 100644
--- a/interface/web/admin/lib/lang/br_server_php_list.lng
+++ b/interface/web/admin/lib/lang/br_server_php_list.lng
@@ -3,6 +3,6 @@ $wb['list_head_txt'] = 'Versões adicionais do php';
 $wb['server_id_txt'] = 'Servidor';
 $wb['add_new_record_txt'] = 'Adicionar nova versão do php';
 $wb['client_id_txt'] = 'Cliente';
-$wb['name_txt'] = 'Nome da versão do php';
-$wb['active_txt'] = 'Active';
+$wb['name_txt'] = 'Nome da versão';
+$wb['active_txt'] = 'Ativo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_software_package_list.lng b/interface/web/admin/lib/lang/br_software_package_list.lng
index 093f52bca3..de62e3d305 100644
--- a/interface/web/admin/lib/lang/br_software_package_list.lng
+++ b/interface/web/admin/lib/lang/br_software_package_list.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['list_head_txt'] = 'Pacotes de software';
+$wb['list_head_txt'] = 'Pacotes de APPs e complementos';
 $wb['installed_txt'] = 'Estado';
 $wb['package_title_txt'] = 'Pacote';
 $wb['package_description_txt'] = 'Descrição';
-$wb['action_txt'] = 'Acão';
+$wb['action_txt'] = 'Ação';
 $wb['toolsarea_head_txt'] = 'Pacotes';
 $wb['repoupdate_txt'] = 'Atualizar lista de pacotes';
-$wb['package_id_txt'] = 'ID local do app';
-$wb['no_packages_txt'] = 'Nenhum pacote disponível';
+$wb['package_id_txt'] = 'ID local do APP';
+$wb['no_packages_txt'] = 'Nenhum pacote disponível.';
 $wb['edit_txt'] = 'Editar';
 $wb['delete_txt'] = 'Remover';
 ?>
diff --git a/interface/web/admin/lib/lang/br_software_repo.lng b/interface/web/admin/lib/lang/br_software_repo.lng
index b535850138..dbc14e2032 100644
--- a/interface/web/admin/lib/lang/br_software_repo.lng
+++ b/interface/web/admin/lib/lang/br_software_repo.lng
@@ -4,5 +4,5 @@ $wb['repo_url_txt'] = 'URL';
 $wb['repo_username_txt'] = 'Usuário (opcional)';
 $wb['repo_password_txt'] = 'Senha (opcional)';
 $wb['active_txt'] = 'Ativo';
-$wb['Software Repository which may contain addons or updates'] = 'Repositório de softwares podem conter complementos ou atualizações';
+$wb['Software Repository which may contain addons or updates'] = 'Repositório de software pode conter complementos ou atualizações';
 ?>
diff --git a/interface/web/admin/lib/lang/br_software_update_list.lng b/interface/web/admin/lib/lang/br_software_update_list.lng
index 0592ca7f26..0dff3a245c 100644
--- a/interface/web/admin/lib/lang/br_software_update_list.lng
+++ b/interface/web/admin/lib/lang/br_software_update_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Atualizações de programas';
-$wb['server_select_txt'] = 'Selecione o servidor';
-$wb['installed_txt'] = 'Ações';
+$wb['list_head_txt'] = 'Atualizações de Software';
+$wb['server_select_txt'] = 'Selecionar o servidor';
+$wb['installed_txt'] = 'Ação';
 $wb['update_title_txt'] = 'Atualizar';
 $wb['version_txt'] = 'Versão';
 $wb['action_txt'] = 'Ação';
-$wb['no_updates_txt'] = 'Nenhuma atualização disponível';
+$wb['no_updates_txt'] = 'Nenhuma atualização disponível.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index 8688ca53aa..98bd4c9614 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -1,58 +1,58 @@
 <?php
-$wb['system_config_desc_txt'] = '';
+$wb['system_config_desc_txt'] = 'Configurações do Sistema';
+$wb['smtp_missing_admin_mail_txt'] = 'Por favor, insira um nome e e-mail do administrador se você usar smtp para envio dos e-mails do sistema.';
+$wb['dashboard_atom_url_admin_txt'] = 'URL do Dashboard atom (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'URL do Dashboard atom (revendas)';
+$wb['dashboard_atom_url_client_txt'] = 'URL do Dashboard atom  (clientes)';
 $wb['warning'] = 'Edite estes valores com cuidado! Não remova os prefixos em um sistema com mais de um cliente!';
-$wb['dbname_prefix_txt'] = 'Prefixo do banco de dados';
-$wb['dbuser_prefix_txt'] = 'Prefixo do usuário do banco de dados';
-$wb['shelluser_prefix_txt'] = 'Prefixo do usuário shell';
-$wb['ftpuser_prefix_txt'] = 'Prefixo do usuário ftp';
-$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo do banco de dados!';
-$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do usuário do banco de dados!';
-$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do usuário ftp!';
-$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do usuário shell!';
+$wb['tab_change_discard_txt'] = 'Descartar alterações nesta aba';
+$wb['tab_change_warning_txt'] = 'Alerta de alterações';
+$wb['tab_change_warning_note_txt'] = 'Exibir alertas de alterações nesta aba se qualquer dado for alterado pelo usuário.';
+$wb['dbname_prefix_txt'] = 'Prefixo de banco de dados';
+$wb['dbuser_prefix_txt'] = 'Prefixo de usuário de banco de dados';
+$wb['shelluser_prefix_txt'] = 'Prefixo de usuário do shell';
+$wb['webdavuser_prefix_txt'] = 'Prefixo de usuário webdav';
+$wb['ftpuser_prefix_txt'] = 'Prefixo de usuário ftp';
+$wb['vhost_subdomains_txt'] = 'Adicionar subdomínios como um site';
+$wb['vhost_subdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem subdomínios vhost no sistema!';
+$wb['vhost_aliasdomains_txt'] = 'Adicionar alias de domínio como um site';
+$wb['vhost_aliasdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem alias de domínios vhost no sistema!';
+$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo de banco de dados.';
+$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário de banco de dados.';
+$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário ftp.';
+$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário do shell.';
+$wb['webdavuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuários webdav.';
 $wb['dblist_phpmyadmin_link_txt'] = 'Link para o phpmyadmin';
+$wb['enable_custom_login_txt'] = 'Permitir nome de usuário personalizado';
 $wb['mailboxlist_webmail_link_txt'] = 'Link para o webmail';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Exibir aba de auto-resposta nos detalhes da conta de e-mail';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Exibir aba de filtro de e-mails nos detalhes da conta de e-mail';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Exibir aba de filtros personalizados de e-mail nos detalhes da conta de e-mail';
 $wb['webmail_url_txt'] = 'URL do webmail';
-$wb['phpmyadmin_url_txt'] = 'URL do phpmyadmin';
-$wb['use_domain_module_txt'] = 'Use o módulo domínios para adicionar novos domínios';
-$wb['use_domain_module_hint'] = 'Se você usar este módulo, os clientes podem selecionar apenas um dos domínios que o administrador cria para eles. Eles não podem editar o campo domínio livremente. Você deve sair e acessar novamente depois de alterar este valor para que as mudanças sejam visíveis.';
-$wb['new_domain_txt'] = 'HTML para criar um novo domínio';
-$wb['dashboard_atom_url_admin_txt'] = 'URL do Dashboard atom (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'URL do Dashboard atom (revendas)';
-$wb['dashboard_atom_url_client_txt'] = 'URL do Dashboard atom  (clientes)';
-$wb['webdavuser_prefix_txt'] = 'Prefixo do usuário webdav';
-$wb['webdavuser_prefix_error_regex'] = 'Caractere não permitido no prefixo do usuário webdav.';
-$wb['webftp_url_txt'] = 'URL do webFTP';
-$wb['mailmailinglist_link_txt'] = 'Link para lista de e-mails';
-$wb['mailmailinglist_url_txt'] = 'URL para lista de e-mails';
-$wb['admin_mail_txt'] = 'e-Mail do administrador';
+$wb['mailmailinglist_link_txt'] = 'Link para lista de e-mails na lista de e-mails';
+$wb['mailmailinglist_url_txt'] = 'URL da lista de e-mails';
+$wb['phpmyadmin_url_txt'] = 'URL do phpMyAdmin';
+$wb['use_domain_module_txt'] = 'Use o módulo de cliente para adicionar novos domínios';
+$wb['use_domain_module_hint'] = 'Se você usar este módulo, os clientes podem selecionar apenas um dos domínios que o administrador adicionar para eles. Eles não podem editar o campo domínio livremente. Você deve sair e acessar novamente após alterar este valor para que as mudanças sejam aplicadas.';
+$wb['new_domain_txt'] = 'Código HTML para criar um novo domínio';
+$wb['webftp_url_txt'] = 'URL do FTPweb';
+$wb['admin_mail_txt'] = 'Administrador(es) de e-mails';
+$wb['monitor_key_txt'] = 'Palavras reservadas a monitorar';
 $wb['admin_name_txt'] = 'Nome do administrador';
-$wb['enable_custom_login_txt'] = 'Permite nome de acesso personalizado';
-$wb['monitor_key_txt'] = 'Monitorar palavra reservada';
 $wb['maintenance_mode_txt'] = 'Modo manutenção';
-$wb['smtp_enabled_txt'] = 'Usar SMPT para enviar e-mails do sistema';
-$wb['smtp_host_txt'] = 'Servidor SMTP';
-$wb['smtp_port_txt'] = 'Porta';
-$wb['smtp_user_txt'] = 'Usuário';
-$wb['smtp_pass_txt'] = 'Senha';
-$wb['smtp_crypt_txt'] = 'Usar criptografia SSL/TLS para conexões SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Por favor, insira um nome e e-mail do administrador se você usar smtp para envio dos e-mails do sistema.';
-$wb['tab_change_discard_txt'] = 'Descartar modificações nesta aba';
-$wb['tab_change_warning_txt'] = 'Alerta de modificações';
-$wb['tab_change_warning_note_txt'] = 'Exibir alertas de modificações nesta aba se qualquer dados for modificado pelo usuário.';
-$wb['vhost_subdomains_txt'] = 'Adicionar subdomínios vhost como site';
-$wb['vhost_subdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem subdomínios vhost no sistema!';
-$wb['vhost_aliasdomains_txt'] = 'Adicionar apelidos de domínios vhost como site';
-$wb['vhost_aliasdomains_note_txt'] = 'Você nao pode desabilitar esta configuração enquanto existirem apelidos de domínio vhost no sistema!';
-$wb['phpmyadmin_url_error_regex'] = 'URL do phpmyadmin inválida.';
-$wb['use_combobox_txt'] = 'Usar jQuery UI Combobox';
+$wb['smtp_enabled_txt'] = 'Usar SMTP para enviar e-mails do sistema';
+$wb['smtp_host_txt'] = 'Host SMTP';
+$wb['smtp_port_txt'] = 'Porta SMTP';
+$wb['smtp_user_txt'] = 'Usuário SMTP';
+$wb['smtp_pass_txt'] = 'Senha do SMTP';
+$wb['smtp_crypt_txt'] = 'Usar conexão criptografada SSL/TLS para o SMTP';
+$wb['phpmyadmin_url_error_regex'] = 'URL do phpmyadmin é inválida.';
+$wb['use_combobox_txt'] = 'Usar combobox jQuery UI';
 $wb['use_loadindicator_txt'] = 'Usar indicador de carga';
 $wb['f5_to_reload_js_txt'] = 'Se você modificar esta configuração, talvez será necessário pressionar F5 no seu navegador para recarregar as bibliotecas do JavaScript ou esvaziar o cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Desabilitar verificação da palavra reservada \'web\' para nome do usuário (não recomendado!).';
-$wb['backups_include_into_web_quota_txt'] = 'Incluir arquivos de backup na cota para site.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Exir aba autoresposta nos detalhes da conta de e-mail';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Exibir aba filtros de e-mail nos detalhes da conta de e-mail';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Exibir aba filtros de e-mail personalizados nos detalhes da conta de e-mail';
-$wb['webmail_url_error_regex'] = 'URL do webmail inválida';
+$wb['client_username_web_check_disabled_txt'] = 'Desabilitar verificação da palavra reservada "web" para o nome de usuário (não recomendado!).';
+$wb['backups_include_into_web_quota_txt'] = 'Incluir arquivos de backup na cota do site.';
+$wb['webmail_url_error_regex'] = 'URL do webmail é inválida.';
 $wb['phpmyadmin_url_note_txt'] = 'Área reservada:';
 $wb['webmail_url_note_txt'] = 'Área reservada:';
 $wb['available_dashlets_note_txt'] = 'Dashlets disponíveis:';
@@ -64,30 +64,29 @@ $wb['client_dashlets_left_txt'] = 'Restrições de dashlets para clientes';
 $wb['client_dashlets_right_txt'] = 'Permissões de dashlets para clientes';
 $wb['customer_no_template_txt'] = 'No. do gabarito do cliente';
 $wb['customer_no_template_error_regex_txt'] = 'O número do gabarito do cliente contém caracteres inválidos.';
-$wb['customer_no_start_txt'] = 'Valor inicial do código do cliente';
-$wb['customer_no_counter_txt'] = 'Contador de código do cliente';
+$wb['customer_no_start_txt'] = 'Valor inicial do código de cliente';
+$wb['customer_no_counter_txt'] = 'Contador do código de cliente';
 $wb['session_timeout_txt'] = 'Duração da sessão (minutos)';
-$wb['session_allow_endless_txt'] = 'Habilitar \\"Manter-me conectado\\"';
+$wb['session_allow_endless_txt'] = 'Habilitar "Manter-me conectado"';
+$wb['No'] = 'Não';
 $wb['min_password_length_txt'] = 'Comprimento mínimo da senha';
 $wb['min_password_strength_txt'] = 'Dificuldade mínima da senha';
-$wb['company_name_txt'] = 'Nome da empresa no título da página';
-$wb['reseller_can_use_options_txt'] = 'Revendas podem usar o menu sites';
-$wb['custom_login_text_txt'] = 'Texto personalizado para página de acesso';
-$wb['custom_login_link_txt'] = 'Link personalizado para página de acesso';
-$wb['login_link_error_regex'] = 'Link personalizado para acesso inválido';
 $wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
 $wb['default_webserver_txt'] = 'Servidor web padrão';
 $wb['default_dnsserver_txt'] = 'Servidor dns padrão';
 $wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
 $wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['No'] = 'Não';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['company_name_txt'] = 'Nome da empresa para título da página';
+$wb['reseller_can_use_options_txt'] = 'Revendas podem utilizar o menu sites';
+$wb['custom_login_text_txt'] = 'Texto personalizado para a página de acesso';
+$wb['custom_login_link_txt'] = 'Link personalizado para página de acesso';
+$wb['login_link_error_regex'] = 'Link personalizado para acesso inválido';
+$wb['ca_name_txt'] = 'Nome';
+$wb['ca_issue_txt'] = 'Questão';
+$wb['ca_wildcard_txt'] = 'Usar curingas';
+$wb['ca_iodef_txt'] = 'Definições de E/S';
+$wb['active_txt'] = 'Ativo';
+$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+$wb['web_php_options_txt'] = 'Manipulador do php (Somente apache)';
 ?>
diff --git a/interface/web/admin/lib/lang/br_tpl_default_admin.lng b/interface/web/admin/lib/lang/br_tpl_default_admin.lng
index 0a53752e4b..dbad6b1766 100644
--- a/interface/web/admin/lib/lang/br_tpl_default_admin.lng
+++ b/interface/web/admin/lib/lang/br_tpl_default_admin.lng
@@ -1,18 +1,18 @@
 <?php
-$wb['tpl_default_admin_head_txt'] = 'Configurações de tema global padrão';
-$wb['tpl_default_admin_desc_txt'] = '';
+$wb['tpl_default_admin_head_txt'] = 'Configurações globais do tema padrão';
+$wb['tpl_default_admin_desc_txt'] = 'Descrição';
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_id_txt'] = 'Cliente';
-$wb['name_txt'] = 'Nome do PHP';
+$wb['name_txt'] = 'Nome da versão do php';
 $wb['Name'] = 'Nome';
-$wb['FastCGI Settings'] = 'Configurações do FastCGI';
-$wb['PHP-FPM Settings'] = 'Configurações do PHP-FPM';
+$wb['FastCGI Settings'] = 'Configurações FastCGI';
+$wb['PHP-FPM Settings'] = 'Configurações PHP-FPM';
 $wb['Additional PHP Versions'] = 'Versões adicionais do php';
-$wb['Form to edit additional PHP versions'] = 'Formulário de edição de versões adicionais do php';
-$wb['server_php_name_error_empty'] = 'Nome está em branco.';
-$wb['php_fastcgi_binary_txt'] = 'Caminho do binário FastCGI';
+$wb['Form to edit additional PHP versions'] = 'Editar versões adicionais do php';
+$wb['server_php_name_error_empty'] = 'O nome está em branco.';
+$wb['php_fastcgi_binary_txt'] = 'Caminho do binário do FastCGI';
 $wb['php_fastcgi_ini_dir_txt'] = 'Caminho do diretório do php.ini';
-$wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização PHP-FPM';
-$wb['php_fpm_ini_dir_txt'] = 'Caminho do diretório php.ini';
-$wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório de faixas (pool) do PHP-FPM';
+$wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização php-fpm';
+$wb['php_fpm_ini_dir_txt'] = 'Caminho do diretório do php.ini';
+$wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório de faixas php-fpm';
 ?>
diff --git a/interface/web/admin/lib/lang/br_users.lng b/interface/web/admin/lib/lang/br_users.lng
index d16bcf1cb1..6d71a39e4c 100644
--- a/interface/web/admin/lib/lang/br_users.lng
+++ b/interface/web/admin/lib/lang/br_users.lng
@@ -1,36 +1,36 @@
 <?php
 $wb['username_txt'] = 'Usuário';
-$wb['username_err'] = 'O nome do usuário é muito longo ou contém caracteres inválidos!';
-$wb['username_empty'] = 'Por favor, entre com o nome do usuário.';
-$wb['username_unique'] = 'Já existe um usuário com este nome!';
+$wb['username_err'] = 'O nome do usuário é muito longo ou contém caracteres inválidos.';
+$wb['username_empty'] = 'O nome do usuário está em branco.';
+$wb['username_unique'] = 'Já existe um usuário com este nome.';
 $wb['passwort_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['modules_txt'] = 'Módulos';
-$wb['startmodule_txt'] = 'Módulo Inicial';
+$wb['modules_txt'] = 'Módulo';
+$wb['startmodule_txt'] = 'Módulo inicial';
 $wb['app_theme_txt'] = 'Tema';
 $wb['typ_txt'] = 'Tipo';
 $wb['active_txt'] = 'Ativo';
 $wb['language_txt'] = 'Idioma';
 $wb['name_txt'] = 'Nome';
-$wb['vorname_txt'] = 'Sobrenome';
+$wb['vorname_txt'] = 'Segundo nome';
 $wb['unternehmen_txt'] = 'Empresa';
 $wb['strasse_txt'] = 'Endereço';
 $wb['ort_txt'] = 'Cidade';
 $wb['plz_txt'] = 'CEP';
 $wb['land_txt'] = 'País';
-$wb['email_txt'] = 'e-mail';
-$wb['url_txt'] = 'Site';
+$wb['email_txt'] = 'e-Mail';
+$wb['url_txt'] = 'URL';
 $wb['telefon_txt'] = 'Telefone';
 $wb['fax_txt'] = 'Fax';
 $wb['groups_txt'] = 'Grupos';
-$wb['default_group_txt'] = 'Grupo Padrão';
-$wb['startmodule_err'] = 'O módulo inicial não está contido nos módulos.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['username_error_collision'] = 'O nome do usuário não pode conter as palavras reservadas -web- ou -web- seguidas por um número.';
-$wb['client_not_admin_err'] = 'Um usuário definido como cliente não pode ser configurado com o tipo: admin (administrador).';
-$wb['lost_password_function_txt'] = 'Função reconfigurar senha perdida disponível';
-$wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
+$wb['default_group_txt'] = 'Grupo padrão';
+$wb['startmodule_err'] = 'Módulo inicial não está dentro de módulos.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['username_error_collision'] = 'O nome de usuário não pode conter a palavra "web" ou "web" seguida de um número."';
+$wb['client_not_admin_err'] = 'Um usuário que pertence a um cliente não pode ser configurado para: admin.';
+$wb['lost_password_function_txt'] = 'Função de senha esquecida disponível';
+$wb['no_user_insert'] = 'Os usuários do Painel de Controle (ISPC) do tipo -user- são adicionados e atualizados automaticamente quando você adiciona um cliente ou revenda.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_users_list.lng b/interface/web/admin/lib/lang/br_users_list.lng
index 3422f78355..26910186c5 100644
--- a/interface/web/admin/lib/lang/br_users_list.lng
+++ b/interface/web/admin/lib/lang/br_users_list.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['list_head_txt'] = 'Usuários';
-$wb['username_txt'] = 'Nome do usuário';
-$wb['client_id_txt'] = 'ID do cliente';
+$wb['username_txt'] = 'Usuário';
+$wb['client_id_txt'] = 'ID do usuário';
 $wb['active_txt'] = 'Ativo';
-$wb['add_new_record_txt'] = 'Adicionar novo usuário';
-$wb['warning_txt'] = '<b>AVISO:</b> Não modifique ou edite qualquer configuração de usuário aqui. Use o módulo de clientes ou revendas. Modificar ou alterar usuários e grupos nesta aba pode ocasionar perda de dados!';
 $wb['groups_txt'] = 'Grupos';
+$wb['add_new_record_txt'] = 'Adicionar novo usuário';
+$wb['warning_txt'] = '<b>ALERTA:</b> Não editar ou alterar qualquer configuração de usuário aqui. Use o módulo de clientes e revendas para isso. Editar ou alterar usuários ou grupos aqui pode causar perda de dados!';
 ?>
diff --git a/interface/web/admin/lib/lang/tr.lng b/interface/web/admin/lib/lang/tr.lng
index 23dbc45a49..9b0dfc59ec 100644
--- a/interface/web/admin/lib/lang/tr.lng
+++ b/interface/web/admin/lib/lang/tr.lng
@@ -1,20 +1,26 @@
 <?php
 $wb['1001'] = 'Kullanıcı adı ya da parola boş.';
 $wb['1002'] = 'Kullanıcı adı ya da parola hatalı.';
+
 $wb['Groups'] = 'Gruplar';
 $wb['groups_description'] = 'Sistem kullanıcısı gruplarını düzenleme formu.';
+
 $wb['Servers'] = 'Sunucular';
 $wb['Config'] = 'Ayarlar';
-$wb['Add user'] = 'Kullanıcı ekle';
-$wb['Edit user'] = 'Kullanıcıyı düzenle';
-$wb['Add group'] = 'Grup ekle';
-$wb['Edit group'] = 'Grubu düzenle';
-$wb['Edit server'] = 'Sunucuyu düzenle';
-$wb['Sync. Now'] = 'Åžimdi EÅŸleÅŸtir';
-$wb['DB Sync.'] = 'Veritabanı Eşleştirme';
+
+$wb['Add user'] = 'Kullanıcı Ekle';
+$wb['Edit user'] = 'Kullanıcıyı Düzenle';
+$wb['Add group'] = 'Grup Ekle';
+$wb['Edit group'] = 'Grubu Düzenle';
+$wb['Edit server'] = 'Sunucuyu Düzenle';
+
+$wb['Sync. Now'] = 'Åžimdi EÅŸitle';
+$wb['DB Sync.'] = 'Veritabanı Eşitleme';
+
 $wb['User Management'] = 'Kullanıcı Yönetimi';
 $wb['CP Users'] = 'Panel Kullanıcıları';
 $wb['Remote Users'] = 'Uzak Kullanıcılar';
+
 $wb['System'] = 'Sistem';
 $wb['Server Services'] = 'Sunucu Hizmetleri';
 $wb['Services'] = 'Hizmetler';
@@ -28,25 +34,29 @@ $wb['Jailkit'] = 'Jailkit';
 $wb['Rescue'] = 'Kurtarma';
 $wb['Server IP addresses'] = 'Sunucu IP Adresleri';
 $wb['Additional PHP Versions'] = 'Diğer PHP Sürümleri';
-$wb['Directive Snippets'] = 'Yönerge Parçacıkları';
+$wb['Directive Snippets'] = 'Yönerge Kod Parçaları';
 $wb['Firewall'] = 'Güvenlik Duvarı';
+
 $wb['Interface'] = 'Arayüz';
 $wb['Interface Config'] = 'Temel Ayarlar';
+$wb['Sites'] = 'Siteler';
+$wb['DNS'] = 'DNS';
 $wb['Domains'] = 'Alan Adları';
 $wb['Misc'] = 'Çeşitli';
+
 $wb['Software'] = 'Uygulama ve Eklentiler';
 $wb['Repositories'] = 'Depolar';
 $wb['Packages'] = 'Paketler';
 $wb['Updates'] = 'Güncellemeler';
+
 $wb['Language Editor'] = 'Dil Ä°ÅŸlemleri';
 $wb['Languages'] = 'Dil Dosyaları';
 $wb['New Language'] = 'Dil Ekleme';
 $wb['Merge'] = 'Dil BirleÅŸtirme';
 $wb['Export'] = 'Dil Ä°ndirme';
 $wb['Import'] = 'Dil Yükleme';
+
 $wb['Remote Actions'] = 'Uzak Ä°ÅŸlemler';
 $wb['Do OS-Update'] = 'İşletim Sistemi Güncelleme';
 $wb['Do ISPConfig-Update'] = 'ISPConfig Güncelleme';
-$wb['Sites'] = 'Sites';
-$wb['DNS'] = 'DNS';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_directive_snippets.lng b/interface/web/admin/lib/lang/tr_directive_snippets.lng
index f503486528..448d453672 100644
--- a/interface/web/admin/lib/lang/tr_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/tr_directive_snippets.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['Directive Snippets'] = 'Yönerge Parçacıkları';
-$wb['name_txt'] = 'Parçacık Adı';
-$wb['type_txt'] = 'Tip';
-$wb['snippet_txt'] = 'Parçacık';
+$wb['Directive Snippets'] = 'Yönerge Kod Parçaları';
+$wb['name_txt'] = 'Kod Parçası Adı';
+$wb['type_txt'] = 'Tür';
+$wb['snippet_txt'] = 'Kod Parçası';
 $wb['active_txt'] = 'Etkin';
-$wb['directive_snippets_name_empty'] = 'Parçacık adı boş olamaz.';
-$wb['directive_snippets_name_error_unique'] = 'Aynı adlı bir yönerge parçacığı zaten var.';
+$wb['directive_snippets_name_empty'] = 'Kod Parçası adı boş olamaz.';
+$wb['directive_snippets_name_error_unique'] = 'Aynı adlı bir yönerge kod parçası zaten var.';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
-$wb['customer_viewable_txt'] = 'Customer viewable';
-$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['customer_viewable_txt'] = 'Müşteri görebilir';
+$wb['required_php_snippets_txt'] = 'Gerekli PHP Parçası';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_directive_snippets_list.lng b/interface/web/admin/lib/lang/tr_directive_snippets_list.lng
index 766a194dc1..4a1fb954a5 100644
--- a/interface/web/admin/lib/lang/tr_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/tr_directive_snippets_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Yönerge Parçacıkları';
+$wb['list_head_txt'] = 'Yönerge Kod Parçaları';
 $wb['active_txt'] = 'Etkin';
-$wb['name_txt'] = 'Parçacık Adı';
-$wb['type_txt'] = 'Tip';
-$wb['add_new_record_txt'] = 'Yönerge Parçacığı Ekle';
-$wb['customer_viewable_txt'] = 'Customer viewable';
+$wb['name_txt'] = 'Kod Parçası Adı';
+$wb['type_txt'] = 'Tür';
+$wb['add_new_record_txt'] = 'Yönerge Kod Parçası Ekle';
+$wb['customer_viewable_txt'] = 'Müşteri Görebilsin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_firewall.lng b/interface/web/admin/lib/lang/tr_firewall.lng
index a45998d4e1..9e853c7bde 100644
--- a/interface/web/admin/lib/lang/tr_firewall.lng
+++ b/interface/web/admin/lib/lang/tr_firewall.lng
@@ -6,6 +6,7 @@ $wb['tcp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['active_txt'] = 'Etkin';
 $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
-$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
-$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
+$wb['active_txt'] = 'Etkin';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_groups.lng b/interface/web/admin/lib/lang/tr_groups.lng
index d41fcace9d..4bf60a284b 100644
--- a/interface/web/admin/lib/lang/tr_groups.lng
+++ b/interface/web/admin/lib/lang/tr_groups.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['description_txt'] = 'Açıklama';
 $wb['name_txt'] = 'Grup';
-$wb['name_err'] = 'Grup 1-30 karakter arasında olmalı.';
+$wb['name_err'] = 'Grup 1 ile 30 karakter arasında olmalı.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_iptables.lng b/interface/web/admin/lib/lang/tr_iptables.lng
index dcec556485..970bc23931 100644
--- a/interface/web/admin/lib/lang/tr_iptables.lng
+++ b/interface/web/admin/lib/lang/tr_iptables.lng
@@ -1,4 +1,5 @@
 <?php
+
 $wb['server_id_txt'] = 'Sunucu';
 $wb['multiport_txt'] = 'Çok Kapı';
 $wb['singleport_txt'] = 'Tek Kapı';
@@ -10,4 +11,5 @@ $wb['destination_ip_txt'] = 'Hedef Adresi';
 $wb['source_ip_txt'] = 'Kaynak Adresi';
 $wb['active_txt'] = 'Etkin';
 $wb['iptables_error_unique'] = 'Bu sunucu için zaten bir güvenlik duvarı kaydı var.';
+
 ?>
diff --git a/interface/web/admin/lib/lang/tr_iptables_list.lng b/interface/web/admin/lib/lang/tr_iptables_list.lng
index a884ef7f78..ba8a1345fe 100644
--- a/interface/web/admin/lib/lang/tr_iptables_list.lng
+++ b/interface/web/admin/lib/lang/tr_iptables_list.lng
@@ -1,4 +1,5 @@
 <?php
+
 $wb['list_head_txt'] = 'IPTables';
 $wb['add_new_rule_txt'] = 'IPTables Kuralı Ekle';
 $wb['server_id_txt'] = 'Sunucu';
@@ -12,4 +13,5 @@ $wb['destination_ip_txt'] = 'Hedef Adresi';
 $wb['source_ip_txt'] = 'Kaynak Adresi';
 $wb['active_txt'] = 'Etkin';
 $wb['iptables_error_unique'] = 'Bu sunucu için zaten bir güvenlik duvarı kaydı var.';
+
 ?>
diff --git a/interface/web/admin/lib/lang/tr_language_import.lng b/interface/web/admin/lib/lang/tr_language_import.lng
index 581fcb5974..be319837dd 100644
--- a/interface/web/admin/lib/lang/tr_language_import.lng
+++ b/interface/web/admin/lib/lang/tr_language_import.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'Dil Paketi Yükleme';
 $wb['list_desc_txt'] = 'UYARI: Güvenilmeyen kaynaklardan aldığınız dil paketlerini yüklemeyin.';
 $wb['language_import_txt'] = 'Yüklenecek Dil Dosyası';
 $wb['btn_save_txt'] = 'Dil Paketini Yükle';
-$wb['language_overwrite_txt'] = 'Var olan dosyaları değiştir';
+$wb['language_overwrite_txt'] = 'Var Olan Dosyalar DeÄŸiÅŸtirilsin';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['ignore_version_txt'] = 'ISPConfig sürümüne bakma';
+$wb['ignore_version_txt'] = 'ISPConfig Sürümü Denetlenmesin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_login_as.lng b/interface/web/admin/lib/lang/tr_login_as.lng
new file mode 100644
index 0000000000..b7fc8ff987
--- /dev/null
+++ b/interface/web/admin/lib/lang/tr_login_as.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['login_1_txt'] = 'Bu kullanıcı olarak oturum açmak ister misiniz';
+$wb['login_2_txt'] = '"Geri dönmek" için oturumu kapat üzerine tıklayın.';
+$wb['btn_yes_txt'] = 'Evet, Müşteri olarak oturum aç';
+$wb['btn_back_txt'] = 'Hayır, listeye geri dön';
+$wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
+$wb['active_txt'] = 'Etkin';
+$wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
+$wb['active_txt'] = 'Etkin';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+?>
diff --git a/interface/web/admin/lib/lang/tr_remote_action.lng b/interface/web/admin/lib/lang/tr_remote_action.lng
index c067f67e88..b2ed0a6da7 100644
--- a/interface/web/admin/lib/lang/tr_remote_action.lng
+++ b/interface/web/admin/lib/lang/tr_remote_action.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['select_server_txt'] = 'Sunucu Seçin';
-$wb['btn_do_txt'] = 'İşlemi Başlatın';
-$wb['do_osupdate_caption'] = 'Uzak sunucudaki işletim sistemini güncelleyin';
-$wb['do_osupdate_desc'] = 'Bu işlem seçilmiş sunucuda \\"aptitude -y upgrade\\" komutunu yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SİZE AİTTİR!</strong>';
-$wb['do_ispcupdate_caption'] = 'Uzak sunucudaki ISPConfig 3 - sürümünü güncelleyin';
+$wb['btn_do_txt'] = 'Ä°ÅŸlemi BaÅŸlat';
+$wb['do_osupdate_caption'] = 'Uzak sunucudaki işletim sistemini güncelle';
+$wb['do_osupdate_desc'] = 'Bu işlem seçilmiş sunucuda  komutunu yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SİZE AİTTİR!</strong>';
+$wb['do_ispcupdate_caption'] = 'Uzak sunucudaki ISPConfig 3 - sürümünü güncelle';
 $wb['do_ispcupdate_desc'] = 'Bu işlem seçilmiş sunucuda ISPConfig3 güncellemesini yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SÜZE AİTTİR!</strong>';
 $wb['action_scheduled'] = 'İşlem yürütülmek üzere zamanlandı';
 $wb['select_all_server'] = 'Tüm Sunucularda';
 $wb['ispconfig_update_title'] = 'ISPConfig güncelleme yönergeleri';
-$wb['ispconfig_update_text'] = 'Sunucunuzda root kullanıcısı ile bir kabuk oturumu açın ve ISPConfig güncellemesini başlatmak için<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />komutunu yürütün.<br /><br /><a href=\\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\\" target=\\"_blank\\">Ayrıntılı güncelleme bilgilerine bakmak için buraya tıklayın</a>';
+$wb['ispconfig_update_text'] = 'Sunucunuzda root kullanıcısı ile bir kabuk oturumu açın ve ISPConfig güncellemesini başlatmak için<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />komutunu yürütün.<br /><br /><a href= target=>Ayrıntılı güncelleme bilgilerine bakmak için buraya tıklayın</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_remote_user.lng b/interface/web/admin/lib/lang/tr_remote_user.lng
index d9e11f8308..a713cad0d4 100644
--- a/interface/web/admin/lib/lang/tr_remote_user.lng
+++ b/interface/web/admin/lib/lang/tr_remote_user.lng
@@ -1,37 +1,37 @@
 <?php
-$wb['username_txt'] = 'Kullanıcı adı:';
+$wb['username_txt'] = 'Kullanıcı Adı:';
 $wb['password_txt'] = 'Parola:';
 $wb['function_txt'] = 'Ä°ÅŸlevler:';
 $wb['username_error_unique'] = 'Bu kullanıcı adı zaten var';
 $wb['username_error_empty'] = 'Kullanıcı adı boş olamaz';
 $wb['password_error_empty'] = 'Parola boÅŸ olamaz';
-$wb['password_strength_txt'] = 'Parola Güçlüğü:';
-$wb['Mail domain functions'] = 'Posta alan adı işlevleri';
-$wb['Mail mailing list functions'] = 'Posta posta listesi iÅŸlevleri';
-$wb['Mail user functions'] = 'Posta kullanıcı işlevleri';
-$wb['Mail alias functions'] = 'Posta takma ad iÅŸlevleri';
-$wb['Mail forward functions'] = 'Posta yönlendirme işlevleri';
-$wb['Mail catchall functions'] = 'Posta tümünü al işlevleri';
-$wb['Mail transport functions'] = 'Posta aktarım işlevleri';
-$wb['Mail whitelist functions'] = 'Posta beyaz liste iÅŸlevleri';
-$wb['Mail blacklist functions'] = 'Posta kara liste iÅŸlevleri';
-$wb['Mail spamfilter user functions'] = 'Posta önemsiz posta süzgeci kullanıcı işlevleri';
-$wb['Mail spamfilter policy functions'] = 'Posta önemsiz posta süzgeci kuralları işlevleri';
-$wb['Mail fetchmail functions'] = 'Posta posta alma iÅŸlevleri';
-$wb['Mail user filter functions'] = 'Posta kullanıcı ve süzgeç işlevleri';
-$wb['Mail filter functions'] = 'Posta süzgeç işlevleri';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu:';
+$wb['Mail domain functions'] = 'E-posta etki alanı işlevleri';
+$wb['Mail mailing list functions'] = 'E-posta e-posta listesi iÅŸlevleri';
+$wb['Mail user functions'] = 'E-posta kullanıcı işlevleri';
+$wb['Mail alias functions'] = 'E-posta takma ad iÅŸlevleri';
+$wb['Mail forward functions'] = 'E-posta yönlendirme işlevleri';
+$wb['Mail catchall functions'] = 'E-posta tümünü al işlevleri';
+$wb['Mail transport functions'] = 'E-posta aktarım işlevleri';
+$wb['Mail whitelist functions'] = 'E-posta beyaz liste iÅŸlevleri';
+$wb['Mail blacklist functions'] = 'E-posta kara liste iÅŸlevleri';
+$wb['Mail spamfilter user functions'] = 'E-posta önemsiz ileti süzgeci kullanıcı işlevleri';
+$wb['Mail spamfilter policy functions'] = 'E-posta önemsiz ileti süzgeci kuralları işlevleri';
+$wb['Mail fetchmail functions'] = 'E-posta e-posta alma iÅŸlevleri';
+$wb['Mail user filter functions'] = 'E-posta kullanıcı ve süzgeç işlevleri';
+$wb['Mail filter functions'] = 'E-posta süzgeç işlevleri';
 $wb['Client functions'] = 'Müşteri işlevleri';
 $wb['Sites cron functions'] = 'Sitelerin zamanlanmış görev işlevleri';
 $wb['Sites database functions'] = 'Sitelerin veritabanı işlevleri';
 $wb['Sites FTP-User functions'] = 'Sitelerin FTP kullanıcısı işlevleri';
 $wb['Sites Shell-User functions'] = 'Sitelerin kabuk kullanıcısı işlevleri';
-$wb['Sites Domain functions'] = 'Sitelerin alan adı işlevleri';
-$wb['Sites Aliasdomain functions'] = 'Sitelerin takma alan adı işlevleri';
-$wb['Sites Subdomain functions'] = 'Sitelerin alt alan adı işlevleri';
+$wb['Sites Domain functions'] = 'Sitelerin etki alanı işlevleri';
+$wb['Sites Aliasdomain functions'] = 'Sitelerin takma etki alanı işlevleri';
+$wb['Sites Subdomain functions'] = 'Sitelerin alt etki alanı işlevleri';
 $wb['DNS zone functions'] = 'DNS bölgesi işlevleri';
 $wb['DNS a functions'] = 'DNS a iÅŸlevleri';
 $wb['DNS aaaa functions'] = 'DNS aaaa iÅŸlevleri';
-$wb['DNS alias functions'] = 'DNS takma ad iÅŸlevleri';
+$wb['DNS alias functions'] = 'DNS alias iÅŸlevleri';
 $wb['DNS cname functions'] = 'DNS cname iÅŸlevleri';
 $wb['DNS hinfo functions'] = 'DNS hinfo iÅŸlevleri';
 $wb['DNS mx functions'] = 'DNS mx iÅŸlevleri';
@@ -40,11 +40,11 @@ $wb['DNS ptr functions'] = 'DNS ptr iÅŸlevleri';
 $wb['DNS rp functions'] = 'DNS rp iÅŸlevleri';
 $wb['DNS srv functions'] = 'DNS srv iÅŸlevleri';
 $wb['DNS txt functions'] = 'DNS txt iÅŸlevleri';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['remote_access_txt'] = 'Remote Access';
-$wb['remote_ips_txt'] = 'Remote Access IPs / Hostnames (separate by , and leave blank for <i>any</i>)';
-$wb['remote_user_error_ips'] = 'At least one of the entered ip addresses or hostnames is invalid.';
+$wb['remote_access_txt'] = 'Uzaktan EriÅŸim';
+$wb['remote_ips_txt'] = 'Uzaktan Erişim IP Adresleri / Sunucu Adları (, ile ayırarak yazın ve <i>tümü</i> için boş bırakın)';
+$wb['remote_user_error_ips'] = 'Yazılmış IP adresi ya da sunucu adlarından en az biri geçersiz.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server.lng b/interface/web/admin/lib/lang/tr_server.lng
index 61e0b7dd6b..bdc70761e1 100644
--- a/interface/web/admin/lib/lang/tr_server.lng
+++ b/interface/web/admin/lib/lang/tr_server.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['config_txt'] = 'Ayarlar';
 $wb['server_name_txt'] = 'Sunucu Adı';
-$wb['mail_server_txt'] = 'Posta Sunucusu';
+$wb['mail_server_txt'] = 'E-posta Sunucusu';
 $wb['web_server_txt'] = 'Web Sunucusu';
 $wb['dns_server_txt'] = 'DNS Sunucusu';
 $wb['file_server_txt'] = 'Dosya Sunucusu';
 $wb['db_server_txt'] = 'Veritabanı Sunucusu';
-$wb['vserver_server_txt'] = 'SSunucu Sunucusu';
+$wb['vserver_server_txt'] = 'sSunucu Sunucusu';
 $wb['proxy_server_txt'] = 'Vekil Sunucu';
 $wb['firewall_server_txt'] = 'Güvenlik Duvarı Sunucusu';
 $wb['active_txt'] = 'Etkin';
 $wb['mirror_server_id_txt'] = 'Sunucunun Yansısı';
 $wb['- None -'] = '- Hiçbiri -';
-$wb['xmpp_server_txt'] = 'XMPP Server';
+$wb['xmpp_server_txt'] = 'XMPP Sunucusu';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index efe24bf3a4..3b63e881f9 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -13,13 +13,13 @@ $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chroot Uygulamaları';
 $wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit Zamanlanmış Görev chroot Uygulamaları';
 $wb['website_path_txt'] = 'Web Sitesi Yolu';
 $wb['website_symlinks_txt'] = 'Web Sitesi Sembolik Bağlantıları';
-$wb['website_symlinks_rel_txt'] = 'Sembolik Bağlantılar Bağıl Olsun';
+$wb['website_symlinks_rel_txt'] = 'Sembolik Bağlantılar Göreli Olsun';
 $wb['website_basedir_txt'] = 'Web Sitesi Klasörü';
 $wb['website_autoalias_txt'] = 'Otomatik Web Sitesi Takma Adı';
 $wb['website_autoalias_note_txt'] = 'Kodlar:';
-$wb['vhost_conf_dir_txt'] = 'SSunucu Ayar Klasörü';
-$wb['vhost_conf_enabled_dir_txt'] = 'Etkin SSunucu Ayar Klasörü';
-$wb['getmail_config_dir_txt'] = 'Getmail Ayar Klasörü';
+$wb['vhost_conf_dir_txt'] = 'Sanal Sunucu Ayarları Klasörü';
+$wb['vhost_conf_enabled_dir_txt'] = 'Etkin Sanal Sunucu Ayarları Klasörü';
+$wb['getmail_config_dir_txt'] = 'Getmail Ayarları Klasörü';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI Başlatıcı Yolu';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI Başlatıcı Betiği';
 $wb['fastcgi_alias_txt'] = 'FastCGI Takma Adı';
@@ -28,16 +28,24 @@ $wb['fastcgi_children_txt'] = 'FastCGI Çocuğu';
 $wb['fastcgi_max_requests_txt'] = 'FastCGI En Fazla Ä°stek';
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Modül';
-$wb['maildir_path_txt'] = 'Posta Klasörü Yolu';
+$wb['maildir_path_txt'] = 'E-posta Klasörü Yolu';
+$wb['maildir_format_txt'] = 'E-posta Klasörü Biçimi';
 $wb['homedir_path_txt'] = 'Kullanıcı Klasörü Yolu';
-$wb['mailuser_uid_txt'] = 'Posta Kullanıcısı UID';
-$wb['mailuser_gid_txt'] = 'Posta Kullanıcısı GID';
-$wb['mailuser_name_txt'] = 'Posta Kullanıcısı Adı';
-$wb['mailuser_group_txt'] = 'Posta Kullanıcısı Grubu';
+$wb['dkim_path_txt'] = 'DKIM Yolu';
+$wb['mailuser_uid_txt'] = 'E-posta Kullanıcısı UID';
+$wb['mailuser_gid_txt'] = 'E-posta Kullanıcısı GID';
+$wb['mailuser_name_txt'] = 'E-posta Kullanıcısı Adı';
+$wb['mailuser_group_txt'] = 'E-posta Kullanıcısı Grubu';
+$wb['mailbox_virtual_uidgid_maps_txt'] = 'E-posta Kutusunda Web Sitesinin Linux Kullanıcı Kodu Kullanılsın';
+$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'Yalnız tek bir web ve e-posta sunucusu kurulumunda';
+$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Çoklu sunucu kurulumunda UID eşleştirilemez.';
+$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'UID eşleştirmesi yalnız dovecot ile kullanılabilir.';
+$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Daha önce oluşturulmuş e-posta kullanıcıları varsa UID eşleştirme değiştirilemez.';
 $wb['relayhost_txt'] = 'Aktarım Sunucusu';
 $wb['relayhost_user_txt'] = 'Aktarım Sunucu Kullanıcı Adı';
 $wb['relayhost_password_txt'] = 'Aktarım Sunucu Parolası';
-$wb['mailbox_size_limit_txt'] = 'Posta Kutusu Boyutu Sınırı';
+$wb['reject_sender_login_mismatch_txt'] = 'Gönderen ile Oturum Açmış Kullanıcı Eşleşmiyorsa Reddedilsin';
+$wb['mailbox_size_limit_txt'] = 'E-posta Kutusu Boyutu Sınırı';
 $wb['message_size_limit_txt'] = 'İleti Boyutu Sınırı';
 $wb['ip_address_txt'] = 'IP Adresi';
 $wb['netmask_txt'] = 'AÄŸ Maskesi';
@@ -51,69 +59,73 @@ $wb['gateway_error_wrong'] = 'Ağ geçidi biçimi geçersiz.';
 $wb['hostname_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['hostname_error_regex'] = 'Sunucu adı geçersiz.';
 $wb['nameservers_error_empty'] = 'Ad sunucusu boÅŸ olamaz.';
-$wb['config_dir_txt'] = 'Ayar Klasörü';
+$wb['config_dir_txt'] = 'Ayarlar Klasörü';
 $wb['init_script_txt'] = 'Zamanlanmış Görev Başlatma Betiğinin Adı';
 $wb['crontab_dir_txt'] = 'Bireysel Zamanlanmış Görevler Yolu';
-$wb['wget_txt'] = 'wget Yazılımının Yolu';
+$wb['wget_txt'] = 'wget Uygulamasının Yolu';
 $wb['web_user_txt'] = 'Apache Kullanıcı Adı';
 $wb['web_group_txt'] = 'Apache Grubu';
 $wb['security_level_txt'] = 'Güvenlik Düzeyi';
 $wb['loglevel_txt'] = 'Günlükleme Düzeyi';
-$wb['apps_vhost_port_txt'] = 'Apps-vhost Kapısı';
-$wb['apps_vhost_ip_txt'] = 'Apps-vhost IP Adresi';
-$wb['apps_vhost_servername_txt'] = 'Apps-vhost Alan Adı';
+$wb['apps_vhost_port_txt'] = 'Uygulama Sanal Sunucusu Kapısı';
+$wb['apps_vhost_ip_txt'] = 'Uygulama Sanal Sunucusu IP Adresi';
+$wb['apps_vhost_servername_txt'] = 'Uygulama Sanal Sunucusu Etki Alanı';
 $wb['bind_user_txt'] = 'BIND Kullanıcı Adı';
 $wb['bind_group_txt'] = 'BIND Grubu';
-$wb['bind_zonefiles_dir_txt'] = 'BIND zonefiles Klasörü';
+$wb['bind_zonefiles_dir_txt'] = 'BIND Bölge Dosyaları Klasörü';
 $wb['named_conf_path_txt'] = 'BIND named.conf Dosyası Yolu';
 $wb['bind_user_error_empty'] = 'BIND kullanıcı adı boş olamaz.';
 $wb['bind_group_error_empty'] = 'BIND grubu boÅŸ olamaz.';
-$wb['bind_zonefiles_dir_error_empty'] = 'BIND zonefiles klasörü boş olamaz.';
+$wb['bind_zonefiles_dir_error_empty'] = 'BIND bölge dosyaları klasörü boş olamaz.';
 $wb['named_conf_path_error_empty'] = 'BIND named.conf dosyası yolu boş olamaz.';
 $wb['named_conf_local_path_error_empty'] = 'BIND named.conf.local dosyasının yolu boş olamaz.';
-$wb['mail_filter_syntax_txt'] = 'Posta Süzgeci Yazımı';
+$wb['mail_filter_syntax_txt'] = 'E-posta Süzgeci Yazımı';
 $wb['pop3_imap_daemon_txt'] = 'POP3/IMAP Sunucusu';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['php_open_basedir_error_empty'] = 'PHP open_basedir boÅŸ olamaz.';
 $wb['htaccess_allow_override_txt'] = '.htaccess AllowOverride';
 $wb['htaccess_allow_override_error_empty'] = '.htaccess AllowOverride boÅŸ olamaz.';
-$wb['awstats_conf_dir_txt'] = 'Awstats Ayar Klasörü';
+$wb['awstats_conf_dir_txt'] = 'Awstats Ayarları Klasörü';
 $wb['awstats_data_dir_txt'] = 'Awstats Veri Klasörü';
 $wb['awstats_pl_txt'] = 'awstats.pl BetiÄŸi';
 $wb['awstats_buildstaticpages_pl_txt'] = 'awstats_buildstaticpages.pl BetiÄŸi';
 $wb['backup_dir_txt'] = 'Yedek Klasörü';
+$wb['backup_tmp_txt'] = 'Geçici Zip Yedek Klasörü';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local Yolu';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini Yolu';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini Yolu';
-$wb['check_apache_config_txt'] = 'Yeniden başlatıldığında apache ayarları denetlensin';
-$wb['network_config_warning_txt'] = 'Ağ ayarlama seçeneği yalnız Debian ve Ubuntu sunucularda kullanılabilir. Ağ arayüzünüz eth0 değil ise bu seçeneği etkinleştirmeyin.';
+$wb['check_apache_config_txt'] = 'Apache Ayarları Yeniden Başlatmalarda Denetlensin';
+$wb['network_config_warning_txt'] = 'Ağ ayarlama seçeneği yalnız Debian ve Ubuntu sunucularda kullanılabilir. Ağ arayüzü eth0 değil ise bu seçeneği etkinleştirmeyin.';
 $wb['CA_path_txt'] = 'CA Yolu';
-$wb['CA_pass_txt'] = 'CA parolası';
+$wb['CA_pass_txt'] = 'CA Parolası';
 $wb['fastcgi_config_syntax_txt'] = 'FastCGI Ayar Yazımı';
 $wb['backup_mode_txt'] = 'Yedekleme Kipi';
 $wb['backup_mode_userzip'] = 'Web kullanıcısına ait web dosyaları ZIP biçiminde yedeklensin';
 $wb['backup_mode_rootgz'] = 'Web klasöründeki tüm dosyalar root kullanıcısı olarak yedeklensin';
-$wb['server_type_txt'] = 'Sunucu Tipi';
-$wb['nginx_vhost_conf_dir_txt'] = 'Nginx Vhost ayar klasörü';
-$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Nginx Vhost etkin ayar klasörü';
+$wb['tmpdir_path_error_empty'] = 'tmp klasörü yolu boş olamaz.';
+$wb['tmpdir_path_error_regex'] = 'tmp klasörü yolu geçersiz.';
+$wb['backup_time_txt'] = 'Yedekleme Zamanı';
+$wb['server_type_txt'] = 'Sunucu Türü';
+$wb['nginx_vhost_conf_dir_txt'] = 'Nginx Sanal Sunucu Ayarları Klasörü';
+$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Etkin Nginx sanal sunucu ayarları klasörü';
 $wb['nginx_user_txt'] = 'Nginx kullanıcı adı';
 $wb['nginx_group_txt'] = 'Nginx grubu';
 $wb['nginx_cgi_socket_txt'] = 'Nginx CGI Soketi';
 $wb['backup_dir_error_empty'] = 'Yedekleme klasörü boş olamaz.';
-$wb['maildir_path_error_empty'] = 'Posta klasörü yolu boş olamaz.';
+$wb['maildir_path_error_empty'] = 'E-posta klasörü yolu boş olamaz.';
 $wb['homedir_path_error_empty'] = 'Kullanıcı klasörü yolu boş olamaz.';
-$wb['mailuser_uid_error_empty'] = 'Posta kullanıcısı UID boş olamaz.';
-$wb['mailuser_gid_error_empty'] = 'Posta kullanıcısı GID boş olamaz.';
-$wb['mailuser_name_error_empty'] = 'Posta kullanıcısı adı boş olamaz.';
-$wb['mailuser_group_error_empty'] = 'Posta kullanıcısı grubu boş olamaz.';
-$wb['getmail_config_dir_error_empty'] = 'Getmail ayar klasörü boş olamaz.';
+$wb['mailuser_uid_error_empty'] = 'E-posta kullanıcısı UID boş olamaz.';
+$wb['mailuser_gid_error_empty'] = 'E-posta kullanıcısı GID boş olamaz.';
+$wb['mailuser_name_error_empty'] = 'E-posta kullanıcısı adı boş olamaz.';
+$wb['mailuser_group_error_empty'] = 'E-posta kullanıcısı grubu boş olamaz.';
+$wb['getmail_config_dir_error_empty'] = 'Getmail ayarları klasörü boş olamaz.';
 $wb['website_basedir_error_empty'] = 'Web sitesi kök klasörü boş olamaz.';
 $wb['website_path_error_empty'] = 'Web sitesi yolu boÅŸ olamaz.';
 $wb['website_symlinks_error_empty'] = 'Web sitesi sembolik bağlantısı boş olamaz.';
-$wb['vhost_conf_dir_error_empty'] = 'Vhost ayar klasörü boş olamaz.';
-$wb['vhost_conf_enabled_dir_error_empty'] = 'Vhost etkin ayar klasörü boş olamaz.';
-$wb['nginx_vhost_conf_dir_error_empty'] = 'Nginx Vhost ayar klasörü boş olamaz.';
-$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Nginx Vhost etkin ayar klasörü boş olamaz.';
+$wb['vhost_conf_dir_error_empty'] = 'Sanal sunucu ayarları klasörü boş olamaz.';
+$wb['vhost_conf_enabled_dir_error_empty'] = 'Etkin sanal sunucu ayarları klasörü boş olamaz.';
+$wb['nginx_vhost_conf_dir_error_empty'] = 'Nginx sanal sunucu ayarları klasörü boş olamaz.';
+$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Etkin nginx sanal sunucu ayarları klasörü boş olamaz.';
 $wb['apache_user_error_empty'] = 'Apache kullanıcısı boş olamaz.';
 $wb['apache_group_error_empty'] = 'Apache grubu boÅŸ olamaz.';
 $wb['nginx_user_error_empty'] = 'Nginx kullanıcısı boş olamaz.';
@@ -121,8 +133,8 @@ $wb['nginx_group_error_empty'] = 'Nginx grubu boÅŸ olamaz.';
 $wb['php_ini_path_apache_error_empty'] = 'Apache php.ini yolu boÅŸ olamaz.';
 $wb['php_ini_path_cgi_error_empty'] = 'CGI php.ini yolu boÅŸ olamaz.';
 $wb['nginx_cgi_socket_empty'] = 'Nginx CGI soketi boÅŸ olamaz.';
-$wb['apps_vhost_port_error_empty'] = 'Apps-vhost kapısı boş olamaz.';
-$wb['apps_vhost_ip_error_empty'] = 'Apps-vhost IP adresi boÅŸ olamaz.';
+$wb['apps_vhost_port_error_empty'] = 'Uygulama sanal sunucusu kapısı boş olamaz.';
+$wb['apps_vhost_ip_error_empty'] = 'Uygulama sanal sunucusu IP adresi boÅŸ olamaz.';
 $wb['fastcgi_starter_path_error_empty'] = 'FastCGI başlatıcı yolu boş olamaz.';
 $wb['fastcgi_starter_script_error_empty'] = 'FastCGI başlatıcı betiği boş olamaz.';
 $wb['fastcgi_alias_error_empty'] = 'FastCGI takma adı boş olamaz.';
@@ -137,7 +149,7 @@ $wb['jailkit_chroot_cron_programs_error_empty'] = 'Jailkit zamanlanmış görev
 $wb['vlogger_config_dir_error_empty'] = 'Ayarlar klasörü boş olamaz.';
 $wb['cron_init_script_error_empty'] = 'Zamanlanmış görevler başlatma betiği adı boş olamaz.';
 $wb['crontab_dir_error_empty'] = 'Bireysel zamanlanmış görev yolu boş olamaz.';
-$wb['cron_wget_error_empty'] = 'wget yazılımı yolu boş olamaz.';
+$wb['cron_wget_error_empty'] = 'wget uygulaması yolu boş olamaz.';
 $wb['php_fpm_init_script_txt'] = 'PHP-FPM BaÅŸlatma BetiÄŸi';
 $wb['php_fpm_init_script_error_empty'] = 'PHP-FPM baÅŸlatma betiÄŸi boÅŸ olamaz.';
 $wb['php_fpm_ini_path_txt'] = 'PHP-FPM php.ini Yolu';
@@ -148,11 +160,12 @@ $wb['php_fpm_start_port_txt'] = 'PHP-FPM Başlangıç Kapısı';
 $wb['php_fpm_start_port_error_empty'] = 'PHP-FPM başlangıç kapısı boş olamaz.';
 $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM Soket Klasörü';
 $wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM soket klasörü boş olamaz.';
-$wb['try_rescue_txt'] = 'Hizmetler izlensin ve sorun çıktığında yeniden başlatılsın';
-$wb['do_not_try_rescue_httpd_txt'] = 'HTTPD izlenmesin';
-$wb['do_not_try_rescue_mysql_txt'] = 'MySQL izlenmesin';
-$wb['do_not_try_rescue_mail_txt'] = 'E-posta izlenmesin';
-$wb['rescue_description_txt'] = '<b>Uyarı:</b> mysql sunucusunu kapatmak istiyorsanız \\"MySQL izlenmesin\\" seçeneğini işaretleyip 2-3 dakika bekleyin.<br>2-3 dakika beklemezseniz, kurtarma işlemi mysql sunucusunu yeniden başlatmaya çalışır!';
+$wb['try_rescue_txt'] = 'Hizmetler İzlensin ve Sorun Çıktığında Yeniden Başlatılsın';
+$wb['do_not_try_rescue_httpd_txt'] = 'HTTPD Ä°zlenmesin';
+$wb['do_not_try_rescue_mongodb_txt'] = 'MongoDB Ä°zlenmesin';
+$wb['do_not_try_rescue_mysql_txt'] = 'MySQL Ä°zlenmesin';
+$wb['do_not_try_rescue_mail_txt'] = 'E-posta Ä°zlenmesin';
+$wb['rescue_description_txt'] = '<b>Uyarı:</b> mysql sunucusunu kapatmak istiyorsanız "MySQL İzlenmesin" seçeneğini etkinleştirip 2-3 dakika bekleyin.<br>2-3 dakika beklemezseniz, kurtarma işlemi mysql sunucusunu yeniden başlatmaya çalışır!';
 $wb['enable_sni_txt'] = 'SNI Kullanılsın';
 $wb['set_folder_permissions_on_update_txt'] = 'Güncellenirken klasör izinleri ayarlansın';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Web kullanıcıları -sshusers- grubuna eklensin';
@@ -163,20 +176,20 @@ $wb['realtime_blackhole_list_note_txt'] = '(RBL adlarını virgül ile ayırarak
 $wb['ssl_settings_txt'] = 'SSL Ayarları';
 $wb['permissions_txt'] = 'Ä°zinler';
 $wb['php_settings_txt'] = 'PHP Ayarları';
-$wb['apps_vhost_settings_txt'] = 'Uygulama SSunucu Ayarları';
+$wb['apps_vhost_settings_txt'] = 'Uygulama Sanal Sunucu Ayarları';
 $wb['awstats_settings_txt'] = 'AWStats Ayarları';
 $wb['firewall_txt'] = 'Güvenlik Duvarı';
-$wb['mailbox_quota_stats_txt'] = 'Posta Kutusu Kota Ä°statistikleri';
-$wb['enable_ip_wildcard_txt'] = 'IP genel karakteri (*) kullanılsın';
+$wb['mailbox_quota_stats_txt'] = 'E-posta Kutusu Kota Ä°statistikleri';
+$wb['enable_ip_wildcard_txt'] = 'IP Genel Karakteri (*) Kullanılsın';
 $wb['web_folder_protection_txt'] = 'Web klasörleri ayarlanamasın (genişletilmiş öznitelikler)';
-$wb['overtraffic_notify_admin_txt'] = 'Yöneticiye aşırı trafik bildirimi gönderilsin';
-$wb['overtraffic_notify_client_txt'] = 'Müşteriye aşırı trafik bildirimi gönderilsin';
+$wb['overtraffic_notify_admin_txt'] = 'Trafik Aşımı Bildirimi Yöneticiye Gönderilsin';
+$wb['overtraffic_notify_client_txt'] = 'Trafik Aşımı Bildirimi Müşteriye Gönderilsin';
 $wb['rbl_error_regex'] = 'Lütfen geçerli RBL sunucu adları yazın.';
-$wb['overquota_notify_admin_txt'] = 'Yöneticiye kota uyarıları gönderilsin';
-$wb['overquota_notify_client_txt'] = 'Müşteriye kota uyarıları gönderilsin';
-$wb['overquota_notify_onok_txt'] = 'Müşteriye kota tamam iletisi gönderilsin';
-$wb['overquota_notify_freq_txt'] = 'Kota uyarılarının kaç günde bir gönderileceği';
-$wb['overquota_notify_freq_note_txt'] = '0 = ileti yalnız bir kez gönderilir, yinelenmez';
+$wb['overquota_notify_admin_txt'] = 'Kota Uyarıları Yöneticiye Gönderilsin';
+$wb['overquota_notify_client_txt'] = 'Kota Uyarıları Müşteriye Gönderilsin';
+$wb['overquota_notify_onok_txt'] = 'Kota Tamam İletisi Müşteriye Gönderilsin';
+$wb['overquota_notify_freq_txt'] = 'Kota Uyarısı Gönderim Sıklığı (Gün)';
+$wb['overquota_notify_freq_note_txt'] = '0 yazıldığında ileti yalnız bir kez gönderilir, yinelenmez';
 $wb['admin_notify_events_txt'] = 'Yönetici Bildirim Düzeyi';
 $wb['no_notifications_txt'] = 'Bildirim Gönderilmesin';
 $wb['monit_url_txt'] = 'Monit Adresi';
@@ -189,24 +202,35 @@ $wb['munin_user_txt'] = 'Munin Kullanıcı Adı';
 $wb['munin_password_txt'] = 'Munin Parolası';
 $wb['munin_url_error_regex'] = 'Munin adresi geçersiz';
 $wb['munin_url_note_txt'] = 'Kod:';
+$wb['v6_prefix_txt'] = 'IPv6 Ön Eki';
+$wb['vhost_rewrite_v6_txt'] = 'Yansı Üzerinde IPv6 Yeniden Yazılsın';
+$wb['v6_prefix_length'] = 'Ön ek tanımlanmış IPv6 adresine göre çok uzun ';
 $wb['backup_dir_is_mount_txt'] = 'Yedek Klasörü Takılı mı?';
+$wb['backup_dir_mount_cmd_txt'] = 'Mount komutu, yedek klasörü takılı değil ise';
+$wb['backup_delete_txt'] = 'Etki alanı ya da web sitesi silindiğinde yedekler de silinsin';
+$wb['overquota_db_notify_admin_txt'] = 'Veritabanı Kotası Bildirimleri Yöneticiye Gönderilsin';
+$wb['overquota_db_notify_client_txt'] = 'Veritabanı Kotası Bildirimleri Müşteriye Gönderilsin';
+$wb['monitor_system_updates_txt'] = 'Linux Güncellemeleri Denetlensin';
+$wb['php_handler_txt'] = 'Varsayılan PHP İşleyici';
+$wb['disabled_txt'] = 'Devre Dışı';
+$wb['dkim_strength_txt'] = 'DKIM zorluÄŸu';
 $wb['monitor_system_updates_txt'] = 'Linux Güncelleme Denetimi';
 $wb['invalid_apache_user_txt'] = 'Apache kullanıcısı geçersiz.';
 $wb['invalid_apache_group_txt'] = 'Apache grubu geçersiz.';
 $wb['backup_dir_error_regex'] = 'Yedek klasörü geçersiz.';
-$wb['maildir_path_error_regex'] = 'Posta klasörü yolu geçersiz.';
+$wb['maildir_path_error_regex'] = 'E-posta klasörü yolu geçersiz.';
 $wb['homedir_path_error_regex'] = 'Kullanıcı klasörü yolu geçersiz.';
-$wb['mailuser_name_error_regex'] = 'Posta kullanıcısı adı geçersiz.';
-$wb['mailuser_group_name_error_regex'] = 'Posta kullanıcısı grup adı geçersiz.';
-$wb['mailuser_uid_error_range'] = 'Posta kullanıcısı UID değeri >= 2000 olmalıdır';
-$wb['mailuser_gid_error_range'] = 'Posta kullanıcısı GID değeri >= 2000 olmalıdır';
-$wb['getmail_config_dir_error_regex'] = 'Getmail ayar klasörü geçersiz.';
+$wb['mailuser_name_error_regex'] = 'E-posta kullanıcısı adı geçersiz.';
+$wb['mailuser_group_name_error_regex'] = 'E-posta kullanıcısı grup adı geçersiz.';
+$wb['mailuser_uid_error_range'] = 'E-posta kullanıcısı UID değeri >= 2000 olmalıdır';
+$wb['mailuser_gid_error_range'] = 'E-posta kullanıcısı GID değeri >= 2000 olmalıdır';
+$wb['getmail_config_dir_error_regex'] = 'Getmail ayarları klasörü geçersiz.';
 $wb['website_basedir_error_regex'] = 'Web sitesi kök klasörü geçersiz.';
 $wb['website_symlinks_error_regex'] = 'Web sitesi sembolik bağlantıları geçersiz.';
-$wb['vhost_conf_dir_error_regex'] = 'Vhost ayar klasörü geçersiz.';
-$wb['vhost_conf_enabled_dir_error_regex'] = 'Etkin vhost ayar klasörü geçersiz.';
-$wb['nginx_vhost_conf_dir_error_regex'] = 'Nginx ayar klasörü geçersiz.';
-$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Etkin nginx ayar klasörü geçersiz.';
+$wb['vhost_conf_dir_error_regex'] = 'Sanal sunucu ayarları klasörü geçersiz.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Etkin sanal sunucu ayarları klasörü geçersiz.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Nginx ayarları klasörü geçersiz.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Etkin nginx ayarları klasörü geçersiz.';
 $wb['ca_path_error_regex'] = 'CA yolu geçersiz.';
 $wb['invalid_nginx_user_txt'] = 'nginx kullanıcısı geçersiz.';
 $wb['invalid_nginx_group_txt'] = 'nginx grubu geçersiz.';
@@ -225,7 +249,7 @@ $wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl boÅŸ ola
 $wb['awstats_buildstaticpages_pl_error_regex'] = 'awstats_buildstaticpages.pl yolu geçersiz.';
 $wb['invalid_bind_user_txt'] = 'BIND kullanıcısı geçersiz.';
 $wb['invalid_bind_group_txt'] = 'BIND grubu geçersiz.';
-$wb['bind_zonefiles_dir_error_regex'] = 'BIND zonefiles klasörü geçersiz.';
+$wb['bind_zonefiles_dir_error_regex'] = 'BIND bölge dosyaları klasörü geçersiz.';
 $wb['named_conf_path_error_regex'] = 'named.conf yolu geçersiz.';
 $wb['named_conf_local_path_error_regex'] = 'named.conf.local yolu geçersiz.';
 $wb['fastcgi_starter_path_error_regex'] = 'fastcgi başlatıcı yolu geçersiz.';
@@ -237,67 +261,37 @@ $wb['jailkit_chroot_home_error_regex'] = 'Jailkit chroot kök klasörü geçersi
 $wb['jailkit_chroot_app_sections_error_regex'] = 'Jailkit chroot bölümleri geçersiz.';
 $wb['jailkit_chroot_app_programs_error_regex'] = 'Jailkit chroot app uygulama yazılımları geçersiz.';
 $wb['jailkit_chroot_cron_programs_error_regex'] = 'Jailkit chroot zamanlanmış görev yazılımları geçersiz.';
-$wb['vlogger_config_dir_error_regex'] = 'Vlogger ayar klasörü geçersiz.';
+$wb['vlogger_config_dir_error_regex'] = 'Vlogger ayarları klasörü geçersiz.';
 $wb['cron_init_script_error_regex'] = 'Zamanlanmış görev başlatma betiği geçersiz.';
 $wb['crontab_dir_error_regex'] = 'Zamanlanmış görev klasörü geçersiz.';
 $wb['cron_wget_error_regex'] = 'Zamanlanmış görev wget yolu geçersiz.';
 $wb['network_filesystem_txt'] = 'AÄŸ Dosya Sistemi';
-$wb['maildir_format_txt'] = 'Maildir Format';
-$wb['dkim_path_txt'] = 'DKIM Path';
-$wb['mailbox_virtual_uidgid_maps_txt'] = 'Use Websites Linux uid for mailbox';
-$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'only in single web and mail-server-setup';
-$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid cannot be mapped in multi-server-setup.';
-$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Uid-mapping can only be used with dovecot.';
-$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Uid-mapping cannot be changed if there are already mail users.';
-$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
-$wb['backup_time_txt'] = 'Backup time';
-$wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
-$wb['v6_prefix_txt'] = 'IPv6 Prefix';
-$wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror';
-$wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 ';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
-$wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
-$wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
-$wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
-$wb['php_handler_txt'] = 'Default PHP Handler';
-$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
-$wb['disabled_txt'] = 'Disabled';
-$wb['dkim_strength_txt'] = 'DKIM strength';
-$wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
-$wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
-$wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
-$wb['web_settings_txt'] = 'Web Server';
-$wb['xmpp_server_txt'] = 'XMPP Server';
-$wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
-$wb['xmpp_bosh_max_inactivity_txt'] = 'Max. BOSH inactivity time';
-$wb['xmpp_bosh_timeout_range_wrong'] = 'Please enter a bosh timeout range between 15 - 360';
+$wb['php_ini_check_minutes_txt'] = 'Her X dakikada php.ini dosyasındaki değişiklikler denetlensin';
+$wb['php_ini_check_minutes_error_empty'] = 'php.ini dosyasındaki değişikliklerin kaç dakikada bir denetleneceğini yazın.';
+$wb['php_ini_check_minutes_info_txt'] = '0 = denetim yapılmaz';
+$wb['enable_spdy_txt'] = 'SPDY/HTTP2 Kullanılsın';
+$wb['web_settings_txt'] = 'Web Sunucu';
+$wb['xmpp_server_txt'] = 'XMPP Sunucu';
+$wb['xmpp_use_ipv6_txt'] = 'IPv6 Kullanılsın';
+$wb['xmpp_bosh_max_inactivity_txt'] = 'BOSH için en uzun işlem yapılmama süresi';
+$wb['xmpp_bosh_timeout_range_wrong'] = '15 ile 360 arasında bir bosh zaman aşımı süresi yazın';
 $wb['xmpp_module_saslauth'] = 'saslauth';
-$wb['xmpp_server_admins_txt'] = 'Server Admins (JIDs)';
-$wb['xmpp_modules_enabled_txt'] = 'Serverwide enabled plugins (one per line)';
-$wb['xmpp_ports_txt'] = 'Component ports';
+$wb['xmpp_server_admins_txt'] = 'Sunucu Yöneticileri (JID)';
+$wb['xmpp_modules_enabled_txt'] = 'Sunucu genelinde etkinleştirilecek uygulama ekleri (her satıra bir tane yazın)';
+$wb['xmpp_ports_txt'] = 'Bileşen Kapı Numaraları';
 $wb['xmpp_port_http_txt'] = 'HTTP';
 $wb['xmpp_port_https_txt'] = 'HTTPS';
 $wb['xmpp_port_pastebin_txt'] = 'Pastebin';
 $wb['xmpp_port_bosh_txt'] = 'BOSH';
-$wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
-$wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
-$wb['skip_le_check_txt'] = 'Skip Lets Encrypt Check';
-$wb['migration_mode_txt'] = 'Server Migration Mode';
-$wb['nginx_enable_pagespeed_txt'] = 'Makes Pagespeed available';
-$wb['backup_tmp_txt'] = 'Backup tmp directory for zip';
-$wb['tmpdir_path_error_empty'] = 'tmp-dir Path is empty.';
-$wb['tmpdir_path_error_regex'] = 'Invalid tmp-dir path.';
-$wb['logging_txt'] = 'Store website access and error logs';
-$wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
-$wb['log_retention_txt'] = 'Log retention (days)';
-$wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
-$wb['php_default_name_txt'] = 'Description Default PHP-Version';
-$wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
-$wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
-$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
-$wb['content_filter_txt'] = 'Content Filter';
-$wb['rspamd_url_txt'] = 'Rspamd URL';
-$wb['rspamd_user_txt'] = 'Rspamd User';
-$wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['disable_bind_log_txt'] = 'UYARI günlük düzeyi iletileri için bind9 iletileri devre dışı bırakılsın';
+$wb['apps_vhost_enabled_txt'] = 'Uygulama Sanal Sunucusu Kullanılsın';
+$wb['skip_le_check_txt'] = 'Lets Encrypt Denetimi Atlansın';
+$wb['migration_mode_txt'] = 'Sunucu Aktarımı Kipi';
+$wb['nginx_enable_pagespeed_txt'] = 'Pagespeed uygulamasını etkinleştirir';
+$wb['logging_txt'] = 'Web Sitesi Erişim ve Hata Günlükleri Kaydedilsin';
+$wb['logging_desc_txt'] = 'Değişiklikleri var olan sitelere uygulamak için Araçlar > Yeniden Eşitle komutunu kullanın. Apache için, erişim ve hata günlükleri anonimleştirilebilir. nginx için, only erişim günlüğü anonimleştirilebilir, hata günlüğüne IP adresleri kaydedilir.';
+$wb['log_retention_txt'] = 'Günlük Tutma Süresi (Gün)';
+$wb['log_retention_error_ispositive'] = 'Günlük tutma süresi 0 değerinden büyük bir sayı olmalıdır';
+$wb['php_default_name_txt'] = 'Varsayılan PHP Sürümü Açıklaması';
+$wb['php_default_name_error_empty'] = 'Varsayılan PHP sürümü açıklaması boş olamaz';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_ip.lng b/interface/web/admin/lib/lang/tr_server_ip.lng
index 3ebdbd0830..4b2cb1187d 100644
--- a/interface/web/admin/lib/lang/tr_server_ip.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip.lng
@@ -1,10 +1,10 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
 $wb['client_id_txt'] = 'Müşteri';
-$wb['ip_type_txt'] = 'Tip';
+$wb['ip_type_txt'] = 'Tür';
 $wb['ip_address_txt'] = 'IP Adresi';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['virtualhost_port_txt'] = 'HTTP Kapıları';
+$wb['virtualhost_txt'] = 'HTTP sSunucu Adı';
+$wb['virtualhost_port_txt'] = 'HTTP Kapı Numaraları';
 $wb['ip_error_wrong'] = 'IP adresi geçersiz';
 $wb['ip_error_unique'] = 'Aynı IP adresi zaten var';
 $wb['error_port_syntax'] = 'Kapı alanında geçersiz karakterler var. Lütfen yalnız virgül ile ayrılmış sayılar yazın. Örnek: 80,443';
diff --git a/interface/web/admin/lib/lang/tr_server_ip_list.lng b/interface/web/admin/lib/lang/tr_server_ip_list.lng
index 9b25c605e7..d252da3df4 100644
--- a/interface/web/admin/lib/lang/tr_server_ip_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip_list.lng
@@ -4,7 +4,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['client_id_txt'] = 'Müşteri';
 $wb['ip_address_txt'] = 'IP Adresi';
 $wb['add_new_record_txt'] = 'IP Adresi Ekle';
-$wb['virtualhost_txt'] = 'HTTP SSunucu';
+$wb['virtualhost_txt'] = 'HTTP sSunucu';
 $wb['virtualhost_port_txt'] = 'HTTP Kapıları';
-$wb['ip_type_txt'] = 'Tip';
+$wb['ip_type_txt'] = 'Tür';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_ip_map.lng b/interface/web/admin/lib/lang/tr_server_ip_map.lng
index 68b196fb23..c05e19c4b1 100644
--- a/interface/web/admin/lib/lang/tr_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip_map.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['server_id_txt'] = 'Rewrite on Server';
-$wb['source_txt'] = 'Source IP';
-$wb['destination_txt'] = 'Destination IP';
-$wb['active_txt'] = 'Active';
-$wb['ip_error_wrong'] = 'The Destination IP address is invalid';
-$wb['destination_ip_empty'] = 'The Destination IP is empty.';
-$wb['source_ip_empty'] = 'The Source IP is empty.';
-$wb['server_empty_error'] = 'The Server is empty.';
-$wb['duplicate_mapping_error'] = 'Mapping already exists.';
-$wb['ip_mapping_error'] = 'Source IP can not be an IP of the Rewrite-Server';
+$wb['server_id_txt'] = 'Sunucuda Yeniden Yazma';
+$wb['source_txt'] = 'Kaynak IP';
+$wb['destination_txt'] = 'Hedef IP';
+$wb['active_txt'] = 'Etkin';
+$wb['ip_error_wrong'] = 'Hedef IP adresi geçersiz';
+$wb['destination_ip_empty'] = 'Hedef IP adresi boÅŸ olamaz.';
+$wb['source_ip_empty'] = 'Kaynak IP adresi boÅŸ olamaz.';
+$wb['server_empty_error'] = 'Sunucu boÅŸ olamaz.';
+$wb['duplicate_mapping_error'] = 'EÅŸleÅŸme zaten var.';
+$wb['ip_mapping_error'] = 'Kaynak IP adresi Yeniden yazma sunucusunun IP adreslerinden biri olamaz';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_ip_map_list.lng b/interface/web/admin/lib/lang/tr_server_ip_map_list.lng
index 1fedc10b2e..e0ee9a9729 100644
--- a/interface/web/admin/lib/lang/tr_server_ip_map_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip_map_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'IP Mappings';
-$wb['server_id_txt'] = 'Server';
-$wb['source_ip_txt'] = 'Source IP';
-$wb['destination_ip_txt'] = 'Destination IP';
-$wb['active_txt'] = 'Active';
+$wb['list_head_txt'] = 'IP EÅŸleÅŸtirmeleri';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['source_ip_txt'] = 'Kaynak IP';
+$wb['destination_ip_txt'] = 'Hedef IP';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_list.lng b/interface/web/admin/lib/lang/tr_server_list.lng
index 9f791f78a1..8e22a526c8 100644
--- a/interface/web/admin/lib/lang/tr_server_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_list.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['list_head_txt'] = 'Sunucu';
 $wb['server_name_txt'] = 'Ad';
-$wb['mail_server_txt'] = 'Posta';
+$wb['mail_server_txt'] = 'E-posta';
 $wb['web_server_txt'] = 'Web';
 $wb['dns_server_txt'] = 'DNS';
 $wb['file_server_txt'] = 'Dosya';
 $wb['db_server_txt'] = 'Veritabanı';
-$wb['vserver_server_txt'] = 'SSunucu';
+$wb['vserver_server_txt'] = 'sSunucu';
 $wb['proxy_server_txt'] = 'Vekil Sunucu';
 $wb['firewall_server_txt'] = 'Güvenlik Duvarı';
 $wb['add_new_record_txt'] = 'Sunucu Ekle';
diff --git a/interface/web/admin/lib/lang/tr_server_php.lng b/interface/web/admin/lib/lang/tr_server_php.lng
index 8728444f13..e0437e94b3 100644
--- a/interface/web/admin/lib/lang/tr_server_php.lng
+++ b/interface/web/admin/lib/lang/tr_server_php.lng
@@ -13,5 +13,5 @@ $wb['php_fastcgi_ini_dir_txt'] = 'php.ini Klasörünün Yolu';
 $wb['php_fpm_init_script_txt'] = 'PHP-FPM BaÅŸlatma BetiÄŸinin Yolu';
 $wb['php_fpm_ini_dir_txt'] = 'php.ini Klasörünün Yolu';
 $wb['php_fpm_pool_dir_txt'] = 'PHP-FPM Havuz Klasörünün Yolu';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_php_list.lng b/interface/web/admin/lib/lang/tr_server_php_list.lng
index dd3d6b730c..06319e9855 100644
--- a/interface/web/admin/lib/lang/tr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_php_list.lng
@@ -4,5 +4,5 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['add_new_record_txt'] = 'PHP Sürümü Ekle';
 $wb['client_id_txt'] = 'Müşteri';
 $wb['name_txt'] = 'PHP Adı';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_software_package.lng b/interface/web/admin/lib/lang/tr_software_package.lng
index dfd4981832..addda60195 100644
--- a/interface/web/admin/lib/lang/tr_software_package.lng
+++ b/interface/web/admin/lib/lang/tr_software_package.lng
@@ -2,5 +2,5 @@
 $wb['package_title_txt'] = 'Paket Başlığı';
 $wb['package_key_txt'] = 'Paket Anahtarı';
 $wb['Software Package'] = 'Yazılım Paketi';
-$wb['Modify software package details'] = 'Yazılım paketi ayrıntılarını düzenleyin';
+$wb['Modify software package details'] = 'Yazılım paketi bilgilerini düzenle';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_software_update_list.lng b/interface/web/admin/lib/lang/tr_software_update_list.lng
index 4ee824a6e1..a462d90faa 100644
--- a/interface/web/admin/lib/lang/tr_software_update_list.lng
+++ b/interface/web/admin/lib/lang/tr_software_update_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Yazılım Güncellemeleri';
-$wb['server_select_txt'] = 'Sunucu seçin';
+$wb['server_select_txt'] = 'Sunucu Seçin';
 $wb['installed_txt'] = 'Ä°ÅŸlem';
 $wb['update_title_txt'] = 'Güncelleme';
 $wb['version_txt'] = 'Sürüm';
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index c52893f6b4..3ef8e26875 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['system_config_desc_txt'] = '';
-$wb['smtp_missing_admin_mail_txt'] = 'SMTP posta göndermesini kullanmak için yönetici adı ve yönetici e-posta adresini yazmalısınız.';
+$wb['smtp_missing_admin_mail_txt'] = 'SMTP e-posta gönderimini kullanmak için yönetici adı ve yönetici e-posta adresini yazmalısınız.';
 $wb['dashboard_atom_url_admin_txt'] = 'Panel Atom akışının İnternet adresi (yönetici)';
 $wb['dashboard_atom_url_reseller_txt'] = 'Panel Atom akışının İnternet adresi (bayi)';
 $wb['dashboard_atom_url_client_txt'] = 'Panel Atom akışının İnternet adresi (müşteri)';
 $wb['warning'] = 'Bu değerleri değiştirirken dikkatli olun! Sistemde birden fazla müşteri varsa, ön ekleri kaldırmayın.';
-$wb['tab_change_discard_txt'] = 'Sekme değiştirildiğinde değişiklikler yoksayılsın';
+$wb['tab_change_discard_txt'] = 'Sekme değiştirildiğinde değişiklikler yok sayılsın';
 $wb['tab_change_warning_txt'] = 'Sekme değiştirme uyarısı';
 $wb['tab_change_warning_note_txt'] = 'Formlardaki veriler düzenlenirken, kullanıcı bir değişiklik yapmışsa sekme değiştirilmek istendiğinde bir uyarı görüntülenir.';
 $wb['dbname_prefix_txt'] = 'Veritabanı adı ön eki';
@@ -13,8 +13,10 @@ $wb['dbuser_prefix_txt'] = 'Veritabanı kullanıcısı ön eki';
 $wb['shelluser_prefix_txt'] = 'Kabuk kullanıcısı ön eki';
 $wb['webdavuser_prefix_txt'] = 'Webdav kullanıcısı ön eki';
 $wb['ftpuser_prefix_txt'] = 'FTP kullanıcısı ön eki';
-$wb['vhost_subdomains_txt'] = 'Alt alanlar web sitesi ÅŸeklinde oluÅŸturulsun';
-$wb['vhost_subdomains_note_txt'] = 'Sistemde SSunucu alt alan adları varken bu seçenek devre dışı bırakılamaz!';
+$wb['vhost_subdomains_txt'] = 'Etki alanları web sitesi şeklinde oluşturulsun';
+$wb['vhost_subdomains_note_txt'] = 'Sistemde sanal sunucu alt etki alanları varken bu seçenek devre dışı bırakılamaz!';
+$wb['vhost_aliasdomains_txt'] = 'Takma etki alanı web sitesi olarak eklensin';
+$wb['vhost_aliasdomains_note_txt'] = 'Sistemde sanal sunucu takma etki alanları varken bu seçenek devre dışı bırakılamaz!';
 $wb['dbname_prefix_error_regex'] = 'Veritabanı adı ön ekinde izin verilmeyen karakterler var';
 $wb['dbuser_prefix_error_regex'] = 'Veritabanı kullanıcısı ön ekinde izin verilmeyen karakterler var';
 $wb['ftpuser_prefix_error_regex'] = 'FTP kullanıcısı ön ekinde izin verilmeyen karakterler var';
@@ -22,20 +24,23 @@ $wb['shelluser_prefix_error_regex'] = 'Kabuk kullanıcısı ön ekinde izin veri
 $wb['webdavuser_prefix_error_regex'] = 'Webdav kullanıcısı ön ekinde izin verilmeyen karakterler var.';
 $wb['dblist_phpmyadmin_link_txt'] = 'Veritabanı listesinde phpMyAdmin bağlantısı';
 $wb['enable_custom_login_txt'] = 'Özel oturum açma kullanıcı adı kullanılabilsin';
-$wb['mailboxlist_webmail_link_txt'] = 'Posta kutusu listesinde Webmail bağlantısı';
+$wb['mailboxlist_webmail_link_txt'] = 'E-posta kutusu listesinde Webmail bağlantısı';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin';
 $wb['webmail_url_txt'] = 'Webmail Adresi';
-$wb['mailmailinglist_link_txt'] = 'Posta Listeleri listesinde Posta Listesi bağlantısı';
-$wb['mailmailinglist_url_txt'] = 'Posta Listesi Adresi';
+$wb['mailmailinglist_link_txt'] = 'E-posta Listeleri listesinde E-posta Listesi bağlantısı';
+$wb['mailmailinglist_url_txt'] = 'E-posta Listesi Adresi';
 $wb['phpmyadmin_url_txt'] = 'phpMyAdmin Adresi';
-$wb['use_domain_module_txt'] = 'Alan adı eklemek için alan adı modülü kullanılsın';
-$wb['use_domain_module_hint'] = 'Bu modül kullanıldığında, müşteriler yalnız yöneticinin oluşturduğu alan adlarından birini seçebilir. Alan adı alanını özgürce düzenleyemez. Bu değeri değiştirdikten sonra değişikliklerin geçerli olması için oturumu kapatıp yeniden açmalısınız.';
-$wb['new_domain_txt'] = 'Yeni alan adı oluşturma HTML kodu';
+$wb['use_domain_module_txt'] = 'Etki alanı eklemek için etki alanı modülü kullanılsın';
+$wb['use_domain_module_hint'] = 'Bu modül kullanıldığında, müşteriler yalnız yöneticinin oluşturduğu etki alanlarından birini seçebilir. Etki alanını istediği gibi yazamaz. Bu değeri değiştirdikten sonra değişikliklerin geçerli olması için oturumu kapatıp yeniden açmalısınız.';
+$wb['new_domain_txt'] = 'Yeni etki alanı oluşturma HTML kodu';
 $wb['webftp_url_txt'] = 'WebFTP Adresi';
 $wb['admin_mail_txt'] = 'Yönetici E-posta Adresi';
 $wb['monitor_key_txt'] = 'Ä°zlenecek Kelime';
 $wb['admin_name_txt'] = 'Yönetici Adı';
 $wb['maintenance_mode_txt'] = 'Bakım Kipi';
-$wb['smtp_enabled_txt'] = 'Sistem postaları SMTP ile gönderilsin';
+$wb['smtp_enabled_txt'] = 'Sistem e-postaları SMTP ile gönderilsin';
 $wb['smtp_host_txt'] = 'SMTP Sunucusu';
 $wb['smtp_port_txt'] = 'SMTP Kapısı';
 $wb['smtp_user_txt'] = 'SMTP Kullanıcı Adı';
@@ -46,9 +51,10 @@ $wb['use_combobox_txt'] = 'jQuery Açılan Kutusu Kullanılsın';
 $wb['use_loadindicator_txt'] = 'Yük Göstergesi Kullanılsın';
 $wb['f5_to_reload_js_txt'] = 'Bu değer değiştirildiğinde, web tarayıcının JavaScript kitaplıklarını yeniden yüklemesi için F5 tuşuna basmalı ya da web tarayıcının ön belleğini temizlemelisiniz.';
 $wb['client_username_web_check_disabled_txt'] = 'Müşteri kullanıcı adında \'web\' sözcüğü denetimi devre dışı bırakılsın.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Posta hesabı ayrıntılarında posta süzgeci sekmesi görüntülensin';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Posta hesabı ayrıntılarında isteğe bağlı posta süzgeci sekmesi görüntülensin';
+$wb['backups_include_into_web_quota_txt'] = 'Yedek dosyaları web kotasına katılsın.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin';
 $wb['webmail_url_error_regex'] = 'Webmail adresi geçersiz';
 $wb['phpmyadmin_url_note_txt'] = 'Kod:';
 $wb['webmail_url_note_txt'] = 'Kod:';
@@ -64,30 +70,18 @@ $wb['customer_no_template_error_regex_txt'] = 'Müşteri no kalıbında geçersi
 $wb['customer_no_start_txt'] = 'Müşteri No Başlangıç Değeri';
 $wb['customer_no_counter_txt'] = 'Müşteri No Sayacı';
 $wb['session_timeout_txt'] = 'Oturum Zaman Aşımı (dakika)';
-$wb['session_allow_endless_txt'] = '\\"Oturum açık kalsın\\" kullanılabilsin';
+$wb['session_allow_endless_txt'] = '"Oturum açık kalsın" kullanılabilsin';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'En Az Parola UzunluÄŸu';
-$wb['min_password_strength_txt'] = 'En Az Parola Güçlüğü';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['min_password_strength_txt'] = 'En Az Parola ZorluÄŸu';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
+$wb['default_dnsserver_txt'] = 'Varsayılan Birincil DNS Sunucusu';
+$wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
+$wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['company_name_txt'] = 'Sayfa başlığı için kurum adı';
+$wb['reseller_can_use_options_txt'] = 'Bayi web siteleri için seçenek sekmesini kullanabilsin';
+$wb['custom_login_text_txt'] = 'Oturum Açma Sayfası Metni';
+$wb['custom_login_link_txt'] = 'Oturum Açma Sayfası Bağlantısı';
+$wb['login_link_error_regex'] = 'Oturum Açma Bağlantısı Geçersiz';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_users.lng b/interface/web/admin/lib/lang/tr_users.lng
index 0029214773..72aa9d1813 100644
--- a/interface/web/admin/lib/lang/tr_users.lng
+++ b/interface/web/admin/lib/lang/tr_users.lng
@@ -1,22 +1,22 @@
 <?php
-$wb['username_txt'] = 'Kullanıcı adı';
+$wb['username_txt'] = 'Kullanıcı Adı';
 $wb['username_err'] = 'Kullanıcı adı çok uzun ya da geçersiz karakterler içeriyor.';
 $wb['username_empty'] = 'Kullanıcı adı boş olamaz.';
 $wb['username_unique'] = 'Bu adla bir kullanıcı zaten var.';
 $wb['passwort_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['modules_txt'] = 'Modül';
 $wb['startmodule_txt'] = 'Başlangıç modülü';
 $wb['app_theme_txt'] = 'Tasarım';
-$wb['typ_txt'] = 'Tip';
+$wb['typ_txt'] = 'Tür';
 $wb['active_txt'] = 'Etkin';
 $wb['language_txt'] = 'Dil';
 $wb['name_txt'] = 'Ad';
 $wb['vorname_txt'] = 'Takma ad';
-$wb['unternehmen_txt'] = 'Kurum';
+$wb['unternehmen_txt'] = 'KuruluÅŸ';
 $wb['strasse_txt'] = 'Adres';
 $wb['ort_txt'] = 'Ä°l';
-$wb['plz_txt'] = 'Posta kodu';
+$wb['plz_txt'] = 'Posta Kodu';
 $wb['land_txt'] = 'Ãœlke';
 $wb['email_txt'] = 'E-posta';
 $wb['url_txt'] = 'Ä°nternet Adresi';
@@ -25,12 +25,12 @@ $wb['fax_txt'] = 'Faks';
 $wb['groups_txt'] = 'Gruplar';
 $wb['default_group_txt'] = 'Varsayılan Grup';
 $wb['startmodule_err'] = 'Başlangıç modülü, modüllerin arasında değil.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['username_error_collision'] = 'Kullanıcı adı -web- ya da -web- sözcüğünü izleyen bir sayı ile başlayamaz.\\"';
-$wb['client_not_admin_err'] = 'Bir müşteriye ait bir kullanıcının tipi admin olarak atanamaz';
-$wb['lost_password_function_txt'] = 'Forgot password function is available';
-$wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
+$wb['username_error_collision'] = 'Kullanıcı adı -web- ya da -web- sözcüğünü izleyen bir sayı ile başlayamaz."';
+$wb['client_not_admin_err'] = 'Bir müşteriye ait bir kullanıcının türü admin olarak atanamaz';
+$wb['lost_password_function_txt'] = 'Parolamı unuttum özelliği kullanılabilir';
+$wb['no_user_insert'] = 'Bir müşteri ya da bayi eklediğinizde -user- türündeki kontrol panosu kullanıcıları otomatik olarak eklenir ve güncellenir .';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_users_list.lng b/interface/web/admin/lib/lang/tr_users_list.lng
index 31dbee7000..182ab3ca7c 100644
--- a/interface/web/admin/lib/lang/tr_users_list.lng
+++ b/interface/web/admin/lib/lang/tr_users_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Kullanıcılar';
-$wb['username_txt'] = 'Kullanıcı adı';
+$wb['username_txt'] = 'Kullanıcı Adı';
 $wb['client_id_txt'] = 'Müşteri Kodu';
 $wb['active_txt'] = 'Etkin';
 $wb['groups_txt'] = 'Gruplar';
diff --git a/interface/web/client/lib/lang/br.lng b/interface/web/client/lib/lang/br.lng
index 2228cf3e21..538a3e2e85 100644
--- a/interface/web/client/lib/lang/br.lng
+++ b/interface/web/client/lib/lang/br.lng
@@ -10,20 +10,20 @@ $wb['Limit-Templates'] = 'Gabaritos de limites';
 $wb['Add Reseller'] = 'Adicionar revenda';
 $wb['Edit Reseller'] = 'Editar revenda';
 $wb['Resellers'] = 'Revendas';
-$wb['error_has_clients'] = 'Esta revenda possui clientes. Você deve remover os clientes primeiro.';
+$wb['error_has_clients'] = 'Esta revenda possui clientes associados. Certifique-se de remover os clientes associados a mesma antes de removê-la.';
 $wb['add_additional_template_txt'] = 'Adicionar gabarito personalizado';
 $wb['delete_additional_template_txt'] = 'Remover gabarito personalizado';
-$wb['Messaging'] = 'Círculos';
+$wb['Messaging'] = 'Mensagens';
 $wb['Send email'] = 'Enviar e-mail';
-$wb['Edit Client Circle'] = 'Editar círculo';
+$wb['Edit Client Circle'] = 'Editar círculo de clientes';
 $wb['Domains'] = 'Domínios';
 $wb['domain_txt'] = 'Domínio';
 $wb['client_txt'] = 'Cliente';
-$wb['error_domain_in mailuse'] = 'Este domínio não pode ser removido porque está em uso como um domínio de e-mail.';
-$wb['error_domain_in webuse'] = 'Este domínio não pode ser removido porque está em uso como um domínio de site.';
-$wb['error_client_can_not_add_domain'] = 'Você não pode adicionar um novo domínio.';
-$wb['error_client_group_id_empty'] = 'Você deve selecionar um cliente<br>';
-$wb['error_domain_in dnsuse'] = 'Este domínio não pode ser removido porque está em uso como uma zona dns.';
-$wb['error_domain_in dnsslaveuse'] = 'Este domínio não pode ser removido porque está em uso como uma zona dns secundária.';
-$wb['Email-Templates'] = 'Gabaritos de e-mails';
+$wb['error_domain_in dnsuse'] = 'Este domínio não pode ser removido pois é utilizado em uma zona dns.';
+$wb['error_domain_in dnsslaveuse'] = 'Este domínio não pode ser removido pois é utilizado em uma zona dns secundária.';
+$wb['error_domain_in mailuse'] = 'Este domínio não pode ser removido pois é utilizado como um domínio de e-mail.';
+$wb['error_domain_in webuse'] = 'Este domínio não pode ser removido pois é utilizado como um domínio de site.';
+$wb['error_client_can_not_add_domain'] = 'Você não tem permissão para adicionar novos domínios.';
+$wb['error_client_group_id_empty'] = 'Você deve selecionar um cliente.';
+$wb['Email-Templates'] = 'Gabaritos de e-mail';
 ?>
diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng
index 992c1ea2ca..c640be54fb 100644
--- a/interface/web/client/lib/lang/br_client.lng
+++ b/interface/web/client/lib/lang/br_client.lng
@@ -1,26 +1,29 @@
 <?php
 $wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail';
-$wb['limit_mailbox_txt'] = 'Limite de caixas postais';
-$wb['limit_mailalias_txt'] = 'Limite de apelidos de domínio de e-mail';
-$wb['limit_mailforward_txt'] = 'Limite de redirecionamentos de e-mail';
-$wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo';
-$wb['limit_mailrouting_txt'] = 'Limite de transportes de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mail';
+$wb['limit_mailbox_txt'] = 'Limite de contas de e-mail';
+$wb['limit_mailalias_txt'] = 'Limite de alias de e-mail';
+$wb['limit_mailaliasdomain_txt'] = 'Limite de alias de domínios';
+$wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de e-mail';
+$wb['limit_mailcatchall_txt'] = 'Limite de contas cata-tudo';
+$wb['limit_mailrouting_txt'] = 'Limite de rotas de e-mail';
 $wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mail';
 $wb['limit_fetchmail_txt'] = 'Limite de contas de busca';
-$wb['limit_mailquota_txt'] = 'Cota de e-mail';
-$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam lista branca/negra';
-$wb['limit_spamfilter_user_txt'] = 'Limite de usuários de filtros anti-spam';
+$wb['limit_mailquota_txt'] = 'Cota da conta de e-mail';
+$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista branca/negra"';
+$wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam por conta de e-mail';
 $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam';
-$wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
+$wb['default_mailserver_txt'] = 'Servidor de e-mail padrão';
 $wb['company_name_txt'] = 'Empresa';
 $wb['contact_firstname_txt'] = 'Nome do contato';
-$wb['contact_name_txt'] = 'Sobrenome do contato';
-$wb['username_txt'] = 'Nome do usuário';
+$wb['contact_name_txt'] = 'Contato';
+$wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
+$wb['password_click_to_set_txt'] = 'Clique para configurar';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['language_txt'] = 'Idioma';
 $wb['usertheme_txt'] = 'Tema';
-$wb['street_txt'] = 'Rua';
+$wb['street_txt'] = 'Endereço';
 $wb['zip_txt'] = 'CEP';
 $wb['city_txt'] = 'Cidade';
 $wb['state_txt'] = 'Estado';
@@ -28,177 +31,174 @@ $wb['country_txt'] = 'País';
 $wb['telephone_txt'] = 'Telefone';
 $wb['mobile_txt'] = 'Celular';
 $wb['fax_txt'] = 'Fax';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['internet_txt'] = 'Internet';
-$wb['icq_txt'] = 'Skype/Telegram';
+$wb['icq_txt'] = 'Redes sociais';
 $wb['notes_txt'] = 'Notas';
 $wb['company_txt'] = 'Empresa';
-$wb['title_txt'] = 'Título';
+$wb['title_txt'] = 'Cargo';
 $wb['firstname_txt'] = 'Nome';
 $wb['surname_txt'] = 'Sobrenome';
 $wb['limit_domain_txt'] = 'Limite de domínios';
 $wb['limit_subdomain_txt'] = 'Limite de subdomínios';
-$wb['limit_webquota_txt'] = 'Limite da cota de site';
+$wb['limit_webquota_txt'] = 'Limite da cota de sites';
 $wb['limit_database_txt'] = 'Limite de banco de dados';
+$wb['limit_cron_txt'] = 'Limite de tarefas no cron';
+$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefa no cron (chroot e url implícitas)';
+$wb['limit_cron_frequency_txt'] = 'Tempo de espera entre as execuções';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['limit_client_error_notint'] = 'Limite de clientes deve ser um número.';
 $wb['firstname_error_empty'] = 'Nome está em branco.';
 $wb['contact_error_empty'] = 'Contato está em branco.';
-$wb['default_webserver_txt'] = 'Servidor de páginas padrão';
-$wb['limit_web_domain_txt'] = 'Limite de de domínios de site';
-$wb['limit_web_aliasdomain_txt'] = 'Limite de apelidos de domínio';
-$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios';
+$wb['default_webserver_txt'] = 'Servidor web padrão';
+$wb['limit_web_domain_txt'] = 'Limite de domínios de site';
+$wb['limit_web_aliasdomain_txt'] = 'Limite de alias de domínios de site';
+$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios de site';
 $wb['limit_ftp_user_txt'] = 'Limite de usuários ftp';
 $wb['default_dnsserver_txt'] = 'Servidor dns padrão';
 $wb['limit_dns_zone_txt'] = 'Limite de zonas dns';
 $wb['limit_dns_slave_zone_txt'] = 'Limite de zonas dns secundárias';
 $wb['limit_dns_record_txt'] = 'Limite de registros dns';
-$wb['limit_shell_user_txt'] = 'Limite de usuários shell';
+$wb['limit_shell_user_txt'] = 'Limite de usuários do shell';
+$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
+$wb['limit_backup_txt'] = 'Função de backup disponível';
 $wb['limit_client_txt'] = 'Limite de clientes';
 $wb['username_error_empty'] = 'Nome do usuário está em branco.';
 $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
-$wb['limit_maildomain_error_notint'] = 'Limite de contas de e-mail deve ser um número.';
-$wb['limit_mailbox_error_notint'] = 'Limite da contas de e-mail deve ser um número.';
-$wb['limit_mailalias_error_notint'] = 'Limite do apelidos de e-mail deve ser um número.';
-$wb['limit_mailforward_error_notint'] = 'Limite de redirecionamentos de e-mail deve ser um número.';
-$wb['limit_mailcatchall_error_notint'] = 'Limite de contas cata tudo deve ser um número.';
-$wb['limit_mailrouting_error_notint'] = 'Limite de transportes de e-mail deve ser um número.';
-$wb['limit_mailfilter_error_notint'] = 'Limite de filtros de e-mail deve ser um número.';
-$wb['limit_mailfetchmail_error_notint'] = 'Limite de contas de busca deve ser um número.';
-$wb['limit_mailquota_error_notint'] = 'A cota de e-mail deve ser um número.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Limite de filtros anti-spam lista branca/negra deve ser um número.';
-$wb['limit_spamfilter_user_error_notint'] = 'Limite de filtros anti-spam por usuário deve ser um número.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Limite de políticas de filtros anti-spam deve ser um número.';
-$wb['limit_web_domain_error_notint'] = 'Limite de sites deve ser um número.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Limite de apelidos de domínios deve ser um número.';
-$wb['limit_web_subdomain_error_notint'] = 'Limite de subdomínios deve ser um número.';
-$wb['limit_ftp_user_error_notint'] = 'Limite de usuários ftp deve ser um número.';
-$wb['limit_shell_user_error_notint'] = 'Limite de usuários shell deve ser um número.';
-$wb['limit_dns_zone_error_notint'] = 'Limite de registros dns deve ser um número.';
-$wb['limit_dns_slave_zone_error_notint'] = 'Limite de zonas dns secundárias deve ser um número.';
+$wb['limit_maildomain_error_notint'] = 'O limite de domínios de e-mail deve ser um número.';
+$wb['limit_mailmailinglist_error_notint'] = 'O limite de listas de e-mail deve ser um número.';
+$wb['limit_mailbox_error_notint'] = 'O limite de contas de e-mail deve ser um número.';
+$wb['limit_mailalias_error_notint'] = 'O limite de alias de e-mail deve ser um número.';
+$wb['limit_mailaliasdomain_error_notint'] = 'O limite de alias de domínios de e-mail deve ser um número.';
+$wb['limit_mailforward_error_notint'] = 'O limite de encaminhamentos de e-mail deve ser um número.';
+$wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata-tudo deve ser um número.';
+$wb['limit_mailrouting_error_notint'] = 'O limite de rotas de e-mail deve ser um número.';
+$wb['limit_mailfilter_error_notint'] = 'O limite de filtros de e-mail deve ser um número.';
+$wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.';
+$wb['limit_mailquota_error_notint'] = 'O limite das cotas de e-mail deve ser um número.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'O limite de filtros anti-spam "lista branca/negra" deve ser um número.';
+$wb['limit_spamfilter_user_error_notint'] = 'O limite de filtros anti-spam por conta de e-mail deve ser um número.';
+$wb['limit_spamfilter_policy_error_notint'] = 'O limite de políticas anti-spam deve ser um número.';
+$wb['limit_web_domain_error_notint'] = 'O limite de domínios de site deve ser um número.';
+$wb['limit_web_aliasdomain_error_notint'] = 'O limite de alias de domínios de site deve ser um número.';
+$wb['limit_web_subdomain_error_notint'] = 'O limite de subdomínios de site deve ser um número.';
+$wb['limit_ftp_user_error_notint'] = 'O limite de usuários ftp deve ser um número.';
+$wb['limit_shell_user_error_notint'] = 'O limite de usuários do shell deve ser um número.';
+$wb['limit_webdav_user_error_notint'] = 'O limite de usuários webdav deve ser um número.';
+$wb['limit_dns_zone_error_notint'] = 'O limite de zonas dns deve ser um número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'O limite de zonas dns secundárias deve ser um número.';
+$wb['limit_dns_record_error_notint'] = 'O limite de registros dns deve ser um número.';
 $wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['limit_database_error_notint'] = 'Limite de banco de dados deve ser um número.';
+$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número.';
+$wb['limit_cron_error_notint'] = 'O limite de tarefas no cron deve ser um número.';
+$wb['limit_cron_error_frequency'] = 'O limite de frequência de tarefas no cron deve ser um número.';
 $wb['username_error_regex'] = 'O nome de usuário contém caracteres inválidos.';
-$wb['template_master_txt'] = 'Gabarito principal';
+$wb['template_master_txt'] = 'Gabarito mestre';
 $wb['template_additional_txt'] = 'Gabarito personalizado';
-$wb['ssh_chroot_txt'] = 'Opções do SSH Chroot';
-$wb['web_php_options_txt'] = 'Opções do PHP';
-$wb['limit_client_error'] = 'O limite de clientes foi alcançado.';
-$wb['limit_cron_txt'] = 'Limite de tarefas no cron.';
-$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefas no cron (em chroot e url completas)';
-$wb['limit_cron_frequency_txt'] = 'Intervalo mínimo entre as execuções';
-$wb['limit_cron_error_notint'] = 'Limite do cron deve ser um número.';
-$wb['limit_cron_error_frequency'] = 'Limite de frequência do cron deve ser um número.';
-$wb['limit_mailaliasdomain_txt'] = 'Limite de apelidos de domínios';
-$wb['limit_mailaliasdomain_error_notint'] = 'Limite de apelidos de domínio deve ser um número.';
-$wb['limit_web_quota_txt'] = 'Cota de site';
-$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
-$wb['limit_trafficquota_error_notint'] = 'A cota de tráfego dever ser um número.';
-$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
-$wb['limit_webdav_user_error_notint'] = 'Limite de usuários webdav deve ser um número.';
-$wb['limit_backup_txt'] = 'Função de backup disponível';
-$wb['customer_no_txt'] = 'Código do cliente';
-$wb['vat_id_txt'] = 'VAT ID';
-$wb['required_fields_txt'] = '*Campos obrigatórios';
-$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mail';
-$wb['limit_mailmailinglist_error_notint'] = 'Limite do listas de e-mail deve ser um número.';
-$wb['company_id_txt'] = 'ID da Empresa';
-$wb['limit_openvz_vm_txt'] = 'Limite de servidores virtuais';
-$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito de servidor virtual';
-$wb['limit_openvz_vm_error_notint'] = 'Limite de servidores virtuais deve ser um número.';
-$wb['web_php_options_notempty'] = 'Nenhuma opção PHP selecionada. Selecione ao menos uma opção.';
-$wb['ssh_chroot_notempty'] = 'Nenhuma opção de SSH chroot selecionada. Selecione ao menos uma opção.';
-$wb['username_error_collision'] = 'O usuário não pode ter como iniciais as palavras -web- ou -web- seguida por um número.';
+$wb['active_template_additional_txt'] = 'Ativar gabarito personalizado';
 $wb['add_additional_template_txt'] = 'Adicionar gabarito personalizado';
 $wb['delete_additional_template_txt'] = 'Remover gabarito personalizado';
+$wb['ssh_chroot_txt'] = 'Opções SSH-Chroot';
+$wb['web_php_options_txt'] = 'Opções PHP';
 $wb['limit_cgi_txt'] = 'CGI disponível';
 $wb['limit_ssi_txt'] = 'SSI disponível';
 $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
 $wb['force_suexec_txt'] = 'Forçar SuEXEC';
-$wb['limit_hterror_txt'] = 'Custom error docs disponível';
-$wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
+$wb['limit_hterror_txt'] = 'Custom errordocs disponível';
+$wb['limit_wildcard_txt'] = 'Curingas de subdomínio disponível';
 $wb['limit_ssl_txt'] = 'SSL disponível';
-$wb['bank_account_number_txt'] = 'Conta corrente no.';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
+$wb['limit_client_error'] = 'O limite de clientes foi alcançado.';
+$wb['limit_web_quota_txt'] = 'Cota de site';
+$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
+$wb['limit_trafficquota_error_notint'] = 'Cota de tráfego deve ser um número.';
+$wb['customer_no_txt'] = 'Código do cliente.';
+$wb['vat_id_txt'] = 'VAT ID';
+$wb['required_fields_txt'] = '*Campos obrigatórios';
+$wb['company_id_txt'] = 'Código da empresa';
+$wb['limit_openvz_vm_txt'] = 'Limite de máquinas virtuais';
+$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito de máquina virtual';
+$wb['limit_openvz_vm_error_notint'] = 'O limite de máquinas virtuais deve ser um número.';
+$wb['web_php_options_notempty'] = 'Nenhuma opção php selecionada. Selecione ao menos uma opção.';
+$wb['ssh_chroot_notempty'] = 'Nenhuma opção ssh chroot selecionada. Selecione ao menos uma opção.';
+$wb['username_error_collision'] = 'O nome de usuário não pode conter as palavras "web" ou "web" seguida de um número.';
+$wb['bank_account_number_txt'] = 'Conta corrente';
+$wb['bank_account_owner_txt'] = 'Proprietário da conta corrente';
 $wb['bank_code_txt'] = 'Código do banco';
 $wb['bank_name_txt'] = 'Nome do banco';
 $wb['bank_account_iban_txt'] = 'IBAN';
 $wb['bank_account_swift_txt'] = 'BIC/Swift';
-$wb['web_limits_txt'] = 'Limites web';
-$wb['email_limits_txt'] = 'Limites de e-mails';
+$wb['web_limits_txt'] = 'Limites de site';
+$wb['email_limits_txt'] = 'Limites de e-mail';
+$wb['xmpp_limits_txt'] = 'Limites xmpp';
 $wb['database_limits_txt'] = 'Limites de banco de dados';
 $wb['cron_job_limits_txt'] = 'Limites de tarefas no cron';
-$wb['dns_limits_txt'] = 'Limites de DNS';
-$wb['virtualization_limits_txt'] = 'Limites de virtualização';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['active_template_additional_txt'] = 'Complementos ativos';
-$wb['bank_account_owner_txt'] = 'Proprietário da conta corrente';
-$wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
-$wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo (ou em branco).';
+$wb['dns_limits_txt'] = 'Limites de registros dns';
+$wb['virtualization_limits_txt'] = 'Limites de máquinas virtuais';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['email_error_isemail'] = 'Por favor, insira um endereço de e-mail válido.';
+$wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo ou não pode estar está em branco.';
 $wb['paypal_email_error_isemail'] = 'Por favor, insira um e-mail do PayPal válido.';
-$wb['paypal_email_txt'] = 'e-mail do PayPal';
-$wb['err_msg_master_tpl_set'] = 'Todos as configurações de limites personalizadas são ignoradas se qualquer gabarito mestre ou algum gabarito \\"personalizado\\" for selecionado.';
-$wb['aps_limits_txt'] = 'Limites de apps instalados';
-$wb['limit_aps_txt'] = 'Limite de instâncias de apps';
-$wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
+$wb['paypal_email_txt'] = 'e-Mail do PayPal';
+$wb['err_msg_master_tpl_set'] = 'Todas as configurações de limites serão ignoradas se for selecionado a opção de gabarito personalizado.';
+$wb['aps_limits_txt'] = 'Limites de instalações de APPs';
+$wb['limit_aps_txt'] = 'Limite de instâncias de APPs';
+$wb['limit_aps_error_notint'] = 'O limite de instâncias de APPs deve ser um número.';
 $wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
-$wb['locked_txt'] = 'Bloqueado (web desabilitado)';
-$wb['canceled_txt'] = 'Cancelado (acesso do cliente desabilitado)';
+$wb['locked_txt'] = 'Bloqueado (desabilita todos os sites, etc.)';
+$wb['canceled_txt'] = 'Cancelado (desabilita o acesso do cliente.)';
 $wb['gender_txt'] = 'Título';
 $wb['gender_m_txt'] = 'Sr.';
 $wb['gender_f_txt'] = 'Sra.';
-$wb['added_by_txt'] = 'Cadastrado por';
-$wb['added_date_txt'] = 'Data do cadastro';
-$wb['parent_client_id_txt'] = 'Cliente da revenda';
-$wb['none_txt'] = 'nenhum';
-$wb['email_error_empty'] = 'e-mail está em branco.';
-$wb['xmpp_limits_txt'] = 'Limites XMPP';
 $wb['web_servers_txt'] = 'Servidores web';
-$wb['web_servers_placeholder'] = 'Selecionar servidores web';
-$wb['no_web_server_error'] = 'Ao menos um servidor de páginas deve ser selecionado.';
-$wb['web_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor de páginas. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['dns_servers_txt'] = 'Servidores dns';
-$wb['dns_servers_placeholder'] = 'Selecionar servidores dns';
-$wb['no_dns_server_error'] = 'Ao menos um servidor dns deve ser selecionado.';
-$wb['dns_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor dns. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['db_servers_txt'] = 'Servidor de banco de dados';
-$wb['db_servers_placeholder'] = 'Selecione o servidor de banco de dados';
+$wb['web_servers_placeholder'] = 'Selecione os servidores web';
+$wb['no_web_server_error'] = 'Ao menos um servidor web deve ser selecionado.';
+$wb['web_servers_used'] = 'O servidor web que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
+$wb['dns_servers_txt'] = 'Servidores DNS';
+$wb['dns_servers_placeholder'] = 'Selecione os servidores dns';
+$wb['no_dns_server_error'] = 'Ao menos um servidor DNS deve ser selecionado.';
+$wb['dns_servers_used'] = 'O servidor dns que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
+$wb['db_servers_txt'] = 'Servidores de banco de dados';
+$wb['db_servers_placeholder'] = 'Selecione os servidores de banco de dados';
 $wb['no_db_server_error'] = 'Ao menos um servidor de banco de dados deve ser selecionado.';
-$wb['db_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor de banco de dados. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
+$wb['db_servers_used'] = 'O servidor de banco de dados que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
 $wb['mail_servers_txt'] = 'Servidores de e-mail';
 $wb['mail_servers_placeholder'] = 'Selecione os servidores de e-mail';
-$wb['no_mail_server_error'] = 'Ao menos um servidor de e-mail deve ser selecionado';
-$wb['mail_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor de e-mail. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
+$wb['no_mail_server_error'] = 'Ao menos um servidor de e-mail deve ser selecionado.';
+$wb['mail_servers_used'] = 'O servidor de e-mail que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
 $wb['xmpp_servers_txt'] = 'Servidores XMPP';
-$wb['xmpp_servers_placeholder'] = 'Selecione os servidores XMPP';
-$wb['no_xmpp_server_error'] = 'Ao menos um servidor XMPP deve ser selecionado.';
-$wb['xmpp_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor XMPP. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['limit_xmpp_domain_error_notint'] = 'Limite de domínios XMPP deve ser um número.';
-$wb['limit_xmpp_user_error_notint'] = 'Limite de usuários XMPP deve ser um número.';
-$wb['limit_xmpp_domain_txt'] = 'Limite de domínios XMPP';
-$wb['limit_xmpp_user_txt'] = 'Limite de contas XMPP';
-$wb['limit_xmpp_muc_txt'] = 'Chat multiusuário disponível';
+$wb['xmpp_servers_placeholder'] = 'Selecione o(s) servidor(es) xmpp';
+$wb['no_xmpp_server_error'] = 'Ao menos um servidor xmpp deve ser selecionado.';
+$wb['xmpp_servers_used'] = 'O servidor xmpp que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
+$wb['limit_xmpp_domain_error_notint'] = 'O limite de domínios xmpp deve ser um número.';
+$wb['limit_xmpp_user_error_notint'] = 'O limite de usuários xmpp deve ser um número.';
+$wb['limit_xmpp_domain_txt'] = 'Limite de domínios xmpp';
+$wb['limit_xmpp_user_txt'] = 'Limite de usuários xmpp';
+$wb['limit_xmpp_muc_txt'] = 'Chat multiusuário (MUC) disponível';
 $wb['limit_xmpp_pastebin_txt'] = 'Pastebin para MUC disponível';
-$wb['limit_xmpp_httparchive_txt'] = 'Arquivo HTTP para MUC disponível';
+$wb['limit_xmpp_httparchive_txt'] = 'Arquivos http para MUC disponível';
 $wb['limit_xmpp_anon_txt'] = 'Host anônimo disponível';
-$wb['limit_xmpp_vjud_txt'] = 'Diretório de usuário VJUD disponível';
+$wb['limit_xmpp_vjud_txt'] = 'Diretório de usuários VJUD disponível';
 $wb['limit_xmpp_proxy_txt'] = 'Proxy Bytestream disponível';
 $wb['limit_xmpp_status_txt'] = 'Estado do host disponível';
-$wb['limit_database_quota_txt'] = 'Cota para banco de dados';
-$wb['limit_database_quota_error_notint'] = 'A cota para banco de dados deve ser um número.';
+$wb['added_by_txt'] = 'Cadastrado por';
+$wb['added_date_txt'] = 'Data do cadastro';
+$wb['parent_client_id_txt'] = 'Cliente da revenda';
+$wb['none_txt'] = 'nenhum';
+$wb['limit_database_quota_txt'] = 'Cota do banco de dados';
+$wb['limit_database_quota_error_notint'] = 'O limite da cota de banco de dados deve ser um número.';
+$wb['limit_database_user_txt'] = 'Limite de  usuários do banco de dados';
+$wb['limit_database_user_error_notint'] = 'O limite de usuários do banco de dados deve ser um número.';
 $wb['reseller_txt'] = 'Revenda';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['invalid_vat_id'] = 'O VAT ID é inválido.';
-$wb['limit_database_user_txt'] = 'Limite de usuários de banco de dados';
-$wb['limit_database_user_error_notint'] = 'Limite de usuários de banco de dados deve ser um número.';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
-$wb['limit_directive_snippets_txt'] = 'Exibir seleção de configurações do servidor de páginas';
-$wb['password_click_to_set_txt'] = 'Selecionar para configurar';
-$wb['limit_dns_record_error_notint'] = 'O limite de registros dns deve ser um número.';
+$wb['invalid_vat_id'] = 'O ID do VAT é inválido.';
+$wb['email_error_empty'] = 'O e-mail está em branco';
+$wb['limit_directive_snippets_txt'] = 'Exibir configurações de seleção do servidor web';
 $wb['Limits'] = 'Limites';
 ?>
diff --git a/interface/web/client/lib/lang/br_client_circle.lng b/interface/web/client/lib/lang/br_client_circle.lng
index 364172f1ae..6c6cb13271 100644
--- a/interface/web/client/lib/lang/br_client_circle.lng
+++ b/interface/web/client/lib/lang/br_client_circle.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['Client Circle'] = 'Círculo de cliente';
-$wb['Circle'] = 'Círculo';
+$wb['Client Circle'] = 'Círculos de clientes';
+$wb['Circle'] = 'Círculos';
 $wb['circle_txt'] = 'Círculo';
 $wb['circle_name_txt'] = 'Nome do círculo';
 $wb['client_ids_txt'] = 'Clientes/Revendas';
diff --git a/interface/web/client/lib/lang/br_client_circle_list.lng b/interface/web/client/lib/lang/br_client_circle_list.lng
index 857984f892..1c1a43f49a 100644
--- a/interface/web/client/lib/lang/br_client_circle_list.lng
+++ b/interface/web/client/lib/lang/br_client_circle_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Círculos de Clientes';
-$wb['circle_id_txt'] = 'ID do Círculo';
-$wb['circle_name_txt'] = 'Nome do Círculo';
+$wb['list_head_txt'] = 'Círculo de clientes';
+$wb['circle_id_txt'] = 'ID do círculo';
+$wb['circle_name_txt'] = 'Nome do círculo';
 $wb['description_txt'] = 'Descrição';
 $wb['add_new_record_txt'] = 'Adicionar novo círculo';
 $wb['filter_txt'] = 'Filtro';
diff --git a/interface/web/client/lib/lang/br_client_del.lng b/interface/web/client/lib/lang/br_client_del.lng
index 6c3e4e668a..880c12c36a 100644
--- a/interface/web/client/lib/lang/br_client_del.lng
+++ b/interface/web/client/lib/lang/br_client_del.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['confirm_action_txt'] = 'Confirmar ação';
-$wb['delete_explanation'] = 'Atenção: está ação removerá todos os objetos associados ao cliente!';
+$wb['delete_explanation'] = 'Esta ação removerá os seguintes registros associados a este cliente.';
 $wb['btn_save_txt'] = 'Remover o cliente';
 $wb['btn_cancel_txt'] = 'Cancelar sem remover o cliente';
 $wb['confirm_client_delete_txt'] = 'Você tem certeza que deseja remover este cliente?';
diff --git a/interface/web/client/lib/lang/br_client_message.lng b/interface/web/client/lib/lang/br_client_message.lng
index 802dcca368..75aa3480c5 100644
--- a/interface/web/client/lib/lang/br_client_message.lng
+++ b/interface/web/client/lib/lang/br_client_message.lng
@@ -1,16 +1,16 @@
 <?php
+$wb['page_head_txt'] = 'Enviar informações do cliente';
 $wb['btn_send_txt'] = 'Enviar e-mail';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['sender_txt'] = 'Remetente';
+$wb['sender_txt'] = 'e-Mail do remetente';
 $wb['subject_txt'] = 'Assunto';
 $wb['message_txt'] = 'Mensagem';
-$wb['form_legend_client_txt'] = 'Enviar mensagem a todos os clientes.';
-$wb['form_legend_admin_txt'] = 'Enviar mensagem a todos clientes e revendas.';
-$wb['sender_invalid_error'] = 'O e-mail do remetente é é inválido.';
-$wb['subject_invalid_error'] = 'O assunto está em branco.';
-$wb['message_invalid_error'] = 'A mensagem está em branco.';
-$wb['email_sent_to_txt'] = 'Enviar e-mail para:';
-$wb['page_head_txt'] = 'Enviar informações aos clientes';
+$wb['form_legend_client_txt'] = 'Enviar e-mail para clientes.';
+$wb['form_legend_admin_txt'] = 'Enviar e-mail para clientes e revendas.';
+$wb['sender_invalid_error'] = 'Remetente inválido.';
+$wb['subject_invalid_error'] = 'Assunto está em branco.';
+$wb['message_invalid_error'] = 'Mensagem está em branco.';
+$wb['email_sent_to_txt'] = 'e-Mail enviado para:';
 $wb['recipient_txt'] = 'Destinatário';
 $wb['all_clients_resellers_txt'] = 'Todos os clientes e revendas';
 $wb['all_clients_txt'] = 'Todos os clientes';
diff --git a/interface/web/client/lib/lang/br_client_message_template.lng b/interface/web/client/lib/lang/br_client_message_template.lng
index eb3c0b9938..8fb0934837 100644
--- a/interface/web/client/lib/lang/br_client_message_template.lng
+++ b/interface/web/client/lib/lang/br_client_message_template.lng
@@ -4,10 +4,10 @@ $wb['template_name_txt'] = 'Nome do gabarito';
 $wb['subject_txt'] = 'Assunto';
 $wb['message_txt'] = 'Mensagem';
 $wb['Email template'] = 'Gabarito do e-mail';
-$wb['Settings'] = 'Configuração';
+$wb['Settings'] = 'Configurações';
 $wb['variables_txt'] = 'Variáveis';
-$wb['variables_description_txt'] = '(As variáveis usuário e senha estão disponíveis apenas em e-mails de boas vindas.)';
-$wb['duplicate_welcome_error'] = 'Disponível apenas para o gabarito padrão de e-mail de boas vindas. Por favor edite o gabarito existente ou adicione um novo gabarito.';
-$wb['subject_error_empty'] = 'Subject is empty';
-$wb['message_error_empty'] = 'Message is empty';
+$wb['variables_description_txt'] = '(Variáveis de usuário e senha só estão disponíveis em e-mail de boas-vindas.)';
+$wb['duplicate_welcome_error'] = 'Só pode existir apenas um gabarito de e-mail de boas-vindas. Edite o modelo existente ao invés de adicionar um novo.';
+$wb['subject_error_empty'] = 'Assunto está em branco.';
+$wb['message_error_empty'] = 'Mensagem está em branco.';
 ?>
diff --git a/interface/web/client/lib/lang/br_client_message_template_list.lng b/interface/web/client/lib/lang/br_client_message_template_list.lng
index 9853a71ad3..3673769354 100644
--- a/interface/web/client/lib/lang/br_client_message_template_list.lng
+++ b/interface/web/client/lib/lang/br_client_message_template_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Gabarito de e-mails';
+$wb['list_head_txt'] = 'Gabaritos de e-mail';
 $wb['template_type_txt'] = 'Mensagem de';
 $wb['template_name_txt'] = 'Nome do gabarito';
 ?>
diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng
index 4b2ce6555b..c09c622bb2 100644
--- a/interface/web/client/lib/lang/br_client_template.lng
+++ b/interface/web/client/lib/lang/br_client_template.lng
@@ -1,123 +1,126 @@
 <?php
-$wb['limit_client_error_notint'] = 'Limite de clientes não é um número.';
+$wb['template_type_txt'] = 'Tipo de gabarito';
+$wb['template_name_txt'] = 'Nome do gabarito';
+$wb['limit_client_error_notint'] = 'Limite de cliente não é um número.';
+$wb['default_mailserver_txt'] = 'Servidor de e-mail padrão';
 $wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail';
-$wb['limit_mailbox_txt'] = 'Limite de caixas postais';
-$wb['limit_mailalias_txt'] = 'Limite de apelidos de e-mail';
-$wb['limit_mailforward_txt'] = 'Limite de redirecionamentos de e-mail';
-$wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo';
-$wb['limit_mailrouting_txt'] = 'Limite de transportes de e-mails';
+$wb['limit_mailbox_txt'] = 'Limite de contas de e-mail';
+$wb['limit_mailalias_txt'] = 'Limite de alias de e-mail';
+$wb['limit_mailaliasdomain_txt'] = 'Limite de alias de domínios de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mail';
+$wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de e-mail';
+$wb['limit_mailcatchall_txt'] = 'Limite de contas cata-tudo';
+$wb['limit_mailrouting_txt'] = 'Limite de rotas de e-mail';
 $wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mail';
 $wb['limit_fetchmail_txt'] = 'Limite de contas de busca';
-$wb['limit_mailquota_txt'] = 'Espaço da caixa postal';
-$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam permitidos lista branca/negra';
-$wb['limit_spamfilter_user_txt'] = 'Limite de usuários de filtros anti-spam';
+$wb['limit_mailquota_txt'] = 'Cota da conta de e-mail';
+$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista branca/negra"';
+$wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam para conta de e-mail';
 $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam';
 $wb['limit_domain_txt'] = 'Limite de domínios';
-$wb['limit_subdomain_txt'] = 'Limite de subdomínios';
-$wb['limit_webquota_txt'] = 'Cota de site';
+$wb['limit_subdomain_txt'] = 'Limite de sub-domínios';
+$wb['limit_webquota_txt'] = 'Limite da cota de site';
 $wb['limit_database_txt'] = 'Limite de banco de dados';
+$wb['limit_cron_txt'] = 'Limite de tarefas no cron';
+$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefa no cron (chroot e url implícitas)';
+$wb['limit_cron_frequency_txt'] = 'Tempo de espera entre as execuções';
+$wb['default_webserver_txt'] = 'Servidor web padrão';
 $wb['limit_web_domain_txt'] = 'Limite de domínios de site';
-$wb['limit_web_aliasdomain_txt'] = 'Limite de apelidos de domínio de site';
-$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios de site';
-$wb['limit_ftp_user_txt'] = 'Limite de usuários ftp';
-$wb['limit_dns_zone_txt'] = 'Limite de zonas dns primárias';
+$wb['limit_web_aliasdomain_txt'] = 'Limite de alias de domínios de site';
+$wb['limit_web_subdomain_txt'] = 'Limite de sud-domínios de site';
+$wb['limit_ftp_user_txt'] = 'Limite de usuário FTP';
+$wb['default_dnsserver_txt'] = 'Servidor DNS padrão';
+$wb['limit_dns_zone_txt'] = 'Limite de zonas dns';
+$wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundário';
 $wb['limit_dns_slave_zone_txt'] = 'Limite de zonas dns secundárias';
 $wb['limit_dns_record_txt'] = 'Limite de registros dns';
-$wb['limit_shell_user_txt'] = 'Limite de usuários shell';
+$wb['limit_shell_user_txt'] = 'Limite de usuários do shell';
+$wb['limit_webdav_user_txt'] = 'Limite de usuário Webdav';
+$wb['limit_backup_txt'] = 'Funções de backup disponível';
 $wb['limit_client_txt'] = 'Limite de clientes';
-$wb['limit_maildomain_error_notint'] = 'Limite de e-mails deve ser um número';
-$wb['limit_mailbox_error_notint'] = 'Limite de caixas postais deve ser um número';
-$wb['limit_mailalias_error_notint'] = 'Limite de apelidos de domínio de e-mails deve ser um número';
-$wb['limit_mailforward_error_notint'] = 'Limite de redirecionamentos de e-mail deve ser um número';
-$wb['limit_mailcatchall_error_notint'] = 'Limite de contas cata tudo deve ser um número';
-$wb['limit_mailrouting_error_notint'] = 'Limite de transportes de e-mails deve ser um número';
-$wb['limit_mailfilter_error_notint'] = 'Limite de filtros de e-mails deve ser um número.';
-$wb['limit_mailfetchmail_error_notint'] = 'Limite de contas de busca deve ser um número.';
-$wb['limit_mailquota_error_notint'] = 'Cota de e-mail deve ser um número.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Limite de filtros anti-spam lista branca/negra deve ser um número';
-$wb['limit_spamfilter_user_error_notint'] = 'Limite de filtros anti-spam deve ser um número.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Limite de políticas anti-spam deve ser um número.';
-$wb['limit_web_domain_error_notint'] = 'Limite de sites deve ser um número';
-$wb['limit_web_aliasdomain_error_notint'] = 'Limite de apelidos de domínio de site deve ser um número';
-$wb['limit_web_subdomain_error_notint'] = 'Limite de subdomínios de site deve ser um número';
-$wb['limit_ftp_user_error_notint'] = 'Limite de contas FTP deve ser um número';
-$wb['limit_shell_user_error_notint'] = 'Limite de contas shell deve ser um número';
-$wb['limit_dns_zone_error_notint'] = 'Limite de zonas DNS primárias deve ser um número';
-$wb['limit_dns_slave_zone_error_notint'] = 'Limite de zonas DNS secundárias deve ser um número.';
-$wb['limit_dns_record_error_notint'] = 'Limite de registros DNS deve ser um número.';
-$wb['limit_database_error_notint'] = 'Limite de banco de dados deve ser um número';
-$wb['error_template_name_empty'] = 'Por favor insira o nome do gabarito';
-$wb['limit_cron_txt'] = 'Limite de tarefas no cron';
-$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefas no cron (em chroot e url completas)';
-$wb['limit_cron_frequency_txt'] = 'Intervalo mínimo entre as execuções';
-$wb['limit_cron_error_notint'] = 'Limite  do cron deve ser um número.';
-$wb['limit_cron_error_frequency'] = 'Limite de frequência do cron deve ser um número.';
-$wb['limit_mailaliasdomain_txt'] = 'Limite de apelidos de domínio de e-mails';
-$wb['limit_mailaliasdomain_error_notint'] = 'Limite de apelidos de domínio de e-mails deve ser um número.';
+$wb['limit_maildomain_error_notint'] = 'O limite de domínios de e-mail deve ser um número.';
+$wb['limit_mailmailinglist_error_notint'] = 'O limite de listas de e-mail deve ser um número.';
+$wb['limit_mailbox_error_notint'] = 'O limite de contas de e-mail deve ser um número.';
+$wb['limit_mailalias_error_notint'] = 'O limite de alias de e-mail deve ser um número.';
+$wb['limit_mailaliasdomain_error_notint'] = 'O limite de alias de domínios deve ser um número.';
+$wb['limit_mailforward_error_notint'] = 'O limite de encaminhamento de e-mails deve ser um número.';
+$wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata-tudo deve ser um número.';
+$wb['limit_mailrouting_error_notint'] = 'O limite de rotas de e-mail deve ser um número.';
+$wb['limit_mailfilter_error_notint'] = 'O limite de filtros de e-mail deve ser um número.';
+$wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.';
+$wb['limit_mailquota_error_notint'] = 'O limite da cota de e-mails deve ser um número.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'O limite de filtros anti-spam "lista branca/negra" deve ser um número.';
+$wb['limit_spamfilter_user_error_notint'] = 'O limite de filtros anti-spam por conta de e-mail deve ser um número.';
+$wb['limit_spamfilter_policy_error_notint'] = 'O limite de políticas anti-spam deve ser um número.';
+$wb['limit_web_domain_error_notint'] = 'O limite de sites deve ser um número.';
+$wb['limit_web_aliasdomain_error_notint'] = 'O limite de alias de domínio para sites deve ser um número.';
+$wb['limit_web_subdomain_error_notint'] = 'O limite de sub-domínios para site deve ser um número.';
+$wb['limit_ftp_user_error_notint'] = 'O limite de usuários ftp deve ser um número.';
+$wb['limit_shell_user_error_notint'] = 'O limite de usuários do shell deve ser um número.';
+$wb['limit_webdav_user_error_notint'] = 'O limite de usuários webdav deve ser um número.';
+$wb['limit_dns_zone_error_notint'] = 'O limite de zonas dns deve ser um número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'O limite de zonas dns secundárias deve ser um número.';
+$wb['limit_dns_record_error_notint'] = 'O limite de registros dns deve ser um número.';
+$wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
+$wb['limit_database_txt'] = 'Limite de banco de dados';
+$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número.';
+$wb['limit_cron_error_notint'] = 'O limite de tarefas no cron deve ser um número.';
+$wb['limit_cron_error_frequency'] = 'O limite de execuções no cron deve ser um número.';
+$wb['error_template_name_empty'] = 'Por favor, insira um nome para o gabarito';
 $wb['limit_web_quota_txt'] = 'Cota de site';
-$wb['limit_traffic_quota_txt'] = 'Cota de Tráfego';
-$wb['limit_trafficquota_error_notint'] = 'A cota de tráfego deve ser um número.';
-$wb['template_del_aborted_txt'] = 'Remoção abortada. Ainda existem clientes com o gabarito selecionado.';
-$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
-$wb['limit_webdav_user_error_notint'] = 'Limite de usuários webdav deve ser um número.';
-$wb['limit_backup_txt'] = 'Funções de backup disponíveis';
-$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mails';
-$wb['limit_mailmailinglist_error_notint'] = 'Limite de listas de e-mails deve ser um número.';
-$wb['limit_openvz_vm_txt'] = 'Limite de servidores virtuais';
-$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito de servidor virtual';
-$wb['limit_openvz_vm_error_notint'] = 'Limite de servidores virtuais deve ser um número.';
-$wb['ssh_chroot_txt'] = 'Opções SSH-Chroot';
+$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
+$wb['limit_trafficquota_error_notint'] = 'Cota de tráfego deve ser um número.';
+$wb['template_del_aborted_txt'] = 'Remover cancelado. Ainda existe algum cliente com este gabarito em uso.';
+$wb['limit_openvz_vm_txt'] = 'Limite de máquinas virtuais';
+$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito para máquina virtual';
+$wb['limit_openvz_vm_error_notint'] = 'O limite de máquinas virtuais deve ser um número.';
+$wb['ssh_chroot_txt'] = 'Opções de SSH-Chroot';
 $wb['web_php_options_txt'] = 'Opções PHP';
-$wb['template_type_txt'] = 'Tipo de Gabarito';
-$wb['template_name_txt'] = 'Nome do Gabarito';
 $wb['limit_cgi_txt'] = 'CGI disponível';
 $wb['limit_ssi_txt'] = 'SSI disponível';
 $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
 $wb['force_suexec_txt'] = 'Forçar SuEXEC';
-$wb['limit_hterror_txt'] = 'Diretório \\"Custom error docs\\" disponível';
-$wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
+$wb['limit_hterror_txt'] = 'Custom-error-docs disponível';
+$wb['limit_wildcard_txt'] = 'Curingas de sub-domínio disponível';
 $wb['limit_ssl_txt'] = 'SSL disponível';
-$wb['web_limits_txt'] = 'Limites web';
-$wb['email_limits_txt'] = 'Limites de e-mail';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let';
+$wb['web_limits_txt'] = 'Limites de site';
+$wb['email_limits_txt'] = 'Limites de e-mails';
 $wb['database_limits_txt'] = 'Limites de banco de dados';
-$wb['cron_job_limits_txt'] = 'Limites de tarefas no cron';
+$wb['cron_job_limits_txt'] = 'Limite de tarefas no cron';
 $wb['dns_limits_txt'] = 'Limites de DNS';
 $wb['virtualization_limits_txt'] = 'Limites de virtualização';
-$wb['aps_limits_txt'] = 'Limites de instalações de apps';
-$wb['limit_aps_txt'] = 'Limites de instâncias de apps';
-$wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
+$wb['aps_limits_txt'] = 'Limites de instalações de aplicações - APPs';
+$wb['limit_aps_txt'] = 'Limite de instâncias para APPs';
+$wb['limit_aps_error_notint'] = 'O limite de instância para APPs deve ser um número.';
 $wb['limit_domainmodule_txt'] = 'Limites de módulos de domínio';
 $wb['client_limits_txt'] = 'Limites de clientes';
-$wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
-$wb['default_webserver_txt'] = 'Servidor de páginas padrão';
-$wb['default_dnsserver_txt'] = 'Servidor DNS padrão';
-$wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundário padrão';
-$wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['limit_database_quota_txt'] = 'Cota para banco de dados';
-$wb['limit_database_quota_error_notint'] = 'Limite da cota para banco de dados deve ser um número.';
-$wb['xmpp_limits_txt'] = 'Limites XMPP';
-$wb['xmpp_servers_txt'] = 'Servidores XMPP';
-$wb['xmpp_servers_placeholder'] = 'Selecionar servidores XMPP';
-$wb['no_xmpp_server_error'] = 'Ao menos um servidor XMPP deve ser selecionado.';
-$wb['xmpp_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor XMPP. Tenha certeza que este servidor não é usando por este cliente antes de removê-lo.';
-$wb['limit_xmpp_domain_error_notint'] = 'Limite de domínios XMPP deve ser um número.';
-$wb['limit_xmpp_user_error_notint'] = 'Limite de usuários XMPP deve ser um número.';
-$wb['limit_xmpp_domain_txt'] = 'Limite de domínios XMPP';
-$wb['limit_xmpp_user_txt'] = 'Limite de contas XMPP';
+$wb['limit_database_quota_txt'] = 'Cotas de banco de dados';
+$wb['limit_database_quota_error_notint'] = 'O limite das cotas de banco de dados deve ser um número.';
+$wb['xmpp_limits_txt'] = 'Limites de xmpp';
+$wb['xmpp_servers_txt'] = 'Servidores xmpp';
+$wb['xmpp_servers_placeholder'] = 'Selecione o(s) servidor(es) xmpp';
+$wb['no_xmpp_server_error'] = 'Ao menos um servidor xmpp deve ser selecionado.';
+$wb['xmpp_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor xmpp. Garanta que este servidor não é usado por este cliente antes de removê-lo.';
+$wb['limit_xmpp_domain_error_notint'] = 'O limite de domínios xmpp deve ser um número.';
+$wb['limit_xmpp_user_error_notint'] = 'O limite de usuários xmpp deve ser um número.';
+$wb['limit_xmpp_domain_txt'] = 'Limite de domínios xmpp';
+$wb['limit_xmpp_user_txt'] = 'Limite de usuários xmpp';
 $wb['limit_xmpp_muc_txt'] = 'Chat multiusuário disponível';
 $wb['limit_xmpp_pastebin_txt'] = 'Pastebin para MUC disponível';
-$wb['limit_xmpp_httparchive_txt'] = 'Arquivo HTTP para MUC disponível';
+$wb['limit_xmpp_httparchive_txt'] = 'Arquivos http para MUC disponível';
 $wb['limit_xmpp_anon_txt'] = 'Host anônimo disponível';
 $wb['limit_xmpp_vjud_txt'] = 'Diretório de usuário VJUD disponível';
 $wb['limit_xmpp_proxy_txt'] = 'Proxy Bytestream disponível';
 $wb['limit_xmpp_status_txt'] = 'Estado do host disponível';
-$wb['dns_servers_txt'] = 'Servidores DNS';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
-$wb['limit_directive_snippets_txt'] = 'Exibir seleção de configuração do servidor de páginas';
-$wb['limit_database_user_txt'] = 'Limite de usuários de banco de dados';
+$wb['dns_servers_txt'] = 'Servidores dns';
+$wb['limit_directive_snippets_txt'] = 'Exibir seleção de configurações do servidor web';
+$wb['limit_database_user_txt'] = 'Limite de usuários do banco de dados';
 $wb['web_servers_txt'] = 'Servidores web';
+$wb['dns_servers_txt'] = 'Servidores dns';
+$wb['xmpp_servers_txt'] = 'Servidores xmpp';
 $wb['db_servers_txt'] = 'Servidores de banco de dados';
 $wb['mail_servers_txt'] = 'Servidores de e-mail';
 $wb['Limits'] = 'Limites';
diff --git a/interface/web/client/lib/lang/br_client_template_list.lng b/interface/web/client/lib/lang/br_client_template_list.lng
index db73df8efd..47bd2e5779 100644
--- a/interface/web/client/lib/lang/br_client_template_list.lng
+++ b/interface/web/client/lib/lang/br_client_template_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Gabarito de limites para clientes';
+$wb['list_head_txt'] = 'Gabaritos de clientes e revendas';
 $wb['template_type_txt'] = 'Tipo';
-$wb['template_name_txt'] = 'Nome do Gabarito';
-$wb['template_id_txt'] = 'ID do Gabarito';
-$wb['sys_groupid_txt'] = 'Reseller';
+$wb['template_name_txt'] = 'Nome do gabarito';
+$wb['template_id_txt'] = 'ID do gabarito';
+$wb['sys_groupid_txt'] = 'Revenda';
 ?>
diff --git a/interface/web/client/lib/lang/br_clients_list.lng b/interface/web/client/lib/lang/br_clients_list.lng
index 7470bd27c4..8016151a9b 100644
--- a/interface/web/client/lib/lang/br_clients_list.lng
+++ b/interface/web/client/lib/lang/br_clients_list.lng
@@ -3,12 +3,12 @@ $wb['list_head_txt'] = 'Clientes';
 $wb['client_id_txt'] = 'ID';
 $wb['company_name_txt'] = 'Empresa';
 $wb['contact_name_txt'] = 'Contato';
+$wb['username_txt'] = 'Usuário';
 $wb['city_txt'] = 'Cidade';
 $wb['country_txt'] = 'País';
 $wb['add_new_record_txt'] = 'Adicionar novo cliente';
-$wb['username_txt'] = 'Usuário';
-$wb['customer_no_txt'] = 'Código do Cliente';
-$wb['locked_txt'] = 'Locked';
-$wb['yes_txt'] = 'Yes';
-$wb['no_txt'] = 'No';
+$wb['customer_no_txt'] = 'Código do cliente';
+$wb['locked_txt'] = 'Bloqueado';
+$wb['yes_txt'] = 'Sim';
+$wb['no_txt'] = 'Não';
 ?>
diff --git a/interface/web/client/lib/lang/br_domain.lng b/interface/web/client/lib/lang/br_domain.lng
index 26c205a56b..988976d2ce 100644
--- a/interface/web/client/lib/lang/br_domain.lng
+++ b/interface/web/client/lib/lang/br_domain.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['domain_error_empty'] = 'Nome do domínio está em branco.';
-$wb['domain_error_unique'] = 'Nome do domínio já existe.';
-$wb['domain_error_regex'] = 'Nome do domínio não é permitido.';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'O domínio já existe.';
+$wb['domain_error_regex'] = 'O nome do domínio não é permitido.';
 $wb['Domain'] = 'Domínio';
 ?>
diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng
index d90d3b15a2..12a8a2953f 100644
--- a/interface/web/client/lib/lang/br_reseller.lng
+++ b/interface/web/client/lib/lang/br_reseller.lng
@@ -1,26 +1,29 @@
 <?php
-$wb['limit_maildomain_txt'] = 'Limite de domínios de e-mails';
-$wb['limit_mailbox_txt'] = 'Limite de contas de e-mails';
-$wb['limit_mailalias_txt'] = 'Limite de apelidos de domínio de e-mails';
-$wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de e-mails';
-$wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo';
-$wb['limit_mailrouting_txt'] = 'Limite de transportes de e-mails';
-$wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mails';
-$wb['limit_fetchmail_txt'] = 'Limite de contas de busca ';
-$wb['limit_mailquota_txt'] = 'Cota de e-mail';
-$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam lista branca/negra';
-$wb['limit_spamfilter_user_txt'] = 'Limite de usuários de filtros anti-spam';
+$wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mail';
+$wb['limit_mailbox_txt'] = 'Limite de contas de e-mail';
+$wb['limit_mailalias_txt'] = 'Limite de alias de e-mail';
+$wb['limit_mailaliasdomain_txt'] = 'Limite de alias de domínios';
+$wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de e-mail';
+$wb['limit_mailcatchall_txt'] = 'Limite de contas cata-tudo';
+$wb['limit_mailrouting_txt'] = 'Limite de rotas de e-mail';
+$wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mail';
+$wb['limit_fetchmail_txt'] = 'Limite de contas de busca';
+$wb['limit_mailquota_txt'] = 'Cota de contas de e-mail';
+$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista branca/negra"';
+$wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam por usuário';
 $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam';
-$wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
+$wb['default_mailserver_txt'] = 'Servidor de e-mail padrão';
 $wb['company_name_txt'] = 'Empresa';
-$wb['contact_firstname_txt'] = 'Nome do contato';
-$wb['contact_name_txt'] = 'Sobrenome do contato';
+$wb['contact_firstname_txt'] = 'Contato';
+$wb['contact_name_txt'] = 'Nome do contato';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
+$wb['password_click_to_set_txt'] = 'Clique para configurar';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['language_txt'] = 'Idioma';
 $wb['usertheme_txt'] = 'Tema';
-$wb['street_txt'] = 'Rua';
+$wb['street_txt'] = 'Endereço';
 $wb['zip_txt'] = 'CEP';
 $wb['city_txt'] = 'Cidade';
 $wb['state_txt'] = 'Estado';
@@ -28,180 +31,177 @@ $wb['country_txt'] = 'País';
 $wb['telephone_txt'] = 'Telefone';
 $wb['mobile_txt'] = 'Celular';
 $wb['fax_txt'] = 'Fax';
-$wb['email_txt'] = 'e-mail';
-$wb['internet_txt'] = 'Internet';
-$wb['icq_txt'] = 'Skype/Telegram';
-$wb['notes_txt'] = 'Notas';
+$wb['email_txt'] = 'e-Mail';
+$wb['internet_txt'] = 'Site';
+$wb['icq_txt'] = 'Redes Sociais';
+$wb['notes_txt'] = 'Observações';
 $wb['company_txt'] = 'Empresa';
 $wb['title_txt'] = 'Título';
 $wb['firstname_txt'] = 'Nome';
 $wb['surname_txt'] = 'Sobrenome';
 $wb['limit_domain_txt'] = 'Limite de domínios';
 $wb['limit_subdomain_txt'] = 'Limite de subdomínios';
-$wb['limit_webquota_txt'] = 'Cota de site';
+$wb['limit_webquota_txt'] = 'Cota de sites';
 $wb['limit_database_txt'] = 'Limite de banco de dados';
+$wb['limit_database_user_txt'] = 'Limite de usuários do banco de dados';
 $wb['limit_cron_txt'] = 'Limite de tarefas no cron';
-$wb['limit_cron_type_txt'] = 'Limites de tarefas no cron (em chroot e url completas)';
-$wb['limit_cron_frequency_txt'] = 'Limite de tempo entre as execuções';
+$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefa no cron (chrooted e url implícitas)';
+$wb['limit_cron_frequency_txt'] = 'Tempo de espera entre as execuções';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['limit_client_error_notint'] = 'Limite de clientes para revenda deve ser um número.';
+$wb['limit_client_error_notint'] = 'O limite de clientes deve ser um número.';
 $wb['firstname_error_empty'] = 'Nome está em branco.';
 $wb['contact_error_empty'] = 'Contato está em branco.';
-$wb['default_webserver_txt'] = 'Servidor de páginas padrão';
+$wb['default_webserver_txt'] = 'Servidor web padrão';
 $wb['limit_web_domain_txt'] = 'Limite de domínios de site';
-$wb['limit_web_aliasdomain_txt'] = 'Limite de apelidos';
-$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios';
+$wb['limit_web_aliasdomain_txt'] = 'Limite de alias de domínios de site';
+$wb['limit_web_subdomain_txt'] = 'Limite subdomínios de site';
 $wb['limit_ftp_user_txt'] = 'Limite de usuários ftp';
-$wb['default_dnsserver_txt'] = 'Servidor dns Padrão';
-$wb['limit_dns_zone_txt'] = 'Limite de de zonas dns';
+$wb['default_dnsserver_txt'] = 'Servidor dns padrão';
+$wb['limit_dns_zone_txt'] = 'Limite de zonas dns';
 $wb['limit_dns_slave_zone_txt'] = 'Limite de zonas dns secundárias';
 $wb['limit_dns_record_txt'] = 'Limite de registros dns';
-$wb['limit_shell_user_txt'] = 'Limite de usuários shell';
+$wb['limit_shell_user_txt'] = 'Limite de usuários do shell';
+$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
+$wb['limit_backup_txt'] = 'Função de backup disponível';
 $wb['limit_client_txt'] = 'Limite de clientes';
-$wb['username_error_empty'] = 'Nome do usuário está em branco.';
-$wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
-$wb['limit_maildomain_error_notint'] = 'Limite de domínios de e-mails deve ser um número.';
-$wb['limit_mailbox_error_notint'] = 'Limite de contas de e-mails deve ser um número.';
-$wb['limit_mailalias_error_notint'] = 'Limite de apelidos de domínio de e-mails deve ser um número.';
-$wb['limit_mailforward_error_notint'] = 'Limite de encaminhamentos de e-mails deve ser um número.';
-$wb['limit_mailcatchall_error_notint'] = 'Limite de contas cata tudo deve ser um número.';
-$wb['limit_mailrouting_error_notint'] = 'Limite de transportes de e-mails deve ser um número.';
-$wb['limit_mailfilter_error_notint'] = 'Limite de filtros de e-mails deve ser um número.';
-$wb['limit_mailfetchmail_error_notint'] = 'Limite de contas de busca deve ser um número.';
-$wb['limit_mailquota_error_notint'] = 'A cota de e-mail deve ser um número.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Limite de filtros anti-spam lista branca/negra deve ser um número.';
-$wb['limit_spamfilter_user_error_notint'] = 'Limite de usuários de filtros anti-spam deve ser um número.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Limite de políticas anti-spam deve ser um número.';
-$wb['limit_web_domain_error_notint'] = 'Limite de sites deve ser um número.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Limite de apelidos de domínio de site deve ser um número.';
-$wb['limit_web_subdomain_error_notint'] = 'Limite de subdomínios de site deve ser um número.';
-$wb['limit_ftp_user_error_notint'] = 'Limite de usuários ftp deve ser um número.';
-$wb['limit_shell_user_error_notint'] = 'Limite de usuários shell deve ser um número.';
-$wb['limit_dns_zone_error_notint'] = 'Limite de registros dns deve ser um número.';
-$wb['limit_dns_slave_zone_error_notint'] = 'Limite de zonas dns secundárias deve ser um número.';
-$wb['limit_dns_record_error_notint'] = 'Limite de registros dns deve ser um número.';
+$wb['username_error_empty'] = 'Usuário está em branco.';
+$wb['username_error_unique'] = 'O nome de usuário deve ser exclusivo.';
+$wb['limit_maildomain_error_notint'] = 'O limite de domínios de e-mail deve ser um número.';
+$wb['limit_mailmailinglist_error_notint'] = 'O limite de registro de listas de e-mail deve ser um número.';
+$wb['limit_mailbox_error_notint'] = 'O limite de contas de e-mail deve ser um número.';
+$wb['limit_mailalias_error_notint'] = 'O limite de alias de e-mail deve ser um número.';
+$wb['limit_mailforward_error_notint'] = 'O limite de encaminhamentos deve ser um número.';
+$wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata-tudo deve ser um número.';
+$wb['limit_mailrouting_error_notint'] = 'O limite de rotas de e-mail deve ser um número.';
+$wb['limit_mailfilter_error_notint'] = 'O limite de filtros de e-mail deve ser um número.';
+$wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.';
+$wb['limit_mailquota_error_notint'] = 'O limite das cotas de e-mail deve ser um número.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'O limite de filtros anti-spam "lista branca/negra" deve ser um número.';
+$wb['limit_spamfilter_user_error_notint'] = 'O limite de filtros anti-spam por conta de e-mail deve ser um número.';
+$wb['limit_spamfilter_policy_error_notint'] = 'O limite de políticas anti-spam deve ser um número.';
+$wb['limit_web_domain_error_notint'] = 'O limite de sites deve ser um número.';
+$wb['limit_web_aliasdomain_error_notint'] = 'O limite de alias de domínios de site deve ser um número.';
+$wb['limit_web_subdomain_error_notint'] = 'O limite de subdomínios de site deve ser um número.';
+$wb['limit_ftp_user_error_notint'] = 'O limite de usuários ftp deve ser um número.';
+$wb['limit_webdav_user_error_notint'] = 'O limite de usuários webdav deve ser um número.';
+$wb['limit_shell_user_error_notint'] = 'O limite de usuários do shell deve ser um número.';
+$wb['limit_dns_zone_error_notint'] = 'O limite de zonas dns deve ser um número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'O limite de zonas dns secundárias deve ser um número.';
+$wb['limit_dns_record_error_notint'] = 'O limite de registros dns deve ser um número.';
 $wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['limit_database_error_notint'] = 'Limite de banco de dados deve ser um número.';
-$wb['limit_cron_error_notint'] = 'Limite de tarefas no cron deve ser um número.';
-$wb['limit_cron_error_frequency'] = 'Limite de frequência no cron deve ser um número.';
+$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número.';
+$wb['limit_cron_error_notint'] = 'O limite de tarefas no cron deve ser um número.';
+$wb['limit_cron_error_frequency'] = 'O limite da frequência de execuções no cron deve ser um número.';
 $wb['username_error_regex'] = 'O nome do usuário contém caracteres inválidos.';
-$wb['template_master_txt'] = 'Gabarito mestre';
-$wb['template_additional_txt'] = 'Gabarito personalizado';
-$wb['ssh_chroot_txt'] = 'Opções do Chroot SSH';
-$wb['web_php_options_txt'] = 'Opções do PHP';
-$wb['limit_client_error'] = 'Limite de clientes foi alcançado.';
-$wb['limit_client_error_positive_or_unlimited'] = 'Limite de clientes deve ser > 0';
-$wb['limit_web_quota_txt'] = 'Cota de site';
-$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
-$wb['limit_trafficquota_error_notint'] = 'A cota de tráfego deve ser um número.';
-$wb['customer_no_txt'] = 'Código do cliente.';
-$wb['vat_id_txt'] = 'VAT ID';
-$wb['required_fields_txt'] = '*Campos obrigatórios';
-$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mails';
-$wb['limit_mailmailinglist_error_notint'] = 'Limite de listas de e-mails deve ser um número.';
-$wb['limit_webdav_user_txt'] = 'Limite de usuário webdav';
-$wb['limit_webdav_user_error_notint'] = 'Limite de usuários webdav deve ser um número.';
-$wb['limit_backup_txt'] = 'Função de backup disponível';
-$wb['limit_mailaliasdomain_txt'] = 'Limite de apelidos de domínio de e-mails';
-$wb['limit_openvz_vm_txt'] = 'Limite de servidores virtuais';
-$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito de servidor virtual';
-$wb['limit_openvz_vm_error_notint'] = 'Limite de servidores virtuais deve ser um número.';
-$wb['web_php_options_notempty'] = 'Nenhuma opção do php selecionada. Selecione ao menos uma opção.';
-$wb['ssh_chroot_notempty'] = 'Nenhuma opção do ssh-chroot selecionada. Selecione ao menos uma opção.';
-$wb['username_error_collision'] = 'O nome do usuário não pode iniciar com a palavra -web- ou -web- seguida de um número.';
+$wb['template_master_txt'] = 'Gabarito Mestre';
+$wb['template_additional_txt'] = 'Gabarito Personalizado';
 $wb['add_additional_template_txt'] = 'Adicionar gabarito personalizado';
 $wb['delete_additional_template_txt'] = 'Remover gabarito personalizado';
+$wb['ssh_chroot_txt'] = 'Opções SSH-Chroot';
+$wb['web_php_options_txt'] = 'Opções PHP';
 $wb['limit_cgi_txt'] = 'CGI disponível';
 $wb['limit_ssi_txt'] = 'SSI disponível';
 $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
-$wb['force_suexec_txt'] = 'SuEXEC forced';
+$wb['force_suexec_txt'] = 'Forçar SuEXEC';
 $wb['limit_hterror_txt'] = 'Custom error docs disponível';
-$wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
+$wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponível';
 $wb['limit_ssl_txt'] = 'SSL disponível';
-$wb['web_limits_txt'] = 'Limites web';
-$wb['email_limits_txt'] = 'Limites de e-mails';
-$wb['database_limits_txt'] = 'Limites de banco de dados';
-$wb['cron_job_limits_txt'] = 'Limites de tarefas no cron';
-$wb['dns_limits_txt'] = 'Limites de dns';
-$wb['virtualization_limits_txt'] = 'Limites de virtualização';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
+$wb['limit_client_error'] = 'O limite de clientes para esta conta foi alcançado.';
+$wb['limit_client_error_positive_or_unlimited'] = 'O número de clientes deve ser > 0 ou -1 (ilimitado)';
+$wb['limit_web_quota_txt'] = 'Cota web';
+$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
+$wb['limit_trafficquota_error_notint'] = 'Cota de tráfego deve ser um número.';
+$wb['customer_no_txt'] = 'Código do cliente';
+$wb['vat_id_txt'] = 'VAT ID';
+$wb['required_fields_txt'] = '*Campos obrigatórios';
+$wb['limit_openvz_vm_txt'] = 'Limite de máquinas virtuais';
+$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito para máquina virtual';
+$wb['limit_openvz_vm_error_notint'] = 'O limite de máquinas virtuais deve ser um número.';
+$wb['web_php_options_notempty'] = 'Nenhuma opção PHP selecionado. Selecione ao menos uma opção PHP.';
+$wb['ssh_chroot_notempty'] = 'Nenhuma opção SSH chroot selecionada. Selecione ao menos uma opção SSH chroot.';
+$wb['username_error_collision'] = 'O nome de usuário não pode iniciar com -web- ou -web- seguida de um número.';
+$wb['web_limits_txt'] = 'Limite de site';
+$wb['email_limits_txt'] = 'Limites de e-mail';
+$wb['database_limits_txt'] = 'Limite de banco de dados';
+$wb['cron_job_limits_txt'] = 'Limites de tarefa no Cron';
+$wb['dns_limits_txt'] = 'Limites de DNS';
+$wb['virtualization_limits_txt'] = 'Limites de máquinas virtuais';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
-$wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo (ou deixe em branco).';
+$wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo e não pode estar está em branco.';
 $wb['paypal_email_error_isemail'] = 'Por favor, insira um e-mail do PayPal válido.';
-$wb['paypal_email_txt'] = 'e-mail do PayPal';
-$wb['company_id_txt'] = 'ID da empresa';
-$wb['bank_account_number_txt'] = 'Conta corrente';
-$wb['bank_account_owner_txt'] = 'Proprietário';
-$wb['bank_code_txt'] = 'Codigo do banco';
+$wb['paypal_email_txt'] = 'e-Mail PayPal';
+$wb['company_id_txt'] = 'Código da Empresa';
+$wb['bank_account_number_txt'] = 'Conta bancária';
+$wb['bank_account_owner_txt'] = 'Proprietário da conta bancária';
+$wb['bank_code_txt'] = 'Código do banco';
 $wb['bank_name_txt'] = 'Nome do banco';
 $wb['bank_account_iban_txt'] = 'IBAN';
 $wb['bank_account_swift_txt'] = 'BIC/Swift';
-$wb['aps_limits_txt'] = 'Limites de instalações de apps';
-$wb['limit_aps_txt'] = 'Limites de instâncias de apps';
-$wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
-$wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
+$wb['aps_limits_txt'] = 'Limites de instaladores de APPs';
+$wb['limit_aps_txt'] = 'Limite de instâncias de APPs';
+$wb['limit_aps_error_notint'] = 'O limite de instâncias de APPs deve ser um número.';
+$wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundário padrão';
 $wb['locked_txt'] = 'Bloqueado';
 $wb['canceled_txt'] = 'Cancelado';
 $wb['gender_m_txt'] = 'Sr.';
 $wb['gender_f_txt'] = 'Sra.';
 $wb['gender_txt'] = 'Título';
-$wb['customer_no_template_txt'] = 'No. do gabarito do cliente';
-$wb['customer_no_template_error_regex_txt'] = 'O número do gabarito contém caracteres inválidos.';
-$wb['customer_no_start_txt'] = 'Valor inicial do código do cliente';
-$wb['customer_no_counter_txt'] = 'Contador de código do cliente';
-$wb['added_by_txt'] = 'Cadastrado por';
-$wb['added_date_txt'] = 'Data do cadastro';
-$wb['limit_domainmodule_error_notint'] = 'Limite de módulos de domínio deve ser um número.';
-$wb['limit_domainmodule_txt'] = 'Limites de módulos de domínio';
-$wb['client_limits_txt'] = 'Limite de clientes';
-$wb['err_msg_master_tpl_set'] = 'Todas as configurações personalizadas de limites serão ignoradas se um gabarito mestre ou \\"personalizado\\" for selecionado.';
-$wb['btn_save_txt'] = 'Salvar';
-$wb['btn_cancel_txt'] = 'Cancelar';
-$wb['email_error_empty'] = 'e-mail está em branco.';
-$wb['web_servers_txt'] = 'Servidores web';
-$wb['web_servers_placeholder'] = 'Selecionar servidores web';
-$wb['no_web_server_error'] = 'Ao menos um servidor de páginas deve ser selecionado.';
-$wb['web_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor de páginas. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['dns_servers_txt'] = 'Servidores dns';
-$wb['dns_servers_placeholder'] = 'Selecione os servidores dns';
-$wb['no_dns_server_error'] = 'Ao menos um servidor dns deve ser selecionado.';
-$wb['dns_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor dns. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['db_servers_txt'] = 'Servidores de banco de dados';
-$wb['db_servers_placeholder'] = 'Selecione os servidores de banco de dados.';
+$wb['web_servers_txt'] = 'Servidores Web';
+$wb['web_servers_placeholder'] = 'Selecione o(s) servidor(es) web';
+$wb['no_web_server_error'] = 'Ao menos um servidor web deve ser selecionado.';
+$wb['web_servers_used'] = 'O servidor web que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['dns_servers_txt'] = 'Servidor DNS';
+$wb['dns_servers_placeholder'] = 'Selecione os servidores DNS';
+$wb['no_dns_server_error'] = 'Ao menos um servidor DNS deve ser selecionado.';
+$wb['dns_servers_used'] = 'O servidor DNS que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['db_servers_txt'] = 'Servidor de banco de dados';
+$wb['db_servers_placeholder'] = 'Selecione os servidores de banco de dados';
 $wb['no_db_server_error'] = 'Ao menos um servidor de banco de dados deve ser selecionado.';
-$wb['db_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor de banco de dados. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['mail_servers_txt'] = 'Servidores de e-mails';
-$wb['mail_servers_placeholder'] = 'Selecionar servidores de e-mails';
+$wb['db_servers_used'] = 'O servidor de banco de dados que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['mail_servers_txt'] = 'Servidores de e-mail';
+$wb['mail_servers_placeholder'] = 'Selecione os servidores de e-mail';
 $wb['no_mail_server_error'] = 'Ao menos um servidor de e-mail deve ser selecionado.';
-$wb['mail_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor de e-mails. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['xmpp_limits_txt'] = 'Limites XMPP';
-$wb['xmpp_servers_txt'] = 'Servidores XMPP';
-$wb['xmpp_servers_placeholder'] = 'Selecione os servidores XMPP';
-$wb['no_xmpp_server_error'] = 'Ao menos um servidor XMPP deve ser selecionado.';
-$wb['xmpp_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor xmpp. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['limit_xmpp_domain_error_notint'] = 'Limite de domínios xmpp deve ser um número.';
-$wb['limit_xmpp_user_error_notint'] = 'Limite de usuários xmpp deve ser um número.';
+$wb['mail_servers_used'] = 'O servidor de e-mails que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['customer_no_template_txt'] = 'Código do gabarito de clientes';
+$wb['customer_no_template_error_regex_txt'] = 'O código de gabarito de clientes possui caracteres inválidos.';
+$wb['customer_no_start_txt'] = 'Iniciar código de clientes em';
+$wb['customer_no_counter_txt'] = 'Contador de código do cliente';
+$wb['xmpp_limits_txt'] = 'Limites xmpp';
+$wb['xmpp_servers_txt'] = 'Servidores xmpp';
+$wb['xmpp_servers_placeholder'] = 'Selecione os servidores xmpp';
+$wb['no_xmpp_server_error'] = 'Ao menos um servidor xmpp deve ser selecionado.';
+$wb['xmpp_servers_used'] = 'O servidor xmpp que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['limit_xmpp_domain_error_notint'] = 'O limite de domínios xmpp deve ser um número.';
+$wb['limit_xmpp_user_error_notint'] = 'O limite de usuários xmpp deve ser um número.';
 $wb['limit_xmpp_domain_txt'] = 'Limite de domínios xmpp';
 $wb['limit_xmpp_user_txt'] = 'Limite de usuários xmpp';
-$wb['limit_xmpp_muc_txt'] = 'Chat multiusuário disponível';
+$wb['limit_xmpp_muc_txt'] = 'Chat multiusuário (MUC) disponível';
 $wb['limit_xmpp_pastebin_txt'] = 'Pastebin para MUC disponível';
 $wb['limit_xmpp_httparchive_txt'] = 'Arquivo HTTP para MUC disponível';
 $wb['limit_xmpp_anon_txt'] = 'Host anônimo disponível';
 $wb['limit_xmpp_vjud_txt'] = 'Diretório de usuário VJUD disponível';
-$wb['limit_xmpp_proxy_txt'] = 'Proxy bytestream disponível';
+$wb['limit_xmpp_proxy_txt'] = 'Proxy Bytestream disponível';
 $wb['limit_xmpp_status_txt'] = 'Estado do host disponível';
-$wb['invalid_vat_id'] = 'O VAT ID é é inválido.';
-$wb['limit_database_user_txt'] = 'Limite de usuários de banco de dados';
-$wb['limit_database_user_error_notint'] = 'Limite de usuários de banco de dados deve ser um número.';
-$wb['limit_database_quota_txt'] = 'Cota para banco de dados';
-$wb['limit_database_quota_error_notint'] = 'A cota para banco de dados deve ser um número.';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
-$wb['limit_directive_snippets_txt'] = 'Exibir seleção das configurações do servidor de páginas';
-$wb['password_click_to_set_txt'] = 'Configurar';
+$wb['added_by_txt'] = 'Cadastrado por';
+$wb['added_date_txt'] = 'Data do cadastro';
+$wb['limit_domainmodule_error_notint'] = 'Limite de módulos de domínio deve ser um número.';
+$wb['limit_domainmodule_txt'] = 'Limite de módulos de domínio';
+$wb['client_limits_txt'] = 'Limite de clientes';
+$wb['err_msg_master_tpl_set'] = 'Todas as configurações de limites serão ignoradas se qualquer gabarito mestre ou personalizado for selecionado.';
+$wb['invalid_vat_id'] = 'O ID do VAT é inválido.';
+$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+$wb['email_error_empty'] = 'O endereço de e-mail está em branco.';
+$wb['limit_directive_snippets_txt'] = 'Exibir seleção de configuração do servidor web';
+$wb['limit_database_user_error_notint'] = 'O limite de usuários do banco de dados deve ser um número.';
+$wb['limit_database_quota_txt'] = 'Cota do banco de dados';
+$wb['limit_database_quota_error_notint'] = 'A cota do banco de dados deve ser um número.';
 $wb['Limits'] = 'Limites';
 ?>
diff --git a/interface/web/client/lib/lang/br_resellers_list.lng b/interface/web/client/lib/lang/br_resellers_list.lng
index 5a64358af9..1f67e7f593 100644
--- a/interface/web/client/lib/lang/br_resellers_list.lng
+++ b/interface/web/client/lib/lang/br_resellers_list.lng
@@ -6,6 +6,6 @@ $wb['contact_name_txt'] = 'Contato';
 $wb['city_txt'] = 'Cidade';
 $wb['country_txt'] = 'País';
 $wb['add_new_record_txt'] = 'Adicionar nova revenda';
-$wb['customer_no_txt'] = 'Código do Cliente';
+$wb['customer_no_txt'] = 'Código do cliente';
 $wb['username_txt'] = 'Usuário';
 ?>
diff --git a/interface/web/client/lib/lang/tr.lng b/interface/web/client/lib/lang/tr.lng
index 0f3df4d7a3..cc2e8aa022 100644
--- a/interface/web/client/lib/lang/tr.lng
+++ b/interface/web/client/lib/lang/tr.lng
@@ -16,14 +16,15 @@ $wb['delete_additional_template_txt'] = 'Ek Kalıbı Sil';
 $wb['Messaging'] = 'Ä°letiÅŸim';
 $wb['Send email'] = 'E-posta Gönderimi';
 $wb['Edit Client Circle'] = 'Müşteri Grubu Düzenleme';
-$wb['Domains'] = 'Alan Adları';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['Domains'] = 'Etki Alanları';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['client_txt'] = 'Müşteri';
-$wb['error_domain_in mailuse'] = 'Bu alan adı e-posta alan adı olarak kullanıldığından silinemez';
-$wb['error_domain_in webuse'] = 'Bu alan adı web alan adı olarak kullanıldığından silinemez';
-$wb['error_client_can_not_add_domain'] = 'Yeni bir alan adı ekleyemezsiniz';
+$wb['error_domain_in dnsuse'] = 'Bu etki alanı birincil DNS bölgesi olarak kullanıldığından silinemez';
+$wb['error_domain_in dnsslaveuse'] = 'Bu etki alanı ikincil DNS bölgesi olarak kullanıldığından silinemez';
+$wb['error_domain_in mailuse'] = 'Bu etki alanı e-posta etki alanı olarak kullanıldığından silinemez';
+$wb['error_domain_in webuse'] = 'Bu etki alanı web etki alanı olarak kullanıldığından silinemez';
+$wb['error_client_can_not_add_domain'] = 'Yeni bir etki alanı ekleyemezsiniz';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['error_client_group_id_empty'] = 'Bir müşteri seçmelisiniz<br>';
-$wb['error_domain_in dnsuse'] = 'This domain cannot be deleted, because it is in use as dns zone';
-$wb['error_domain_in dnsslaveuse'] = 'This domain cannot be deleted, because it is in use as secondary dns zone';
-$wb['Email-Templates'] = 'Email-Templates';
+$wb['Email-Templates'] = 'E-posta Kalıpları';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng
index 765d9f1980..f071170966 100644
--- a/interface/web/client/lib/lang/tr_client.lng
+++ b/interface/web/client/lib/lang/tr_client.lng
@@ -1,24 +1,26 @@
 <?php
-$wb['limit_maildomain_txt'] = 'En Fazla E-posta Alan Adı Sayısı';
-$wb['limit_mailmailinglist_txt'] = 'En Fazla Posta Listesi Sayısı';
-$wb['limit_mailbox_txt'] = 'En Fazla Posta Kutusu Sayısı';
+$wb['limit_maildomain_txt'] = 'En Fazla E-posta Etki Alanı Sayısı';
+$wb['limit_mailmailinglist_txt'] = 'En Fazla E-posta Listesi Sayısı';
+$wb['limit_mailbox_txt'] = 'En Fazla E-posta Kutusu Sayısı';
 $wb['limit_mailalias_txt'] = 'En Fazla Takma E-posta Sayısı';
-$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
+$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
 $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirme Sayısı';
 $wb['limit_mailcatchall_txt'] = 'En Fazla Tümünü Al Hesabı Sayısı';
 $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı';
 $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı';
-$wb['limit_fetchmail_txt'] = 'En Fazla Posta Alma Hesabı Sayısı';
-$wb['limit_mailquota_txt'] = 'Posta Kutusu Kotası';
-$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz Posta Beyaz/Kara Liste Süzgeci Sayısı';
-$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz Posta Süzgeci Kullanıcısı Sayısı';
-$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz Posta Süzgeci Kuralı Sayısı';
-$wb['default_mailserver_txt'] = 'Varsayılan Posta Sunucusu';
-$wb['company_name_txt'] = 'Kurum Adı';
+$wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı';
+$wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası';
+$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı';
+$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kullanıcısı Sayısı';
+$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kuralı Sayısı';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['company_name_txt'] = 'Kuruluş Adı';
+$wb['contact_firstname_txt'] = 'İlgili Adı';
 $wb['contact_name_txt'] = 'İlgili Adı';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['language_txt'] = 'Dil';
 $wb['usertheme_txt'] = 'Tema';
 $wb['street_txt'] = 'Adres';
@@ -33,8 +35,8 @@ $wb['email_txt'] = 'E-posta';
 $wb['internet_txt'] = 'Ä°nternet';
 $wb['icq_txt'] = 'ICQ';
 $wb['notes_txt'] = 'Notlar';
-$wb['company_txt'] = 'Kurum';
-$wb['title_txt'] = 'Ãœnvan';
+$wb['company_txt'] = 'KuruluÅŸ';
+$wb['title_txt'] = 'Unvan';
 $wb['firstname_txt'] = 'Ad';
 $wb['surname_txt'] = 'Soyad';
 $wb['limit_domain_txt'] = 'limit_domain';
@@ -42,16 +44,16 @@ $wb['limit_subdomain_txt'] = 'limit_subdomain';
 $wb['limit_webquota_txt'] = 'limit_webquota';
 $wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
 $wb['limit_cron_txt'] = 'En Fazla Zamanlanmış Görev Sayısı';
-$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Tipi Sayısı (chroot ve tam İnternet adresi uygulama)';
+$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Türü Sayısı (chroot ve tam İnternet adresi uygulama)';
 $wb['limit_cron_frequency_txt'] = 'İki Çalıştırma Arasındaki Süre';
 $wb['ip_address_txt'] = 'ip_address';
 $wb['limit_client_error_notint'] = 'Alt müşteri sınırı bir sayı olmalıdır.';
 $wb['firstname_error_empty'] = 'Ad boÅŸ olamaz.';
 $wb['contact_error_empty'] = 'İlgili adı boş olamaz.';
 $wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
-$wb['limit_web_domain_txt'] = 'En Fazla Alan Adı Sayısı';
-$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
-$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Alan Adı Sayısı';
+$wb['limit_web_domain_txt'] = 'En Fazla Etki Alanı Sayısı';
+$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
+$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Etki Alanı Sayısı';
 $wb['limit_ftp_user_txt'] = 'En Fazla FTP Kullanıcısı Sayısı';
 $wb['default_dnsserver_txt'] = 'Varsayılan DNS Sunucusu';
 $wb['limit_dns_zone_txt'] = 'En Fazla DNS Bölgesi Sayısı';
@@ -59,32 +61,35 @@ $wb['limit_dns_slave_zone_txt'] = 'En Fazla İkincil DNS Bölgesi Sayısı';
 $wb['limit_dns_record_txt'] = 'En Fazla DNS Kaydı Sayısı';
 $wb['limit_shell_user_txt'] = 'En Fazla Kabuk Kullanıcısı Sayısı';
 $wb['limit_webdav_user_txt'] = 'En Fazla Webdav Kullanıcısı Sayısı';
+$wb['limit_backup_txt'] = 'Yedekleme Özelliği Kullanılsın';
 $wb['limit_client_txt'] = 'En Fazla Müşteri Sayısı';
 $wb['username_error_empty'] = 'Kullanıcı adı boş olamaz.';
 $wb['username_error_unique'] = 'Bu kullanıcı adı zaten var.';
-$wb['limit_maildomain_error_notint'] = 'E-posta alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_mailmailinglist_error_notint'] = 'Posta listesi kaydı sınırı bir sayı olmalıdır.';
-$wb['limit_mailbox_error_notint'] = 'Posta kutusu sınırı bir sayı olmalıdır.';
+$wb['limit_maildomain_error_notint'] = 'E-posta etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_mailmailinglist_error_notint'] = 'E-posta listesi kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_mailbox_error_notint'] = 'E-posta kutusu sınırı bir sayı olmalıdır.';
 $wb['limit_mailalias_error_notint'] = 'Takma e-posta sınırı bir sayı olmalıdır.';
-$wb['limit_mailaliasdomain_error_notint'] = 'E-posta takma alan adı sınırı bir sayı olmalıdır.';
+$wb['limit_mailaliasdomain_error_notint'] = 'E-posta takma etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirme sınırı bir sayı olmalıdır.';
 $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al hesabı sınırı bir sayı olmalıdır.';
 $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.';
 $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.';
 $wb['limit_mailfetchmail_error_notint'] = 'E-posta alma sınırı bir sayı olmalıdır.';
 $wb['limit_mailquota_error_notint'] = 'E-posta kota sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz posta süzgeci beyaz/kara liste sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz posta süzgeci kullanıcısı sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz posta süzgeci kuralı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz ileti süzgeci beyaz/kara liste sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz ileti süzgeci kullanıcısı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz ileti süzgeci kuralı sınırı bir sayı olmalıdır.';
 $wb['limit_web_domain_error_notint'] = 'Web sitesi sınırı bir sayı olmalıdır.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt alan adı sınırı bir sayı olmalıdır.';
+$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_ftp_user_error_notint'] = 'FTP kullanıcısı sınırı bir sayı olmalıdır.';
 $wb['limit_shell_user_error_notint'] = 'Kabuk kullanıcısı sınırı bir sayı olmalıdır.';
 $wb['limit_webdav_user_error_notint'] = 'Webdav kullanıcısı sınırı bir sayı olmalıdır.';
-$wb['limit_dns_zone_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_dns_zone_error_notint'] = 'Birincil DNS kaydı sınırı bir sayı olmalıdır.';
 $wb['limit_dns_slave_zone_error_notint'] = 'İkincil DNS bölgesi sınırı bir sayı olmalıdır.';
+$wb['limit_dns_record_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
 $wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['limit_database_txt'] = 'Veritabanı Sayısı';
 $wb['limit_database_error_notint'] = 'Veritabanı sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_notint'] = 'Zamanlanmış Görev sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_frequency'] = 'Zamanlanmış Görev sıklığı sınırı bir sayı olmalıdır.';
@@ -96,15 +101,16 @@ $wb['add_additional_template_txt'] = 'Ek Kalıbı Ekle';
 $wb['delete_additional_template_txt'] = 'Ek Kalıbı Sil';
 $wb['ssh_chroot_txt'] = 'SSH-Chroot Ayarları';
 $wb['web_php_options_txt'] = 'PHP Ayarları';
-$wb['limit_cgi_txt'] = 'CGI Kullanılabilir';
-$wb['limit_ssi_txt'] = 'SSI Kullanılabilir';
-$wb['limit_perl_txt'] = 'Perl Kullanılabilir';
-$wb['limit_ruby_txt'] = 'Ruby Kullanılabilir';
-$wb['limit_python_txt'] = 'Python Kullanılabilir';
-$wb['force_suexec_txt'] = 'SuEXEC Dayatılmış';
-$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılabilir';
-$wb['limit_wildcard_txt'] = 'Genel Alt Alan Adı Kullanılabilir';
-$wb['limit_ssl_txt'] = 'SSL Kullanılabilir';
+$wb['limit_cgi_txt'] = 'CGI Kullanılsın';
+$wb['limit_ssi_txt'] = 'SSI Kullanılsın';
+$wb['limit_perl_txt'] = 'Perl Kullanılsın';
+$wb['limit_ruby_txt'] = 'Ruby Kullanılsın';
+$wb['limit_python_txt'] = 'Python Kullanılsın';
+$wb['force_suexec_txt'] = 'SuEXEC Dayatılsın';
+$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılsın';
+$wb['limit_wildcard_txt'] = 'Genel Alt Etki Alanı Kullanılsın';
+$wb['limit_ssl_txt'] = 'SSL Kullanılsın';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt Kullanılsın';
 $wb['limit_client_error'] = 'Hesabınıza ekleyebileceğiniz en fazla müşteri sınırına ulaştınız.';
 $wb['limit_web_quota_txt'] = 'Web Kotası';
 $wb['limit_traffic_quota_txt'] = 'Trafik Kotası';
@@ -127,11 +133,12 @@ $wb['bank_account_iban_txt'] = 'IBAN';
 $wb['bank_account_swift_txt'] = 'BIC / Swift';
 $wb['web_limits_txt'] = 'Web Sınırları';
 $wb['email_limits_txt'] = 'E-posta Sınırları';
+$wb['xmpp_limits_txt'] = 'XMPP Sınırları';
 $wb['database_limits_txt'] = 'Veritabanı Sınırları';
 $wb['cron_job_limits_txt'] = 'Zamanlanmış Görev Sınırları';
 $wb['dns_limits_txt'] = 'DNS Sınırları';
 $wb['virtualization_limits_txt'] = 'Sanallaştırma Sınırları';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
@@ -139,66 +146,61 @@ $wb['email_error_isemail'] = 'Lütfen geçerli bir e-posta adresi yazın.';
 $wb['customer_no_error_unique'] = 'Müşteri numarası eşsiz (ya da boş) olmalıdır.';
 $wb['paypal_email_error_isemail'] = 'Lütfen geçerli bir PayPal e-posta adresi yazın.';
 $wb['paypal_email_txt'] = 'PayPal E-posta Adresi';
-$wb['err_msg_master_tpl_set'] = '\\"Özel\\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
+$wb['err_msg_master_tpl_set'] = '"Özel" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yok sayılır.';
 $wb['aps_limits_txt'] = 'APS Yükleyici Sınırları';
 $wb['limit_aps_txt'] = 'En Fazla APS Kopyası Sayısı';
 $wb['limit_aps_error_notint'] = 'APS kopya sayısı sınırı bir sayı olmalıdır.';
 $wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
 $wb['locked_txt'] = 'Kilitli<br/>(tüm web vb. devre dışı)';
 $wb['canceled_txt'] = 'İptal<br/>(müşteri oturumu devre dışı)';
-$wb['gender_txt'] = 'Ãœnvan';
+$wb['gender_txt'] = 'Unvan';
 $wb['gender_m_txt'] = 'Bay';
 $wb['gender_f_txt'] = 'Bayan';
+$wb['web_servers_txt'] = 'Web Sunucuları';
+$wb['web_servers_placeholder'] = 'Web Sunucularını Seçin';
+$wb['no_web_server_error'] = 'En az bir web sunucusu seçilmelidir.';
+$wb['web_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir web sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['dns_servers_txt'] = 'DNS Sunucular';
+$wb['dns_servers_placeholder'] = 'DNS Sunucuları Seçin';
+$wb['no_dns_server_error'] = 'En az bir DNS sunucusu seçilmelidir.';
+$wb['dns_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir DNS sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun';
+$wb['db_servers_txt'] = 'Veritabanı Sunucuları';
+$wb['db_servers_placeholder'] = 'Veritabanı Sunucularını Seçin';
+$wb['no_db_server_error'] = 'En az bir veritabanı sunucusu seçilmelidir.';
+$wb['db_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir veritabanı sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['mail_servers_txt'] = 'E-posta Sunucuları';
+$wb['mail_servers_placeholder'] = 'E-posta Sunucularını Seçin';
+$wb['no_mail_server_error'] = 'En az bir e-posta sunucusu seçilmelidir.';
+$wb['mail_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir e-posta sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+
+$wb['xmpp_servers_txt'] = 'XMPP Sunucular';
+$wb['xmpp_servers_placeholder'] = 'XMPP Sunucuları Seçin';
+$wb['no_xmpp_server_error'] = 'En az bir XMPP sunucusu seçilmelidir.';
+$wb['xmpp_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir XMPP sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_domain_txt'] = 'En Fazla XMPP Etki Alanı Sayısı';
+$wb['limit_xmpp_user_txt'] = 'En Fazla XMPP Hesabı Sayısı';
+$wb['limit_xmpp_muc_txt'] = 'Çok Kullanıcılı Sohbet (ÇKS) Kullanılsın';
+$wb['limit_xmpp_pastebin_txt'] = 'ÇKS için Pastebin Kullanılsın';
+$wb['limit_xmpp_httparchive_txt'] = 'ÇKS için HTTP Arşivi Kullanılsın';
+$wb['limit_xmpp_anon_txt'] = 'Adsız Sunucu Kullanılsın';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD Kullanıcı Klasörü Kullanılsın';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream Vekil Sunucusu Kullanılsın';
+$wb['limit_xmpp_status_txt'] = 'Durum Sunucusu Kullanılsın';
 $wb['added_by_txt'] = 'Ekleyen';
 $wb['added_date_txt'] = 'EklendiÄŸi Tarih';
 $wb['parent_client_id_txt'] = 'Bayi Müşterisi';
-$wb['none_txt'] = 'yok';
-$wb['contact_firstname_txt'] = 'Contact firstname';
-$wb['password_click_to_set_txt'] = 'Click to set';
-$wb['limit_backup_txt'] = 'Backupfunction available';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['xmpp_limits_txt'] = 'XMPP Limits';
-$wb['web_servers_txt'] = 'Webservers';
-$wb['web_servers_placeholder'] = 'Select webservers';
-$wb['no_web_server_error'] = 'At least one webserver must be selected.';
-$wb['web_servers_used'] = 'The server you are trying to remove from this client is used as a webserver. Be sure that this server is not used by this client before you remove it.';
-$wb['dns_servers_txt'] = 'DNS servers';
-$wb['dns_servers_placeholder'] = 'Select DNS servers';
-$wb['no_dns_server_error'] = 'At least one DNS server must be selected.';
-$wb['dns_servers_used'] = 'The server you are trying to remove from this client is used as a DNS server. Be sure that this server is not used by this client before you remove it.';
-$wb['db_servers_txt'] = 'Database servers';
-$wb['db_servers_placeholder'] = 'Select database servers';
-$wb['no_db_server_error'] = 'At least one Database server must be selected.';
-$wb['db_servers_used'] = 'The server you are trying to remove from this client is used as a Database server. Be sure that this server is not used by this client before you remove it.';
-$wb['mail_servers_txt'] = 'Mailservers';
-$wb['mail_servers_placeholder'] = 'Select mailservers';
-$wb['no_mail_server_error'] = 'At least one mailserver must be selected.';
-$wb['mail_servers_used'] = 'The server you are trying to remove from this client is used as a Mailserver. Be sure that this server is not used by this client before you remove it.';
-$wb['xmpp_servers_txt'] = 'XMPP Servers';
-$wb['xmpp_servers_placeholder'] = 'Select XMPP Servers';
-$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
-$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
-$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
-$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
-$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
-$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
-$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
-$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
-$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
-$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
-$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
-$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
-$wb['limit_xmpp_status_txt'] = 'Status host available';
-$wb['limit_database_quota_txt'] = 'Database quota';
-$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
-$wb['limit_database_user_txt'] = 'Max. Database users';
-$wb['limit_database_user_error_notint'] = 'The database user limit must be a number.';
-$wb['reseller_txt'] = 'Reseller';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['invalid_vat_id'] = 'The VAT ID is invalid.';
-$wb['email_error_empty'] = 'Email is empty';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
-$wb['Limits'] = 'Limits';
+$wb['none_txt'] = 'Yok';
+$wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
+$wb['limit_database_quota_error_notint'] = 'Veritabanı kotası sınırı bir sayı olmalıdır.';
+$wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
+$wb['limit_database_user_error_notint'] = 'Veritabanı kullanıcı sınırı bir sayı olmalıdır.';
+$wb['reseller_txt'] = 'Bayi';
+$wb['btn_save_txt'] = 'Kaydet';
+$wb['btn_cancel_txt'] = 'Ä°ptal';
+$wb['invalid_vat_id'] = 'Vergi numarası geçersiz.';
+$wb['email_error_empty'] = 'E-posta boÅŸ olamaz.';
+$wb['limit_directive_snippets_txt'] = 'Web Sunucu Yapılandırma Seçimi Görüntülensin';
+$wb['Limits'] = 'Sınırlar';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_message_template.lng b/interface/web/client/lib/lang/tr_client_message_template.lng
index 885e2afc86..2b2994c557 100644
--- a/interface/web/client/lib/lang/tr_client_message_template.lng
+++ b/interface/web/client/lib/lang/tr_client_message_template.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['template_type_txt'] = 'E-posta tipi';
-$wb['template_name_txt'] = 'Kalıp adı';
+$wb['template_type_txt'] = 'E-posta Türü';
+$wb['template_name_txt'] = 'Kalıp Adı';
 $wb['subject_txt'] = 'Konu';
 $wb['message_txt'] = 'Ä°leti';
-$wb['Email template'] = 'E-posta kalıbı';
+$wb['Email template'] = 'E-posta Kalıbı';
 $wb['Settings'] = 'Ayarlar';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['variables_description_txt'] = '(Kullanıcı adı ve parola değişkenleri yalnız hoşgeldiniz e-postalarında kullanılabilir.)';
-$wb['duplicate_welcome_error'] = 'Yalnız bir varsayılan hoşgeldiniz e-postası kalıbı bulunabilir. Lütfen yeni bir tema eklemek yerine varolan temayı düzenlemeyi deneyin.';
-$wb['subject_error_empty'] = 'Subject is empty';
-$wb['message_error_empty'] = 'Message is empty';
+$wb['duplicate_welcome_error'] = 'Yalnız bir varsayılan hoşgeldiniz e-postası kalıbı bulunabilir. Lütfen yeni bir tema eklemek yerine var olan temayı düzenlemeyi deneyin.';
+$wb['subject_error_empty'] = 'Konu boÅŸ olamaz';
+$wb['message_error_empty'] = 'Ä°leti boÅŸ olamaz';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_message_template_list.lng b/interface/web/client/lib/lang/tr_client_message_template_list.lng
index d0f50c7fea..fb7fd944fe 100644
--- a/interface/web/client/lib/lang/tr_client_message_template_list.lng
+++ b/interface/web/client/lib/lang/tr_client_message_template_list.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['list_head_txt'] = 'E-posta Kalıpları';
-$wb['template_type_txt'] = 'Ä°leti grubu';
-$wb['template_name_txt'] = 'Kalıp adı';
+$wb['template_type_txt'] = 'Ä°leti Grubu';
+$wb['template_name_txt'] = 'Kalıp Adı';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_template.lng b/interface/web/client/lib/lang/tr_client_template.lng
index da9f19f794..3091176448 100644
--- a/interface/web/client/lib/lang/tr_client_template.lng
+++ b/interface/web/client/lib/lang/tr_client_template.lng
@@ -1,61 +1,68 @@
 <?php
-$wb['template_type_txt'] = 'Kalıp Tipi';
+$wb['template_type_txt'] = 'Kalıp Türü';
 $wb['template_name_txt'] = 'Kalıp Adı';
-$wb['limit_client_error_notint'] = 'Müşteri sınırı bir sayı olmalı.';
-$wb['limit_maildomain_txt'] = 'En Fazla E-posta Alan Adı Sayısı';
-$wb['limit_mailbox_txt'] = 'En Fazla Posta Kutusu Sayısı';
+$wb['limit_client_error_notint'] = 'Müşteri sınırı bir sayı olmalıdır.';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['limit_maildomain_txt'] = 'En Fazla E-posta Etki Alanı Sayısı';
+$wb['limit_mailbox_txt'] = 'En Fazla E-posta Kutusu Sayısı';
 $wb['limit_mailalias_txt'] = 'En Fazla Takma E-posta Sayısı';
-$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
-$wb['limit_mailmailinglist_txt'] = 'En Fazla Posta Listesi Sayısı';
+$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
+$wb['limit_mailmailinglist_txt'] = 'En Fazla E-posta Listesi Sayısı';
 $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirici Sayısı';
 $wb['limit_mailcatchall_txt'] = 'En Fazla Tümünü Al Hesabı Sayısı';
 $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı';
 $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı';
-$wb['limit_fetchmail_txt'] = 'En Fazla Posta Alma Hesabı Sayısı';
-$wb['limit_mailquota_txt'] = 'Posta Kutusu Kotası';
-$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz Posta Beyaz/Kara Liste Süzgeci Sayısı';
-$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz Posta Süzgeci Kullanıcı Sayısı';
-$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz Posta Süzgeci Kuralı Sayısı';
+$wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı';
+$wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası';
+$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı';
+$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kullanıcı Sayısı';
+$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kuralı Sayısı';
 $wb['limit_domain_txt'] = 'limit_domain';
 $wb['limit_subdomain_txt'] = 'limit_subdomain';
 $wb['limit_webquota_txt'] = 'limit_webquota';
 $wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
 $wb['limit_cron_txt'] = 'En Fazla Zamanlanmış Görev Sayısı';
-$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Tipi (chroot ve tam İnternet adresi uygulanan)';
+$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Türü (chroot ve tam İnternet adresi uygulanan)';
 $wb['limit_cron_frequency_txt'] = 'İki çalıştırma arasındaki süre';
-$wb['limit_web_domain_txt'] = 'En Fazla Alan Adı Sayısı';
-$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
-$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Alan Adı Sayısı';
+$wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
+$wb['limit_web_domain_txt'] = 'En Fazla Etki Alanı Sayısı';
+$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
+$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Etki Alanı Sayısı';
 $wb['limit_ftp_user_txt'] = 'En Fazla FTP Kullanıcısı Sayısı';
+$wb['default_dnsserver_txt'] = 'Varsayılan Birincil DNS Sunucusu';
 $wb['limit_dns_zone_txt'] = 'En Fazla DNS Bölgesi Sayısı';
-$wb['limit_dns_slave_zone_txt'] = 'En Fazla İkinci DNS Bölgesi Sayısı';
+$wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
+$wb['limit_dns_slave_zone_txt'] = 'En Fazla İkincil DNS Bölgesi Sayısı';
 $wb['limit_dns_record_txt'] = 'En Fazla DNS Kaydı Sayısı';
 $wb['limit_shell_user_txt'] = 'En Fazla Kabuk Kullanıcısı Sayısı';
 $wb['limit_webdav_user_txt'] = 'En Fazla Webdav Kullanıcısı Sayısı';
+$wb['limit_backup_txt'] = 'Yedekleme Özelliği Kullanılsın';
 $wb['limit_client_txt'] = 'En Fazla Müşteri Sayısı';
-$wb['limit_maildomain_error_notint'] = 'E-posta alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_mailmailinglist_error_notint'] = 'Posta listesi kaydı sınırı bir sayı olmalıdır.';
-$wb['limit_mailbox_error_notint'] = 'Posta kutusu sınırı bir sayı olmalıdır.';
+$wb['limit_maildomain_error_notint'] = 'E-posta etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_mailmailinglist_error_notint'] = 'E-posta listesi kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_mailbox_error_notint'] = 'E-posta kutusu sınırı bir sayı olmalıdır.';
 $wb['limit_mailalias_error_notint'] = 'Takma e-posta sınırı bir sayı olmalıdır.';
-$wb['limit_mailaliasdomain_error_notint'] = 'Takma e-posta alan adı sınırı bir sayı olmalıdır.';
+$wb['limit_mailaliasdomain_error_notint'] = 'Takma e-posta etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirme sınırı bir sayı olmalıdır.';
 $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al sınırı bir sayı olmalıdır.';
 $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.';
 $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.';
-$wb['limit_mailfetchmail_error_notint'] = 'Posta alma sınırı bir sayı olmalıdır.';
+$wb['limit_mailfetchmail_error_notint'] = 'E-posta alma sınırı bir sayı olmalıdır.';
 $wb['limit_mailquota_error_notint'] = 'E-posta kotası sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz posta süzgeci beyaz/kara liste sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz posta süzgeci kullanıcı sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz posta süzgeci kural sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz ileti süzgeci beyaz/kara liste sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz ileti süzgeci kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz ileti süzgeci kural sınırı bir sayı olmalıdır.';
 $wb['limit_web_domain_error_notint'] = 'Web sitesi sınırı bir sayı olmalıdır.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt alan sınırı bir sayı olmalıdır.';
+$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_ftp_user_error_notint'] = 'FTP kullanıcı sınırı bir sayı olmalıdır.';
 $wb['limit_shell_user_error_notint'] = 'Kabuk kullanıcı sınırı bir sayı olmalıdır.';
 $wb['limit_webdav_user_error_notint'] = 'Webdav kullanıcı sınırı bir sayı olmalıdır.';
-$wb['limit_dns_zone_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_dns_zone_error_notint'] = 'Birincil DNS kaydı sınırı bir sayı olmalıdır.';
 $wb['limit_dns_slave_zone_error_notint'] = 'İkinci DNS bölgesi sınırı bir sayı olmalıdır.';
 $wb['limit_dns_record_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
+$wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
 $wb['limit_database_error_notint'] = 'Veritabanı sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_notint'] = 'Zamanlanmış Görev sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_frequency'] = 'Zamanlanmış Görev sıklığı sınırı bir sayı olmalıdır.';
@@ -69,15 +76,16 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Dayatılacak Sanal Sunucu Kalıbı';
 $wb['limit_openvz_vm_error_notint'] = 'Sanal sunucu sınırı bir sayı olmalıdır.';
 $wb['ssh_chroot_txt'] = 'SSH-Chroot Ayarları';
 $wb['web_php_options_txt'] = 'PHP Ayarları';
-$wb['limit_cgi_txt'] = 'CGI Kullanılabilir';
-$wb['limit_ssi_txt'] = 'SSI Kullanılabilir';
-$wb['limit_perl_txt'] = 'Perl Kullanılabilir';
-$wb['limit_ruby_txt'] = 'Ruby Kullanılabilir';
-$wb['limit_python_txt'] = 'Python Kullanılabilir';
-$wb['force_suexec_txt'] = 'SuEXEC Dayatılmış';
-$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılabilir';
-$wb['limit_wildcard_txt'] = 'Genel Alt Alan Adı Kullanılabilir';
-$wb['limit_ssl_txt'] = 'SSL Kullanılabilir';
+$wb['limit_cgi_txt'] = 'CGI Kullanılsın';
+$wb['limit_ssi_txt'] = 'SSI Kullanılsın';
+$wb['limit_perl_txt'] = 'Perl Kullanılsın';
+$wb['limit_ruby_txt'] = 'Ruby Kullanılsın';
+$wb['limit_python_txt'] = 'Python Kullanılsın';
+$wb['force_suexec_txt'] = 'SuEXEC Dayatılsın';
+$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılsın';
+$wb['limit_wildcard_txt'] = 'Genel Alt Etki Alanı Kullanılsın';
+$wb['limit_ssl_txt'] = 'SSL Kullanılsın';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt Kullanılsın';
 $wb['web_limits_txt'] = 'Web Sınırları';
 $wb['email_limits_txt'] = 'E-posta Sınırları';
 $wb['database_limits_txt'] = 'Veritabanı Sınırları';
@@ -87,38 +95,33 @@ $wb['virtualization_limits_txt'] = 'Sanallaştırma Sınırları';
 $wb['aps_limits_txt'] = 'APS Yükleyici Sınırları';
 $wb['limit_aps_txt'] = 'En fazla APS kopyası sayısı';
 $wb['limit_aps_error_notint'] = 'APS kopyaları sınırı bir sayı olmalıdır.';
-$wb['limit_domainmodule_txt'] = 'Alan Adı Modülü Sınırı';
+$wb['limit_domainmodule_txt'] = 'Etki Alanı Modülü Sınırı';
 $wb['client_limits_txt'] = 'Müşteri Sınırları';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['limit_backup_txt'] = 'Backupfunction available';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['limit_database_quota_txt'] = 'Database quota';
-$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
-$wb['xmpp_limits_txt'] = 'XMPP Limits';
-$wb['xmpp_servers_txt'] = 'XMPP Servers';
-$wb['xmpp_servers_placeholder'] = 'Select XMPP Servers';
-$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
-$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
-$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
-$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
-$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
-$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
-$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
-$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
-$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
-$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
-$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
-$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
-$wb['limit_xmpp_status_txt'] = 'Status host available';
-$wb['dns_servers_txt'] = 'DNS servers';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['limit_database_user_txt'] = 'Max. Database users';
-$wb['web_servers_txt'] = 'Webservers';
-$wb['db_servers_txt'] = 'Database servers';
-$wb['mail_servers_txt'] = 'Mailservers';
-$wb['Limits'] = 'Limits';
+$wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
+$wb['limit_database_quota_error_notint'] = 'Veritabanı kotası sınırı değeri bir sayı olmalıdır.';
+$wb['xmpp_limits_txt'] = 'XMPP Sınırları';
+$wb['xmpp_servers_txt'] = 'XMPP Sunucuları';
+$wb['xmpp_servers_placeholder'] = 'XMPP Sunucularını Seçin';
+$wb['no_xmpp_server_error'] = 'En az bir XMPP sunucusu seçilmelidir.';
+$wb['xmpp_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir XMPP sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_domain_txt'] = 'En fazla XMPP etki alanı sayısı';
+$wb['limit_xmpp_user_txt'] = 'En fazla XMPP hesabı sayısı';
+$wb['limit_xmpp_muc_txt'] = 'Çok Kullanıcılı Sohbet (ÇKS) Kullanılsın';
+$wb['limit_xmpp_pastebin_txt'] = 'ÇKS için Pastebin Kullanılsın';
+$wb['limit_xmpp_httparchive_txt'] = 'ÇKS için HTTP Arşivi Kullanılsın';
+$wb['limit_xmpp_anon_txt'] = 'Adsız Sunucu Kullanılsın';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD Kullanıcı Klasörü Kullanılsın';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream Vekil Sunucusu Kullanılsın';
+$wb['limit_xmpp_status_txt'] = 'Durum Sunucusu Kullanılsın';
+$wb['dns_servers_txt'] = 'DNS Sunucular';
+$wb['limit_directive_snippets_txt'] = 'Web Sunucu Yapılandırma Seçimi Görüntülensin';
+$wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
+$wb['web_servers_txt'] = 'Web Sunucuları';
+$wb['db_servers_txt'] = 'Veritabanı Sunucuları';
+$wb['xmpp_servers_txt'] = 'XMPP Sunucuları';
+$wb['db_servers_txt'] = 'Veritabanı Sunucuları';
+$wb['mail_servers_txt'] = 'E-posta Sunucuları';
+$wb['Limits'] = 'Sınırlar';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_template_list.lng b/interface/web/client/lib/lang/tr_client_template_list.lng
index fbe35efc9e..cab3f906a4 100644
--- a/interface/web/client/lib/lang/tr_client_template_list.lng
+++ b/interface/web/client/lib/lang/tr_client_template_list.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['list_head_txt'] = 'Müşteri ve Bayi Kalıpları';
-$wb['template_type_txt'] = 'Tip';
-$wb['template_name_txt'] = 'Kalıp adı';
-$wb['template_id_txt'] = 'Kalıp kodu';
-$wb['sys_groupid_txt'] = 'Reseller';
+$wb['template_type_txt'] = 'Tür';
+$wb['template_name_txt'] = 'Kalıp Adı';
+$wb['template_id_txt'] = 'Kalıp Kodu';
+$wb['sys_groupid_txt'] = 'Bayi';
 ?>
diff --git a/interface/web/client/lib/lang/tr_clients_list.lng b/interface/web/client/lib/lang/tr_clients_list.lng
index d59411a3d1..8b13f1c81b 100644
--- a/interface/web/client/lib/lang/tr_clients_list.lng
+++ b/interface/web/client/lib/lang/tr_clients_list.lng
@@ -1,14 +1,14 @@
 <?php
 $wb['list_head_txt'] = 'Müşteriler';
 $wb['client_id_txt'] = 'Kod';
-$wb['company_name_txt'] = 'Kurum Adı';
+$wb['company_name_txt'] = 'Kuruluş Adı';
 $wb['contact_name_txt'] = 'İlgili Adı';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['city_txt'] = 'Ä°l';
 $wb['country_txt'] = 'Ãœlke';
 $wb['add_new_record_txt'] = 'Müşteri Ekle';
 $wb['customer_no_txt'] = 'Müşteri No';
-$wb['locked_txt'] = 'Locked';
-$wb['yes_txt'] = 'Yes';
-$wb['no_txt'] = 'No';
+$wb['locked_txt'] = 'Kilitli';
+$wb['yes_txt'] = 'Evet';
+$wb['no_txt'] = 'Hayır';
 ?>
diff --git a/interface/web/client/lib/lang/tr_domain.lng b/interface/web/client/lib/lang/tr_domain.lng
index ba5dab700d..d0b4e228da 100644
--- a/interface/web/client/lib/lang/tr_domain.lng
+++ b/interface/web/client/lib/lang/tr_domain.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['domain_error_empty'] = 'Alan adı boş olamaz';
-$wb['domain_error_unique'] = 'Aynı alan adı zaten var';
-$wb['domain_error_regex'] = 'Bu alan adına izin verilmiyor';
-$wb['Domain'] = 'Alan Adı';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz';
+$wb['domain_error_unique'] = 'Aynı etki alanı zaten var';
+$wb['domain_error_regex'] = 'Bu etki alanına izin verilmiyor';
+$wb['Domain'] = 'Etki Alanı';
 ?>
diff --git a/interface/web/client/lib/lang/tr_domain_list.lng b/interface/web/client/lib/lang/tr_domain_list.lng
index d422ef3d5d..8b6f75be84 100644
--- a/interface/web/client/lib/lang/tr_domain_list.lng
+++ b/interface/web/client/lib/lang/tr_domain_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Alan Adları';
-$wb['add_new_record_txt'] = 'Alan Adı Ekle';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['list_head_txt'] = 'Etki Alanları';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['user_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng
index 4906a894c0..e042301400 100644
--- a/interface/web/client/lib/lang/tr_reseller.lng
+++ b/interface/web/client/lib/lang/tr_reseller.lng
@@ -1,28 +1,30 @@
 <?php
-$wb['limit_maildomain_txt'] = 'En Fazla Alan Adı Sayısı';
-$wb['limit_mailmailinglist_txt'] = 'En Fazla Posta Listesi Sayısı';
-$wb['limit_mailbox_txt'] = 'En Fazla Posta Kutusu Sayısı';
+$wb['limit_maildomain_txt'] = 'En Fazla Etki Alanı Sayısı';
+$wb['limit_mailmailinglist_txt'] = 'En Fazla E-posta Listesi Sayısı';
+$wb['limit_mailbox_txt'] = 'En Fazla E-posta Kutusu Sayısı';
 $wb['limit_mailalias_txt'] = 'En Fazla Takma E-posta Sayısı';
-$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
+$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
 $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirici Sayısı';
 $wb['limit_mailcatchall_txt'] = 'En Fazla E-posta Tümünü Al Hesabı Sayısı';
 $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı';
 $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı';
-$wb['limit_fetchmail_txt'] = 'En Fazla Posta Alma Hesabı Sayısı';
-$wb['limit_mailquota_txt'] = 'Posta Kutusu Kotası';
-$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz Posta Beyaz/Kara Liste Süzgeci Sayısı';
-$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz Posta Kullanıcısı Sayısı';
-$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz Posta Kuralı Sayısı';
-$wb['default_mailserver_txt'] = 'Varsayılan Posta Sunucusu';
-$wb['company_name_txt'] = 'Kurum Adı';
+$wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı';
+$wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası';
+$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı';
+$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Kullanıcısı Sayısı';
+$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Kuralı Sayısı';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['company_name_txt'] = 'Kuruluş Adı';
+$wb['contact_firstname_txt'] = 'İlgili Adı';
 $wb['contact_name_txt'] = 'İlgili Adı';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['language_txt'] = 'Dil';
 $wb['usertheme_txt'] = 'Tema';
 $wb['street_txt'] = 'Adres';
-$wb['zip_txt'] = 'Posta kodu';
+$wb['zip_txt'] = 'Posta Kodu';
 $wb['city_txt'] = 'İlçe';
 $wb['state_txt'] = 'Ä°l';
 $wb['country_txt'] = 'Ãœlke';
@@ -33,25 +35,26 @@ $wb['email_txt'] = 'E-posta';
 $wb['internet_txt'] = 'Ä°nternet';
 $wb['icq_txt'] = 'ICQ';
 $wb['notes_txt'] = 'Notlar';
-$wb['company_txt'] = 'Kurum';
-$wb['title_txt'] = 'Ãœnvan';
+$wb['company_txt'] = 'KuruluÅŸ';
+$wb['title_txt'] = 'Unvan';
 $wb['firstname_txt'] = 'Adı';
 $wb['surname_txt'] = 'Soyadı';
 $wb['limit_domain_txt'] = 'limit_domain';
 $wb['limit_subdomain_txt'] = 'limit_subdomain';
 $wb['limit_webquota_txt'] = 'limit_webquota';
 $wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
+$wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
 $wb['limit_cron_txt'] = 'En Fazla Zamanlanmış Görev Sayısı';
-$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Tipi (chroot ve tam İnternet adresi uygulaması)';
+$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Türü (chroot ve tam İnternet adresi uygulaması)';
 $wb['limit_cron_frequency_txt'] = 'İki Çalıştırma Arasındaki Süre';
 $wb['ip_address_txt'] = 'ip_adresi';
 $wb['limit_client_error_notint'] = 'Alt müşteri sınırı bir sayı olmalıdır.';
 $wb['firstname_error_empty'] = 'Adı boş olamaz.';
 $wb['contact_error_empty'] = 'İlgili adı boş olamaz.';
 $wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
-$wb['limit_web_domain_txt'] = 'En Fazla Alan Adı Sayısı';
-$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
-$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Alan Adı Sayısı';
+$wb['limit_web_domain_txt'] = 'En Fazla Etki Alanı Sayısı';
+$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
+$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Etki Alanı Sayısı';
 $wb['limit_ftp_user_txt'] = 'En Fazla FTP Kullanıcı Sayısı';
 $wb['default_dnsserver_txt'] = 'Varsayılan DNS Sunucusu';
 $wb['limit_dns_zone_txt'] = 'En Fazla DNS Bölgesi Sayısı';
@@ -59,32 +62,35 @@ $wb['limit_dns_slave_zone_txt'] = 'En Fazla İkincil DNS Bölgesi Sayısı';
 $wb['limit_dns_record_txt'] = 'En Fazla DNS Kaydı Sayısı';
 $wb['limit_shell_user_txt'] = 'En Fazla Kabuk Kullanıcısı Sayısı';
 $wb['limit_webdav_user_txt'] = 'En Fazla Webdav Kullanıcısı Sayısı';
+$wb['limit_backup_txt'] = 'Yedekleme Özelliği Kullanılsın';
 $wb['limit_client_txt'] = 'En Fazla Müşteri Sayısı';
 $wb['username_error_empty'] = 'Kullanıcı adı boş olamaz.';
 $wb['username_error_unique'] = 'Bu kullanıcı adı zaten var.';
-$wb['limit_maildomain_error_notint'] = 'E-posta alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_mailmailinglist_error_notint'] = 'Posta listesi kaydı sınırı bir sayı olmalıdır.';
-$wb['limit_mailbox_error_notint'] = 'Posta kutusu sınırı bir sayı olmalıdır.';
+$wb['limit_maildomain_error_notint'] = 'E-posta etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_mailmailinglist_error_notint'] = 'E-posta listesi kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_mailbox_error_notint'] = 'E-posta kutusu sınırı bir sayı olmalıdır.';
 $wb['limit_mailalias_error_notint'] = 'Takma e-posta sınırı bir sayı olmalıdır.';
 $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirici sınırı bir sayı olmalıdır.';
 $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al hesabı sınırı bir sayı olmalıdır.';
 $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.';
 $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.';
-$wb['limit_mailfetchmail_error_notint'] = 'Posta alıcısı sınırı bir sayı olmalıdır.';
+$wb['limit_mailfetchmail_error_notint'] = 'E-posta alıcısı sınırı bir sayı olmalıdır.';
 $wb['limit_mailquota_error_notint'] = 'E-posta kota sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz posta beyaz/kara liste süzgeci sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz posta süzgeci kullanıcısı sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz posta süzgeci kuralı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz ileti beyaz/kara liste süzgeci sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz ileti süzgeci kullanıcısı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz ileti süzgeci kuralı sınırı bir sayı olmalıdır.';
 $wb['limit_web_domain_error_notint'] = 'Web sitesi sınırı bir sayı olmalıdır.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt alan adı sınırı bir sayı olmalıdır.';
+$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_ftp_user_error_notint'] = 'FTP kullanıcı sınırı bir sayı olmalıdır.';
 $wb['limit_webdav_user_error_notint'] = 'Webdav kullanıcısı sınırı bir sayı olmalıdır.';
 $wb['limit_shell_user_error_notint'] = 'Kabuk kullanıcısı sınırı bir sayı olmalıdır.';
-$wb['limit_dns_zone_error_notint'] = 'DNS bölgesi sınırı bir sayı olmalıdır.';
+$wb['limit_dns_zone_error_notint'] = 'Birincil DNS bölgesi sınırı bir sayı olmalıdır.';
 $wb['limit_dns_slave_zone_error_notint'] = 'İkincil DNS bölgesi sınırı bir sayı olmalıdır.';
 $wb['limit_dns_record_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_client_error_notint'] = 'Müşteri sınırı bir sayı olmalıdır.';
 $wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
 $wb['limit_database_error_notint'] = 'Veritabanı sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_notint'] = 'Zamanlanmış görev sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_frequency'] = 'Zamanlanmış görev sıklığı sınırı bir sayı olmalıdır.';
@@ -95,16 +101,18 @@ $wb['add_additional_template_txt'] = 'Ek Kalıbı Ekle';
 $wb['delete_additional_template_txt'] = 'Ek Kalıbı Sil';
 $wb['ssh_chroot_txt'] = 'SSH-Chroot Ayarları';
 $wb['web_php_options_txt'] = 'PHP Ayarları';
-$wb['limit_cgi_txt'] = 'CGI Kullanılabilir';
-$wb['limit_ssi_txt'] = 'SSI Kullanılabilir';
-$wb['limit_perl_txt'] = 'Perl Kullanılabilir';
-$wb['limit_ruby_txt'] = 'Ruby Kullanılabilir';
-$wb['limit_python_txt'] = 'Python Kullanılabilir';
-$wb['force_suexec_txt'] = 'SuEXEC Dayatılmış';
-$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılabilir';
-$wb['limit_wildcard_txt'] = 'Genel Alt Alan Kullanılabilir';
-$wb['limit_ssl_txt'] = 'SSL Kullanılabilir';
+$wb['limit_cgi_txt'] = 'CGI Kullanılsın';
+$wb['limit_ssi_txt'] = 'SSI Kullanılsın';
+$wb['limit_perl_txt'] = 'Perl Kullanılsın';
+$wb['limit_ruby_txt'] = 'Ruby Kullanılsın';
+$wb['limit_python_txt'] = 'Python Kullanılsın';
+$wb['force_suexec_txt'] = 'SuEXEC Dayatılsın';
+$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılsın';
+$wb['limit_wildcard_txt'] = 'Genel Alt Etki Alanı Kullanılsın';
+$wb['limit_ssl_txt'] = 'SSL Kullanılsın';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt Kullanılsın';
 $wb['limit_client_error'] = 'Hesabınıza ekleyebileceğiniz en fazla müşteri sayısına ulaştınız.';
+$wb['limit_client_error_positive_or_unlimited'] = 'Müşteri sayısı > 0 ya da -1 (sınırsız) olmalıdır';
 $wb['limit_web_quota_txt'] = 'Web Kotası';
 $wb['limit_traffic_quota_txt'] = 'Trafik Kotası';
 $wb['limit_trafficquota_error_notint'] = 'Trafik kotası bir sayı olmalıdır.';
@@ -123,7 +131,7 @@ $wb['database_limits_txt'] = 'Veritabanı Sınırları';
 $wb['cron_job_limits_txt'] = 'Zamanlanmış Görev Sınırları';
 $wb['dns_limits_txt'] = 'DNS Sınırları';
 $wb['virtualization_limits_txt'] = 'Sanallaştırma Sınırları';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
@@ -146,62 +154,58 @@ $wb['locked_txt'] = 'Kilitli';
 $wb['canceled_txt'] = 'Ä°ptal edilmiÅŸ';
 $wb['gender_m_txt'] = 'Bay';
 $wb['gender_f_txt'] = 'Bayan';
-$wb['gender_txt'] = 'Ãœnvan';
+$wb['gender_txt'] = 'Unvan';
+$wb['web_servers_txt'] = 'Web Sunucuları';
+$wb['web_servers_placeholder'] = 'Web Sunucularını Seçin';
+$wb['no_web_server_error'] = 'En az bir web sunucusu seçilmelidir.';
+$wb['web_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir web sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['dns_servers_txt'] = 'DNS Sunucular';
+$wb['dns_servers_placeholder'] = 'DNS Sunucuları Seçin';
+$wb['no_dns_server_error'] = 'En az bir DNS sunucusu seçilmelidir.';
+$wb['dns_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir DNS sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun';
+$wb['db_servers_txt'] = 'Veritabanı Sunucuları';
+$wb['db_servers_placeholder'] = 'Veritabanı Sunucularını Seçin';
+$wb['no_db_server_error'] = 'En az bir veritabanı sunucusu seçilmelidir.';
+$wb['db_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir veritabanı sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['mail_servers_txt'] = 'E-posta Sunucuları';
+$wb['mail_servers_placeholder'] = 'E-posta Sunucularını Seçin';
+$wb['no_mail_server_error'] = 'En az bir e-posta sunucusu seçilmelidir.';
+$wb['mail_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir e-posta sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
 $wb['customer_no_template_txt'] = 'Müşteri No Kalıbı';
 $wb['customer_no_template_error_regex_txt'] = 'Müşteri no kalıbında geçersiz karakterler var';
 $wb['customer_no_start_txt'] = 'Müşteri No Başlangıç Değeri';
 $wb['customer_no_counter_txt'] = 'Müşteri No Sayacı';
+
+$wb['xmpp_limits_txt'] = 'XMPP Sınırları';
+$wb['xmpp_servers_txt'] = 'XMPP Sunucular';
+$wb['xmpp_servers_placeholder'] = 'XMPP Sunucuları Seçin';
+$wb['no_xmpp_server_error'] = 'En az bir XMPP sunucusu seçilmelidir.';
+$wb['xmpp_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir XMPP sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_domain_txt'] = 'En Fazla XMPP Etki Alanı Sayısı';
+$wb['limit_xmpp_user_txt'] = 'En Fazla XMPP Hesabı Sayısı';
+$wb['limit_xmpp_muc_txt'] = 'Çok Kullanıcılı Sohbet (ÇKS) Kullanılsın';
+$wb['limit_xmpp_pastebin_txt'] = 'ÇKS için Pastebin Kullanılsın';
+$wb['limit_xmpp_httparchive_txt'] = 'ÇKS için HTTP Arşivi Kullanılsın';
+$wb['limit_xmpp_anon_txt'] = 'Adsız Sunucu Kullanılsın';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD Kullanıcı Klasörü Kullanılsın';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream Vekil Sunucusu Kullanılsın';
+$wb['limit_xmpp_status_txt'] = 'Durum Sunucusu Kullanılsın';
 $wb['added_by_txt'] = 'Ekleyen';
 $wb['added_date_txt'] = 'EklendiÄŸi Tarih';
-$wb['limit_domainmodule_error_notint'] = 'Alan adı modülü sınırı bir sayı olmalıdır.';
-$wb['limit_domainmodule_txt'] = 'Alan Adı Modülü Sınırı';
+$wb['limit_domainmodule_error_notint'] = 'Etki alanı modülü sınırı bir sayı olmalıdır.';
+$wb['limit_domainmodule_txt'] = 'Etki Alanı Modülü Sınırı';
 $wb['client_limits_txt'] = 'Müşteri Sınırları';
-$wb['err_msg_master_tpl_set'] = '\\"Özel\\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
-$wb['contact_firstname_txt'] = 'Contact firstname';
-$wb['password_click_to_set_txt'] = 'Click to set';
-$wb['limit_database_user_txt'] = 'Max. Database users';
-$wb['limit_backup_txt'] = 'Backupfunction available';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
-$wb['web_servers_txt'] = 'Webservers';
-$wb['web_servers_placeholder'] = 'Select Webservers';
-$wb['no_web_server_error'] = 'At least one webserver must be selected.';
-$wb['web_servers_used'] = 'The server you are trying to remove from this client is used as a webserver. Be sure that this server is not used by this client before to remove it.';
-$wb['dns_servers_txt'] = 'DNS Server';
-$wb['dns_servers_placeholder'] = 'Select DNS Servers';
-$wb['no_dns_server_error'] = 'At least one DNS server must be selected.';
-$wb['dns_servers_used'] = 'The server you are trying to remove from this client is used as a DNS server. Be sure that this server is not used by this client before to remove it.';
-$wb['db_servers_txt'] = 'Database Server';
-$wb['db_servers_placeholder'] = 'Select Database Servers';
-$wb['no_db_server_error'] = 'At least one Database server must be selected.';
-$wb['db_servers_used'] = 'The server you are trying to remove from this client is used as a Database server. Be sure that this server is not used by this client before to remove it.';
-$wb['mail_servers_txt'] = 'Mailservers';
-$wb['mail_servers_placeholder'] = 'Select Mailservers';
-$wb['no_mail_server_error'] = 'At least one Mailserver must be selected.';
-$wb['mail_servers_used'] = 'The server you are trying to remove from this client is used as a Mailserver. Be sure that this server is not used by this client before to remove it.';
-$wb['xmpp_limits_txt'] = 'XMPP Limits';
-$wb['xmpp_servers_txt'] = 'XMPP Servers';
-$wb['xmpp_servers_placeholder'] = 'Select XMPP Servers';
-$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
-$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
-$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
-$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
-$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
-$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
-$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
-$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
-$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
-$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
-$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
-$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
-$wb['limit_xmpp_status_txt'] = 'Status host available';
-$wb['invalid_vat_id'] = 'The VAT ID is invalid.';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['email_error_empty'] = 'Email is empty';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['limit_database_user_error_notint'] = 'The database user limit must be a number.';
-$wb['limit_database_quota_txt'] = 'Database quota';
-$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
-$wb['Limits'] = 'Limits';
+$wb['err_msg_master_tpl_set'] = '"Özel" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yok sayılır.';
+$wb['invalid_vat_id'] = 'Vergi numarası geçersiz.';
+$wb['btn_save_txt'] = 'Kaydet';
+$wb['btn_cancel_txt'] = 'Ä°ptal';
+$wb['email_error_empty'] = 'E-posta boÅŸ olamaz.';
+$wb['limit_directive_snippets_txt'] = 'Web Sunucu Yapılandırma Seçimi Görüntülensin';
+$wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
+$wb['limit_database_user_error_notint'] = 'Veritabanı kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
+$wb['limit_database_quota_error_notint'] = 'Veritabanı kotası sınırı bir sayı olmalıdır.';
+$wb['Limits'] = 'Sınırlar';
 ?>
diff --git a/interface/web/client/lib/lang/tr_resellers_list.lng b/interface/web/client/lib/lang/tr_resellers_list.lng
index 2cb388b96e..62116103c1 100644
--- a/interface/web/client/lib/lang/tr_resellers_list.lng
+++ b/interface/web/client/lib/lang/tr_resellers_list.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['list_head_txt'] = 'Bayiler';
 $wb['client_id_txt'] = 'Kod';
-$wb['company_name_txt'] = 'Kurum Adı';
+$wb['company_name_txt'] = 'Kuruluş Adı';
 $wb['contact_name_txt'] = 'İlgili Adı';
 $wb['city_txt'] = 'Ä°l';
 $wb['country_txt'] = 'Ãœlke';
diff --git a/interface/web/dashboard/lib/lang/br.lng b/interface/web/dashboard/lib/lang/br.lng
index 05935493bb..4ad7fc9c3c 100644
--- a/interface/web/dashboard/lib/lang/br.lng
+++ b/interface/web/dashboard/lib/lang/br.lng
@@ -1,4 +1,4 @@
 <?php
 $wb['welcome_user_txt'] = 'Bem-vindo %s';
-$wb['available_modules_txt'] = 'Módulos Disponíveis';
+$wb['available_modules_txt'] = 'Módulos disponíveis';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_customer.lng b/interface/web/dashboard/lib/lang/br_dashlet_customer.lng
index 5e73e41ff9..8c110cc29b 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_customer.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_customer.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['customerdata_txt'] = 'Meus Dados';
+$wb['customerdata_txt'] = 'Meus dados';
 $wb['edit_txt'] = 'Editar';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng
index de92eef6bf..9279d2230a 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['databasequota_txt'] = 'Cota para banco de dados';
-$wb['database_txt'] = 'Nome do banco de dados';
+$wb['databasequota_txt'] = 'Cota do banco de dados';
+$wb['database_txt'] = 'Banco de dados';
 $wb['used_txt'] = 'Espaço utilizado';
 $wb['quota_txt'] = 'Cota';
 $wb['no_database_accounts_txt'] = 'Nenhum banco de dados encontrado.';
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_invoice_client_settings.lng b/interface/web/dashboard/lib/lang/br_dashlet_invoice_client_settings.lng
index 413177c83d..1ac4ee2fae 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_invoice_client_settings.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_invoice_client_settings.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['invoice_client_settings_txt'] = 'Configuração de Faturas do Cliente';
+$wb['invoice_client_settings_txt'] = 'Configurações de fatura de clientes';
 $wb['edit_txt'] = 'Editar';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/br_dashlet_invoices.lng
index 2a5a0d9bcc..545c6994a6 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_invoices.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_invoices.lng
@@ -1,18 +1,18 @@
 <?php
 $wb['invoices_txt'] = 'Faturas';
-$wb['invoice_no_txt'] = 'No. da Fatura';
+$wb['invoice_no_txt'] = 'No. da fatura';
 $wb['amount_txt'] = 'Quantidade';
 $wb['date_txt'] = 'Data';
 $wb['invoice_status_txt'] = 'Estado';
 $wb['no_invoices_txt'] = 'Nenhuma fatura disponível.';
 $wb['paid_txt'] = 'Pago';
-$wb['unpaid_txt'] = 'Aberto';
+$wb['unpaid_txt'] = 'A pagar';
 $wb['paynow_txt'] = 'pagar agora';
 $wb['proforma_txt'] = 'Proforma';
 $wb['refunded_txt'] = 'Devolvido';
-$wb['not_refunded_txt'] = 'Sem devolução';
+$wb['not_refunded_txt'] = 'Não reembolsado';
 $wb['invoice_type_invoice_txt'] = 'Fatura';
 $wb['invoice_type_proforma_txt'] = 'Proforma';
-$wb['invoice_type_refund_txt'] = 'Devolver';
+$wb['invoice_type_refund_txt'] = 'Reembolso';
 $wb['invoice_type_reminder_txt'] = 'Lembrar';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_limits.lng b/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
index 04c59b8835..72558f5797 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
@@ -1,34 +1,34 @@
 <?php
-$wb['limits_txt'] = 'Limites das contas';
+$wb['limits_txt'] = 'Limites de contas';
 $wb['of_txt'] = 'de';
-$wb['unlimited_txt'] = 'ilimitado';
-$wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail';
-$wb['limit_mailbox_txt'] = 'Limite de contas de e-mail';
-$wb['limit_mailalias_txt'] = 'Limite de apelidos de domínio de e-mail';
-$wb['limit_mailaliasdomain_txt'] = 'Limite de subdomínios para e-mail';
-$wb['limit_mailforward_txt'] = 'Limite de redirecionamentos de e-mail';
-$wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo';
-$wb['limit_mailrouting_txt'] = 'Limite de transporte de e-mail';
-$wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mail';
-$wb['limit_fetchmail_txt'] = 'Limite de contas de busca';
-$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam lista branca/negra';
-$wb['limit_spamfilter_user_txt'] = 'Limite de usuários para filtros anti-spam';
-$wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam';
-$wb['limit_cron_txt'] = 'Limite de tarefas no cron';
-$wb['limit_web_domain_txt'] = 'Limite de domínios de site';
-$wb['limit_web_aliasdomain_txt'] = 'Limite de apelidos de domínios de site';
-$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios de site';
-$wb['limit_ftp_user_txt'] = 'Limite de contas ftp';
-$wb['limit_dns_zone_txt'] = 'Limite de zonas dns primárias';
-$wb['limit_dns_slave_zone_txt'] = 'Limite de zonas dns secundárias';
-$wb['limit_dns_record_txt'] = 'Limite de registros dns';
-$wb['limit_shell_user_txt'] = 'Limite de usuários shell';
-$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
-$wb['limit_client_txt'] = 'Limite de clientes';
-$wb['limit_database_txt'] = 'Limite de banco de dados';
-$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mails';
-$wb['limit_domain_txt'] = 'Limite de domínios';
-$wb['limit_mailquota_txt'] = 'Assigned mailbox quota';
-$wb['limit_web_quota_txt'] = 'Assigned web quota';
-$wb['limit_database_quota_txt'] = 'Assigned database quota';
+$wb['unlimited_txt'] = 'Ilimitado';
+$wb['limit_maildomain_txt'] = 'Número de domínios de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'Número de listas de e-mail';
+$wb['limit_mailbox_txt'] = 'Número de contas de e-mail';
+$wb['limit_mailalias_txt'] = 'Número de alias de e-mail';
+$wb['limit_mailaliasdomain_txt'] = 'Número de alias de domínios de e-mail';
+$wb['limit_mailforward_txt'] = 'Número de encaminhamentos de e-mail';
+$wb['limit_mailcatchall_txt'] = 'Número de contas cata-tudo';
+$wb['limit_mailrouting_txt'] = 'Número de rotas de e-mail';
+$wb['limit_mailfilter_txt'] = 'Número de filtros de e-mail';
+$wb['limit_fetchmail_txt'] = 'Número de contas de busca';
+$wb['limit_spamfilter_wblist_txt'] = 'Número de filtros anti-spam "lista branca/negra"';
+$wb['limit_spamfilter_user_txt'] = 'Número de filtros anti-spam';
+$wb['limit_spamfilter_policy_txt'] = 'Número de políticas anti-spam';
+$wb['limit_cron_txt'] = 'Número de tarefas no cron';
+$wb['limit_web_domain_txt'] = 'Número de domínios de site';
+$wb['limit_web_aliasdomain_txt'] = 'Número de alias de domínios de site';
+$wb['limit_web_subdomain_txt'] = 'Número de subdomínios de site';
+$wb['limit_ftp_user_txt'] = 'Número de usuários ftp';
+$wb['limit_dns_zone_txt'] = 'Número de zonas dns';
+$wb['limit_dns_slave_zone_txt'] = 'Número de zonas dns secundárias';
+$wb['limit_dns_record_txt'] = 'Número de registros dns';
+$wb['limit_shell_user_txt'] = 'Número de usuários do shell';
+$wb['limit_webdav_user_txt'] = 'Número de usuários webdav';
+$wb['limit_client_txt'] = 'Número de clientes';
+$wb['limit_database_txt'] = 'Número de banco de dados';
+$wb['limit_domain_txt'] = 'Número de domínios';
+$wb['limit_mailquota_txt'] = 'Cotas atribuídas para contas de e-mail';
+$wb['limit_web_quota_txt'] = 'Cotas atribuídas para sites';
+$wb['limit_database_quota_txt'] = 'Cotas atribuídas para banco de dados';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/br_dashlet_mailquota.lng
index 8aa300dffa..d164a35661 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_mailquota.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_mailquota.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['mailquota_txt'] = 'Cota para contas de e-mail';
-$wb['email_txt'] = 'e-mail';
+$wb['mailquota_txt'] = 'Cota de contas de e-mail';
+$wb['email_txt'] = 'Endereço de e-mail';
 $wb['name_txt'] = 'Nome';
 $wb['used_txt'] = 'Espaço utilizado';
 $wb['quota_txt'] = 'Cota';
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_modules.lng b/interface/web/dashboard/lib/lang/br_dashlet_modules.lng
index 80af885820..905d3d6007 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_modules.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_modules.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['available_modules_txt'] = 'Módulos Disponíveis';
+$wb['available_modules_txt'] = 'Módulos disponíveis';
 $wb['go_to_txt'] = 'Ir para';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_products.lng b/interface/web/dashboard/lib/lang/br_dashlet_products.lng
index 129b144801..c750052ad7 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_products.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_products.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['products_txt'] = 'Meus Produtos';
+$wb['products_txt'] = 'Meus produtos';
 $wb['name_txt'] = 'Nome';
 $wb['price_txt'] = 'Preço';
-$wb['next_payment_date_txt'] = 'Próxima Fatura';
+$wb['next_payment_date_txt'] = 'Próxima fatura';
 $wb['no_products_txt'] = 'Nenhum produto encontrado.';
 $wb['edit_txt'] = 'Editar';
 $wb['cancellation_date_txt'] = 'Cancelado por';
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_quota.lng b/interface/web/dashboard/lib/lang/br_dashlet_quota.lng
index 080e45d4e7..589e3dca3e 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_quota.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_quota.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['quota_txt'] = 'Cota para sites';
+$wb['quota_txt'] = 'Cota de site (disco)';
 $wb['domain_txt'] = 'Domínio/Site';
 $wb['used_txt'] = 'Espaço utilizado';
-$wb['hard_txt'] = 'Limite';
+$wb['hard_txt'] = 'Limite para bloqueio';
 $wb['soft_txt'] = 'Limite para alerta';
 $wb['no_sites_txt'] = 'Nenhum site encontrado.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_shop.lng b/interface/web/dashboard/lib/lang/br_dashlet_shop.lng
index 48847abff4..9fd37d5250 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_shop.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_shop.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['shop_txt'] = 'Pedido';
+$wb['shop_txt'] = 'Ordem';
 $wb['name_txt'] = 'Nome';
 $wb['price_txt'] = 'Preço';
-$wb['setup_fee_txt'] = 'Taxa Inicial';
+$wb['setup_fee_txt'] = 'Taxa criada';
 $wb['no_products_txt'] = 'Nenhum produto encontrado.';
-$wb['order_txt'] = 'Pedir';
+$wb['order_txt'] = 'Ordem';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_customer.lng b/interface/web/dashboard/lib/lang/tr_dashlet_customer.lng
index 4fe6cb0ef7..4902a83a09 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_customer.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_customer.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['customerdata_txt'] = 'My Data';
-$wb['edit_txt'] = 'Edit';
+$wb['customerdata_txt'] = 'Bilgilerim';
+$wb['edit_txt'] = 'Düzenle';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng
index bd2402dbf6..d8e8dfb89a 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['databasequota_txt'] = 'Database Quota';
-$wb['database_txt'] = 'Database Name';
-$wb['used_txt'] = 'Used Space';
-$wb['quota_txt'] = 'Quota';
-$wb['no_database_accounts_txt'] = 'No databases found.';
+$wb['databasequota_txt'] = 'Veritabanı Kotası';
+$wb['database_txt'] = 'Veritabanı Adı';
+$wb['used_txt'] = 'Kullanılan Alan';
+$wb['quota_txt'] = 'Kota';
+$wb['no_database_accounts_txt'] = 'Henüz bir veritabanı yok.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_donate.lng b/interface/web/dashboard/lib/lang/tr_dashlet_donate.lng
index e41c374cde..7324cb840d 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_donate.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_donate.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['donate_txt'] = 'The ISPConfig Hosting Control Panel is free software. Maybe you are aware, that it takes a lot of time and effort to develop, maintain and support a software project of this complexity. If you want to support the further development of ISPConfig, please consider making a donation. As a bonus you will get a copy of the current ISPConfig Manual.';
-$wb['donate2_txt'] = 'The donation amount can be 5 EUR or more, the amount is chosen during checkout. The payment method is PayPal. You will receive an receipt as PDF from ISPConfig UG.';
-$wb['hide_btn_txt'] = 'Hide';
-$wb['donate_btn_txt'] = 'Support ISPConfig and get the Manual';
-$wb['more_btn_txt'] = 'More';
+$wb['donate_txt'] = 'ISPConfig Hosting Control Panel uygulaması ücretsiz dağıtılmaktadır. Belki bu düzeyde bir yazılımı geliştirmek, güncellemek ve desteklemek için çok fazla zaman ve emek harcandığının farkındasınızdır. ISPConfig uygulamasının geliştirmesine destek olmak için bağış yapmak isteyebilirsiniz.  Hediye olarak ISPConfig kılavuzunu alacaksınız.';
+$wb['donate2_txt'] = 'Bağış tutarı en az 5 EUR ya da ödeme sırasında seçeceğiniz başka bir tutar olabilir. Ödemeleri PayPal üzerinden alıyoruz. PDF alındısında ISPConfig UG yazar.';
+$wb['hide_btn_txt'] = 'Gizle';
+$wb['donate_btn_txt'] = 'ISPConfig uygulamasını destekleyerek kılavuzu edinin';
+$wb['more_btn_txt'] = 'Ayrıntılar';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_invoice_client_settings.lng b/interface/web/dashboard/lib/lang/tr_dashlet_invoice_client_settings.lng
index 8cae3dfb4f..b6b47cae90 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_invoice_client_settings.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_invoice_client_settings.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['invoice_client_settings_txt'] = 'Invoice Client Settings';
-$wb['edit_txt'] = 'Edit';
+$wb['invoice_client_settings_txt'] = 'Müşteri Fatura Ayarları';
+$wb['edit_txt'] = 'Düzenle';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/tr_dashlet_invoices.lng
index a680daa8f6..db24326749 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_invoices.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_invoices.lng
@@ -1,18 +1,18 @@
 <?php
-$wb['invoices_txt'] = 'Invoices';
-$wb['invoice_no_txt'] = 'Invoice No.';
-$wb['amount_txt'] = 'Amount';
-$wb['date_txt'] = 'Date';
-$wb['invoice_status_txt'] = 'Status';
-$wb['no_invoices_txt'] = 'No Invoices available.';
-$wb['paid_txt'] = 'Paid';
-$wb['unpaid_txt'] = 'Unpaid';
-$wb['paynow_txt'] = 'pay now';
-$wb['proforma_txt'] = 'Proforma';
-$wb['refunded_txt'] = 'Refunded';
-$wb['not_refunded_txt'] = 'Not refunded';
-$wb['invoice_type_invoice_txt'] = 'Invoice';
-$wb['invoice_type_proforma_txt'] = 'Proforma';
-$wb['invoice_type_refund_txt'] = 'Refund';
-$wb['invoice_type_reminder_txt'] = 'Reminder';
+$wb['invoices_txt'] = 'Faturalar';
+$wb['invoice_no_txt'] = 'Fatura No';
+$wb['amount_txt'] = 'Tutar';
+$wb['date_txt'] = 'Tarih';
+$wb['invoice_status_txt'] = 'Durum';
+$wb['no_invoices_txt'] = 'Henüz bir fatura yok.';
+$wb['paid_txt'] = 'Ödendi';
+$wb['unpaid_txt'] = 'Ödenmedi';
+$wb['paynow_txt'] = 'Şimdi Öde';
+$wb['proforma_txt'] = 'Teklif';
+$wb['refunded_txt'] = 'Geri Ödendi';
+$wb['not_refunded_txt'] = 'Geri Ödenmedi';
+$wb['invoice_type_invoice_txt'] = 'Fatura';
+$wb['invoice_type_proforma_txt'] = 'Teklif';
+$wb['invoice_type_refund_txt'] = 'Geri Ödeme';
+$wb['invoice_type_reminder_txt'] = 'Anımsatıcı';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng b/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
index a8869328f9..9fa1fb5b90 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
@@ -2,33 +2,33 @@
 $wb['limits_txt'] = 'Hesap Sınırları';
 $wb['of_txt'] = '/';
 $wb['unlimited_txt'] = 'Sınırsız';
-$wb['limit_maildomain_txt'] = 'E-posta Alan Adı Sayısı';
-$wb['limit_mailmailinglist_txt'] = 'Posta Listesi Sayısı';
-$wb['limit_mailbox_txt'] = 'Posta Kutusu Sayısı';
+$wb['limit_maildomain_txt'] = 'E-posta Etki Alanı Sayısı';
+$wb['limit_mailmailinglist_txt'] = 'E-posta Listesi Sayısı';
+$wb['limit_mailbox_txt'] = 'E-posta Kutusu Sayısı';
 $wb['limit_mailalias_txt'] = 'Takma E-posta Sayısı';
-$wb['limit_mailaliasdomain_txt'] = 'Takma Alan Adı Sayısı';
+$wb['limit_mailaliasdomain_txt'] = 'Takma Etki Alanı Sayısı';
 $wb['limit_mailforward_txt'] = 'E-posta Yönlendirici Sayısı';
 $wb['limit_mailcatchall_txt'] = 'E-posta Tümünü Al Hesabı Sayısı';
 $wb['limit_mailrouting_txt'] = 'E-posta Yöneltici Sayısı';
 $wb['limit_mailfilter_txt'] = 'E-posta Süzgeci Sayısı';
-$wb['limit_fetchmail_txt'] = 'Posta Alma Hesabı Sayısı';
-$wb['limit_spamfilter_wblist_txt'] = 'Önemsiz Posta Beyaz/Kara Liste Sayısı';
-$wb['limit_spamfilter_user_txt'] = 'Önemsiz Posta Süzgeci Kullanıcı Sayısı';
-$wb['limit_spamfilter_policy_txt'] = 'Önemsiz Posta Kuralı Sayısı';
+$wb['limit_fetchmail_txt'] = 'E-posta Alma Hesabı Sayısı';
+$wb['limit_spamfilter_wblist_txt'] = 'Önemsiz İleti Beyaz/Kara Liste Sayısı';
+$wb['limit_spamfilter_user_txt'] = 'Önemsiz İleti Süzgeci Kullanıcı Sayısı';
+$wb['limit_spamfilter_policy_txt'] = 'Önemsiz İletia Kuralı Sayısı';
 $wb['limit_cron_txt'] = 'Zamanlanmış Görev Sayısı';
-$wb['limit_web_domain_txt'] = 'Web Alan Adı Sayısı';
-$wb['limit_web_aliasdomain_txt'] = 'Web Takma Alan Adı Sayısı';
-$wb['limit_web_subdomain_txt'] = 'Web Alt Alan Adı Sayısı';
+$wb['limit_web_domain_txt'] = 'Web Etki Alanı Sayısı';
+$wb['limit_web_aliasdomain_txt'] = 'Web Takma Etki Alanı Sayısı';
+$wb['limit_web_subdomain_txt'] = 'Web Alt Etki Alanı Sayısı';
 $wb['limit_ftp_user_txt'] = 'FTP Kullanıcı Sayısı';
 $wb['limit_dns_zone_txt'] = 'DNS Bölgesi Sayısı';
-$wb['limit_dns_slave_zone_txt'] = 'İkinci DNS Bölgesi Sayısı';
+$wb['limit_dns_slave_zone_txt'] = 'İkincil DNS Bölgesi Sayısı';
 $wb['limit_dns_record_txt'] = 'DNS Kayıtları Sayısı';
 $wb['limit_shell_user_txt'] = 'Kabuk Kullanıcısı Sayısı';
 $wb['limit_webdav_user_txt'] = 'Webdav Kullanıcı Sayısı';
 $wb['limit_client_txt'] = 'Müşteri Sayısı';
 $wb['limit_database_txt'] = 'Veritabanı Sayısı';
-$wb['limit_domain_txt'] = 'Alan Adı Sayısı';
-$wb['limit_mailquota_txt'] = 'Assigned mailbox quota';
-$wb['limit_web_quota_txt'] = 'Assigned web quota';
-$wb['limit_database_quota_txt'] = 'Assigned database quota';
+$wb['limit_domain_txt'] = 'Etki Alanı Sayısı';
+$wb['limit_mailquota_txt'] = 'E-posta Kutusu Alanı Kotası';
+$wb['limit_web_quota_txt'] = 'Web Sitesi Alanı Kotası';
+$wb['limit_database_quota_txt'] = 'Veritabanı Alanı Kotası';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/tr_dashlet_mailquota.lng
index bee7e8677f..67888a818e 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_mailquota.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_mailquota.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['mailquota_txt'] = 'Posta Kutusu Kotası';
+$wb['mailquota_txt'] = 'E-posta Kutusu Kotası';
 $wb['email_txt'] = 'E-posta Adresi';
 $wb['name_txt'] = 'Ad';
 $wb['used_txt'] = 'Kullanılan Alan';
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_modules.lng b/interface/web/dashboard/lib/lang/tr_dashlet_modules.lng
index c551510a50..ce75e96210 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_modules.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_modules.lng
@@ -1,4 +1,4 @@
 <?php
 $wb['available_modules_txt'] = 'Kullanılabilecek Modüller';
-$wb['go_to_txt'] = 'Go to';
+$wb['go_to_txt'] = '';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_products.lng b/interface/web/dashboard/lib/lang/tr_dashlet_products.lng
index a69b61d2fb..11aa2e519d 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_products.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_products.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['products_txt'] = 'My Products';
-$wb['name_txt'] = 'Name';
-$wb['price_txt'] = 'Price';
-$wb['next_payment_date_txt'] = 'Next Invoice';
-$wb['no_products_txt'] = 'No products found.';
-$wb['edit_txt'] = 'Edit';
-$wb['cancellation_date_txt'] = 'Cancelled by';
+$wb['products_txt'] = 'Ürünlerim';
+$wb['name_txt'] = 'Ad';
+$wb['price_txt'] = 'Fiyat';
+$wb['next_payment_date_txt'] = 'Sonraki Fatura';
+$wb['no_products_txt'] = 'Henüz bir ürün yok.';
+$wb['edit_txt'] = 'Düzenle';
+$wb['cancellation_date_txt'] = 'Ä°ptal eden:';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_quota.lng b/interface/web/dashboard/lib/lang/tr_dashlet_quota.lng
index 5a757be6f7..c49fcba522 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_quota.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_quota.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['quota_txt'] = 'Web Sitesi Disk Kotası';
-$wb['domain_txt'] = 'Alan Adı / Web Sitesi';
+$wb['domain_txt'] = 'Etki Alanı / Web Sitesi';
 $wb['used_txt'] = 'Kullanılan Alan';
-$wb['hard_txt'] = 'Donanım sınırı';
-$wb['soft_txt'] = 'Yazılım sınırı';
+$wb['hard_txt'] = 'Donanım Sınırı';
+$wb['soft_txt'] = 'Yazılım Sınırı';
 $wb['no_sites_txt'] = 'Henüz bir web sitesi yok.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_shop.lng b/interface/web/dashboard/lib/lang/tr_dashlet_shop.lng
index 1e0b5361d7..59e629889f 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_shop.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_shop.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['shop_txt'] = 'Order';
-$wb['name_txt'] = 'Name';
-$wb['price_txt'] = 'Price';
-$wb['setup_fee_txt'] = 'Setup Fee';
-$wb['no_products_txt'] = 'No products found.';
-$wb['order_txt'] = 'Order';
+$wb['shop_txt'] = 'SipariÅŸ';
+$wb['name_txt'] = 'Ad';
+$wb['price_txt'] = 'Fiyat';
+$wb['setup_fee_txt'] = 'Kurulum Ãœcreti';
+$wb['no_products_txt'] = 'Herhangi bir ürün bulunamadı.';
+$wb['order_txt'] = 'SipariÅŸ';
 ?>
diff --git a/interface/web/dns/lib/lang/br.lng b/interface/web/dns/lib/lang/br.lng
index b45d1575af..9228373fdf 100644
--- a/interface/web/dns/lib/lang/br.lng
+++ b/interface/web/dns/lib/lang/br.lng
@@ -1,4 +1,5 @@
 <?php
+
 $wb['DNS'] = 'DNS';
 $wb['Zones'] = 'Zonas';
 $wb['DNS A'] = 'A';
@@ -9,14 +10,15 @@ $wb['DNS mx'] = 'MX';
 $wb['DNS ns'] = 'NS';
 $wb['DNS ptr'] = 'PTR';
 $wb['DNS RP'] = 'RP';
-$wb['DNS Zone'] = 'Zona';
+$wb['DNS Zone'] = 'ZONA';
 $wb['Records'] = 'Registros';
 $wb['DNS SRV'] = 'SRV';
 $wb['DNS TXT Record'] = 'Registro TXT';
 $wb['DNS TXT'] = 'TXT';
-$wb['DNS Wizard'] = 'Assistente dns';
-$wb['Add DNS Zone'] = 'Adicionar nova zona';
-$wb['Import Zone File'] = 'Importar arquivo de zona';
+$wb['DNS Wizard'] = 'Assistente DNS';
+$wb['Add DNS Zone'] = 'Adicionar zona dns';
 $wb['Templates'] = 'Gabaritos';
+$wb['Secondary DNS'] = 'DNS secundário';
 $wb['Secondary Zones'] = 'Zonas secundárias';
+$wb['Import Zone File'] = 'Importar arquivo de zona';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_a.lng b/interface/web/dns/lib/lang/br_dns_a.lng
index 93704528e2..f96cf551e6 100644
--- a/interface/web/dns/lib/lang/br_dns_a.lng
+++ b/interface/web/dns/lib/lang/br_dns_a.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Endereço IP';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['ip_error_wrong'] = 'Endereço IP é inválido.';
-$wb['data_error_duplicate'] = 'Registro A duplicado.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['ip_error_wrong'] = 'Endereço IP inválido.';
+$wb['data_error_duplicate'] = 'Registro A ou CNAME duplicado.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_a_list.lng b/interface/web/dns/lib/lang/br_dns_a_list.lng
index 0abaf5493d..6387c14cbe 100644
--- a/interface/web/dns/lib/lang/br_dns_a_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_a_list.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['list_head_txt'] = 'Registro (A)';
+$wb['list_head_txt'] = 'Registro A';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Nome';
-$wb['data_txt'] = 'Data';
+$wb['data_txt'] = 'Dados';
 $wb['aux_txt'] = 'Prioridade';
-$wb['type_txt'] = 'Tipo';
 $wb['ttl_txt'] = 'TTL';
-$wb['add_new_record_txt'] = 'Adicionar um novo registro (A)';
+$wb['type_txt'] = 'Tipo';
+$wb['add_new_record_txt'] = 'Adicionar novo registro A';
 $wb['page_txt'] = 'Página';
 $wb['page_of_txt'] = 'de';
 $wb['delete_confirmation'] = 'Tem certeza que deseja remover este registro?';
diff --git a/interface/web/dns/lib/lang/br_dns_aaaa.lng b/interface/web/dns/lib/lang/br_dns_aaaa.lng
index 5f0b463275..1a3cfb2d27 100644
--- a/interface/web/dns/lib/lang/br_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/br_dns_aaaa.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Endereço IPv6';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'O nome está em branco.';
-$wb['name_error_regex'] = 'O nome é inválido.';
-$wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['ip_error_wrong'] = 'Endereço IP é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Endereço IPv6 está em branco.';
+$wb['ip_error_wrong'] = 'O endereço IPv6 possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_alias.lng b/interface/web/dns/lib/lang/br_dns_alias.lng
index b303a662ba..46821ee1ae 100644
--- a/interface/web/dns/lib/lang/br_dns_alias.lng
+++ b/interface/web/dns/lib/lang/br_dns_alias.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Servidor de destino';
+$wb['data_txt'] = 'Alvo do host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'O nome está em branco.';
-$wb['name_error_regex'] = 'O nome é inválido.';
-$wb['data_error_empty'] = 'O servidor de destino está em branco.';
-$wb['data_error_regex'] = 'O servidor de destino é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O alvo do host está em branco.';
+$wb['data_error_regex'] = 'O formato do alvo do host é inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_caa.lng b/interface/web/dns/lib/lang/br_dns_caa.lng
index 973a97ceb6..16bf267862 100644
--- a/interface/web/dns/lib/lang/br_dns_caa.lng
+++ b/interface/web/dns/lib/lang/br_dns_caa.lng
@@ -1,19 +1,19 @@
 <?php
-$wb['ca_list_txt'] = 'Certifiction Authority';
-$wb['ca_domain_txt'] = 'Domain';
-$wb['ca_hostname_txt'] = 'Additional Hostnamen';
-$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
-$wb['ca_options_txt'] = 'Additional Options';
-$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
-$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
-$wb['ca_critical_txt'] = 'Strict check';
+$wb['ca_list_txt'] = 'Autoridade Certificadora - CA';
+$wb['ca_domain_txt'] = 'Domínio';
+$wb['ca_hostname_txt'] = 'Nome de hosts adicionais';
+$wb['ca_hostname_note_txt'] = '(separado por vírgulas - em branco para todos os hosts)';
+$wb['ca_options_txt'] = 'Opções adicionais';
+$wb['ca_options_note_txt'] = 'solicitado pela CA (lista separado por vírgulas)';
+$wb['ca_wildcard_txt'] = 'Usar curingas SSL';
+$wb['ca_critical_txt'] = 'Verificação estrita';
 $wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['select_txt'] = 'Select Certifiction Authority';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['ca_error_txt'] = 'No Certifiction Authority selected';
-$wb['caa_exists_error'] = 'CAA Record already exists';
-$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['active_txt'] = 'Ativo';
+$wb['select_txt'] = 'Selecionar autoridade certificadora';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['ca_error_txt'] = 'Nenhuma autoridade certificadora selecionada.';
+$wb['caa_exists_error'] = 'Registro CAA já existe.';
+$wb['ca_option_error'] = 'Formato inválido para opções adicionais; OPÇÃO=VALOR';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_cname.lng b/interface/web/dns/lib/lang/br_dns_cname.lng
index cbba03cdaf..c4fb0df260 100644
--- a/interface/web/dns/lib/lang/br_dns_cname.lng
+++ b/interface/web/dns/lib/lang/br_dns_cname.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Nome de destino';
+$wb['data_txt'] = 'Alvo do host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Nome de destino está em branco.';
-$wb['data_error_regex'] = 'Nome de destino é inválido.';
-$wb['data_error_duplicate'] = 'Registros A ou CNAME duplicados.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O alvo do host está em branco.';
+$wb['data_error_regex'] = 'O alvo do host possui formato inválido.';
+$wb['data_error_duplicate'] = 'Registro A ou CNAME duplicado.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_dkim.lng b/interface/web/dns/lib/lang/br_dns_dkim.lng
index 1ec851a216..a24976194d 100644
--- a/interface/web/dns/lib/lang/br_dns_dkim.lng
+++ b/interface/web/dns/lib/lang/br_dns_dkim.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['public_key_txt'] = 'Chave pública';
+$wb['public_key_txt'] = 'Chave Pública';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['record_exists_txt'] = 'Registro dns já existe.';
-$wb['dkim_disabled_txt'] = 'DKIM desabilitado para este domínio.';
+$wb['record_exists_txt'] = 'Este registro dns já existe.';
+$wb['dkim_disabled_txt'] = 'Chave DKIM está desabilitada para este domínio de e-mail.';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 $wb['selector_txt'] = 'Seletor DKIM';
-$wb['data_error_empty'] = 'Public-Key missing';
-$wb['dkim_selector_empty_txt'] = 'DKIM-Selector is empty';
+$wb['data_error_empty'] = 'Chave pública ausente.';
+$wb['dkim_selector_empty_txt'] = 'Seletor DKIM está em branco.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_dmarc.lng b/interface/web/dns/lib/lang/br_dns_dmarc.lng
index 8bb35318f8..bacd3af25f 100644
--- a/interface/web/dns/lib/lang/br_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/br_dns_dmarc.lng
@@ -1,50 +1,50 @@
 <?php
 $wb['data_txt'] = 'Registro DMARC';
 $wb['domain_txt'] = 'Domínio';
-$wb['dmarc_policy_txt'] = 'Política de recepção de e-mails';
-$wb['dmarc_policy_note_txt'] = 'Como os \\"ISPs\\" devem tratar as mensagens SPF ou DKIM com falha (DMARC).';
-$wb['dmarc_policy_none_txt'] = 'não fazer nada';
+$wb['dmarc_policy_txt'] = 'Política para recepção de e-mails';
+$wb['dmarc_policy_note_txt'] = 'Como os ISPs devem manipular as mensagens que falharam para SPF ou DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'nenhuma';
 $wb['dmarc_policy_quarantine_txt'] = 'quarentena';
 $wb['dmarc_policy_reject_txt'] = 'rejeitar';
-$wb['dmarc_rua_txt'] = 'Agregrar os dados por endereço';
-$wb['dmarc_rua_note_txt'] = 'Endereços de e-mail para receber relatórios do sistema sobre mensagens com falha e controles DMARC do domínio (separados por espaço em branco)';
-$wb['dmarc_ruf_txt'] = 'Relatório forense de dados por endereço';
-$wb['dmarc_ruf_note_txt'] = 'Endereços de e-mail para receber amostras de mensagens com falha e controles DMARC do domínio (separados por espaço em branco)';
+$wb['dmarc_rua_txt'] = 'Relatório de dados de endereços sumarizado';
+$wb['dmarc_rua_note_txt'] = 'Endereços de e-mail para receber relatórios dos ISPs sobre mensagens de falhas DMARC para este domínio (separado por espaço).';
+$wb['dmarc_ruf_txt'] = 'Endereço para relatório de dados forense';
+$wb['dmarc_ruf_note_txt'] = 'Endereços de e-mail para receber mensagens simples sobre falhas DMARC para este domínio (separado por espaço).';
 $wb['dmarc_fo_txt'] = 'Opções de relatório forense';
-$wb['dmarc_fo0_txt'] = 'Gerar relatórios se todos os mecanismos de autenticação subjacentes deixarem de produzir um resultado DMARC \\"pass\\".';
-$wb['dmarc_fo1_txt'] = 'Gerar relatório se algum mecanismo falhar.';
-$wb['dmarc_fod_txt'] = 'Gerar relatório se assinatura DKIM falhar na verificação.';
-$wb['dmarc_fos_txt'] = 'Gerar relatório se o SPF falhar.';
-$wb['dmarc_adkim_txt'] = 'Parametrização do identificador DKIM';
-$wb['dmarc_adkim_note_txt'] = 'Modo \\"strict\\" exige combinação exata entre o DKIM do domínio e e-mails';
+$wb['dmarc_fo0_txt'] = 'Gerar relatório se todos os mecanismos de autenticação falharem em produzir um resultado \'pass\' do DMARC.';
+$wb['dmarc_fo1_txt'] = 'Gerar relatório se qualquer mecanismo falhar.';
+$wb['dmarc_fod_txt'] = 'Gerar relatório se a assinatura DKIM falhar na verificação.';
+$wb['dmarc_fos_txt'] = 'Gerar relatório se a consulta SPF falhar.';
+$wb['dmarc_adkim_txt'] = 'Alinhamento do identificador DKIM';
+$wb['dmarc_adkim_note_txt'] = '\'strict\' requer combinação exata entre DKIM do domínio e oremetente do e-mail';
 $wb['dmarc_adkim_r_txt'] = 'relaxed';
 $wb['dmarc_adkim_s_txt'] = 'strict';
-$wb['dmarc_aspf_txt'] = 'Parametrização do identificador SPF';
-$wb['dmarc_aspf_note_txt'] = 'Modo \\"strict\\" exige combinação exata entre o SPF do domínio e e-mails';
+$wb['dmarc_aspf_txt'] = 'Alinhamento do identificador SPF';
+$wb['dmarc_aspf_note_txt'] = '\'strict\' requer combinação exata o SPF do domínio e oremetente do e-mail';
 $wb['dmarc_aspf_r_txt'] = 'relaxed';
 $wb['dmarc_aspf_s_txt'] = 'strict';
-$wb['dmarc_rf_txt'] = 'Formatação do relatório';
-$wb['dmarc_rf_afrf_txt'] = 'Falha de autenticação para formatação do relatório';
-$wb['dmarc_rf_iodef_txt'] = 'Formato da descrição de troca objeto de incidentes';
-$wb['dmarc_pct_txt'] = 'Aplicar políticas para este percentual';
-$wb['dmarc_pct_note_txt'] = '% (100 padrão). Percentual de mensagens do domínio que serão verificadas.';
-$wb['dmarc_ri_txt'] = 'Intervalo de relatórios';
-$wb['dmarc_ri_note_txt'] = 'Segundos (padrão=86400). Valor em segundos que os relatórios de agregação serão gerados (86400 representa 1 dia).';
-$wb['dmarc_sp_txt'] = 'Políticas de subdomínio (padrão é o mesmo do domínio).';
+$wb['dmarc_rf_txt'] = 'Formato do Relatório';
+$wb['dmarc_rf_afrf_txt'] = 'Formato do relatório de falhas de autenticação';
+$wb['dmarc_rf_iodef_txt'] = 'Formato da descrição de incidentes de objetos de troca';
+$wb['dmarc_pct_txt'] = 'Aplicar política para este percentual';
+$wb['dmarc_pct_note_txt'] = '% (100 padrão). Percentual de mensagens para este domínio a serem verificadas.';
+$wb['dmarc_ri_txt'] = 'Intervalo de geração do relatório';
+$wb['dmarc_ri_note_txt'] = 'Segundos (padrão=86400). Intervalo, em segundos, para gerar relatórios sumarizados (86400 equivale a 1 dia).';
+$wb['dmarc_sp_txt'] = 'Política para subdomínio (padrão é o mesmo do domínio).';
 $wb['dmarc_sp_same_txt'] = 'mesmo do domínio';
-$wb['dmarc_sp_none_txt'] = 'nenhum';
+$wb['dmarc_sp_none_txt'] = 'nenhuma';
 $wb['dmarc_sp_quarantine_txt'] = 'quarentena';
 $wb['dmarc_sp_reject_txt'] = 'rejeitar';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['dmarc_policy_error_txt'] = 'Somente a política \\"nenhum\\" é permitida para e-mails sem assinatura DKIM.';
+$wb['dmarc_policy_error_txt'] = 'A política \'nenhuma\' é permitida apenas para e-mails sem assinatura DKIM.';
 $wb['dmarc_no_dkim_txt'] = 'Nenhum registro DKIM ativo.';
 $wb['dmarc_no_spf_txt'] = 'Nenhum registro SPF ativo.';
-$wb['dmarc_more_spf_txt'] = 'Mais de um registro SPF ativo.';
-$wb['dmarc_invalid_email_txt'] = 'e-mail é inválido.';
-$wb['dmarc_empty_txt'] = 'Registro DMARC em branco - especifique ao menos um';
-$wb['record_exists_txt'] = 'Registro dns já existe.';
-$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['dmarc_more_spf_txt'] = 'Existe mais de um registro SPF ativo';
+$wb['dmarc_invalid_email_txt'] = 'Endereço de e-mail inválido';
+$wb['dmarc_empty_txt'] = 'Registro DMARC em branco - especifique ao menos uma opção';
+$wb['record_exists_txt'] = 'Registro dns já existe';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['ttl_range_error'] = 'TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_ds.lng b/interface/web/dns/lib/lang/br_dns_ds.lng
index 38b2183ead..843338a943 100644
--- a/interface/web/dns/lib/lang/br_dns_ds.lng
+++ b/interface/web/dns/lib/lang/br_dns_ds.lng
@@ -1,17 +1,18 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Dados';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Dados está em branco.';
-$wb['data_error_regex'] = 'Dados é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
-$wb['invalid_type_ds'] = 'Registro DS é inválido.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O campo texto (Text) em branco';
+$wb['data_error_regex'] = 'O campo texto (Text) possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+$wb['invalid_type_ds'] = 'O registro DS possui formato inválido.';
+
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_hinfo.lng b/interface/web/dns/lib/lang/br_dns_hinfo.lng
index bf7b7f33d4..e7bdfa2f4c 100644
--- a/interface/web/dns/lib/lang/br_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/br_dns_hinfo.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Servidor';
+$wb['data_txt'] = 'Informação do host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'O nome está em branco.';
-$wb['name_error_regex'] = 'O nome é inválido.';
-$wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['data_error_regex'] = 'Endereço IP é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Informação do host está em branco.';
+$wb['data_error_regex'] = 'Informação do host possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_import.lng b/interface/web/dns/lib/lang/br_dns_import.lng
index e26b20a3f3..ffcef7d743 100644
--- a/interface/web/dns/lib/lang/br_dns_import.lng
+++ b/interface/web/dns/lib/lang/br_dns_import.lng
@@ -1,16 +1,16 @@
 <?php
+$wb['zone_file_import_txt'] = 'Importar arquivo de zona';
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_txt'] = 'Cliente';
-$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_save_txt'] = 'Importar arquivo de zona';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['domain_txt'] = 'Domínio';
-$wb['zone_file_successfully_imported_txt'] = 'O arquivo de zona foi importado com sucesso!';
-$wb['error_no_valid_zone_file_txt'] = 'Este arquivo não parece ser um arquivo de zona válido!';
-$wb['zonefile_to_import_txt'] = 'Arquivo de zona';
-$wb['domain_field_desc_txt'] = 'Pode ficar em branco caso o domínio é o mesmo nome do arquivo ou faz parte do conteúdo do mesmo.';
-$wb['title'] = 'Importar arquivos de zonas';
-$wb['no_file_uploaded_error'] = 'Nenhum arquivo de zona importado.';
-$wb['zone_file_import_txt'] = 'Importar arquivo de zona';
-$wb['error_no_server_id'] = 'Nenhum servidor informado.';
-$wb['error_not_allowed_server_id'] = 'O servidor selecionado não tem permissão para esta conta.';
+$wb['zone_file_successfully_imported_txt'] = 'O arquivo de zona dns foi importado com sucesso!';
+$wb['error_no_valid_zone_file_txt'] = 'Aparentemente este não é um arquivo de zona dns válido!';
+$wb['zonefile_to_import_txt'] = 'Arquivo de Zona';
+$wb['domain_field_desc_txt'] = 'Pode ficar em branco caso o domínio seja o mesmo nome do arquivo ou faz parte do conteúdo do mesmo.';
+$wb['title'] = 'Importar arquivo de zona';
+$wb['no_file_uploaded_error'] = 'Nenhum arquivo de zona dns foi carregado.';
+$wb['error_no_server_id'] = 'Nenhum servidor foi informado.';
+$wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido nesta conta.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_loc.lng b/interface/web/dns/lib/lang/br_dns_loc.lng
index 838fdcf12b..f84c2af034 100644
--- a/interface/web/dns/lib/lang/br_dns_loc.lng
+++ b/interface/web/dns/lib/lang/br_dns_loc.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Dados';
+$wb['data_txt'] = 'Texto';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Upload (pastebin) para MUC';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Dados está em branco.';
-$wb['data_error_regex'] = 'Dados é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Texto está em branco.';
+$wb['data_error_regex'] = 'Texto possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_mx.lng b/interface/web/dns/lib/lang/br_dns_mx.lng
index 30116f16b2..45b721c1a8 100644
--- a/interface/web/dns/lib/lang/br_dns_mx.lng
+++ b/interface/web/dns/lib/lang/br_dns_mx.lng
@@ -1,18 +1,18 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Nome do servidor de e-mails';
+$wb['data_txt'] = 'Nome do servidor de e-mail';
 $wb['aux_txt'] = 'Prioridade';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Nome do servidor de e-mails está em branco.';
-$wb['data_error_regex'] = 'Nome do servidor de e-mails é inválido.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O nome do servidor de e-mails está em branco.';
+$wb['data_error_regex'] = 'O nome do servidor de e-mails possui formato inválido.';
 $wb['duplicate_mx_record_txt'] = 'Registro MX duplicado.';
-$wb['ttl_range_error'] = 'O ttl minímo são 60 segundos.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_ns.lng b/interface/web/dns/lib/lang/br_dns_ns.lng
index 5b3b03a809..d83d0f7b8a 100644
--- a/interface/web/dns/lib/lang/br_dns_ns.lng
+++ b/interface/web/dns/lib/lang/br_dns_ns.lng
@@ -3,14 +3,14 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Zona';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Servidor de nomes';
+$wb['data_txt'] = 'Nome do servidor';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Zona está em branco.';
-$wb['name_error_regex'] = 'Zona inválida.';
-$wb['data_error_empty'] = 'Nome está em branco.';
-$wb['data_error_regex'] = 'Nome é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'A zona está em branco.';
+$wb['name_error_regex'] = 'A zona possui formato inválido.';
+$wb['data_error_empty'] = 'Nome do servidor está em branco.';
+$wb['data_error_regex'] = 'Nome do servidor possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_ptr.lng b/interface/web/dns/lib/lang/br_dns_ptr.lng
index cfb7eddd7f..b6214a62e8 100644
--- a/interface/web/dns/lib/lang/br_dns_ptr.lng
+++ b/interface/web/dns/lib/lang/br_dns_ptr.lng
@@ -3,14 +3,14 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Nome';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Nome reverso';
+$wb['data_txt'] = 'Nome canônico para o nome do host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
 $wb['name_error_empty'] = 'O nome está em branco.';
-$wb['name_error_regex'] = 'O nome é inválido.';
-$wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['data_error_regex'] = 'Endereço IP é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['name_error_regex'] = 'O nome possui formato inválido.';
+$wb['data_error_empty'] = 'O nome canônico está em branco.';
+$wb['data_error_regex'] = 'O nome canônico possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_rp.lng b/interface/web/dns/lib/lang/br_dns_rp.lng
index d8f1cad2a5..4f782fb4a0 100644
--- a/interface/web/dns/lib/lang/br_dns_rp.lng
+++ b/interface/web/dns/lib/lang/br_dns_rp.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Responsável';
+$wb['data_txt'] = 'Responsável técnico';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Responsável está em branco.';
-$wb['data_error_regex'] = 'Responsável é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Responsável técnico está em branco.';
+$wb['data_error_regex'] = 'Responsável técnico possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave.lng b/interface/web/dns/lib/lang/br_dns_slave.lng
index 336164442c..a71e64c4f2 100644
--- a/interface/web/dns/lib/lang/br_dns_slave.lng
+++ b/interface/web/dns/lib/lang/br_dns_slave.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['origin_txt'] = 'Zona dns';
-$wb['ns_txt'] = 'NS';
+$wb['origin_txt'] = 'Zona DNS';
+$wb['secondary_zone_txt'] = 'Zona DNS secundária';
+$wb['ns_txt'] = 'NS (Endereço IP)';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_slave_zone_txt'] = 'O limite de zonas dns secundárias para esta conta foi alcançado.';
 $wb['client_txt'] = 'Cliente';
-$wb['xfer_txt'] = 'Permitir transferência da zona para estes IPs (IPs separados por vírgulas)';
+$wb['xfer_txt'] = 'Permitir transferência de zonas para <br />Endereço(s) IP(s) (lista de endereços, separados por vírgula)';
 $wb['server_id_error_empty'] = 'Nenhum servidor selecionado.';
 $wb['origin_error_empty'] = 'Zona está em branco.';
-$wb['origin_error_unique'] = 'Já existe um registro igual para esta zona.';
-$wb['origin_error_regex'] = 'Zona inválida.';
-$wb['ns_error_regex'] = 'Registro NS é inválido.';
+$wb['origin_error_unique'] = 'Já existe este registro dns nesta zona.';
+$wb['origin_error_regex'] = 'Zona possui um formato inválido.';
+$wb['ns_error_regex'] = 'O NS possui formato inválido.';
 $wb['eg_domain_tld'] = 'ex.: dominio.com.br.';
-$wb['ipv4_form_txt'] = 'Separar múltiplos endereços IP por vírgulas';
-$wb['secondary_zone_txt'] = 'Zona dns secundária';
+$wb['ipv4_form_txt'] = 'Separar múltiplos IPs com vírgulas.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
index b691471041..9b4c7e07ef 100644
--- a/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Zonas dns secundárias';
+$wb['list_head_txt'] = 'Zonas DNS Secundárias';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
-$wb['add_new_record_txt'] = 'Adicionar nova zona';
+$wb['add_new_record_txt'] = 'Adicionar nova zona dns secundária';
 $wb['eg_domain_tld'] = 'ex.: dominio.com.br.';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave_list.lng b/interface/web/dns/lib/lang/br_dns_slave_list.lng
index 5ff54311a8..adf14dfdc7 100644
--- a/interface/web/dns/lib/lang/br_dns_slave_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_slave_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Zonas dns secundárias';
+$wb['list_head_txt'] = 'Zonas secundárias';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
-$wb['add_new_record_txt'] = 'Adicionar nova zona';
+$wb['add_new_record_txt'] = 'Adicionar nova zona dns secundária';
 $wb['eg_domain_tld'] = 'ex.: dominio.com.br.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa.lng b/interface/web/dns/lib/lang/br_dns_soa.lng
index fcad62b44d..f5385c4706 100644
--- a/interface/web/dns/lib/lang/br_dns_soa.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa.lng
@@ -2,43 +2,43 @@
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona (SOA)';
 $wb['ns_txt'] = 'NS';
-$wb['mbox_txt'] = 'e-mail';
+$wb['mbox_txt'] = 'e-Mail';
 $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Atualizar';
 $wb['retry_txt'] = 'Repetir';
 $wb['expire_txt'] = 'Expirar';
-$wb['minimum_txt'] = 'Minímo';
+$wb['minimum_txt'] = 'Mínimo';
 $wb['ttl_txt'] = 'TTL';
-$wb['xfer_txt'] = 'Permitir transferências de zona para estes IPs (IPs separados por vírgula).';
+$wb['xfer_txt'] = 'Permitir transferências de zonas para <br />Endereço(s) IP(s) (lista de endereços, separados por vírgula)';
 $wb['active_txt'] = 'Ativo';
+$wb['dnssec_info_txt'] = 'O campo DS DNSSEC para o registro';
+$wb['dnssec_wanted_txt'] = 'Zona assinada (DNSSEC)';
+$wb['dnssec_wanted_info'] = 'Ao desativar o DNSSEC as chaves não serão excluídas se o DNSSEC tiver sido ativado anteriormente e as chaves já tiverem sido geradas, mas a zona não será mais entregue no formato assinado posteriormente. Se você usa o PowerDNS, as chaves serão excluídas!';
 $wb['limit_dns_zone_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
 $wb['client_txt'] = 'Cliente';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['server_id_error_empty'] = 'Servidor não selecionado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['server_id_error_empty'] = 'Nenhum servidor selecionado';
 $wb['origin_error_empty'] = 'Zona está em branco.';
-$wb['origin_error_unique'] = 'Este registro já existe nesta zona.';
-$wb['origin_error_regex'] = 'Zona inválida.';
-$wb['ns_error_regex'] = 'NS é inválido.';
-$wb['mbox_error_empty'] = 'Endereço de e-mail está em branco.';
-$wb['mbox_error_regex'] = 'Endereço de e-mail é inválido.';
+$wb['origin_error_unique'] = 'Já existe este registro dns nesta zona.';
+$wb['origin_error_regex'] = 'A zona dns possui formato inválido.';
+$wb['ns_error_regex'] = 'O registro NS possui formato inválido.';
+$wb['mbox_error_empty'] = 'O e-mail está em branco.';
+$wb['mbox_error_regex'] = 'O e-mail possui formato inválido.';
 $wb['also_notify_txt'] = 'Também notificar';
-$wb['also_notify_error_regex'] = 'Por favor, insira um endereço IP.';
+$wb['also_notify_error_regex'] = 'Também notificar: Por favor, use um endereço IP.';
+$wb['xfer_error_regex'] = 'Xfer: Por favor use um ou mais endereço(s) IP, separado por vírgula ou use a palavra reservada: any';
 $wb['update_acl_txt'] = 'Atualizar ACL';
 $wb['seconds_txt'] = 'Segundos';
 $wb['eg_domain_tld'] = 'ex.: dominio.com.br';
 $wb['eg_ns1_domain_tld'] = 'ex.: ns1.dominio.com.br';
-$wb['eg_webmaster_domain_tld'] = 'ex.: postmaster@dominio.com.br';
-$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'O domínio não pode ser modificado. Por favor, entre em contato com o administrador do sistema se você deseja modificar este domínio.';
-$wb['refresh_range_error'] = 'Tempo mínimo de atualizações (refresh) são 60 segundos.';
-$wb['retry_range_error'] = 'Tempo mínimo de repetições (retry) são 60 segundos.';
-$wb['expire_range_error'] = 'Tempo mínimo para expirar (expire) são 60 segundos.';
-$wb['minimum_range_error'] = 'Tempo mínimo (minimum) são 60 segundos.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
-$wb['xfer_error_regex'] = 'Também notificar: Por favor, insira um endereço IP.';
-$wb['dnssec_info_txt'] = 'Registro para DNSSEC (DS-Data)';
-$wb['dnssec_wanted_txt'] = 'Zona assinada (DNSSEC)';
-$wb['dnssec_wanted_info'] = 'Quando desabilitar o DNSSEC as chaves não são eliminadas mas a zona não será disponibilizada assinada. Se você usar o PowerDNS, as chaves serão excluídas!';
-$wb['error_not_allowed_server_id'] = 'O servidor selecionado não tem permissão para esta conta.';
-$wb['soa_cannot_be_changed_txt'] = 'A zona SOA não pode ser modificada. Entre em contato com o administrador para alterar esta zona.';
+$wb['eg_webmaster_domain_tld'] = 'ex.: hostmaster@dominio.com.br';
+$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'O domínio não pode ser alterado. Por favor contate o administrador se deseja alterar o domínio.';
+$wb['refresh_range_error'] = 'Intervalo mínimo entre as atualizações são 60 segundos.';
+$wb['retry_range_error'] = 'Intervalo mínimo entre as repetições são 60 segundos.';
+$wb['expire_range_error'] = 'Intervalo mínimo para expirar são 60 segundos.';
+$wb['minimum_range_error'] = 'Intervalo mínimo são 60 segundos.';
+$wb['ttl_range_error'] = 'Intervalo mínimo do TTL são 60 segundos.';
+$wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido para esta conta.';
+$wb['soa_cannot_be_changed_txt'] = 'A zona (SOA) não pode ser alterada. Por favor, contate o administrador se deseja alterar esta zona.';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
index dd3169a830..26e8062d53 100644
--- a/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
@@ -1,11 +1,12 @@
 <?php
-$wb['list_head_txt'] = 'Zonas dns';
+$wb['list_head_txt'] = 'Zonas DNS';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
-$wb['mbox_txt'] = 'e-mail';
-$wb['add_new_record_wizard_txt'] = 'Adicionar nova zona dns através do assistente';
-$wb['add_new_record_txt'] = 'Adicionar nova zona dns manualmente';
+$wb['mbox_txt'] = 'e-Mail';
+$wb['add_new_record_wizard_txt'] = 'Adicionar zona dns através do assistente';
+$wb['add_new_record_txt'] = 'Adicionar zona dns manualmente';
+$wb['zone_file_import_txt'] = 'Importar arquivo de zona';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa_list.lng b/interface/web/dns/lib/lang/br_dns_soa_list.lng
index ddb24697e3..969df1d2a9 100644
--- a/interface/web/dns/lib/lang/br_dns_soa_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa_list.lng
@@ -1,11 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Zonas dns';
+$wb['list_head_txt'] = 'Zonas DNS';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
-$wb['mbox_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar nova zona dns';
+$wb['mbox_txt'] = 'e-Mail';
 $wb['add_new_record_wizard_txt'] = 'Adicionar nova zona dns através do assistente';
-$wb['import_zone_file_txt'] = 'Importar arquivo de zona';
+$wb['add_new_record_txt'] = 'Adicionar nova zona dns manualmente';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_spf.lng b/interface/web/dns/lib/lang/br_dns_spf.lng
index 0c56cd32ed..739e59cf41 100644
--- a/interface/web/dns/lib/lang/br_dns_spf.lng
+++ b/interface/web/dns/lib/lang/br_dns_spf.lng
@@ -1,25 +1,25 @@
 <?php
 $wb['data_txt'] = 'Registro SPF';
 $wb['spf_mechanism_txt'] = 'Mecanismo SPF';
-$wb['spf_mechanism_pass_txt'] = 'Pass - permite e-mail de outros remetentes';
-$wb['spf_mechanism_fail_txt'] = 'Fail - rejeita e-mails de outros remetentes';
+$wb['spf_mechanism_pass_txt'] = 'Pass - permitir e-mails de outros remetentes';
+$wb['spf_mechanism_fail_txt'] = 'Fail - rejeitar e-mails de outros remetentes';
 $wb['spf_mechanism_softfail_txt'] = 'SoftFail - permite e-mails de outros remetentes mas marca os mesmos';
 $wb['spf_mechanism_neutral_txt'] = 'Neutral - não faz nada';
 $wb['spf_mx_txt'] = 'Permite servidores listados como MX enviar e-mail deste domínio';
 $wb['spf_a_txt'] = 'Permite o endereço IP atual do domínio enviar e-mails deste domínio';
 $wb['spf_ip_txt'] = 'Endereço IP adicional no formato CIDR pode entregar ou retransmitir e-mails para este domínio';
-$wb['spf_ip_note_txt'] = '(endereços IPs separados por espaços em branco)';
-$wb['spf_invalid_ip_txt'] = 'Endereço IP é inválido.';
+$wb['spf_ip_note_txt'] = '(endereços IPs separados por espaços)';
+$wb['spf_invalid_ip_txt'] = 'Endereço IP inválido.';
 $wb['spf_hostname_txt'] = 'Qualquer outro servidor pode entregar ou retransmitir e-mails para este domínio';
-$wb['spf_hostname_note_txt'] = '(servidors separados por espaço em branco)';
-$wb['spf_invalid_hostname_txt'] = 'Hospedeiro inválido';
+$wb['spf_hostname_note_txt'] = '(servidores separados por espaço)';
+$wb['spf_invalid_hostname_txt'] = 'O nome do host é inválido.';
 $wb['spf_domain_txt'] = 'Qualquer domínio pode entregar ou retransmitir e-mails para este domínio';
-$wb['spf_domain_note_txt'] = '(domínios separados por espaço em branco)';
-$wb['spf_invalid_domain_txt'] = 'Domínio é inválido.';
+$wb['spf_domain_note_txt'] = '(domínios separados por espaço)';
+$wb['spf_invalid_domain_txt'] = 'O domínio é inválido.';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['record_exists_txt'] = 'Registro DS já existe.';
+$wb['record_exists_txt'] = 'Registro dns já existe.';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_srv.lng b/interface/web/dns/lib/lang/br_dns_srv.lng
index fefec736ee..97d2604896 100644
--- a/interface/web/dns/lib/lang/br_dns_srv.lng
+++ b/interface/web/dns/lib/lang/br_dns_srv.lng
@@ -1,20 +1,20 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['target_txt'] = 'Alvo';
 $wb['weight_txt'] = 'Peso';
 $wb['port_txt'] = 'Porta';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Servidor está em branco.';
-$wb['data_error_regex'] = 'Servidor é inválido.';
-$wb['srv_error_regex'] = 'Registro do servidor é inválido. São necessários 3 textos separados por espaços.';
 $wb['aux_txt'] = 'Prioridade';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Registro SVR está em branco.';
+$wb['data_error_regex'] = 'Registro SVR possui formato inválido.';
+$wb['srv_error_regex'] = 'O formato do registro SVR é inválido. O registro SVR deve conter 3 cadeias de texto separados por espaços.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_template.lng b/interface/web/dns/lib/lang/br_dns_template.lng
index 8b099ceb14..81a8f190ed 100644
--- a/interface/web/dns/lib/lang/br_dns_template.lng
+++ b/interface/web/dns/lib/lang/br_dns_template.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['name_txt'] = 'Nome';
-$wb['fields_txt'] = 'Campos';
+$wb['fields_txt'] = 'O campos';
 $wb['template_txt'] = 'Gabarito';
 $wb['visible_txt'] = 'Visível';
-$wb['placeholder_txt'] = 'Placeholder';
+$wb['placeholder_txt'] = 'Área Reservada';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_template_list.lng b/interface/web/dns/lib/lang/br_dns_template_list.lng
index f6455314d6..8ec480d727 100644
--- a/interface/web/dns/lib/lang/br_dns_template_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_template_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Assistente de gabaritos dns';
+$wb['list_head_txt'] = 'Gabarito do Assistente DNS';
 $wb['visible_txt'] = 'Visível';
 $wb['name_txt'] = 'Nome';
-$wb['add_new_record_txt'] = 'Adicionar novo gabarito';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_tlsa.lng b/interface/web/dns/lib/lang/br_dns_tlsa.lng
index 5e1bf2256e..4037ebe595 100644
--- a/interface/web/dns/lib/lang/br_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/br_dns_tlsa.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Descritor de serviço';
+$wb['name_txt'] = 'Descritor do serviço';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Dados TLSA';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Descritor de serviço está em branco.';
-$wb['name_error_regex'] = 'Descritor de serviço é inválido. Formato correto: \\"_&lt;port&gt;._(tcp|udp).&lt;hostname&gt;\\".';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados). Correto: _&lt;port&gt;._(tcp|udp).&lt;hostname&gt;';
 $wb['data_error_empty'] = 'Dados TLSA está em branco.';
-$wb['data_error_regex'] = 'Dados TLSA são inválidos. Formato correto: \\"n n n HASH\\".';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['data_error_regex'] = 'Formato dos dados TLSA inválido. Correto: n n n HASH';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_txt.lng b/interface/web/dns/lib/lang/br_dns_txt.lng
index 356bbfa5f2..641cb9f2e1 100644
--- a/interface/web/dns/lib/lang/br_dns_txt.lng
+++ b/interface/web/dns/lib/lang/br_dns_txt.lng
@@ -1,19 +1,19 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Texto';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['data_error_regex'] = 'Endereço IP é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
-$wb['invalid_type_dkim'] = 'DKIM não permitido. Use o botão DKIM.';
-$wb['invalid_type_dmarc'] = 'DMARC não permitido. Use o botão DMARC.';
-$wb['invalid_type_spf'] = 'SPF não permitido. Use o botão SPF.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O texto está em branco.';
+$wb['data_error_regex'] = 'O texto é inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+$wb['invalid_type_dkim'] = 'Sem permissão para DKIM. Use o botão DKIM.';
+$wb['invalid_type_dmarc'] = 'Sem permissão para DMARC. Use o botão DMARC.';
+$wb['invalid_type_spf'] = 'Sem permissão para SPF. Use o botão SPF.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_wizard.lng b/interface/web/dns/lib/lang/br_dns_wizard.lng
index 5e20f05593..d132d4646b 100644
--- a/interface/web/dns/lib/lang/br_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/br_dns_wizard.lng
@@ -1,45 +1,45 @@
 <?php
+$wb['list_head_txt'] = 'Assistente de zona dns';
+$wb['list_desc_txt'] = 'Adicionar zona dns através do assistente';
+$wb['dns_zone_txt'] = 'Zona DNS';
 $wb['template_id_txt'] = 'Gabarito';
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_txt'] = 'Cliente';
-$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_save_txt'] = 'Adicionar zona dns';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['domain_txt'] = 'Domínio';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
+$wb['dkim_txt'] = 'DKIM';
+$wb['dnssec_txt'] = 'Assinar zona (DNSSEC)';
 $wb['ns1_txt'] = 'NS 1';
 $wb['ns2_txt'] = 'NS 2';
 $wb['ip_txt'] = 'Endereço IP';
 $wb['ipv6_txt'] = 'Endereço IPv6';
-$wb['error_origin_empty'] = 'Origem está em branco.';
+$wb['error_origin_empty'] = 'Origin está em branco.';
 $wb['error_ns_empty'] = 'NS está em branco.';
-$wb['error_mbox_empty'] = 'Endereço de e-mail está em branco.';
-$wb['error_refresh_empty'] = 'Atualizar está em branco.';
-$wb['error_retry_empty'] = 'Atualizar está em branco.';
-$wb['error_expire_empty'] = 'Expirar está em branco.';
-$wb['error_minimum_empty'] = 'Minímo está em branco.';
-$wb['error_ttl_empty'] = 'TTL está em branco.';
+$wb['error_mbox_empty'] = 'conta de e-mail (mbox) está em branco.';
+$wb['error_refresh_empty'] = 'Atualizar (refresh) está em branco.';
+$wb['error_retry_empty'] = 'Repetir (retry) está em branco.';
+$wb['error_expire_empty'] = 'Expirar (expire) está em branco.';
+$wb['error_minimum_empty'] = 'Mínimo (minimum) está em branco.';
+$wb['error_ttl_empty'] = 'Tempo (TTL) está em branco.';
 $wb['error_domain_empty'] = 'Domínio está em branco.';
-$wb['error_ip_empty'] = 'IP está em branco.';
-$wb['error_ipv6_empty'] = 'IPv6 está em branco.';
+$wb['error_ip_empty'] = 'Endereço IP está em branco.';
+$wb['error_ipv6_empty'] = 'Endereço IPv6 está em branco.';
 $wb['error_ns1_empty'] = 'NS1 está em branco.';
 $wb['error_ns2_empty'] = 'NS2 está em branco.';
 $wb['error_email_empty'] = 'Endereço de e-mail está em branco.';
-$wb['error_domain_regex'] = 'Domínio contém caracteres inválidos.';
-$wb['error_ns1_regex'] = 'NS1 contém caracteres inválidos.';
-$wb['error_ns2_regex'] = 'NS2 contém caracteres inválidos.';
-$wb['error_email_regex'] = 'Endereço de e-mail é inválido.';
-$wb['dns_zone_txt'] = 'Zona dns';
+$wb['error_domain_regex'] = 'O domínio possui caracteres inválidos.';
+$wb['error_ns1_regex'] = 'NS1 possui caracteres inválidos.';
+$wb['error_ns2_regex'] = 'NS2 possui caracteres inválidos.';
+$wb['error_email_regex'] = 'O endereço de e-mail não possui um endereço válido.';
 $wb['globalsearch_resultslimit_of_txt'] = 'de';
 $wb['globalsearch_resultslimit_results_txt'] = 'resultados';
-$wb['globalsearch_noresults_text_txt'] = 'Sem resultados';
-$wb['globalsearch_noresults_limit_txt'] = '0 resultados';
+$wb['globalsearch_noresults_text_txt'] = 'Sem resultados.';
+$wb['globalsearch_noresults_limit_txt'] = '0 resultado(s)';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Pesquisar';
 $wb['globalsearch_suggestions_text_txt'] = 'Sugestões';
-$wb['list_head_txt'] = 'Assistente de zona dns';
-$wb['list_desc_txt'] = 'Adicionar zona dns através do assistente';
-$wb['dkim_txt'] = 'DKIM ativo';
 $wb['error_no_server_id'] = 'Nenhum servidor selecionado.';
 $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido para esta conta.';
-$wb['dnssec_txt'] = 'Zona assinada (DNSSEC)';
 $wb['limit_dns_zone_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr.lng b/interface/web/dns/lib/lang/tr.lng
index a101cf7b2b..a291a5af08 100644
--- a/interface/web/dns/lib/lang/tr.lng
+++ b/interface/web/dns/lib/lang/tr.lng
@@ -1,4 +1,5 @@
 <?php
+
 $wb['DNS'] = 'DNS';
 $wb['Zones'] = 'Bölgeler';
 $wb['DNS A'] = 'DNS A';
@@ -17,6 +18,6 @@ $wb['DNS TXT'] = 'DNS TXT';
 $wb['DNS Wizard'] = 'DNS Yardımcısı';
 $wb['Add DNS Zone'] = 'DNS Bölgesi Ekle';
 $wb['Templates'] = 'Kalıplar';
-$wb['Secondary Zones'] = 'İkincil Bölgeler';
-$wb['Import Zone File'] = 'Bölge Dosyası Alma';
+$wb['Secondary Zones'] = 'İkincil DNS Bölgeleri';
+$wb['Import Zone File'] = 'Bölge Dosyası İçe Aktarma';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_a.lng b/interface/web/dns/lib/lang/tr_dns_a.lng
index 0cf1414fd8..905ff04744 100644
--- a/interface/web/dns/lib/lang/tr_dns_a.lng
+++ b/interface/web/dns/lib/lang/tr_dns_a.lng
@@ -2,16 +2,16 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'IP Adresi';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
 $wb['data_error_duplicate'] = 'Bu A DNS kaydı zaten var';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
-$wb['ip_error_wrong'] = 'IP-Address format invalid';
+$wb['ip_error_wrong'] = 'IP adresi biçimi geçersiz';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_a_list.lng b/interface/web/dns/lib/lang/tr_dns_a_list.lng
index 129b32fdb2..61a4e2a7d3 100644
--- a/interface/web/dns/lib/lang/tr_dns_a_list.lng
+++ b/interface/web/dns/lib/lang/tr_dns_a_list.lng
@@ -7,7 +7,7 @@ $wb['name_txt'] = 'Ad';
 $wb['data_txt'] = 'Veri';
 $wb['aux_txt'] = 'Öncelik';
 $wb['ttl_txt'] = 'TTL Süresi';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['add_new_record_txt'] = 'DNS A Kaydı Ekle';
 $wb['page_txt'] = 'Sayfa';
 $wb['page_of_txt'] = '/';
diff --git a/interface/web/dns/lib/lang/tr_dns_aaaa.lng b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
index b0c28aed41..1726f80a8f 100644
--- a/interface/web/dns/lib/lang/tr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
@@ -2,15 +2,15 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'IPv6 Adresleri';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
-$wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
+$wb['name_error_regex'] = 'Sunucu adının biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
+$wb['ip_error_wrong'] = 'IP adresinin biçimi geçersiz';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
-$wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_alias.lng b/interface/web/dns/lib/lang/tr_dns_alias.lng
index 9bd6e72ce6..ce78fcf303 100644
--- a/interface/web/dns/lib/lang/tr_dns_alias.lng
+++ b/interface/web/dns/lib/lang/tr_dns_alias.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Hedef Sunucu Adı';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adının biçimi geçersiz.';
 $wb['data_error_empty'] = 'Hedef sunucu adı boş olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_cname.lng b/interface/web/dns/lib/lang/tr_dns_cname.lng
index 00366b9695..fa9a497e12 100644
--- a/interface/web/dns/lib/lang/tr_dns_cname.lng
+++ b/interface/web/dns/lib/lang/tr_dns_cname.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Hedef Sunucu Adı';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölge kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Hedef sunucu adı boş olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_dkim.lng b/interface/web/dns/lib/lang/tr_dns_dkim.lng
index 4d45fb4fe9..b7ffb1930f 100644
--- a/interface/web/dns/lib/lang/tr_dns_dkim.lng
+++ b/interface/web/dns/lib/lang/tr_dns_dkim.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['public_key_txt'] = 'Public-Key';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['record_exists_txt'] = 'DNS-Record already exists';
-$wb['dkim_disabled_txt'] = 'DKIM disabled for this mail-domain';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-$wb['selector_txt'] = 'DKIM-Selector';
-$wb['data_error_empty'] = 'Public-Key missing';
-$wb['dkim_selector_empty_txt'] = 'DKIM-Selector is empty';
+$wb['public_key_txt'] = 'Herkese Açık Anahtar';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['record_exists_txt'] = 'DNS kaydı zaten var';
+$wb['dkim_disabled_txt'] = 'Bu e-posta etki alanı için DKIM devre dışı bırakılmış.';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+$wb['selector_txt'] = 'DKIM Seçici';
+$wb['data_error_empty'] = 'Herkese açık anahtar eksik';
+$wb['dkim_selector_empty_txt'] = 'DKIM Seçici boş olamaz';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_dmarc.lng b/interface/web/dns/lib/lang/tr_dns_dmarc.lng
index cf78bb8eed..6e98e94663 100644
--- a/interface/web/dns/lib/lang/tr_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/tr_dns_dmarc.lng
@@ -1,50 +1,50 @@
 <?php
-$wb['data_txt'] = 'DMARC Record';
-$wb['domain_txt'] = 'Domain';
-$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
-$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
-$wb['dmarc_policy_none_txt'] = 'none';
-$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
-$wb['dmarc_policy_reject_txt'] = 'reject';
-$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
-$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
-$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
-$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
-$wb['dmarc_fo_txt'] = 'Forensic reporting options';
-$wb['dmarc_fo0_txt'] = 'Generate reports if all underlying authentication mechanisms fail to produce a DMARC \'pass\' result.';
-$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
-$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
-$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
-$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
-$wb['dmarc_adkim_note_txt'] = '\'strict\' requires exact matching between DKIM domain and email\'s from';
-$wb['dmarc_adkim_r_txt'] = 'relaxed';
-$wb['dmarc_adkim_s_txt'] = 'strict';
-$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
-$wb['dmarc_aspf_note_txt'] = '\'strict\' requires exact matching between SPF domain and email\'s from';
-$wb['dmarc_aspf_r_txt'] = 'relaxed';
-$wb['dmarc_aspf_s_txt'] = 'strict';
-$wb['dmarc_rf_txt'] = 'Report Format';
-$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
-$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
-$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
-$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
-$wb['dmarc_ri_txt'] = 'Reporting Interval';
-$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 represents 1 day).';
-$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
-$wb['dmarc_sp_same_txt'] = 'same as domain';
-$wb['dmarc_sp_none_txt'] = 'none';
-$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
-$wb['dmarc_sp_reject_txt'] = 'reject';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['dmarc_policy_error_txt'] = 'Only policy \'none\' is allowed without DKIM-signed emails.';
-$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
-$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
-$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
-$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
-$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
-$wb['record_exists_txt'] = 'DNS-Record already exists';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['data_txt'] = 'DMARC Kaydı';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['dmarc_policy_txt'] = 'E-posta Alma Ä°lkesi';
+$wb['dmarc_policy_note_txt'] = 'SPF ya da DKIM (DMARC) doğrulaması yapılamadığında İnternet Hizmeti Sağlayıcıların iletileri nasıl işleyeceği.';
+$wb['dmarc_policy_none_txt'] = 'işlem yapılmasın';
+$wb['dmarc_policy_quarantine_txt'] = 'karantinaya alınsın';
+$wb['dmarc_policy_reject_txt'] = 'reddedilsin';
+$wb['dmarc_rua_txt'] = 'Verilerin BildirileceÄŸi Adres';
+$wb['dmarc_rua_note_txt'] = 'Etki alanı için DMARC doğrulamasını geçemeyen iletiler hakkında İnternet Hizmeti Sağlayıcılardan gelen bildirimlerin alınacağı e-posta adresleri (boşluk ile ayırarak yazın).';
+$wb['dmarc_ruf_txt'] = 'Adli BiliÅŸim Verilerinin BildirileceÄŸi Adres';
+$wb['dmarc_ruf_note_txt'] = 'Etki alanı için DMARC doğrulamasını geçemeyen örnek iletilerin alınacağı e-posta adresleri (boşluk ile ayırarak yazın).';
+$wb['dmarc_fo_txt'] = 'Adli bilişim bildirim seçenekleri';
+$wb['dmarc_fo0_txt'] = 'Belirtilen hiç bir kimlik doğrulama yöntemi bir DMARC  sonucu alamazsa bildirimler üretilsin.';
+$wb['dmarc_fo1_txt'] = 'Yöntemlerden biri doğrulama yapamazsa bildirimler üretilsin.';
+$wb['dmarc_fod_txt'] = 'DKIM imzası doğrulanamazsa bildirim üretilsin.';
+$wb['dmarc_fos_txt'] = 'SPF başarısız olursa bildirim gönderilsin.';
+$wb['dmarc_adkim_txt'] = 'DKIM belirteci deÄŸerlendirmesi';
+$wb['dmarc_adkim_note_txt'] = ' seçeneğinde DKIM etki alanı ile e-postanın geldiği etki alanının bire bir eşleşmesi gerekir';
+$wb['dmarc_adkim_r_txt'] = 'gevÅŸek';
+$wb['dmarc_adkim_s_txt'] = 'sıkı';
+$wb['dmarc_aspf_txt'] = 'SPF belirteci deÄŸerlendirmesi';
+$wb['dmarc_aspf_note_txt'] = ' seçeneğinde SPF etki alanı ile e-postanın geldiği etki alanının bire bir eşleşmesi gerekir';
+$wb['dmarc_aspf_r_txt'] = 'gevÅŸek';
+$wb['dmarc_aspf_s_txt'] = 'sıkı';
+$wb['dmarc_rf_txt'] = 'Bildirim Biçimi';
+$wb['dmarc_rf_afrf_txt'] = 'Kimlik Doğrulama Sorunlarını Bildirme Biçimi';
+$wb['dmarc_rf_iodef_txt'] = 'Olay Nesnesi Açıklama Değişimi Biçimi';
+$wb['dmarc_pct_txt'] = 'İlkenin Uygulanacağı Yüzde';
+$wb['dmarc_pct_note_txt'] = 'İnternet Hizmeti sağlayıcı tarafından denetlenmesini istediğiniz iletilerin yüzdesi (varsayılan %100).';
+$wb['dmarc_ri_txt'] = 'Bildirim Sıklığı';
+$wb['dmarc_ri_note_txt'] = 'Saniye cinsinden bildirim raporlarının üretilme sıklığı (varsayılan değer, bir güne karşılık 86400).';
+$wb['dmarc_sp_txt'] = 'Alt Etki Alanı İlkesi (Varsayılan değerler etki alanı ile aynıdır).';
+$wb['dmarc_sp_same_txt'] = 'etki alanı ile aynı';
+$wb['dmarc_sp_none_txt'] = 'işlem yapılmasın';
+$wb['dmarc_sp_quarantine_txt'] = 'karantiya atılsın';
+$wb['dmarc_sp_reject_txt'] = 'reddedilsin';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['dmarc_policy_error_txt'] = 'DKIM ile imzalanmış e-postalar için yalnız  ilkesi seçilebilir.';
+$wb['dmarc_no_dkim_txt'] = 'Etkin bir DKIM kaydı yok.';
+$wb['dmarc_no_spf_txt'] = 'Etkin bir SPF kaydı yok.';
+$wb['dmarc_more_spf_txt'] = 'Birden çok etkin SPF kaydı var';
+$wb['dmarc_invalid_email_txt'] = 'E-posta Adresi Geçersiz';
+$wb['dmarc_empty_txt'] = 'DMARC kaydı boş - en az bir seçenek seçin';
+$wb['record_exists_txt'] = 'DNS kaydı zaten var';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_ds.lng b/interface/web/dns/lib/lang/tr_dns_ds.lng
index c3622dc5b5..4ab7447d0a 100644
--- a/interface/web/dns/lib/lang/tr_dns_ds.lng
+++ b/interface/web/dns/lib/lang/tr_dns_ds.lng
@@ -1,17 +1,18 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
-$wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Data';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname is empty.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Text empty';
-$wb['data_error_regex'] = 'Text format invalid';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-$wb['invalid_type_ds'] = 'DS-Record has a wrong format.';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['zone_txt'] = 'Bölge';
+$wb['name_txt'] = 'Sunucu Adı';
+$wb['type_txt'] = 'tür';
+$wb['data_txt'] = 'Veri';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
+$wb['name_error_regex'] = 'Sunucu adının biçimi hatalı.';
+$wb['data_error_empty'] = 'Metin boÅŸ olamaz';
+$wb['data_error_regex'] = 'Metin biçimi geçersiz';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+$wb['invalid_type_ds'] = 'DS kaydının biçimi hatalı.';
+
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_hinfo.lng b/interface/web/dns/lib/lang/tr_dns_hinfo.lng
index 9082420e04..c47718c63c 100644
--- a/interface/web/dns/lib/lang/tr_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/tr_dns_hinfo.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Sunucu Bilgisi';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Sunucu bilgisi boÅŸ olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_import.lng b/interface/web/dns/lib/lang/tr_dns_import.lng
index 64073d2b49..0f95a3131f 100644
--- a/interface/web/dns/lib/lang/tr_dns_import.lng
+++ b/interface/web/dns/lib/lang/tr_dns_import.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['zone_file_import_txt'] = 'Bölge Dosyası Alma';
+$wb['zone_file_import_txt'] = 'Bölge Dosyası İçe Aktarma';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['client_txt'] = 'Müşteri';
-$wb['btn_save_txt'] = 'Bölge Dosyasını Al';
+$wb['btn_save_txt'] = 'Bölge Dosyasını İçe Aktar';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['zone_file_successfully_imported_txt'] = 'Bölge dosyası alındı!';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['zone_file_successfully_imported_txt'] = 'Bölge dosyası içe aktarıldı!';
 $wb['error_no_valid_zone_file_txt'] = 'Bu bölge dosyası geçersiz görünüyor!';
 $wb['zonefile_to_import_txt'] = 'Bölge Dosyası';
-$wb['domain_field_desc_txt'] = 'Alan adı dosya adında ya da bölge dosyasının içeriğinde bulunuyor ise boş bırakılabilir.';
-$wb['title'] = 'Bölge Dosyalarını Al';
+$wb['domain_field_desc_txt'] = 'Etki alanı dosya adında ya da bölge dosyasının içeriğinde bulunuyor ise boş bırakılabilir.';
+$wb['title'] = 'Bölge Dosyalarını İçe Aktar';
 $wb['no_file_uploaded_error'] = 'Hiçbir bölge dosyası yüklenmedi';
-$wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['error_no_server_id'] = 'Sunucu belirtilmemiÅŸ.';
+$wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_loc.lng b/interface/web/dns/lib/lang/tr_dns_loc.lng
index dc9ad9a006..25350c9aa8 100644
--- a/interface/web/dns/lib/lang/tr_dns_loc.lng
+++ b/interface/web/dns/lib/lang/tr_dns_loc.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
-$wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Data';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname is empty.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Text empty';
-$wb['data_error_regex'] = 'Text format invalid';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['zone_txt'] = 'Bölge';
+$wb['name_txt'] = 'Sunucu Adı';
+$wb['type_txt'] = 'Tür';
+$wb['data_txt'] = 'Veri';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
+$wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
+$wb['data_error_empty'] = 'Metin boÅŸ';
+$wb['data_error_regex'] = 'Metin biçimi geçersiz';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_mx.lng b/interface/web/dns/lib/lang/tr_dns_mx.lng
index b3efeab1bb..6f39e991bc 100644
--- a/interface/web/dns/lib/lang/tr_dns_mx.lng
+++ b/interface/web/dns/lib/lang/tr_dns_mx.lng
@@ -2,17 +2,17 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
-$wb['data_txt'] = 'Posta sunucusu adı';
+$wb['type_txt'] = 'Tür';
+$wb['data_txt'] = 'E-posta Sunucusu Adı';
 $wb['aux_txt'] = 'Öncelik';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
-$wb['data_error_empty'] = 'Posta sunucusu adı boş olamaz';
-$wb['data_error_regex'] = 'Posta sunucusu adı biçimi geçersiz';
+$wb['data_error_empty'] = 'E-posta sunucusu adı boş olamaz';
+$wb['data_error_regex'] = 'E-posta sunucusu adı biçimi geçersiz';
 $wb['duplicate_mx_record_txt'] = 'Bu MX kaydı zaten var.';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_ns.lng b/interface/web/dns/lib/lang/tr_dns_ns.lng
index 03975af5fa..e32b086091 100644
--- a/interface/web/dns/lib/lang/tr_dns_ns.lng
+++ b/interface/web/dns/lib/lang/tr_dns_ns.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Bölge';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'tür';
 $wb['data_txt'] = 'Ad Sunucusu Adı';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Bölge boş olamaz.';
 $wb['name_error_regex'] = 'Bölge biçimi geçersiz.';
 $wb['data_error_empty'] = 'Ad sunucusu boÅŸ olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_rp.lng b/interface/web/dns/lib/lang/tr_dns_rp.lng
index 0a01c2dbe8..56c10cb7e4 100644
--- a/interface/web/dns/lib/lang/tr_dns_rp.lng
+++ b/interface/web/dns/lib/lang/tr_dns_rp.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Ä°lgili KiÅŸi';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Ä°lgili kiÅŸi boÅŸ olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_slave.lng b/interface/web/dns/lib/lang/tr_dns_slave.lng
index d6c83a92fa..8c83c1591c 100644
--- a/interface/web/dns/lib/lang/tr_dns_slave.lng
+++ b/interface/web/dns/lib/lang/tr_dns_slave.lng
@@ -13,5 +13,5 @@ $wb['origin_error_unique'] = 'Bu bölge için zaten bir kayıt var.';
 $wb['origin_error_regex'] = 'Bölge biçimi geçersiz.';
 $wb['ns_error_regex'] = 'NS biçimi geçersiz.';
 $wb['eg_domain_tld'] = 'Örnek: domain.tld.';
-$wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
+$wb['ipv4_form_txt'] = 'Birden çok IP adresini virgül ile ayırarak yazın';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa.lng b/interface/web/dns/lib/lang/tr_dns_soa.lng
index 02e325e427..fd39de04f5 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa.lng
@@ -9,11 +9,14 @@ $wb['retry_txt'] = 'Yinelenme';
 $wb['expire_txt'] = 'Sona erme';
 $wb['minimum_txt'] = 'En düşük';
 $wb['ttl_txt'] = 'TTL Süresi';
-$wb['xfer_txt'] = 'Şu IP adreslerine (virgülle ayrılmış)<br />bölge aktarımı yapılabilsin';
+$wb['xfer_txt'] = 'Şu IP adreslerine (virgül ile ayrırak yazın)<br />bölge aktarımı yapılabilsin';
 $wb['active_txt'] = 'Etkin';
+$wb['dnssec_info_txt'] = 'Kayıt defteri için DNSSEC DS verisi';
+$wb['dnssec_wanted_txt'] = 'İmza bölgesi (DNSSEC)';
+$wb['dnssec_wanted_info'] = 'Devre dışı bırakıldığında DNSSEC daha önce etkinleştirilmiş ve anahtarlar üretilmiş ise DNSSEC anahtarları silinir. Ancak bölge bundan sonra imzalanmış biçimde aktarılmaz.';
 $wb['limit_dns_zone_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS bölgesi sayısına ulaştınız.';
 $wb['client_txt'] = 'Müşteri';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['server_id_error_empty'] = 'Sunucu seçilmemiş';
 $wb['origin_error_empty'] = 'Bölge boş olamaz.';
 $wb['origin_error_unique'] = 'Bu bölge için bir kayıt zaten var.';
@@ -21,24 +24,21 @@ $wb['origin_error_regex'] = 'Bölge biçimi geçersiz.';
 $wb['ns_error_regex'] = 'NS geçersiz formatta.';
 $wb['mbox_error_empty'] = 'E-posta boÅŸ olamaz.';
 $wb['mbox_error_regex'] = 'E-posta biçimi geçersiz.';
-$wb['also_notify_txt'] = 'Ayrıca Bildir';
-$wb['also_notify_error_regex'] = 'Lütfen bir IP adresi kullanın.';
-$wb['xfer_error_regex'] = 'Ayrıca bildir: Lütfen bir IP adresi kullanın.';
+$wb['also_notify_txt'] = 'Ayrıca Bildirilsin';
+$wb['also_notify_error_regex'] = 'Ayrıca Bildirilsin: Lütfen bir IP adresi kullanın.';
+$wb['xfer_error_regex'] = 'Aktarılsın: Bir ya da , ile ayrılmış birkaç IP adresi ya da any sözcüğünü kullanın.';
 $wb['update_acl_txt'] = 'EDL Güncelle';
 $wb['seconds_txt'] = 'Saniye';
 $wb['eg_domain_tld'] = 'Örnek: domain.tld';
 $wb['eg_ns1_domain_tld'] = 'Örnek: ns1.domain.tld';
 $wb['eg_webmaster_domain_tld'] = 'Örnek: webmaster@domain.tld';
-$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'Alan adı değiştirilemedi. Lütfen alan adını değiştirmek için sistem yöneticisi ile görüşün.';
+$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'Etki alanı değiştirilemedi. Lütfen etki alanını değiştirmek için sistem yöneticisi ile görüşün.';
 $wb['refresh_range_error'] = 'En kısa yenilenme süresi 60 saniyedir.';
 $wb['retry_range_error'] = 'En kısa yinelenme süresi 60 saniyedir.';
 $wb['expire_range_error'] = 'En kısa sona erme süresi 60 saniyedir.';
 $wb['minimum_range_error'] = 'En kısa en kısa süre 60 saniyedir.';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
-$wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry';
-$wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)';
-$wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
-$wb['soa_cannot_be_changed_txt'] = 'The Zone (SOA) can not be changed. Please contact your administrator to change the zone.';
-$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
+$wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
+$wb['soa_cannot_be_changed_txt'] = 'Bölge (SOA) değiştirilemez. Lütfen bölgeyi değiştirmek için yöneticiniz ile görüşün.';
+$wb['configuration_error_txt'] = 'YAPILANDIRMA SORUNU';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
index d8e56c17ee..490cdc7b4f 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
@@ -5,7 +5,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['origin_txt'] = 'Bölge';
 $wb['ns_txt'] = 'Ad Sunucusu';
 $wb['mbox_txt'] = 'E-posta';
-$wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS bölgesi ekle';
+$wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS Bölgesi Ekle';
 $wb['add_new_record_txt'] = 'El ile DNS Bölgesi Ekle';
 $wb['sys_groupid_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa_list.lng b/interface/web/dns/lib/lang/tr_dns_soa_list.lng
index 8f7ed985ee..831ff6afd7 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa_list.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa_list.lng
@@ -5,7 +5,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['origin_txt'] = 'Bölge';
 $wb['ns_txt'] = 'Ad Sunucusu';
 $wb['mbox_txt'] = 'E-posta';
-$wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS bölgesi ekle';
+$wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS Bölgesi Ekle';
 $wb['add_new_record_txt'] = 'DNS Bölgesi (SOA) Ekle';
-$wb['import_zone_file_txt'] = 'Import Zone File';
+$wb['import_zone_file_txt'] = 'Bölge Dosyasını İçe Aktar';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_spf.lng b/interface/web/dns/lib/lang/tr_dns_spf.lng
index df8d1fe145..40cad402a4 100644
--- a/interface/web/dns/lib/lang/tr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/tr_dns_spf.lng
@@ -1,25 +1,25 @@
 <?php
-$wb['data_txt'] = 'SPF-Record';
-$wb['spf_mechanism_txt'] = 'SPF Mechanism';
-$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
-$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
-$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
-$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
-$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
-$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
-$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
-$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
-$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
-$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
-$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
-$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
-$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
-$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
-$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['record_exists_txt'] = 'DNS-Record already exists';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['data_txt'] = 'SPF Kaydı';
+$wb['spf_mechanism_txt'] = 'SPF Yöntemi';
+$wb['spf_mechanism_pass_txt'] = 'Kabul - Diğer göndericilerden gelen e-postalar kabul edilsin';
+$wb['spf_mechanism_fail_txt'] = 'Red - Diğer göndericilerden gelen e-postalar reddedilsin';
+$wb['spf_mechanism_softfail_txt'] = 'Yazılımsal Red - Diğer göndericilerden gelen e-postalar kabul edilsin ancak e-posta işaretlensin';
+$wb['spf_mechanism_neutral_txt'] = 'Tepkisiz - Hiç bir şey yapılmasın';
+$wb['spf_mx_txt'] = 'MX olarak listelenen sunucular bu etki alanı adına e-posta gönderebilsin';
+$wb['spf_a_txt'] = 'Etki alanının geçerli IP adresleri bu etki alanı adına e-posta gönderebilsin';
+$wb['spf_ip_txt'] = 'CIDR biçiminde, bu etki alanı için e-posta gönderebilecek ya da aktarabilecek IP adresleri';
+$wb['spf_ip_note_txt'] = '(IP adreslerini boşluk ile ayırarak yazın)';
+$wb['spf_invalid_ip_txt'] = 'IP adresi geçersiz';
+$wb['spf_hostname_txt'] = 'Bu etki alanı için e-posta gönderebilecek ya da aktarabilecek diğer sunucuların adları';
+$wb['spf_hostname_note_txt'] = '(Sunucu adlarını boşluk ile ayırarak yazın)';
+$wb['spf_invalid_hostname_txt'] = 'Sunucu adı geçersiz';
+$wb['spf_domain_txt'] = 'Bu etki alanı için e-posta gönderebilecek ya da aktarabilecek etki alanı adları';
+$wb['spf_domain_note_txt'] = '(Etki alanı adlarını boşluk ile ayırarak yazın)';
+$wb['spf_invalid_domain_txt'] = 'Etki alanı adı geçersiz';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['record_exists_txt'] = 'DNS kaydı zaten var';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_srv.lng b/interface/web/dns/lib/lang/tr_dns_srv.lng
index c7ad55a852..8af151db87 100644
--- a/interface/web/dns/lib/lang/tr_dns_srv.lng
+++ b/interface/web/dns/lib/lang/tr_dns_srv.lng
@@ -2,7 +2,7 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['target_txt'] = 'Hedef';
 $wb['weight_txt'] = 'Ağırlık';
 $wb['port_txt'] = 'Kapı';
@@ -10,7 +10,7 @@ $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['aux_txt'] = 'Öncelik';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS Bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Sunucu kaydı boş olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_template.lng b/interface/web/dns/lib/lang/tr_dns_template.lng
index 3ca594f62e..37ba3b5883 100644
--- a/interface/web/dns/lib/lang/tr_dns_template.lng
+++ b/interface/web/dns/lib/lang/tr_dns_template.lng
@@ -3,5 +3,4 @@ $wb['name_txt'] = 'Ad';
 $wb['fields_txt'] = 'Alanlar';
 $wb['template_txt'] = 'Kalıp';
 $wb['visible_txt'] = 'Görünür';
-$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_tlsa.lng b/interface/web/dns/lib/lang/tr_dns_tlsa.lng
index 3b87e2ad59..1fe0310d3a 100644
--- a/interface/web/dns/lib/lang/tr_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_tlsa.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
-$wb['name_txt'] = 'Service-Descriptor';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'TLSA-Data';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname is empty.';
-$wb['name_error_regex'] = 'The hostname has the wrong format. Correct: _&lt;port&gt;._(tcp|udp).&lt;hostname&gt;';
-$wb['data_error_empty'] = 'TLSA-Data empty';
-$wb['data_error_regex'] = 'TLSA dataformat is wrong. Correct: n n n HASH';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['zone_txt'] = 'Bölge';
+$wb['name_txt'] = 'Hizmet Belirteci';
+$wb['type_txt'] = 'tür';
+$wb['data_txt'] = 'TLSA Verisi';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
+$wb['name_error_regex'] = 'Sunucu adının biçimi hatalı. Doğru biçim: _&lt;kapı&gt;._(tcp|udp).&lt;sunucuadı&gt;';
+$wb['data_error_empty'] = 'TLSA verisi boÅŸ olamaz.';
+$wb['data_error_regex'] = 'TLSA veri biçimi hatalı. Doğru biçim: n n n HASH';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_txt.lng b/interface/web/dns/lib/lang/tr_dns_txt.lng
index 7b77bae7f9..632b1e7b69 100644
--- a/interface/web/dns/lib/lang/tr_dns_txt.lng
+++ b/interface/web/dns/lib/lang/tr_dns_txt.lng
@@ -2,18 +2,18 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Metin';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Metin boÅŸ olamaz';
 $wb['data_error_regex'] = 'Metin biçimi geçersiz';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
-$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
-$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
-$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
+$wb['invalid_type_dkim'] = 'DKIM yazılamaz. DKIM düğmesini kullanın';
+$wb['invalid_type_dmarc'] = 'DMARC yazılamaz. DMARC düğmesini kullanın';
+$wb['invalid_type_spf'] = 'SPF yazılamaz. SPF düğmesini kullanın.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_wizard.lng b/interface/web/dns/lib/lang/tr_dns_wizard.lng
index 1a96393914..f0a8b38980 100644
--- a/interface/web/dns/lib/lang/tr_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/tr_dns_wizard.lng
@@ -7,11 +7,14 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['client_txt'] = 'Müşteri';
 $wb['btn_save_txt'] = 'DNS Kaydı Ekle';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['email_txt'] = 'E-posta';
-$wb['ns1_txt'] = 'Ad Sunucusu 1';
-$wb['ns2_txt'] = 'Ad Sunucusu 2';
+$wb['dkim_txt'] = 'DKIM';
+$wb['dnssec_txt'] = 'İmza bölgesi (DNSSEC)';
+$wb['ns1_txt'] = '1. Ad Sunucusu';
+$wb['ns2_txt'] = '2. Ad Sunucusu';
 $wb['ip_txt'] = 'IP Adresi';
+$wb['ipv6_txt'] = 'IPv6 Adresi';
 $wb['error_origin_empty'] = 'Kaynak boÅŸ olamaz.';
 $wb['error_ns_empty'] = 'Ad sunucusu boÅŸ olamaz.';
 $wb['error_mbox_empty'] = 'Mbox boÅŸ olamaz.';
@@ -20,14 +23,15 @@ $wb['error_retry_empty'] = 'Yinelenme boÅŸ olamaz.';
 $wb['error_expire_empty'] = 'Sona erme boÅŸ olamaz.';
 $wb['error_minimum_empty'] = 'En az boÅŸ olamaz.';
 $wb['error_ttl_empty'] = 'TTL süresi boş olamaz.';
-$wb['error_domain_empty'] = 'Alan adı boş olamaz';
+$wb['error_domain_empty'] = 'Etki alanı boş olamaz';
 $wb['error_ip_empty'] = 'IP boÅŸ olamaz.';
-$wb['error_ns1_empty'] = 'As Sunucusu 1 boÅŸ olamaz.';
-$wb['error_ns2_empty'] = 'Ad Sunucusu 2 boÅŸ olamaz.';
+$wb['error_ipv6_empty'] = 'IPv6 boÅŸ olamaz.';
+$wb['error_ns1_empty'] = '1. Ad Sunucusu boÅŸ olamaz.';
+$wb['error_ns2_empty'] = '2. Ad Sunucusu boÅŸ olamaz.';
 $wb['error_email_empty'] = 'E-posta boÅŸ olamaz.';
-$wb['error_domain_regex'] = 'Alan adında geçersiz karakterler var.';
-$wb['error_ns1_regex'] = 'Ad Sunucusu 1 adında geçersiz karakterler var.';
-$wb['error_ns2_regex'] = 'Ad Sunucusu 2 adında geçersiz karakterler var.';
+$wb['error_domain_regex'] = 'Etki alanı adında geçersiz karakterler var.';
+$wb['error_ns1_regex'] = '1. Ad Sunucusu adında geçersiz karakterler var.';
+$wb['error_ns2_regex'] = '2. Ad Sunucusu adında geçersiz karakterler var.';
 $wb['error_email_regex'] = 'E-posta adresi geçersiz.';
 $wb['globalsearch_resultslimit_of_txt'] = '/';
 $wb['globalsearch_resultslimit_results_txt'] = 'sonuç';
@@ -35,11 +39,7 @@ $wb['globalsearch_noresults_text_txt'] = 'Sonuç yok.';
 $wb['globalsearch_noresults_limit_txt'] = '0 sonuç';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Arama';
 $wb['globalsearch_suggestions_text_txt'] = 'Öneriler';
-$wb['dkim_txt'] = 'DKIM';
-$wb['dnssec_txt'] = 'Sign zone (DNSSEC)';
-$wb['ipv6_txt'] = 'IPv6 Address';
-$wb['error_ipv6_empty'] = 'IPv6 empty.';
-$wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
-$wb['limit_dns_zone_txt'] = 'The max. number of DNS zones for your account is reached.';
+$wb['error_no_server_id'] = 'Bir sunucu belirtilmemiÅŸ.';
+$wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
+$wb['limit_dns_zone_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS bölgesi sayısına ulaştınız.';
 ?>
diff --git a/interface/web/help/lib/lang/br.lng b/interface/web/help/lib/lang/br.lng
index a745e60960..217d3afa14 100644
--- a/interface/web/help/lib/lang/br.lng
+++ b/interface/web/help/lib/lang/br.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['Support Message'] = 'Mensagem do suporte';
+$wb['Support Message'] = 'Mensagem de suporte';
 $wb['Message'] = 'Mensagem';
 $wb['Send message'] = 'Enviar mensagem';
-$wb['View messages'] = 'Visualizar mensagem';
+$wb['View messages'] = 'Visualizar mensagens';
 $wb['Support'] = 'Suporte';
 $wb['About ISPConfig'] = 'Sobre o ISPConfig';
 $wb['Version'] = 'Versão';
-$wb['Frequently Asked Questions'] = 'Perguntas frequentes (FAQ)';
-$wb['FAQ Sections'] = 'Sessões FAQ';
-$wb['Manage Sections'] = 'Gerenciar sessões';
-$wb['Add a Question & Answer Pair'] = 'Adicionar par pergunta/resposta';
-$wb['Manage Questions'] = 'Gerenciar perguntas';
+$wb['Frequently Asked Questions'] = 'Questões Frequentes - FAQ';
+$wb['FAQ Sections'] = 'Seções FAQ';
+$wb['Manage Sections'] = 'Gerenciar seções';
+$wb['Add a Question & Answer Pair'] = 'Adicionar novo par questão/resposta';
+$wb['Manage Questions'] = 'Gerenciar questões';
 ?>
diff --git a/interface/web/help/lib/lang/br_faq_form.lng b/interface/web/help/lib/lang/br_faq_form.lng
index 331268a722..b24ec1c58f 100644
--- a/interface/web/help/lib/lang/br_faq_form.lng
+++ b/interface/web/help/lib/lang/br_faq_form.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['faq_faq_txt'] = 'Perguntas Mais Frequentes (FAQ)';
-$wb['faq_question_txt'] = 'Pergunta';
+$wb['faq_faq_txt'] = 'Questões Frequentes';
+$wb['faq_question_txt'] = 'Questão';
 $wb['faq_answer_txt'] = 'Resposta';
-$wb['faq_section_txt'] = 'Sessão';
+$wb['faq_section_txt'] = 'Seção';
 ?>
diff --git a/interface/web/help/lib/lang/br_faq_manage_questions_list.lng b/interface/web/help/lib/lang/br_faq_manage_questions_list.lng
index 8bda9d7f42..ee9f769d91 100644
--- a/interface/web/help/lib/lang/br_faq_manage_questions_list.lng
+++ b/interface/web/help/lib/lang/br_faq_manage_questions_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['faq_question_txt'] = 'Pergunta';
-$wb['faq_section_name_txt'] = 'Sessão';
+$wb['faq_question_txt'] = 'Questão';
+$wb['faq_section_name_txt'] = 'Seção';
 $wb['faq_delete_txt'] = 'Remover';
 $wb['faq_edit_txt'] = 'Editar';
-$wb['faq_sections_txt'] = 'Sessão';
-$wb['faq_faq_questions_txt'] = 'Perguntas frequentes (FAQ)';
-$wb['faq_new_question_txt'] = 'Adicionar par pergunta/resposta';
+$wb['faq_sections_txt'] = 'Seção';
+$wb['faq_faq_questions_txt'] = 'Questões Frequentes';
+$wb['faq_new_question_txt'] = 'Adicionar novo par questão/resposta';
 ?>
diff --git a/interface/web/help/lib/lang/br_faq_sections_form.lng b/interface/web/help/lib/lang/br_faq_sections_form.lng
index f3f9f9f583..2fb709cbd2 100644
--- a/interface/web/help/lib/lang/br_faq_sections_form.lng
+++ b/interface/web/help/lib/lang/br_faq_sections_form.lng
@@ -1,3 +1,3 @@
 <?php
-$wb['faq_section_name_txt'] = 'Nome da Sessão';
+$wb['faq_section_name_txt'] = 'Nome da seção';
 ?>
diff --git a/interface/web/help/lib/lang/br_help_faq_sections_list.lng b/interface/web/help/lib/lang/br_help_faq_sections_list.lng
index f1f549e615..aec81d7b59 100644
--- a/interface/web/help/lib/lang/br_help_faq_sections_list.lng
+++ b/interface/web/help/lib/lang/br_help_faq_sections_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['faq_section_name_txt'] = 'Nome da Sessão';
+$wb['faq_section_name_txt'] = 'Nome da seção';
 $wb['faq_delete_txt'] = 'Remover';
 $wb['faq_edit_txt'] = 'Editar';
-$wb['faq_sections_txt'] = 'Sessões';
-$wb['faq_faq_sections_txt'] = 'Sessões FAQ';
-$wb['faq_new_section_txt'] = 'Adicionar nova sessão';
+$wb['faq_sections_txt'] = 'Seções';
+$wb['faq_faq_sections_txt'] = 'Seções FAQ';
+$wb['faq_new_section_txt'] = 'Adicionar nova seção';
 ?>
diff --git a/interface/web/help/lib/lang/br_support_message.lng b/interface/web/help/lib/lang/br_support_message.lng
index 19ae309a1f..dad8ce7fd5 100644
--- a/interface/web/help/lib/lang/br_support_message.lng
+++ b/interface/web/help/lib/lang/br_support_message.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['recipient_id_txt'] = 'Para';
-$wb['sender_id_txt'] = 'De';
+$wb['recipient_id_txt'] = 'ID do destinatário';
+$wb['sender_id_txt'] = 'ID do remetente';
 $wb['subject_txt'] = 'Assunto';
 $wb['message_txt'] = 'Mensagem';
-$wb['tstamp_txt'] = 'Dados';
+$wb['tstamp_txt'] = 'Data/Hora';
 $wb['reply_txt'] = 'Responder';
 $wb['date_txt'] = 'Data';
-$wb['support_request_subject_txt'] = 'Requisição para Suporte';
-$wb['support_request_txt'] = 'Você tem uma nova requisição para suporte. Por favor, não responda esse e-mail, mas processe a requisição de suporte dentro do ISPConfig.';
-$wb['answer_to_support_request_txt'] = 'Você tem uma nova resposta para requisição de suporte. Por favor, não responda esse e-mail, mas processe a requisição de suporte dentro do ISPConfig.';
-$wb['answer_to_support_request_sent_txt'] = 'Sua resposta para requisição de suporte foi enviada. Por favor, não responda esse e-mail.';
-$wb['support_request_sent_txt'] = 'Sua requisição de suporte foi enviada. Por favor não responda este e-mail.';
-$wb['recipient_or_sender_email_address_not_valid_txt'] = 'A mensagem não foi enviada porque o e-mail do destinatário e/ou remetente não é válido.';
-$wb['subject_is_empty'] = 'Não é permitido o campo \\"Assunto\\" em branco.';
+$wb['support_request_subject_txt'] = 'Requisição de Suporte';
+$wb['support_request_txt'] = 'Você recebeu uma requisição de suporte. Por favor, não responda este e-mail, mas processe a requisição dentro do ISPConfig.';
+$wb['answer_to_support_request_txt'] = 'Você recebeu uma resposta à sua requisição de suporte. Por favor, não responda este e-mail, mas processe a mensagem dentro do ISPConfig.';
+$wb['answer_to_support_request_sent_txt'] = 'Sua resposta à requisição de suporte foi enviada. Por favor, não responda este e-mail.';
+$wb['support_request_sent_txt'] = 'Sua requisição de suporte foi enviada. Por favor, não responda este e-mail.';
+$wb['recipient_or_sender_email_address_not_valid_txt'] = 'A mensagem não pôde ser enviada porque o remetente e/ou destinatário são e-mails inválidos.';
+$wb['subject_is_empty'] = 'O assunto está em branco.';
 ?>
diff --git a/interface/web/help/lib/lang/br_support_message_list.lng b/interface/web/help/lib/lang/br_support_message_list.lng
index 7d888659d8..e4add42b79 100644
--- a/interface/web/help/lib/lang/br_support_message_list.lng
+++ b/interface/web/help/lib/lang/br_support_message_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Mensagens do Suporte';
-$wb['sender_id_txt'] = 'De';
+$wb['list_head_txt'] = 'Mensagens de Suporte';
+$wb['sender_id_txt'] = 'Remetente';
 $wb['subject_txt'] = 'Assunto';
-$wb['add_new_record_txt'] = 'Adicionar uma nova mensagem de suporte';
+$wb['add_new_record_txt'] = 'Adicionar nova mensagem de suporte';
 $wb['date_txt'] = 'Data';
 ?>
diff --git a/interface/web/help/lib/lang/tr.lng b/interface/web/help/lib/lang/tr.lng
index 4aeaa0ac0f..c6b0877af5 100644
--- a/interface/web/help/lib/lang/tr.lng
+++ b/interface/web/help/lib/lang/tr.lng
@@ -11,4 +11,5 @@ $wb['FAQ Sections'] = 'SSS Bölümleri';
 $wb['Manage Sections'] = 'Bölüm Yönetimi';
 $wb['Add a Question & Answer Pair'] = 'Soru-Yanıt Ekle';
 $wb['Manage Questions'] = 'Soru Yönetimi';
+
 ?>
diff --git a/interface/web/help/lib/lang/tr_support_message.lng b/interface/web/help/lib/lang/tr_support_message.lng
index fcd785e627..ae60d28a19 100644
--- a/interface/web/help/lib/lang/tr_support_message.lng
+++ b/interface/web/help/lib/lang/tr_support_message.lng
@@ -7,10 +7,10 @@ $wb['tstamp_txt'] = 'Zaman damgası';
 $wb['reply_txt'] = 'Yanıt';
 $wb['date_txt'] = 'Tarih';
 $wb['support_request_subject_txt'] = 'Destek Ä°steÄŸi';
-$wb['support_request_txt'] = 'Bir destek isteğinde bulundunuz. Lütfen bu e-postay yanıtlamayın. Destek isteğinizi ISPConfig üzerinden izleyin.';
+$wb['support_request_txt'] = 'Bir destek isteğinde bulundunuz. Lütfen bu e-postayı yanıtlamayın. Destek isteğinizi ISPConfig üzerinden izleyin.';
 $wb['answer_to_support_request_txt'] = 'Destek isteğiniz yanıtlandı. Lütfen bu e-postayı yanıtlamayın. Destek isteğinizi ISPConfig üzerinden izleyin.';
 $wb['answer_to_support_request_sent_txt'] = 'Destek isteğinize yazdığınız yanıt gönderildi. Lütfen bu e-potayı yanıtlamayın.';
 $wb['support_request_sent_txt'] = 'Destek isteğiniz gönderildi. Lütfen bu e-postayı yanıtlamayın.';
 $wb['recipient_or_sender_email_address_not_valid_txt'] = 'Gönderen ya da alıcı adresi geçersiz olduğundan bu ileti gönderilemedi.';
-$wb['subject_is_empty'] = 'The subject can not be empty.';
+$wb['subject_is_empty'] = 'Konu boÅŸ olamaz.';
 ?>
diff --git a/interface/web/login/lib/lang/br.lng b/interface/web/login/lib/lang/br.lng
index 379b719f4d..9baaf55212 100644
--- a/interface/web/login/lib/lang/br.lng
+++ b/interface/web/login/lib/lang/br.lng
@@ -13,18 +13,18 @@ $wb['user_regex_error'] = 'O nome do usuário contém menos de 1 ou mais de 64 c
 $wb['pw_error_length'] = 'Tamanho da senha não pode ser maior do que 64 caracteres.';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
-$wb['login_button_txt'] = 'Entrar';
+$wb['login_button_txt'] = 'Acessar';
 $wb['pw_lost_txt'] = 'Esqueceu a senha?';
 $wb['error_maintenance_mode'] = 'Esta instalação do ISPConfig atualmente está sob manutenção. Nós retornaremos em breve. Obrigado por sua paciência.';
-$wb['login_txt'] = 'Acesso';
+$wb['login_txt'] = 'Acessar';
 $wb['pw_reset_txt'] = 'Redefinir senha';
 $wb['pw_button_txt'] = 'Reenviar senha';
 $wb['email_txt'] = 'E-mail';
-$wb['theme_not_compatible'] = 'O tema escolhido não é compatível com a versão atual do ISPConfig. Por favor, procure por uma nova versão deste tema compatível com ISPConfig.<br />O tema padrão foi configurado automaticamente.';
+$wb['theme_not_compatible'] = 'O tema escolhido não é compatível com a versão atual do ISPConfig. Por favor, procure por uma nova versão deste tema, compatível com ISPConfig.<br />O tema padrão foi configurado automaticamente.';
 $wb['back_txt'] = 'Voltar';
 $wb['email_error'] = 'O e-mail contém caracteres não permitidos ou formato é inválido.';
 $wb['stay_logged_in_txt'] = 'Manter-me conectado';
-$wb['lost_password_function_disabled_txt'] = 'Função de redefinir senha indisponível para este usuário.';
+$wb['lost_password_function_disabled_txt'] = 'Função "redefinir senha" indisponível para este usuário.';
 $wb['pw_reset_act'] = 'Você receberá um link de ativação. Por favor, acesse o link de ativação para confirmar sua nova senha.';
 $wb['pw_reset_act_mail_title'] = 'Confirmar nova senha para o painel de controle ISPConfig';
 $wb['pw_reset_act_mail_msg'] = 'Por favor, confirme se você deseja reiniciar sua senha do painel de controle ISPConfig, acessando o link de ativação: ';
diff --git a/interface/web/login/lib/lang/br_login_as.lng b/interface/web/login/lib/lang/br_login_as.lng
index 5d9fb269b9..72c2c97e40 100644
--- a/interface/web/login/lib/lang/br_login_as.lng
+++ b/interface/web/login/lib/lang/br_login_as.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['login_1_txt'] = 'Você deseja acessar como usuário';
-$wb['login_2_txt'] = 'Para retornar ao administrador, você pode \\"voltar\\" selecionando sair.';
+$wb['login_1_txt'] = 'Gostaria de acessar como cliente?';
+$wb['login_2_txt'] = 'Se confirmar, poderá "voltar" clicando em sair.';
 $wb['btn_yes_txt'] = 'Sim, acessar como cliente';
-$wb['btn_back_txt'] = 'Não, voltar a lista';
+$wb['btn_back_txt'] = 'Não, voltar para a lista';
 $wb['udp_port_help_txt'] = 'Separado por vírgula';
 $wb['active_txt'] = 'Ativo';
-$wb['firewall_error_unique'] = 'Já existe um registro de firewall igual para este servidor.';
-$wb['tcp_ports_error_regex'] = 'Caractere não permitido para atribuição numa porta TCP. Caracteres permitidos são: números, \':\' e \',\'.';
-$wb['udp_ports_error_regex'] = 'Caractere não permitido para atribuição numa porta UDP. Caracteres permitidos são: números, \':\' e \',\'.';
-$wb['login_as_or_logout_txt'] = 'Você deseja acessar novamente como {UTYPE} ou sair?';
+$wb['firewall_error_unique'] = 'Já existe uma regra de firewall idêntica para este servidor.';
+$wb['tcp_ports_error_regex'] = 'Caractere não permitido para porta tcp. Caracteres permitidos são números, ":" e ",".';
+$wb['udp_ports_error_regex'] = 'Caractere não permitido para porta udp. Caracteres permitidos são números, ":" e ",".';
+$wb['login_as_or_logout_txt'] = 'Gostaria de realizar acesso novamente como {UTYPE} ou sair?';
 ?>
diff --git a/interface/web/login/lib/lang/tr.lng b/interface/web/login/lib/lang/tr.lng
index c50ea5c8a2..863a6310d5 100644
--- a/interface/web/login/lib/lang/tr.lng
+++ b/interface/web/login/lib/lang/tr.lng
@@ -3,12 +3,15 @@ $wb['error_user_password_empty'] = 'Kullanıcı adı ya da parola boş';
 $wb['error_user_password_incorrect'] = 'Kullanıcı adı ya da parola hatalı';
 $wb['error_user_blocked'] = 'Kullanıcı engellenmiş.';
 $wb['error_user_too_many_logins'] = 'Fazla sayıda hatalı oturum açmayı denediniz, Lütfen 15 dakika sonra yeniden deneyin.';
-$wb['pass_reset_txt'] = 'Yazdığınız e-posta adresi hesabınızdakine uyarsa, yeni bir parola oluşturularak e-posta adresinize gönderilir.';
+$wb['pass_reset_txt'] = 'Yazdığınız e-posta adresi hesabınızdakine uyarsa, yeni bir parola üretilerek e-posta adresinize gönderilir.';
 $wb['pw_reset'] = 'Parolanız sıfırlandı ve e-posta adresinize gönderildi.';
+$wb['pw_reset_act'] = 'Size bir etkinleştirme bağlantısı gönderildi. Parola isteğinizi onaylamak için bağlantıya tıklayın.';
 $wb['pw_error'] = 'Kullanıcı adı ya da e-posta adresiniz doğru değil.';
 $wb['pw_error_noinput'] = 'Lütfen e-posta adresinizi ya da kullanıcı adınızı yazın.';
 $wb['pw_reset_mail_msg'] = 'ISPConfig 3 Kontrol Paneli parolanız sıfırlandı. Yeni parolanız: ';
 $wb['pw_reset_mail_title'] = 'ISPConfig 3 Kontrol Paneli parolanız sıfırlandı';
+$wb['pw_reset_act_mail_title'] = 'ISPConfig 3 Control Panel parola sıfırlama isteğini onaylayın';
+$wb['pw_reset_act_mail_msg'] = 'Lütfen ISPConfig 3 Control Panel hesabınızın parolasını sıfırlamak için şu bağlantıya tıklayın: ';
 $wb['user_regex_error'] = 'Kullanıcı adınız izin verilmeyen karakterlerden oluşuyor ya da 64 karakterden uzun.';
 $wb['pw_error_length'] = 'Parola 64 karakterden uzun.';
 $wb['email_error'] = 'E-posta adresi izin verilmeyen karakterlerden oluşuyor ya da biçimi hatalı.';
@@ -24,11 +27,8 @@ $wb['back_txt'] = 'Geri';
 $wb['error_maintenance_mode'] = 'ISPConfig bakımda. Kısa bir süre sonra yeniden çalışıyor olacak, sabrınız için teşekkürler.';
 $wb['theme_not_compatible'] = 'Seçilmiş tema geçerli ISPConfig sürümü ile uyumlu değil. Lütfen temanın yeni sürümünü araştırın.<br />Varsayılan tema etkinleştirildi.';
 $wb['stay_logged_in_txt'] = 'Oturumum açık kalsın';
-$wb['pw_reset_act'] = 'You have been sent an activation link. Please visit the link to confirm your password request.';
-$wb['pw_reset_act_mail_title'] = 'Confirm ISPConfig 3 Control panel password reset';
-$wb['pw_reset_act_mail_msg'] = 'Please confirm that your want to reset your ISPConfig 3 control panel account password by visiting the following activation link: ';
-$wb['lost_password_function_disabled_txt'] = 'The lost password function is not available for this user.';
-$wb['lost_password_function_wait_txt'] = 'You cannot request a new password, yet. Please wait a few minutes.';
-$wb['lost_password_function_expired_txt'] = 'This activation link has expired. Please request a new one.';
-$wb['lost_password_function_denied_txt'] = 'This activation link is not valid.';
+$wb['lost_password_function_disabled_txt'] = 'Bu kullanıcı parolamı unuttum özelliğini kullanamaz.';
+$wb['lost_password_function_wait_txt'] = 'Henüz yeni parola isteğinde bulunamazsınız. Lütfen bir kaç dakika bekleyin.';
+$wb['lost_password_function_expired_txt'] = 'Bu etkinleştirme bağlantısının süresi geçmiş. Lütfen yeni bir parola sıfırlama isteğinde bulunun.';
+$wb['lost_password_function_denied_txt'] = 'Bu etkinleştirme bağlantısı geçersiz.';
 ?>
diff --git a/interface/web/login/lib/lang/tr_login_as.lng b/interface/web/login/lib/lang/tr_login_as.lng
index f7f12feeff..8a54a8efd9 100644
--- a/interface/web/login/lib/lang/tr_login_as.lng
+++ b/interface/web/login/lib/lang/tr_login_as.lng
@@ -1,12 +1,13 @@
 <?php
 $wb['login_1_txt'] = 'Bu kullanıcı olarak oturum açmak ister misiniz';
-$wb['login_2_txt'] = '\\"Geri dönmek\\" için oturumu kapat üzerine tıklayın.';
+$wb['login_2_txt'] = 'Oturumu Kapat üzerine tıklayarak "Geri Dönebilirsiniz".';
 $wb['btn_yes_txt'] = 'Evet, Müşteri olarak oturum aç';
 $wb['btn_back_txt'] = 'Hayır, listeye geri dön';
 $wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['active_txt'] = 'Etkin';
 $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
-$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
-$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
-$wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['active_txt'] = 'Etkin';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+$wb['login_as_or_logout_txt'] = '{UTYPE} olarak oturum açmak ya da oturumunuzu kapatmak ister misiniz?';
 ?>
diff --git a/interface/web/mail/lib/lang/br.lng b/interface/web/mail/lib/lang/br.lng
index 972e134bc8..7748342612 100644
--- a/interface/web/mail/lib/lang/br.lng
+++ b/interface/web/mail/lib/lang/br.lng
@@ -1,50 +1,56 @@
 <?php
-$wb['Email Alias'] = 'Apelidos de e-mail';
-$wb['Email Blacklist'] = 'Lista negra';
-$wb['Blacklist'] = 'Lista negra';
-$wb['Mail Content Filter'] = 'Filtro de conteúdo';
+$wb['Email Alias'] = 'Alias de e-mail';
+$wb['Email Blacklist'] = 'Lista Negra';
+$wb['Blacklist'] = 'Lista Negra';
+$wb['Mail Content Filter'] = 'Filtro de conteúdo de e-mail';
 $wb['Filter'] = 'Filtro';
-$wb['Mail Domain'] = 'Domínio';
-$wb['Domain'] = 'Domínios';
-$wb['Email Catchall'] = 'Contas cata tudo';
-$wb['Email Forward'] = 'Encaminhamento';
+$wb['Mail Domain'] = 'Domínio de e-mail';
+$wb['Domain'] = 'Domínio';
+$wb['Email Catchall'] = 'Contas cata-tudo';
+$wb['Email Forward'] = 'Encaminhamento de e-mail';
 $wb['Get Email'] = 'Busca de e-mail';
 $wb['Spamfilter'] = 'Filtro anti-spam';
-$wb['Email Routing'] = 'Transportes';
+$wb['Email Routing'] = 'Rotas de e-mail';
+$wb['Mailing List'] = 'Listas de e-mail';
 $wb['Email transport'] = 'Transportes';
 $wb['Mailbox'] = 'Contas de e-mail';
-$wb['Autoresponder'] = 'Resposta automática';
-$wb['Mail Filter'] = 'Filtros';
+$wb['Autoresponder'] = 'Auto-resposta';
+$wb['Mail Filter'] = 'Filtro de e-mail';
 $wb['Custom Rules'] = 'Regras personalizadas';
-$wb['Email filter'] = 'Filtro';
-$wb['Email Whitelist'] = 'Lista branca';
-$wb['Whitelist'] = 'Lista branca';
-$wb['Spamfilter blacklist'] = 'Filtro anti-spam (lista negra)';
-$wb['Spamfilter Config'] = 'Configuração do filtro anti-spam';
-$wb['Spamfilter policy'] = 'Políticas de filtro anti-spam';
+$wb['Email filter'] = 'Filtro de e-mail';
+$wb['Email Whitelist'] = 'Lista Branca de e-mails';
+$wb['Whitelist'] = 'Lista Branca';
+$wb['Spamfilter blacklist'] = 'Filtros anti-spam - lista negra';
+$wb['Blacklist'] = 'Lista Negra';
+$wb['Spamfilter Config'] = 'Configurações de filtros anti-spam';
+$wb['Servidor'] = 'Servidor';
+$wb['Spamfilter policy'] = 'Políticas de filtros anti-spam';
 $wb['Policy'] = 'Política';
 $wb['Quarantine'] = 'Quarentena';
 $wb['Tag-Level'] = 'Nível de marcação';
 $wb['Other'] = 'Outros';
-$wb['Spamfilter users'] = 'Usuários de filtro anti-spam';
-$wb['Users'] = 'Usuários';
-$wb['Spamfilter Whitelist'] = 'Filtro anti-spam (lista branca)';
-$wb['Email'] = 'e-mail';
-$wb['Email Mailbox'] = 'Contas de e-mail';
+$wb['Spamfilter users'] = 'Contas de e-mail para filtros anti-spam';
+$wb['Users'] = 'Contas de e-mail';
+$wb['Spamfilter Whitelist'] = 'Filtros anti-spam - lista branca';
+$wb['Whitelist'] = 'Lista Branca';
+$wb['Email'] = 'e-Mail';
+$wb['Email Mailbox'] = 'Conta de e-mail';
 $wb['Email Accounts'] = 'Contas de e-mail';
-$wb['User / Domain'] = 'Usuário/domínio';
-$wb['Server Settings'] = 'Configurações do servidor';
-$wb['Fetchmail'] = 'Contas de busca';
-$wb['Mailbox traffic'] = 'Tráfego';
+$wb['User / Domain'] = 'Usuário/Domínio';
+$wb['Server Settings'] = 'Configurações do Servidor';
+$wb['Spamfilter'] = 'Filtros anti-spam';
+$wb['Fetchmail'] = 'Busca de e-mails';
+$wb['XMPP Domain'] = 'Domínios xmpp';
+$wb['XMPP Account'] = 'Contas xmpp';
+$wb['Mailbox traffic'] = 'Tráfego de e-mails';
 $wb['Statistics'] = 'Estatísticas';
-$wb['Postfix Whitelist'] = 'Postfix (lista branca)';
-$wb['Postfix Blacklist'] = 'Postfix (lista negra)';
-$wb['Content Filter'] = 'Filtros de conteúdo';
-$wb['Global Filters'] = 'Filtros globais';
-$wb['Domain Alias'] = 'Apelidos de domínio';
+$wb['Backup Stats'] = 'Estatísticas de backup';
+$wb['Postfix Whitelist'] = 'Lista Branca do Postfix';
+$wb['Postfix Blacklist'] = 'Lista Negra do Postfix';
+$wb['Content Filter'] = 'Filtro de Conteúdo';
+$wb['Global Filters'] = 'Filtros Globais';
+$wb['Domain Alias'] = 'Alias de domínio';
 $wb['Relay Recipients'] = 'Destinatários de retransmissão';
-$wb['Mailbox quota'] = 'Cota para contas de e-mails';
-$wb['Server'] = 'Servidor';
-$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
-$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
-?>
+$wb['Mailbox quota'] = 'Cota da conta de e-mail';
+$wb['add_header_txt'] = 'Cabeçalho (adicionar "X-Spam: Yes")';
+$wb['rewrite_subject_txt'] = 'Assunto (adicionar "***SPAM***" no início)';
diff --git a/interface/web/mail/lib/lang/br_backup_stats_list.lng b/interface/web/mail/lib/lang/br_backup_stats_list.lng
index 9d07817712..482e913200 100644
--- a/interface/web/mail/lib/lang/br_backup_stats_list.lng
+++ b/interface/web/mail/lib/lang/br_backup_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Estatísticas de backup';
+$wb['list_head_txt'] = 'Backup de Estatísticas';
 $wb['active_txt'] = 'Ativo';
-$wb['domain_txt'] = 'e-mail';
-$wb['backup_count_txt'] = 'Contador de backup';
+$wb['domain_txt'] = 'Domínio';
+$wb['backup_count_txt'] = 'Contador de backups';
 $wb['backup_server_txt'] = 'Servidor';
-$wb['backup_interval_txt'] = 'Intervalo/contador';
-$wb['backup_size_txt'] = 'Tamanho';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_size_txt'] = 'Tamanho do backup';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_alias.lng b/interface/web/mail/lib/lang/br_mail_alias.lng
index 993dd71d2a..6361957180 100644
--- a/interface/web/mail/lib/lang/br_mail_alias.lng
+++ b/interface/web/mail/lib/lang/br_mail_alias.lng
@@ -1,17 +1,17 @@
 <?php
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'Alias de e-mail';
 $wb['destination_txt'] = 'Destino';
 $wb['active_txt'] = 'Ativo';
 $wb['email_error_isemail'] = 'Endereço de e-mail é inválido.';
 $wb['email_error_unique'] = 'Endereço de e-mail duplicado.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
-$wb['destination_error_isemail'] = 'Endereço de destino inválido';
-$wb['limit_mailalias_txt'] = 'O limite de apelidos de domínio para esta conta foi alcançado.';
-$wb['duplicate_mailbox_txt'] = 'Já existe uma conta de e-mail com este endereço.';
+$wb['destination_error_isemail'] = 'Endereço de e-mail de destino é inválido.';
+$wb['limit_mailalias_txt'] = 'O limite de alias de e-mail para esta conta foi alcançado.';
+$wb['duplicate_mailbox_txt'] = 'Já existe um endereço de e-mail idêntico.';
 $wb['domain_txt'] = 'Domínio';
-$wb['duplicate_email_alias_txt'] = 'Este apelido de e-mail já existe.';
-$wb['source_txt'] = 'Apelido';
-$wb['greylisting_txt'] = 'Habilitar greylist';
+$wb['duplicate_email_alias_txt'] = 'Este alias de e-mail já existe.';
+$wb['source_txt'] = 'Alias';
 $wb['send_as_txt'] = 'Enviar como';
-$wb['send_as_exp'] = 'Permite o alvo enviar e-mails usando este endereço como origem';
+$wb['send_as_exp'] = 'Permitir o destino enviar e-mails usando este alias como origem';
+$wb['greylisting_txt'] = 'Habilitar greylist';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_alias_list.lng b/interface/web/mail/lib/lang/br_mail_alias_list.lng
index 69fb77a779..5e96f0fb30 100644
--- a/interface/web/mail/lib/lang/br_mail_alias_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_alias_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Apelidos de e-mail';
+$wb['list_head_txt'] = 'Alias de e-mail';
 $wb['active_txt'] = 'Ativo';
-$wb['source_txt'] = 'origem';
+$wb['source_txt'] = 'Origem';
 $wb['destination_txt'] = 'Destino';
-$wb['email_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar novo apelido';
+$wb['email_txt'] = 'e-Mail';
+$wb['add_new_record_txt'] = 'Adicionar novo alias de e-mail';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_aliasdomain.lng b/interface/web/mail/lib/lang/br_mail_aliasdomain.lng
index 68986f536e..a0f4e5067e 100644
--- a/interface/web/mail/lib/lang/br_mail_aliasdomain.lng
+++ b/interface/web/mail/lib/lang/br_mail_aliasdomain.lng
@@ -3,9 +3,9 @@ $wb['source_txt'] = 'Origem';
 $wb['destination_txt'] = 'Destino';
 $wb['active_txt'] = 'Ativo';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
-$wb['limit_mailaliasdomain_txt'] = 'O limite de apelidos de domínios para esta conta foi alcançado.';
+$wb['limit_mailaliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
 $wb['source_destination_identical_txt'] = 'Origem e destino são os mesmos.';
-$wb['source_error_empty'] = 'Origem está em branco.';
-$wb['source_error_unique'] = 'Origem duplicada.';
-$wb['source_error_regex'] = 'Origem inválida.';
+$wb['source_error_empty'] = 'O domínio de origem está em branco.';
+$wb['source_error_unique'] = 'Domínio de origem duplicado.';
+$wb['source_error_regex'] = 'Domínio de origem é inválido.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/br_mail_aliasdomain_list.lng
index 4849c3cb6b..ddf1ea0a96 100644
--- a/interface/web/mail/lib/lang/br_mail_aliasdomain_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_aliasdomain_list.lng
@@ -1,7 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Apelido de domínio';
+$wb['list_head_txt'] = 'Alias de domínio';
 $wb['active_txt'] = 'Ativo';
 $wb['source_txt'] = 'Origem';
 $wb['destination_txt'] = 'Destino';
-$wb['add_new_record_txt'] = 'Adicionar novo apelido';
+$wb['source_txt'] = 'Origem';
+$wb['add_new_record_txt'] = 'Adicionar novo alias de domínio';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_backup_list.lng b/interface/web/mail/lib/lang/br_mail_backup_list.lng
index 8ef31a0769..b8e4f82300 100644
--- a/interface/web/mail/lib/lang/br_mail_backup_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_backup_list.lng
@@ -3,14 +3,14 @@ $wb['list_head_txt'] = 'Backups existentes';
 $wb['date_txt'] = 'Data';
 $wb['backup_type_txt'] = 'Tipo';
 $wb['filename_txt'] = 'Arquivo de backup';
-$wb['restore_backup_txt'] = 'Restaurar backup';
-$wb['restore_info_txt'] = 'Restauração do backup iniciada. Esta ação poderá levar vários minutos para ser concluída. Aguarde.';
-$wb['restore_confirm_txt'] = 'A restauração do backup reescreverá os arquivos existentes das suas caixas postais. Tem certeza que deseja restaurar este backup?';
-$wb['download_pending_txt'] = 'Já existe um download deste backup em execução.';
-$wb['restore_pending_txt'] = 'Já existe uma restauração deste backup em execução.';
-$wb['delete_backup_txt'] = 'Remover backup';
-$wb['delete_info_txt'] = 'Remoção do backup iniciada. Esta ação poderá levar vários minutos para ser concluída. Aguarde.';
-$wb['delete_confirm_txt'] = 'Tem certeza que deseja remover este backup?';
-$wb['delete_pending_txt'] = 'Já existe uma remoção deste backup em execução.';
-$wb['filesize_txt'] = 'Tamanho';
+$wb['restore_backup_txt'] = 'Restaurar';
+$wb['restore_info_txt'] = 'A restauração do backup está em andamento. Esta ação demora vários minutos para concluir.';
+$wb['restore_confirm_txt'] = 'A restauração do backup pode sobrescrever arquivos das contas de e-mail. Você tem certeza que deseja restaurar este backup?';
+$wb['download_pending_txt'] = 'Já existe um download de backup em andamento.';
+$wb['restore_pending_txt'] = 'Já existe uma restauração de backup em andamento.';
+$wb['delete_backup_txt'] = 'Remover Backup';
+$wb['delete_info_txt'] = 'A remoção do backup está em andamento. Esta ação demora vários minutos para concluir.';
+$wb['delete_confirm_txt'] = 'Deseja remover este backup?';
+$wb['delete_pending_txt'] = 'Já existe uma remoção de backup em andamento.';
+$wb['filesize_txt'] = 'Tamanho do arquivo';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_blacklist.lng b/interface/web/mail/lib/lang/br_mail_blacklist.lng
index 4c52e77d23..14c323c342 100644
--- a/interface/web/mail/lib/lang/br_mail_blacklist.lng
+++ b/interface/web/mail/lib/lang/br_mail_blacklist.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'Lista negra';
+$wb['source_txt'] = 'Lista Negra';
 $wb['recipient_txt'] = 'Destinatário';
 $wb['active_txt'] = 'Ativo';
-$wb['source_error_notempty'] = 'Endereço está em branco.';
+$wb['source_error_notempty'] = 'Destinatário está em branco.';
 $wb['type_txt'] = 'Tipo';
 $wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_blacklist_list.lng b/interface/web/mail/lib/lang/br_mail_blacklist_list.lng
index d561cea6b6..319a354016 100644
--- a/interface/web/mail/lib/lang/br_mail_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_blacklist_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Lista Negra';
+$wb['list_head_txt'] = 'Lista negra';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'e-mail';
+$wb['source_txt'] = 'Endereço de e-mail';
 $wb['type_txt'] = 'Tipo';
 $wb['recipient_txt'] = 'Destinatário';
-$wb['add_new_record_txt'] = 'Adicionar novo e-mail à lista';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 $wb['access_txt'] = 'acesso';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_content_filter.lng b/interface/web/mail/lib/lang/br_mail_content_filter.lng
index dc85d4e78e..b0a7c15b12 100644
--- a/interface/web/mail/lib/lang/br_mail_content_filter.lng
+++ b/interface/web/mail/lib/lang/br_mail_content_filter.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['type_txt'] = 'Filtro';
-$wb['pattern_txt'] = 'Padrão de expressão regular.';
-$wb['data_txt'] = 'Data';
+$wb['pattern_txt'] = 'Padrão da expressão regular';
+$wb['data_txt'] = 'Dados';
 $wb['action_txt'] = 'Ação';
 $wb['active_txt'] = 'Ativo';
-$wb['pattern_error_empty'] = 'Padrão da expressão regular está em branco';
+$wb['pattern_error_empty'] = 'Padrão da expressão regular está em branco.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_content_filter_list.lng b/interface/web/mail/lib/lang/br_mail_content_filter_list.lng
index 4d35bd6352..65674a903d 100644
--- a/interface/web/mail/lib/lang/br_mail_content_filter_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_content_filter_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Cabeçalhos postfix e body checks';
+$wb['list_head_txt'] = 'Verificações de cabeçalho e corpo de e-mail - Postfix';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['pattern_txt'] = 'Padrão';
diff --git a/interface/web/mail/lib/lang/br_mail_domain.lng b/interface/web/mail/lib/lang/br_mail_domain.lng
index 87cdd1287c..0bdb473095 100644
--- a/interface/web/mail/lib/lang/br_mail_domain.lng
+++ b/interface/web/mail/lib/lang/br_mail_domain.lng
@@ -3,21 +3,21 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['type_txt'] = 'Tipo';
 $wb['active_txt'] = 'Ativo';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Domínio duplicado';
-$wb['domain_error_regex'] = 'Nome de domínio inválido';
-$wb['client_txt'] = 'Cliente';
-$wb['limit_maildomain_txt'] = 'O limite de contas de e-mail para este domínio foi alcançado.';
-$wb['policy_txt'] = 'Filtro anti-spam';
-$wb['no_policy'] = '- desabilitado -';
-$wb['dkim_txt'] = 'habilitar DKIM';
+$wb['dkim_txt'] = 'Habilitar DKIM';
 $wb['dkim_private_txt'] = 'Chave privada DKIM';
-$wb['dkim_public_txt'] = 'Somente chave pública/nfor DKIM';
+$wb['dkim_public_txt'] = 'Chave pública DKIMapenas para informação';
 $wb['dkim_generate_txt'] = 'Gerar chave privada DKIM';
 $wb['dkim_dns_txt'] = 'Registro dns';
-$wb['dkim_private_key_error'] = 'Chave privada DKIM inválida';
-$wb['dkim_selector_txt'] = 'Seletor DKIM';
-$wb['dkim_selector_error'] = 'Seletor DKIM é inválido. Use apenas caracteres minúsculos e alfanuméricos (\'az\' ou \'0-9\') até o máximo de 63 caracteres';
-$wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)';
+$wb['dkim_private_key_error'] = 'A chave privada DKIM é inválida.';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'O domínio está duplicado.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['dkim_settings_txt'] = 'Domínio de e-mail identificado por chaves de domínio (DKIM)';
+$wb['client_txt'] = 'Cliente';
+$wb['limit_maildomain_txt'] = 'O limite de domínios de e-mail para esta conta foi alcançado.';
+$wb['policy_txt'] = 'Filtro anti-spam';
+$wb['no_policy'] = '-desabilitado-';
 $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido para esta conta.';
+$wb['dkim_selector_txt'] = 'Seletor DKIM';
+$wb['dkim_selector_error'] = 'Seletor DKIM é inválido. Utilize apenas caracteres alfanuméricos em minúsculas (a-z ou 0-9) e no máximo 63 caracteres.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_domain_catchall.lng b/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
index 3c4c6a2628..3d4f85af8d 100644
--- a/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
@@ -1,12 +1,13 @@
 <?php
 $wb['domain_txt'] = 'Domínio';
-$wb['destination_txt'] = 'Destino';
+$wb['destination_txt'] = 'Endereço de e-mail de destino';
 $wb['active_txt'] = 'Ativo';
-$wb['domain_error_unique'] = 'Já existe uma conta cata tudo para este domínio.';
+$wb['domain_error_unique'] = 'Já existe uma conta cata-tudo para este domínio.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
-$wb['domain_error_regex'] = 'O domínio contém caracteres inválidos';
-$wb['limit_mailcatchall_txt'] = 'O limite de contas cata tudo para este domínio foi alcançado.';
+$wb['domain_error_regex'] = 'O domínio é inválido ou contêm caracteres inválidos.';
+$wb['limit_mailcatchall_txt'] = 'O limite de contas cata-tudo para esta conta foi alcançado.';
+$wb['domain_txt'] = 'Domínio';
 $wb['source_txt'] = 'Origem';
-$wb['destination_error_isemail'] = 'Destino não é um e-mail válido.';
-$wb['greylisting_txt'] = 'Enable greylisting';
+$wb['destination_error_isemail'] = 'Endereço de e-mail de destino é inválido.';
+$wb['greylisting_txt'] = 'Habilitar greylist';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng
index 57c1f3a11a..2d5747826c 100644
--- a/interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Contas cata tudo';
+$wb['list_head_txt'] = 'Conta cata-tudo';
 $wb['active_txt'] = 'Ativo';
-$wb['source_txt'] = 'Origem';
-$wb['destination_txt'] = 'Endereço de destino';
+$wb['source_txt'] = 'origem';
+$wb['destination_txt'] = 'Endereço de e-mail de destino';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['add_new_record_txt'] = 'Adicionar nova conta';
diff --git a/interface/web/mail/lib/lang/br_mail_forward.lng b/interface/web/mail/lib/lang/br_mail_forward.lng
index 8f9864638d..5a2400e49b 100644
--- a/interface/web/mail/lib/lang/br_mail_forward.lng
+++ b/interface/web/mail/lib/lang/br_mail_forward.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['email_txt'] = 'e-mail';
-$wb['destination_txt'] = 'e-mail de destino';
+$wb['email_txt'] = 'e-Mail';
+$wb['destination_txt'] = 'Endereço e-mail de destino';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_mailforward_txt'] = 'O limite de encaminhamentos para esta conta foi alcançado.';
-$wb['duplicate_mailbox_txt'] = 'Já existe um e-mail com este endereço.';
+$wb['limit_mailforward_txt'] = 'O limite de encaminhamentos de e-mail para esta conta foi alcançado.';
+$wb['duplicate_mailbox_txt'] = 'Já existe um conta de e-mail idêntica.';
 $wb['domain_txt'] = 'Domínio';
-$wb['source_txt'] = 'Origem';
-$wb['greylisting_txt'] = 'Habilitar greylist';
-$wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
+$wb['source_txt'] = 'Endereço de e-mail de origem';
+$wb['email_error_isemail'] = 'Por favor informe um endereço de e-mail válido.';
 $wb['send_as_txt'] = 'Enviar como';
-$wb['send_as_exp'] = 'Permite o alvo enviar e-mails usando este endereço como origem (se o alvo for interno)';
+$wb['send_as_exp'] = 'Permitir o destino enviar e-mails usando este endereço como origem (se o destino for interno)';
+$wb['greylisting_txt'] = 'Habilitar greylist';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_forward_list.lng b/interface/web/mail/lib/lang/br_mail_forward_list.lng
index 025ecc00b6..166839e2c9 100644
--- a/interface/web/mail/lib/lang/br_mail_forward_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_forward_list.lng
@@ -2,7 +2,7 @@
 $wb['list_head_txt'] = 'Encaminhamento de e-mail';
 $wb['active_txt'] = 'Ativo';
 $wb['source_txt'] = 'Origem';
-$wb['destination_txt'] = 'Destino';
-$wb['email_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar novo encaminhamento';
+$wb['destination_txt'] = 'Destinatário';
+$wb['email_txt'] = 'e-Mail';
+$wb['add_new_record_txt'] = 'Adicionar novo encaminhamento de e-mail';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_get.lng b/interface/web/mail/lib/lang/br_mail_get.lng
index dc9d2fce87..f3d055f6d8 100644
--- a/interface/web/mail/lib/lang/br_mail_get.lng
+++ b/interface/web/mail/lib/lang/br_mail_get.lng
@@ -1,19 +1,19 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['type_txt'] = 'Tipo';
-$wb['source_server_txt'] = 'Servidor pop3/imap';
+$wb['source_server_txt'] = 'Servidor POP3/IMAP';
 $wb['source_username_txt'] = 'Usuário';
 $wb['source_password_txt'] = 'Senha';
-$wb['source_delete_txt'] = 'Remover mensagens da origem após o recebimento';
+$wb['source_delete_txt'] = 'Remover e-mails após recuperação';
+$wb['source_delete_note_txt'] = 'Verifique primeiro se a recuperação de e-mails funciona antes de ativar esta opção.';
+$wb['source_read_all_txt'] = 'Recuperar todos e-mails (inclusive e-mails lidos)';
 $wb['destination_txt'] = 'Destino';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_fetchmail_txt'] = 'O limite de contas de buscas para esta conta foi alcançado.';
-$wb['source_server_error_isempty'] = 'Servidor está em branco.';
-$wb['source_username_error_isempty'] = 'Usuário está em branco.';
-$wb['source_password_error_isempty'] = 'Senha está em branco.';
-$wb['destination_error_isemail'] = 'Destino não selecionado.';
-$wb['source_server_error_regex'] = 'Servidor pop3/imap não é um domínio válido.';
-$wb['source_read_all_txt'] = 'Receber todos os e-mails (inclusive e-mails lidos)';
-$wb['error_delete_read_all_combination'] = 'Combinação ilegal de opções. Você não pode usar \'Apagar e-mails após recebimento\' = não junto com \'Receber todos os e-mail\' = sim.';
-$wb['source_delete_note_txt'] = 'Por favor, verifique se o e-mail do para recepção está operacional, antes de ativar esta configuração.';
+$wb['limit_fetchmail_txt'] = 'O limite de registros de busca de e-mails para esta conta foi alcançado.';
+$wb['source_server_error_isempty'] = 'O servidor está em branco.';
+$wb['source_username_error_isempty'] = 'O usuário está em branco.';
+$wb['source_password_error_isempty'] = 'A senha está em branco.';
+$wb['destination_error_isemail'] = 'Nenhum destino selecionado.';
+$wb['source_server_error_regex'] = 'O servidor POP3/IMAP é inválido.';
+$wb['error_delete_read_all_combination'] = 'Combinação ilegal nas opções. Não pode ser utilizado "Remover e-mails após recuperação" = "não" e "Recuperar todos e-mail" = "sim".';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_get_list.lng b/interface/web/mail/lib/lang/br_mail_get_list.lng
index 07d28d0bd8..84b8bbd33e 100644
--- a/interface/web/mail/lib/lang/br_mail_get_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_get_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Busca de mensagens de um servidor POP3/IMAP';
+$wb['list_head_txt'] = 'Busca de e-mails de servidores externos - POP3/IMAP';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['source_server_txt'] = 'Servidor externo';
diff --git a/interface/web/mail/lib/lang/br_mail_mailinglist.lng b/interface/web/mail/lib/lang/br_mail_mailinglist.lng
index a34dca7f35..87f5bcbb64 100644
--- a/interface/web/mail/lib/lang/br_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/br_mail_mailinglist.lng
@@ -1,22 +1,22 @@
 <?php
-$wb['limit_mailmailinglist_txt'] = 'Limite alcançado';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['listname_error_empty'] = 'Nome da lista está em branco.';
-$wb['domain_error_regex'] = 'Domínio é inválido.';
-$wb['email_in_use_txt'] = 'e-mail está em uso';
+$wb['mailinglist_txt'] = 'Lista de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'O limite foi alcançado.';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['listname_error_empty'] = 'O nome da lista está em branco.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['email_in_use_txt'] = 'O e-mail já está em uso.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
-$wb['listname_txt'] = 'Nome da lista';
+$wb['listname_txt'] = 'Lista';
 $wb['client_txt'] = 'Cliente';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['password_txt'] = 'Senha';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['listname_error_unique'] = 'Já existe uma lista com o mesmo nome neste servidor. Por favor, insira outro nome.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['listname_error_unique'] = 'Já existe uma lista de e-mails idêntica para este servidor. Por favor escolha um nome diferente.';
 $wb['email_error_isemail'] = 'Endereço de e-mail é inválido.';
-$wb['mailinglist_txt'] = 'Lista de e-mails';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/br_mail_mailinglist_list.lng
index 08fd204fbb..d7dcf02c01 100644
--- a/interface/web/mail/lib/lang/br_mail_mailinglist_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_mailinglist_list.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['list_head_txt'] = 'Lista de e-mails';
 $wb['domain_txt'] = 'Domínio';
-$wb['listname_txt'] = 'Nome';
+$wb['listname_txt'] = 'Nome da lista';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_relay_recipient.lng b/interface/web/mail/lib/lang/br_mail_relay_recipient.lng
index 0ce921b1a1..637788ce48 100644
--- a/interface/web/mail/lib/lang/br_mail_relay_recipient.lng
+++ b/interface/web/mail/lib/lang/br_mail_relay_recipient.lng
@@ -3,7 +3,7 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['source_txt'] = 'Destinatário de retransmissão';
 $wb['recipient_txt'] = 'Destinatário';
 $wb['active_txt'] = 'Ativo';
-$wb['source_error_notempty'] = 'Endereço está em branco.';
+$wb['source_error_notempty'] = 'Destinatário de retransmissão está em branco.';
 $wb['type_txt'] = 'Tipo';
-$wb['limit_mailfilter_txt'] = 'O limite de filtros para esta conta foi alcançado.';
+$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_relay_recipient_list.lng b/interface/web/mail/lib/lang/br_mail_relay_recipient_list.lng
index b6ca775e5e..d96bab59eb 100644
--- a/interface/web/mail/lib/lang/br_mail_relay_recipient_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_relay_recipient_list.lng
@@ -2,8 +2,8 @@
 $wb['list_head_txt'] = 'Destinatários de retransmissão';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'Remetente';
+$wb['source_txt'] = 'Endereço do destinatário';
 $wb['recipient_txt'] = 'Destinatário';
-$wb['add_new_record_txt'] = 'Adicionar novo destinatário';
+$wb['add_new_record_txt'] = 'Adicionar novo destinatário de retransmissão';
 $wb['access_txt'] = 'acesso';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_spamfilter.lng b/interface/web/mail/lib/lang/br_mail_spamfilter.lng
index 3e7201b95d..e38894fde3 100644
--- a/interface/web/mail/lib/lang/br_mail_spamfilter.lng
+++ b/interface/web/mail/lib/lang/br_mail_spamfilter.lng
@@ -1,17 +1,17 @@
 <?php
-$wb['email_txt'] = 'E-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['spam_rewrite_score_int_txt'] = 'Pontuação de reescrita';
-$wb['spam_redirect_score_int_txt'] = 'Pontuação de redirecionamento';
+$wb['spam_redirect_score_int_txt'] = 'Redirecionar pontuação';
 $wb['spam_delete_score_int_txt'] = 'Remover pontuação';
 $wb['spam_rewrite_subject_txt'] = 'Reescrever assunto';
 $wb['spam_redirect_maildir_txt'] = 'Redirecionar conta de e-mail';
 $wb['active_txt'] = 'Ativo';
-$wb['spam_rewrite_txt'] = 'Reescrever assunto da mensagem depois desta pontuação.';
-$wb['spam_redirect_txt'] = 'Redirecione esta mensagem depois desta pontuação para esta conta de e-mail';
-$wb['spam_delete_txt'] = 'Remover esta mensagem depois desta pontuação.';
-$wb['disable_txt'] = 'Dica: Para desabilitar uma opção de filtro, configure a pontuação como 0.00.';
+$wb['spam_rewrite_txt'] = 'Reescrever assunto do e-mail acima desta pontuação.';
+$wb['spam_redirect_txt'] = 'Redirecionar e-mail acima desta pontuação para a conta de e-mail selecionada.';
+$wb['spam_delete_txt'] = 'Remover e-mail acima desta pontuação.';
+$wb['disable_txt'] = 'Dica: Para desabilitar uma opção de filtragem, configure a pontuação para 0.00';
 $wb['email_error_isemail'] = 'Endereço de e-mail é inválido.';
-$wb['email_error_unique'] = 'Já existem registros iguais de filtros anti-spam para este e-mail.';
-$wb['spam_redirect_maildir_purge_txt'] = 'Remover Maildir depois';
-$wb['days_txt'] = 'Dias';
+$wb['email_error_unique'] = 'Já existe um filtro anti-spam igual para este endereço de e-mail.';
+$wb['spam_redirect_maildir_purge_txt'] = 'Remover diretório de e-mail após';
+$wb['days_txt'] = 'dias.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/br_mail_spamfilter_list.lng
index 40c680da72..51044a3bec 100644
--- a/interface/web/mail/lib/lang/br_mail_spamfilter_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_spamfilter_list.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['list_head_txt'] = 'Filtro anti-spam';
 $wb['active_txt'] = 'Ativo';
-$wb['server_id_txt'] = 'Servidor';
-$wb['server_name_txt'] = 'Nome';
-$wb['email_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar novo filtro anti-spam';
+$wb['server_id_txt'] = 'ID do servidor';
+$wb['server_name_txt'] = 'Nome do servidor';
+$wb['email_txt'] = 'e-Mail';
+$wb['add_new_record_txt'] = 'Adicionar filtro anti-spam';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_transport.lng b/interface/web/mail/lib/lang/br_mail_transport.lng
index 7b080493c2..cf59e244bb 100644
--- a/interface/web/mail/lib/lang/br_mail_transport.lng
+++ b/interface/web/mail/lib/lang/br_mail_transport.lng
@@ -3,9 +3,9 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['destination_txt'] = 'Destino';
 $wb['type_txt'] = 'Tipo';
-$wb['mx_txt'] = 'Sem MX lookup';
+$wb['mx_txt'] = 'Sem pesquisa MX';
 $wb['sort_order_txt'] = 'Ordenar por';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_mailrouting_txt'] = 'O limite de transportes para esta conta foi alcançado.';
+$wb['limit_mailrouting_txt'] = 'O limite de rotas de e-mail para esta conta foi alcançado.';
 $wb['transport_txt'] = 'Transporte';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_transport_list.lng b/interface/web/mail/lib/lang/br_mail_transport_list.lng
index 1e824b345a..4597742bef 100644
--- a/interface/web/mail/lib/lang/br_mail_transport_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_transport_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Transporte de e-mails';
-$wb['active_txt'] = 'Ativa';
+$wb['list_head_txt'] = 'Roteamento avançado de e-mail';
+$wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['transport_txt'] = 'Transporte';
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index f91d40f625..ed6e35ef61 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -1,65 +1,65 @@
 <?php
-$wb['custom_mailfilter_txt'] = 'Fórmula de filtro de e-mail';
-$wb['email_txt'] = 'e-mail';
+$wb['custom_mailfilter_txt'] = 'Modelo de filtro de e-mail personalizado';
+$wb['email_txt'] = 'e-Mail';
 $wb['cryptpwd_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['active_txt'] = 'Ativo';
 $wb['email_error_isemail'] = 'Endereço de e-mail é inválido.';
 $wb['email_error_unique'] = 'Endereço de e-mail duplicado.';
+$wb['autoresponder_subject_txt'] = 'Assunto do e-mail';
+$wb['autoresponder_subject'] = 'Resposta Automática';
 $wb['autoresponder_text_txt'] = 'Texto';
-$wb['autoresponder_txt'] = 'Autoresposta';
-$wb['no_domain_perm'] = 'Sem permissão para este domínio.';
-$wb['error_no_pwd'] = 'Senha está em branco.';
-$wb['quota_error_isint'] = 'O tamanho do e-mail deve ser um número.';
-$wb['quota_txt'] = 'Cota';
+$wb['autoresponder_txt'] = 'Ativo';
+$wb['autoresponder_start_date_txt'] = 'Iniciar em';
+$wb['autoresponder_start_date_ispast'] = 'O campo "Iniciar em" não pode ser menor que a data atual.';
+$wb['autoresponder_end_date_txt'] = 'Terminar em';
+$wb['autoresponder_end_date_isgreater'] = 'O campo "Terminar em" deve ser configurado e não pode ser menor ou igual a data atual.';
+$wb['autoresponder_start_date_is_required'] = 'Data iniciar deve ser configurado quando a opção de auto-resposta estiver habilitada.';
+$wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
+$wb['error_no_pwd'] = 'A senha está em branco.';
+$wb['quota_error_isint'] = 'O tamanho da conta de e-mail deve ser um número.';
+$wb['quota_txt'] = 'Cota (0 para ilimitado)';
 $wb['server_id_txt'] = 'ID do servidor';
 $wb['password_txt'] = 'Senha';
-$wb['maildir_txt'] = 'Caixa Postal';
+$wb['password_click_to_set_txt'] = 'Clique para configurar';
+$wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Habilitar recebimento';
 $wb['greylisting_txt'] = 'Habilitar greylist';
 $wb['access_txt'] = 'Habilitar acesso';
-$wb['policy_txt'] = 'Filtro anti-spam';
-$wb['no_policy'] = '- desabilitado -';
+$wb['policy_txt'] = 'Filtros anti-spam';
+$wb['no_policy'] = '-desabilitado-';
 $wb['limit_mailbox_txt'] = 'O limite de contas de e-mail para esta conta foi alcançado.';
-$wb['limit_mailquota_txt'] = 'O espaço em disco disponível para criação de contas de e-mail foi alcançado.';
-$wb['disableimap_txt'] = 'Desabilitar imap';
-$wb['disablepop3_txt'] = 'Desabilitar pop3';
-$wb['duplicate_alias_or_forward_txt'] = 'Já existe um apelido ou encaminhamento com este endereço de e-mail.';
-$wb['quota_error_value'] = 'Valor da cota é inválido. Valores válidos são: 0 para ilimitado ou número > 1';
-$wb['autoresponder_start_date_txt'] = 'Início:';
-$wb['autoresponder_start_date_ispast'] = 'A data de início não pode ser menor que a data atual.';
-$wb['autoresponder_end_date_txt'] = 'Término:';
-$wb['autoresponder_end_date_isgreater'] = 'A data de término não pode ser menor que a data de início.';
-$wb['move_junk_txt'] = 'Mover spam para o diretório junk';
-$wb['name_txt'] = 'Nome real';
+$wb['limit_mailquota_txt'] = 'O limite de tamanho para as contas de e-mails foi alcançado. O espaço disponível em MB é';
+$wb['disablesmtp_txt'] = 'Desabilitar SMTP (envio)';
+$wb['disableimap_txt'] = 'Desabilitar IMAP';
+$wb['disablepop3_txt'] = 'Desabilitar POP3';
+$wb['duplicate_alias_or_forward_txt'] = 'Já existe um alias ou encaminhamento para este endereço de e-mail.';
+$wb['quota_error_value'] = 'Valor da cota é inválido. Valores permitidos são: 0 para ilimitado ou números > 1.';
+$wb['move_junk_txt'] = 'Mover e-mails marcados como spam para o diretório junk.';
+$wb['name_txt'] = 'Nome';
 $wb['name_optional_txt'] = '(Opcional)';
-$wb['autoresponder_active'] = 'Ativar autoresposta';
+$wb['autoresponder_active'] = 'Habilitar auto-resposta';
 $wb['cc_txt'] = 'Enviar cópia para';
-$wb['cc_error_isemail'] = 'O campo \\"Enviar cópia para\\" deve conter um endereço de e-mail válido';
+$wb['sender_cc_txt'] = 'Enviar cópia oculta (BCC) para';
+$wb['cc_error_isemail'] = 'O campo "Enviar cópia para" contém um endereço de e-mail inválido.';
+$wb['sender_cc_error_isemail'] = 'O campo "Enviar cópia oculta para" contém um endereço de e-mail inválido.';
 $wb['domain_txt'] = 'Domínio';
 $wb['now_txt'] = 'Agora';
-$wb['login_error_unique'] = 'O acesso já está em uso.';
-$wb['login_error_regex'] = 'Caracteres válidos são: \'A-Z\', \'a-z\', \'0-9\', \'.\', \'_\' e \'-\'.';
-$wb['login_txt'] = 'Acesso (opcional)';
-$wb['error_login_email_txt'] = 'Este acesso não é permitido. Por favor, insira um usuário diferente ou use o endereço de e-mail.';
-$wb['autoresponder_subject_txt'] = 'Assunto do e-mail';
-$wb['autoresponder_subject'] = 'Resposta de ausência temporária';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['email_error_isascii'] = 'Por favor não use caracteres \\"unicode\\" para a senha. Esta ação poderá causar problemas com seu cliente de e-mail (mua).';
-$wb['cc_note_txt'] = '(Múltiplos e-mails separados por vírgulas)';
-$wb['disablesmtp_txt'] = 'Desabilitar smtp (envio)';
-$wb['autoresponder_start_date_is_required'] = 'Data de início deve ser configurada quando \'autoresposta\' é habilitada.';
-$wb['sender_cc_txt'] = 'Enviar cópia para';
-$wb['sender_cc_error_isemail'] = 'O campo \'Enviar cópia para\' não contém um endereço de e-mail válido';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias do backup';
+$wb['login_error_unique'] = 'O acesso já foi realizado.';
+$wb['login_error_regex'] = 'Caracteres válidos são "A-Z", "a-z", "0-9", ".", "_" e "-".';
+$wb['login_txt'] = 'Acesso';
+$wb['error_login_email_txt'] = 'Este acesso não é permitido. Por favor, forneça um nome de usuário ou endereço de e-mail diferente para acessar.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['no_backup_txt'] = 'Sem backup';
 $wb['daily_backup_txt'] = 'Diário';
 $wb['weekly_backup_txt'] = 'Semanal';
 $wb['monthly_backup_txt'] = 'Mensal';
-$wb['sender_cc_note_txt'] = '(Múltiplos e-mails separados por vírgulas)';
-$wb['password_click_to_set_txt'] = 'Configurar';
+$wb['email_error_isascii'] = 'Por favor, não use caracteres especiais para a senha. Isto poderá causar problemas no cliente de e-mail.';
+$wb['cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
+$wb['sender_cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user_filter.lng b/interface/web/mail/lib/lang/br_mail_user_filter.lng
index 7dca140cee..54ae96d692 100644
--- a/interface/web/mail/lib/lang/br_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_filter.lng
@@ -4,23 +4,23 @@ $wb['action_txt'] = 'Ação';
 $wb['target_txt'] = 'Pasta';
 $wb['active_txt'] = 'Ativo';
 $wb['rulename_error_empty'] = 'Nome está em branco.';
-$wb['searchterm_is_empty'] = 'Termo de busca está em branco.';
+$wb['searchterm_is_empty'] = 'Termo de pesquisa está em branco.';
 $wb['source_txt'] = 'Origem';
-$wb['target_error_regex'] = 'O alvo não pode conter os caracteres: \'a-z\', \'0-9\', \'-\', \'.\', \'_\', e \'{espaço}\'.';
-$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
+$wb['target_error_regex'] = 'O alvo pode conter apenas os caracteres: "a-z", "0-9", "-", ".", "_", e {espaço}';
+$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail foi alcançado.';
 $wb['subject_txt'] = 'Assunto';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Para';
-$wb['contains_txt'] = 'Contém';
+$wb['contains_txt'] = 'Contêm';
 $wb['is_txt'] = 'é';
-$wb['begins_with_txt'] = 'Começa com';
-$wb['ends_with_txt'] = 'Termina com';
-$wb['delete_txt'] = 'Remover';
+$wb['begins_with_txt'] = 'Iniciando com';
+$wb['ends_with_txt'] = 'Terminando com';
 $wb['move_stop_txt'] = 'Mover para';
+$wb['delete_txt'] = 'Remover';
 $wb['header_txt'] = 'Cabeçalho';
-$wb['size_over_txt'] = 'Tamanho máximo do e-mail (KB)';
-$wb['size_under_txt'] = 'Tamanho mínimo do e-mail (KB)';
-$wb['localpart_txt'] = 'Local';
+$wb['size_over_txt'] = 'Tamanho do e-mail acima de (KB)';
+$wb['size_under_txt'] = 'Tamanho do e-mail abaixo de (KB)';
+$wb['localpart_txt'] = 'Parte local';
 $wb['domain_txt'] = 'Domínio';
 $wb['keep_txt'] = 'Manter';
 $wb['reject_txt'] = 'Rejeitar';
diff --git a/interface/web/mail/lib/lang/br_mail_user_filter_list.lng b/interface/web/mail/lib/lang/br_mail_user_filter_list.lng
index feae1f4bb7..516478f9f6 100644
--- a/interface/web/mail/lib/lang/br_mail_user_filter_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_filter_list.lng
@@ -3,5 +3,5 @@ $wb['rulename_txt'] = 'Nome';
 $wb['add_new_record_txt'] = 'Adicionar novo filtro';
 $wb['page_txt'] = 'Página';
 $wb['page_of_txt'] = 'de';
-$wb['delete_confirmation'] = 'Tem certeza que gostaria de remover este filtro?';
+$wb['delete_confirmation'] = 'Você tem certeza que deseja remover este filtro?';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user_stats_list.lng b/interface/web/mail/lib/lang/br_mail_user_stats_list.lng
index 370ce3520f..f0305edac3 100644
--- a/interface/web/mail/lib/lang/br_mail_user_stats_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_stats_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Tráfego de e-mail';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['this_month_txt'] = 'Este mês';
 $wb['last_month_txt'] = 'Último mês';
 $wb['this_year_txt'] = 'Este ano';
diff --git a/interface/web/mail/lib/lang/br_mail_whitelist.lng b/interface/web/mail/lib/lang/br_mail_whitelist.lng
index 3443387003..4d3eb1e219 100644
--- a/interface/web/mail/lib/lang/br_mail_whitelist.lng
+++ b/interface/web/mail/lib/lang/br_mail_whitelist.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'Lista Branca';
+$wb['source_txt'] = 'Endereço - lista branca';
 $wb['recipient_txt'] = 'Destinatário';
 $wb['active_txt'] = 'Ativo';
-$wb['source_error_notempty'] = 'Endereço em Branco.';
+$wb['source_error_notempty'] = 'Endereço de e-mail está em branco.';
 $wb['type_txt'] = 'Tipo';
-$wb['limit_mailfilter_txt'] = 'O limite de filtros para esta conta foi alcançado.';
+$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_whitelist_list.lng b/interface/web/mail/lib/lang/br_mail_whitelist_list.lng
index 40eced2d2c..0c7d3c717d 100644
--- a/interface/web/mail/lib/lang/br_mail_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_whitelist_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Lista branca';
+$wb['list_head_txt'] = 'Filtros de e-mail - lista branca';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'e-mails na lista branca';
+$wb['source_txt'] = 'Endereços de e-mail - lista branca';
 $wb['type_txt'] = 'Tipo';
 $wb['recipient_txt'] = 'Destinatário';
-$wb['add_new_record_txt'] = 'Adicionar novo registro à lista';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 $wb['access_txt'] = 'acesso';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/br_spamfilter_blacklist.lng
index df01dd30ba..ec3dc5f66e 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_blacklist.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_blacklist.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['wb_txt'] = 'wb';
+$wb['wb_txt'] = 'Lista branca/negra';
 $wb['rid_txt'] = 'Usuário';
-$wb['email_txt'] = 'Endereço de e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['priority_txt'] = 'Prioridade';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_spamfilter_wblist_txt'] = 'O limite de registros na lista branca/negra para esta conta foi alcançado.';
+$wb['limit_spamfilter_wblist_txt'] = 'O limite de filtros anti-spam "lista branca ou negra" para esta conta foi alcançado.';
 $wb['10 - highest'] = '10 - alta';
 $wb['5 - medium'] = '5 - média';
 $wb['1 - lowest'] = '1 - baixa';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng
index 527a1b43d9..624cebfc51 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Filtro anti-spam (lista negra) ';
+$wb['list_head_txt'] = 'Filtro anti-spam - lista negra';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['priority_txt'] = 'Prioridade';
 $wb['rid_txt'] = 'Usuário';
-$wb['email_txt'] = 'Endereço de e-mail na lista negra';
-$wb['add_new_record_txt'] = 'Adicionar novo registro à lista';
+$wb['email_txt'] = 'Endereço de e-mail - lista negra';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_config.lng b/interface/web/mail/lib/lang/br_spamfilter_config.lng
index 9a12279a4a..6182e8b788 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_config.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_config.lng
@@ -1,20 +1,20 @@
 <?php
-$wb['getmail_config_dir_txt'] = 'Caminho de configuração getmail ';
+$wb['getmail_config_dir_txt'] = 'Caminho das configurações do getmail';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['netmask_txt'] = 'Máscara de rede';
+$wb['netmask_txt'] = 'Máscara';
 $wb['gateway_txt'] = 'Gateway';
-$wb['hostname_txt'] = 'Nome do servidor';
-$wb['nameservers_txt'] = 'Servidor de nomes';
+$wb['hostname_txt'] = 'Nome do host';
+$wb['nameservers_txt'] = 'Servidor(es) dns';
 $wb['module_txt'] = 'Módulo do servidor';
-$wb['maildir_path_txt'] = 'Caminho do Maildir';
-$wb['homedir_path_txt'] = 'Caminho do Homedir';
-$wb['mailuser_uid_txt'] = 'Usuário de e-mail (UID)';
-$wb['mailuser_gid_txt'] = 'Grupo de e-mail (GID)';
-$wb['mailuser_name_txt'] = 'Nome do usuário de e-mail';
-$wb['mailuser_group_txt'] = 'Grupo do usuário de e-mail';
-$wb['relayhost_txt'] = 'Host Relay';
-$wb['relayhost_user_txt'] = 'Usuário host relay';
-$wb['relayhost_password_txt'] = 'Senha host relay';
-$wb['mailbox_size_limit_txt'] = 'Tamanho da conta de e-mail';
-$wb['message_size_limit_txt'] = 'Tamanho da mensagem';
+$wb['maildir_path_txt'] = 'Caminho do maildir';
+$wb['homedir_path_txt'] = 'Caminho do homedir';
+$wb['mailuser_uid_txt'] = 'UID do mailuser';
+$wb['mailuser_gid_txt'] = 'GID do mailuser';
+$wb['mailuser_name_txt'] = 'Nome do mailuser';
+$wb['mailuser_group_txt'] = 'Grupo do mailuser';
+$wb['relayhost_txt'] = 'Host de retransmissão';
+$wb['relayhost_user_txt'] = 'Usuário de retransmissão';
+$wb['relayhost_password_txt'] = 'Senha do host de retransmissão';
+$wb['mailbox_size_limit_txt'] = 'Limite da conta de e-mail';
+$wb['message_size_limit_txt'] = 'Limite do tamanho da mensagem';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_config_list.lng b/interface/web/mail/lib/lang/br_spamfilter_config_list.lng
index 300e210b15..6d4c1cf0e1 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_config_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_config_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Configurações do servidor';
+$wb['list_head_txt'] = 'Configuração do Servidor';
 $wb['server_name_txt'] = 'Servidor';
-$wb['server_id_txt'] = 'ID do servidor';
+$wb['server_id_txt'] = 'ID do Servidor';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_policy.lng b/interface/web/mail/lib/lang/br_spamfilter_policy.lng
index b5bb69db43..476b27e565 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_policy.lng
@@ -1,51 +1,51 @@
 <?php
-$wb['policy_name_txt'] = 'Nome da regra';
-$wb['virus_lover_txt'] = 'Permitir vírus';
-$wb['spam_lover_txt'] = 'Permitir spam';
-$wb['banned_files_lover_txt'] = 'Permitir arquivos banidos';
-$wb['bad_header_lover_txt'] = 'Permitir cabeçalho inválido';
-$wb['bypass_virus_checks_txt'] = 'Ignorar verificação de vírus';
-$wb['bypass_banned_checks_txt'] = 'Ignorar verificação de arquivos banidos';
-$wb['bypass_header_checks_txt'] = 'Ignorar verificação de cabeçalho inválido';
-$wb['virus_quarantine_to_txt'] = 'Encaminhar o vírus para o e-mail';
-$wb['spam_quarantine_to_txt'] = 'Encaminhar o spam para o e-mail';
+$wb['policy_name_txt'] = 'Nome da política';
+$wb['virus_lover_txt'] = 'Receber vírus';
+$wb['spam_lover_txt'] = 'Receber spam';
+$wb['banned_files_lover_txt'] = 'Receber arquivos banidos';
+$wb['bad_header_lover_txt'] = 'Receber cabeçalho inválido';
+$wb['bypass_virus_checks_txt'] = 'Ignorar verificações de vírus';
+$wb['bypass_banned_checks_txt'] = 'Ignorar verificações de arquivos banidos';
+$wb['bypass_header_checks_txt'] = 'Ignorar verificações de cabeçalho inválido';
+$wb['virus_quarantine_to_txt'] = 'Encaminhar vírus para o e-mail';
+$wb['spam_quarantine_to_txt'] = 'Encaminhar spam para o e-mail';
 $wb['banned_quarantine_to_txt'] = 'Encaminhar arquivos banidos para o e-mail';
 $wb['bad_header_quarantine_to_txt'] = 'Encaminhar cabeçalho inválido para o e-mail';
 $wb['clean_quarantine_to_txt'] = 'Encaminhar mensagens/arquivos em quarentena para o e-mail';
-$wb['other_quarantine_to_txt'] = 'Encaminhar para outro e-mail';
+$wb['other_quarantine_to_txt'] = 'Encaminhar mensagens/arquivos em quarentena para outro e-mail';
 $wb['spam_tag_level_txt'] = 'Nível 1 de marcação anti-spam';
 $wb['spam_tag2_level_txt'] = 'Nível 2 de marcação anti-spam';
 $wb['spam_kill_level_txt'] = 'Nível máximo de marcação anti-spam';
-$wb['spam_dsn_cutoff_level_txt'] = 'Nível de corte de dns anti-spam';
-$wb['spam_quarantine_cutoff_level_txt'] = 'Nível de corte de quarentena anti-spam';
-$wb['spam_modifies_subj_txt'] = 'Modificar assunto de mensagem com spam';
-$wb['spam_subject_tag_txt'] = 'Marcação de assunto spam 1';
-$wb['spam_subject_tag2_txt'] = 'Marcação de assunto spam 2';
-$wb['addr_extension_virus_txt'] = 'Adicionar extensão de vírus';
-$wb['addr_extension_spam_txt'] = 'Adicionar extensão de spam';
-$wb['addr_extension_banned_txt'] = 'Adicionar extensão de arquivos banidos';
-$wb['addr_extension_bad_header_txt'] = 'Adicionar extensão de cabeçalho inválido';
-$wb['warnvirusrecip_txt'] = 'Aviso de destinatário de vírus.';
-$wb['warnbannedrecip_txt'] = 'Aviso de destinatário de arquivos banidos.';
-$wb['warnbadhrecip_txt'] = 'Aviso de destinatário de cabeçalho é inválido.';
+$wb['spam_dsn_cutoff_level_txt'] = 'Nível de corte dsn anti-spam';
+$wb['spam_quarantine_cutoff_level_txt'] = 'Nível de corte para quarentena anti-spam';
+$wb['spam_modifies_subj_txt'] = 'Modificar assunto de mensagens marcadas como spam';
+$wb['spam_subject_tag_txt'] = 'Marcar assunto - SPAM 1';
+$wb['spam_subject_tag2_txt'] = 'Marcar assunto - SPAM 2';
+$wb['addr_extension_virus_txt'] = 'Adicionar extensão caso detecte vírus';
+$wb['addr_extension_spam_txt'] = 'Adicionar extensão caso detecte SPAM';
+$wb['addr_extension_banned_txt'] = 'Adicionar extensão caso detecte arquivo banido';
+$wb['addr_extension_bad_header_txt'] = 'Adicionar extensão caso detecte cabeçalho inválido';
+$wb['warnvirusrecip_txt'] = 'Aviso de vírus para o destinatário';
+$wb['warnbannedrecip_txt'] = 'Aviso de arquivo banido para destinatário';
+$wb['warnbadhrecip_txt'] = 'Aviso cabeçalho inválido para destinatário';
 $wb['newvirus_admin_txt'] = 'Administrador para novo vírus';
 $wb['virus_admin_txt'] = 'Administrador para vírus';
-$wb['banned_admin_txt'] = 'Administrador para arquivos banidos';
-$wb['bad_header_admin_txt'] = 'Administrador para cabeçalhos inválidos';
+$wb['banned_admin_txt'] = 'Administrador para arquivo banido';
+$wb['bad_header_admin_txt'] = 'Administrador para cabeçalho inválido';
 $wb['spam_admin_txt'] = 'Administrador para spam';
-$wb['message_size_limit_txt'] = 'Tamanho máximo da mensagem';
-$wb['banned_rulenames_txt'] = 'Regras de banimento';
-$wb['rspamd_greylisting_txt'] = 'Use greylisting';
-$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
-$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
-$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
-$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['amavis_settings_txt'] = 'Settings';
-$wb['amavis_taglevel_txt'] = 'Tag-Level';
-$wb['amavis_quarantine_txt'] = 'Quarantine';
-$wb['amavis_other_txt'] = 'Other';
-$wb['add_header_txt'] = 'Add header';
-$wb['rewrite_subject_txt'] = 'Rewrite subject';
-?>
+$wb['message_size_limit_txt'] = 'Limite de tamanho da mensagem';
+$wb['banned_rulenames_txt'] = 'Nome da regra para arquivo banido';
+$wb['rspamd_greylisting_txt'] = 'Habilitar greylist';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Nível da greylist';
+$wb['rspamd_spam_tag_level_txt'] = 'Nível da marcação anti-spam';
+$wb['rspamd_spam_tag_method_txt'] = 'Método da marcação anti-spam';
+$wb['rspamd_spam_kill_level_txt'] = 'Nível para rejeição de spam';
+$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+
+$wb['amavis_settings_txt'] = 'Configurações';
+$wb['amavis_taglevel_txt'] = 'Nível de marcação';
+$wb['amavis_quarantine_txt'] = 'Quarentena';
+$wb['amavis_other_txt'] = 'Outro';
+$wb['add_header_txt'] = 'Adicionar cabeçalho';
+$wb['rewrite_subject_txt'] = 'Reescrever assunto';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/br_spamfilter_policy_list.lng
index 38d91f16d8..269862fe99 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_policy_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_policy_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Políticas anti-spam';
+$wb['list_head_txt'] = 'Política anti-spam';
 $wb['policy_name_txt'] = 'Nome';
-$wb['virus_lover_txt'] = 'Permitir vírus';
-$wb['spam_lover_txt'] = 'Permitir spam';
-$wb['banned_files_lover_txt'] = 'Permitir arquivos banidos';
-$wb['bad_header_lover_txt'] = 'Permitir cabeçalho inválido';
+$wb['virus_lover_txt'] = 'Receber vírus';
+$wb['spam_lover_txt'] = 'Receber spam';
+$wb['banned_files_lover_txt'] = 'Receber arquivos banidos';
+$wb['bad_header_lover_txt'] = 'Receber cabeçalho inválido';
 $wb['add_new_record_txt'] = 'Adicionar registro';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_users.lng b/interface/web/mail/lib/lang/br_spamfilter_users.lng
index 2c33cd3552..3b34351adb 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_users.lng
@@ -2,7 +2,7 @@
 $wb['server_id_txt'] = 'Servidor';
 $wb['priority_txt'] = 'Prioridade';
 $wb['policy_id_txt'] = 'Política';
-$wb['email_txt'] = 'e-mail (padrão)';
+$wb['email_txt'] = 'e-Mail (padrão)';
 $wb['fullname_txt'] = 'Nome';
 $wb['local_txt'] = 'Local';
 $wb['email_error_notempty'] = 'Endereço de e-mail está em branco.';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_users_list.lng b/interface/web/mail/lib/lang/br_spamfilter_users_list.lng
index cf1f4900f9..fe3feb25cd 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_users_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_users_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Usuários de filtro anti-spam';
+$wb['list_head_txt'] = 'Filtros anti-spam para contas de e-mail';
 $wb['local_txt'] = 'Local';
 $wb['server_id_txt'] = 'Servidor';
 $wb['priority_txt'] = 'Prioridade';
-$wb['policy_id_txt'] = 'Políticas';
+$wb['policy_id_txt'] = 'Política';
 $wb['fullname_txt'] = 'Nome';
-$wb['email_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar novo usuário';
+$wb['email_txt'] = 'e-Mail';
+$wb['add_new_record_txt'] = 'Adicionar novo filtro';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/br_spamfilter_whitelist.lng
index 0161d716ae..bcb9491cf0 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_whitelist.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_whitelist.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['wb_txt'] = 'wb';
-$wb['rid_txt'] = 'Usuário';
-$wb['email_txt'] = 'e-mail';
+$wb['wb_txt'] = 'Lista branca/negra';
+$wb['rid_txt'] = 'Usário';
+$wb['email_txt'] = 'e-Mail';
 $wb['priority_txt'] = 'Prioridade';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_spamfilter_wblist_txt'] = 'O limite de registros na lista branca/negra para esta conta foi alcançado.';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng
index 8ef65dbfa2..e6d48491ee 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Lista branca (anti-spam)';
+$wb['list_head_txt'] = 'Filtros anti-spam - Lista Branca';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['priority_txt'] = 'Prioridade';
 $wb['rid_txt'] = 'Usuário';
-$wb['email_txt'] = 'e-mail na lista branca';
-$wb['add_new_record_txt'] = 'Adicionar novo e-mail';
+$wb['email_txt'] = 'Lista Branca de e-mails';
+$wb['add_new_record_txt'] = 'Adicionar registro';
 ?>
diff --git a/interface/web/mail/lib/lang/br_user_quota_stats_list.lng b/interface/web/mail/lib/lang/br_user_quota_stats_list.lng
index a756443205..ee156b23a7 100755
--- a/interface/web/mail/lib/lang/br_user_quota_stats_list.lng
+++ b/interface/web/mail/lib/lang/br_user_quota_stats_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Cota para contas de e-mail';
+$wb['list_head_txt'] = 'Cota da conta de e-mail';
 $wb['quota_txt'] = 'Cota';
 $wb['name_txt'] = 'Nome';
 $wb['email_txt'] = 'Endereço de e-mail';
 $wb['used_txt'] = 'Espaço utilizado';
-$wb['percentage_txt'] = 'Percentual utilizado %';
+$wb['percentage_txt'] = 'Utilizado %';
 ?>
diff --git a/interface/web/mail/lib/lang/br_xmpp_domain.lng b/interface/web/mail/lib/lang/br_xmpp_domain.lng
index 1a9a42f0c1..1fd96ba132 100644
--- a/interface/web/mail/lib/lang/br_xmpp_domain.lng
+++ b/interface/web/mail/lib/lang/br_xmpp_domain.lng
@@ -5,31 +5,31 @@ $wb['domain_txt'] = 'Domínio';
 $wb['type_txt'] = 'Tipo';
 $wb['active_txt'] = 'Ativo';
 $wb['client_txt'] = 'Cliente';
-$wb['management_method_txt'] = 'Gerenciamento de contas de usuários';
+$wb['management_method_txt'] = 'Gerenciar contas de usuário';
 $wb['public_registration_txt'] = 'Habilitar registro público';
 $wb['registration_url_txt'] = 'URL de registro';
 $wb['registration_message_txt'] = 'Mensagem de registro';
-$wb['domain_admins_txt'] = 'Administradores de domínio (JIDs)';
-$wb['use_pubsub_txt'] = 'Habilitar Pubsub';
-$wb['use_proxy_txt'] = 'Habilitar proxy Bytestream';
+$wb['domain_admins_txt'] = 'Administradores de domínios (JIDs)';
+$wb['use_pubsub_txt'] = 'Habilitar pubsub';
+$wb['use_proxy_txt'] = 'Habilitar proxy bytestream';
 $wb['use_anon_host_txt'] = 'Habilitar host anônimo';
-$wb['use_vjud_txt'] = 'Habilitar diretório de usuário VJUD';
-$wb['vjud_opt_mode_txt'] = 'Modo de operação VJUD';
-$wb['use_muc_host_txt'] = 'Habilitar chats multiusuários';
-$wb['muc_name_txt'] = 'Nome na descoberta do MUC';
-$wb['muc_restrict_room_creation_txt'] = 'Permissão para criar salas de chat';
-$wb['muc_admins_txt'] = 'Administradores de MUC (JIDs)';
-$wb['use_pastebin_txt'] = 'Habilitar Pastebin';
-$wb['pastebin_expire_after_txt'] = 'Colagens expiram após (horas)';
-$wb['pastebin_trigger_txt'] = 'Gatilho Pastebin';
-$wb['use_http_archive_txt'] = 'Habilitar arquivo HTTP em salas de chat';
-$wb['http_archive_show_join_txt'] = 'Exibir mensagens de participação em arquivos';
-$wb['http_archive_show_status_txt'] = 'Exibir estado de mudança em arquivos';
-$wb['use_status_host_txt'] = 'Habilitar estado XML do host';
-$wb['cant_change_domainname_txt'] = 'O nome domínio XMPP existente não pode ser modificado.';
-$wb['about_registration_url_txt'] = 'Link para o página de registro.';
-$wb['about_registration_message_txt'] = 'Descrição sobre seu processo de registro de conta.';
-$wb['no_corresponding_maildomain_txt'] = 'O domínio de e-mail correspondente para gerenciamento de usuário não foi encontrado. Por favor crie o domínio de e-mail primeiro.';
+$wb['use_vjud_txt'] = 'Habilitar diretório de usuário (VJUD)';
+$wb['vjud_opt_mode_txt'] = 'Modo opcional do VJUD';
+$wb['use_muc_host_txt'] = 'Habilitar chat multiusuário (MUC)';
+$wb['muc_name_txt'] = 'Nome no serviço de descoberta do MUC';
+$wb['muc_restrict_room_creation_txt'] = 'Permissão para adicionar salas de chat';
+$wb['muc_admins_txt'] = 'Administradores MUC (JIDs)';
+$wb['use_pastebin_txt'] = 'Habilitar pastebin';
+$wb['pastebin_expire_after_txt'] = 'Patas expira após (horas)';
+$wb['pastebin_trigger_txt'] = 'Desencadear pastebin';
+$wb['use_http_archive_txt'] = 'Habilitar arquivos HTTP em salas de chat';
+$wb['http_archive_show_join_txt'] = 'Exibir mensagens de ingresso no arquivo';
+$wb['http_archive_show_status_txt'] = 'Exibir estado da mudanças no arquivo';
+$wb['use_status_host_txt'] = 'Habilitar estado do XML do host';
+$wb['cant_change_domainname_txt'] = 'O nome existente do domínio xmpp não pode ser alterado.';
+$wb['about_registration_url_txt'] = 'Ligar ao seu formulário de registro.';
+$wb['about_registration_message_txt'] = 'Descrição sobre o processo de registro da sua conta.';
+$wb['no_corresponding_maildomain_txt'] = 'O domínio de e-mail correspondente para gerenciamento de usuários não foi encontrado. Por favor, crie um domínio de e-mail primeiro.';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
@@ -38,25 +38,25 @@ $wb['ssl_country_txt'] = 'País';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_email_txt'] = 'Endereço de e-mail';
 $wb['ssl_txt'] = 'SSL';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' está em branco.';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
+$wb['ssl_state_error_regex'] = 'Campo "Estado" é inválido. São caracteres válidos: "a-z", "0-9" e ".,-_".';
+$wb['ssl_locality_error_regex'] = 'Campo "Cidade" é inválido. São caracteres válidos: "a-z", "0-9" e ".,-_".';
+$wb['ssl_organisation_error_regex'] = 'Campo "Empresa" é inválido. São caracteres válidos: "a-z", "0-9" e ".,-_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'Campo "Departamento" é inválido. São caracteres válidos: "a-z", "0-9" e ".,-_".';
+$wb['ssl_country_error_regex'] = 'Campo "País" é inválido. São caracteres válidos: "A-Z".';
 $wb['none_txt'] = 'Nenhum';
-$wb['save_certificate_txt'] = 'Salvar certificado';
-$wb['create_certificate_txt'] = 'Adicionar certificado';
-$wb['delete_certificate_txt'] = 'Remover certificado';
-$wb['ssl_error_isemail'] = 'Por favor, insira um e-mail válido para gerar o certificado SSL.';
+$wb['save_certificate_txt'] = 'Salvar Certificado';
+$wb['create_certificate_txt'] = 'Adicionar Certificado';
+$wb['delete_certificate_txt'] = 'Remover Certificado';
+$wb['ssl_error_isemail'] = 'Por favor, insira um endereço de e-mail válido para geração do certificado SSL.';
 $wb['limit_xmppdomain_txt'] = 'O limite de domínios xmpp para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_xmpp_domain_list.lng b/interface/web/mail/lib/lang/br_xmpp_domain_list.lng
index ab8f3a9087..e0ff3a6fc6 100644
--- a/interface/web/mail/lib/lang/br_xmpp_domain_list.lng
+++ b/interface/web/mail/lib/lang/br_xmpp_domain_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Domínio XMPP';
+$wb['list_head_txt'] = 'Domínios xmpp';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['add_new_record_txt'] = 'Adicionar novo domínio';
diff --git a/interface/web/mail/lib/lang/br_xmpp_user.lng b/interface/web/mail/lib/lang/br_xmpp_user.lng
index 8f2306814f..5e7628dab2 100644
--- a/interface/web/mail/lib/lang/br_xmpp_user.lng
+++ b/interface/web/mail/lib/lang/br_xmpp_user.lng
@@ -1,15 +1,15 @@
 <?php
-$wb['list_head_txt'] = 'Usuários XMPP';
+$wb['list_head_txt'] = 'Contas de usuários xmpp';
 $wb['jid_txt'] = 'ID do Jabber';
 $wb['active_txt'] = 'Ativo';
 $wb['cryptpwd_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['error_no_pwd'] = 'Senha está em branco.';
 $wb['password_txt'] = 'Senha';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
-$wb['limit_xmpp_user_txt'] = 'O limite de usuários xmpp para esta conta foi alcançando.';
+$wb['limit_xmpp_user_txt'] = 'O limite de usuários xmpp para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_xmpp_user_list.lng b/interface/web/mail/lib/lang/br_xmpp_user_list.lng
index 13d71a05a8..0aefe11709 100644
--- a/interface/web/mail/lib/lang/br_xmpp_user_list.lng
+++ b/interface/web/mail/lib/lang/br_xmpp_user_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Contas de usuário XMPP';
+$wb['list_head_txt'] = 'Contas de usuários xmpp';
 $wb['jid_txt'] = 'ID do Jabber';
 $wb['is_domain_admin_txt'] = 'Administrador do domínio';
 $wb['is_muc_admin_txt'] = 'Administrador MUC';
diff --git a/interface/web/mail/lib/lang/tr.lng b/interface/web/mail/lib/lang/tr.lng
index 4f6f77a38a..52d1868b3e 100644
--- a/interface/web/mail/lib/lang/tr.lng
+++ b/interface/web/mail/lib/lang/tr.lng
@@ -4,47 +4,48 @@ $wb['Email Blacklist'] = 'E-posta Kara Listesi';
 $wb['Blacklist'] = 'Kara Liste';
 $wb['Mail Content Filter'] = 'E-posta İçerik Süzgeci';
 $wb['Filter'] = 'Süzgeç';
-$wb['Mail Domain'] = 'E-posta Alan Adı';
-$wb['Domain'] = 'Alan Adı';
+$wb['Mail Domain'] = 'E-posta Etki Alanı';
+$wb['Domain'] = 'Etki Alanı';
 $wb['Email Catchall'] = 'E-posta Tümünü Alma';
 $wb['Email Forward'] = 'E-posta Yönlendirme';
 $wb['Get Email'] = 'E-posta Al';
-$wb['Spamfilter'] = 'Önemsiz Posta Süzgeci';
+$wb['Spamfilter'] = 'Önemsiz İleti Süzgeci';
 $wb['Email Routing'] = 'E-posta Yöneltme';
 $wb['Email transport'] = 'E-posta Aktarma';
-$wb['Mailbox'] = 'Posta Kutusu';
+$wb['Mailbox'] = 'E-posta Kutusu';
 $wb['Autoresponder'] = 'Otomatik Yanıtlayıcı';
-$wb['Mail Filter'] = 'Posta Süzgeci';
+$wb['Mail Filter'] = 'E-posta Süzgeci';
 $wb['Custom Rules'] = 'Özel Kurallar';
 $wb['Email filter'] = 'E-posta Süzgeci';
 $wb['Email Whitelist'] = 'E-posta Beyaz Listesi';
 $wb['Whitelist'] = 'Beyaz Liste';
-$wb['Spamfilter blacklist'] = 'Önemsiz Posta Süzgeci Kara Listesi';
-$wb['Spamfilter Config'] = 'Önemsiz Posta Süzgeci Ayarları';
+$wb['Spamfilter blacklist'] = 'Önemsiz İleti Süzgeci Kara Listesi';
+$wb['Blacklist'] = 'Kara Liste';
+$wb['Spamfilter Config'] = 'Önemsiz İleti Süzgeci Ayarları';
 $wb['Server'] = 'Sunucu';
-$wb['Spamfilter policy'] = 'Önemsiz Posta Süzgeci Kuralları';
+$wb['Spamfilter policy'] = 'Önemsiz İleti Süzgeci Kuralları';
 $wb['Policy'] = 'Kural';
 $wb['Quarantine'] = 'Karantina';
 $wb['Tag-Level'] = 'Etiket Düzeyi';
 $wb['Other'] = 'DiÄŸer';
-$wb['Spamfilter users'] = 'Önemsiz Posta Süzgeci Kullanıcıları';
+$wb['Spamfilter users'] = 'Önemsiz İleti Süzgeci Kullanıcıları';
 $wb['Users'] = 'Kullanıcılar';
-$wb['Spamfilter Whitelist'] = 'Önemsiz Posta Beyaz Listesi';
+$wb['Spamfilter Whitelist'] = 'Önemsiz İleti Beyaz Listesi';
+$wb['Whitelist'] = 'Beyaz Liste';
 $wb['Email'] = 'E-posta';
 $wb['Email Mailbox'] = 'E-posta Kutusu';
 $wb['Email Accounts'] = 'E-posta Hesapları';
-$wb['User / Domain'] = 'Kullanıcı / Alan Adı';
+$wb['User / Domain'] = 'Kullanıcı / Etki Alanı';
 $wb['Server Settings'] = 'Sunucu Ayarları';
-$wb['Fetchmail'] = 'Posta Alma';
-$wb['Mailbox traffic'] = 'Posta Kutusu TrafiÄŸi';
+$wb['Spamfilter'] = 'Önemsiz İleti Süzgeci';
+$wb['Fetchmail'] = 'E-posta Alma';
+$wb['Mailbox traffic'] = 'E-posta Kutusu TrafiÄŸi';
 $wb['Statistics'] = 'Ä°statistikler';
 $wb['Postfix Whitelist'] = 'Postfix Beyaz Liste';
 $wb['Postfix Blacklist'] = 'Postfix Kara Liste';
 $wb['Content Filter'] = 'İçerik Süzgeci';
 $wb['Global Filters'] = 'Genel Süzgeçler';
-$wb['Domain Alias'] = 'Takma Alan Adı';
+$wb['Domain Alias'] = 'Takma Etki Alanı';
 $wb['Relay Recipients'] = 'Aktarılan Alıcılar';
-$wb['Mailbox quota'] = 'Posta Kutusu Kotası';
-$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
-$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['Mailbox quota'] = 'E-posta Kutusu Kotası';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_backup_stats_list.lng b/interface/web/mail/lib/lang/tr_backup_stats_list.lng
index 79cd6c9a63..125bfc8284 100644
--- a/interface/web/mail/lib/lang/tr_backup_stats_list.lng
+++ b/interface/web/mail/lib/lang/tr_backup_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Backup Stats';
-$wb['active_txt'] = 'Active';
-$wb['domain_txt'] = 'Email';
-$wb['backup_count_txt'] = 'Backup count';
-$wb['backup_server_txt'] = 'Server';
-$wb['backup_interval_txt'] = 'Interval / cnt.';
-$wb['backup_size_txt'] = 'Backupsize';
+$wb['list_head_txt'] = 'Yedekleme Ä°statistikleri';
+$wb['active_txt'] = 'Etkin';
+$wb['domain_txt'] = 'E-posta';
+$wb['backup_count_txt'] = 'Yedek Sayısı';
+$wb['backup_server_txt'] = 'Sunucu';
+$wb['backup_interval_txt'] = 'Sıklık / Sayı';
+$wb['backup_size_txt'] = 'Yedek Boyutu';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_alias.lng b/interface/web/mail/lib/lang/tr_mail_alias.lng
index d3fd3f1271..ea440b2e63 100644
--- a/interface/web/mail/lib/lang/tr_mail_alias.lng
+++ b/interface/web/mail/lib/lang/tr_mail_alias.lng
@@ -4,14 +4,14 @@ $wb['destination_txt'] = 'Hedef';
 $wb['active_txt'] = 'Etkin';
 $wb['email_error_isemail'] = 'E-posta adresi geçersiz.';
 $wb['email_error_unique'] = 'Bu e-posta adresi zaten var';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
 $wb['destination_error_isemail'] = 'Hedef e-posta adresi geçersiz.';
 $wb['limit_mailalias_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma e-posta adresi sayısına ulaştınız.';
-$wb['duplicate_mailbox_txt'] = 'Bu e-posta adresini kullanan bir posta kutusu zaten var';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['duplicate_mailbox_txt'] = 'Bu adresi kullanan bir e-posta kutusu zaten var';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['duplicate_email_alias_txt'] = 'Bu takma e-posta adresi zaten var.';
 $wb['source_txt'] = 'Takma Ad';
-$wb['send_as_txt'] = 'Send as';
-$wb['send_as_exp'] = 'Allow target to send mail using this alias as origin';
-$wb['greylisting_txt'] = 'Enable greylisting';
+$wb['send_as_txt'] = 'Gönderen';
+$wb['send_as_exp'] = 'Hedef bu adresi kaynak olarak göstererek e-posta gönderebilsin';
+$wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_aliasdomain.lng b/interface/web/mail/lib/lang/tr_mail_aliasdomain.lng
index d39c6f46a3..f6cd98261b 100644
--- a/interface/web/mail/lib/lang/tr_mail_aliasdomain.lng
+++ b/interface/web/mail/lib/lang/tr_mail_aliasdomain.lng
@@ -2,10 +2,10 @@
 $wb['source_txt'] = 'Kaynak';
 $wb['destination_txt'] = 'Hedef';
 $wb['active_txt'] = 'Etkin';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
-$wb['limit_mailaliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma alan adı sayısına ulaştınız.';
-$wb['source_destination_identical_txt'] = 'Kaynak ve Hedef alan adları aynı.';
-$wb['source_error_empty'] = 'Kaynak alan adı boş olamaz.';
-$wb['source_error_unique'] = 'Bu kaynak alan adı zaten var.';
-$wb['source_error_regex'] = 'Kaynak alan adı geçersiz.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
+$wb['limit_mailaliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['source_destination_identical_txt'] = 'Kaynak ve Hedef etki alanları aynı.';
+$wb['source_error_empty'] = 'Kaynak etki alanı boş olamaz.';
+$wb['source_error_unique'] = 'Bu kaynak etki alanı zaten var.';
+$wb['source_error_regex'] = 'Kaynak etki alanı geçersiz.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/tr_mail_aliasdomain_list.lng
index a6d3dfc3b9..7cbc3aef9e 100644
--- a/interface/web/mail/lib/lang/tr_mail_aliasdomain_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_aliasdomain_list.lng
@@ -1,7 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Takma Alan Adı';
+$wb['list_head_txt'] = 'Takma Etki Alanı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_txt'] = 'Kaynak';
 $wb['destination_txt'] = 'Hedef';
-$wb['add_new_record_txt'] = 'Takma Alan Adı Ekle';
+$wb['source_txt'] = 'Kaynak';
+$wb['add_new_record_txt'] = 'Takma Etki Alanı Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_backup_list.lng b/interface/web/mail/lib/lang/tr_mail_backup_list.lng
index 73286a0737..1a5ae7227b 100644
--- a/interface/web/mail/lib/lang/tr_mail_backup_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_backup_list.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['list_head_txt'] = 'Existing backups';
-$wb['date_txt'] = 'Date';
-$wb['backup_type_txt'] = 'Type';
-$wb['filename_txt'] = 'Backup file';
-$wb['restore_backup_txt'] = 'Restore';
-$wb['restore_info_txt'] = 'Restore of the backup has been started. This action takes several minutes to be completed.';
-$wb['restore_confirm_txt'] = 'Restoring may overwrite existing files in your mailbox. Do you really want to restore this backup?';
-$wb['download_pending_txt'] = 'There is already a pending backup download job.';
-$wb['restore_pending_txt'] = 'There is already a pending backup restore job.';
-$wb['delete_backup_txt'] = 'Delete Backup';
-$wb['delete_info_txt'] = 'Delete of the backup has been started. This action takes several minutes to be completed.';
-$wb['delete_confirm_txt'] = 'Really delete this backup?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
-$wb['filesize_txt'] = 'Filesize';
+$wb['list_head_txt'] = 'Var Olan Yedekler';
+$wb['date_txt'] = 'Tarih';
+$wb['backup_type_txt'] = 'Tür';
+$wb['filename_txt'] = 'Yedek Dosyası';
+$wb['restore_backup_txt'] = 'Geri Yükle';
+$wb['restore_info_txt'] = 'Yedekten geri yükleme işlemi başlatıldı. Bu işlemin tamamlanması bir kaç dakika sürebilir.';
+$wb['restore_confirm_txt'] = 'Geri yükleme işlemi sırasında e-posta kutunuzda var olan iletilerin üzerine yazılabilir. Bu yedeği geri yüklemek istediğinize emin misiniz?';
+$wb['download_pending_txt'] = 'Zaten bekleyen bir yedekleme indirme iÅŸlemi var.';
+$wb['restore_pending_txt'] = 'Zaten bekleyen bir yedek geri yükleme işlemi var.';
+$wb['delete_backup_txt'] = 'YedeÄŸi Sil';
+$wb['delete_info_txt'] = 'Yedeği silme işlemi başlatıldı. Bu işlemin tamamlanması bir kaç dakika sürebilir.';
+$wb['delete_confirm_txt'] = 'Bu yedeÄŸi silmek istediÄŸinize emin misiniz?';
+$wb['delete_pending_txt'] = 'Zaten bekleyen bir yedek silme iÅŸlemi var.';
+$wb['filesize_txt'] = 'Dosya Boyutu';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_blacklist.lng b/interface/web/mail/lib/lang/tr_mail_blacklist.lng
index ecdca0b1a5..381a11fa98 100644
--- a/interface/web/mail/lib/lang/tr_mail_blacklist.lng
+++ b/interface/web/mail/lib/lang/tr_mail_blacklist.lng
@@ -4,6 +4,6 @@ $wb['source_txt'] = 'Kara Listedeki Adres';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_error_notempty'] = 'Adres boÅŸ olamaz.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_blacklist_list.lng b/interface/web/mail/lib/lang/tr_mail_blacklist_list.lng
index b9bf6ff92c..9446569f4f 100644
--- a/interface/web/mail/lib/lang/tr_mail_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_blacklist_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'E-posta Kara Listesi';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['source_txt'] = 'Kara Listedeki Adres';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['add_new_record_txt'] = 'Kara Liste Kaydı Ekle';
 $wb['access_txt'] = 'EriÅŸim';
diff --git a/interface/web/mail/lib/lang/tr_mail_content_filter.lng b/interface/web/mail/lib/lang/tr_mail_content_filter.lng
index f13b01a680..df2d4d5c43 100644
--- a/interface/web/mail/lib/lang/tr_mail_content_filter.lng
+++ b/interface/web/mail/lib/lang/tr_mail_content_filter.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
 $wb['type_txt'] = 'Süzgeç';
-$wb['pattern_txt'] = 'Kurallı İfade Deseni';
+$wb['pattern_txt'] = 'Kurallı İfade Örüntüsü';
 $wb['data_txt'] = 'Veri';
 $wb['action_txt'] = 'Ä°ÅŸlem';
 $wb['active_txt'] = 'Etkin';
-$wb['pattern_error_empty'] = 'Desen boÅŸ olamaz.';
+$wb['pattern_error_empty'] = 'Örüntü boş olamaz.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain.lng b/interface/web/mail/lib/lang/tr_mail_domain.lng
index 4ee4aa50fa..3e7d9cc412 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain.lng
@@ -1,23 +1,23 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['type_txt'] = 'Tip';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['type_txt'] = 'Tür';
 $wb['active_txt'] = 'Etkin';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Bu alan adı zaten var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Bu etki alanı zaten var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_maildomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['policy_txt'] = 'Önemsiz Posta Süzgeci';
+$wb['limit_maildomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
 $wb['no_policy'] = '- devre dışı -';
-$wb['dkim_txt'] = 'enable DKIM';
-$wb['dkim_private_txt'] = 'DKIM Private-key';
-$wb['dkim_public_txt'] = 'DKIM Public-key\nfor information only';
-$wb['dkim_generate_txt'] = 'Generate DKIM Private-key';
-$wb['dkim_dns_txt'] = 'DNS-Record';
-$wb['dkim_private_key_error'] = 'Invalid DKIM-Private key';
-$wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)';
-$wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.';
-$wb['dkim_selector_txt'] = 'DKIM-Selector';
-$wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars';
+$wb['dkim_txt'] = 'DKIM Kullanılsın';
+$wb['dkim_private_txt'] = 'Özel DKIM Anahtarı';
+$wb['dkim_public_txt'] = 'Herkese açık DKIM anahtarı' . "\n" . 'yalnız bilgilendirme için';
+$wb['dkim_generate_txt'] = 'Özel DKIM Anahtarı Üret';
+$wb['dkim_dns_txt'] = 'DNS Kaydı';
+$wb['dkim_private_key_error'] = 'Özel DKIM Anahtarı Geçersiz';
+$wb['dkim_settings_txt'] = 'DomainKeys Tanımlı E-posta (DKIM)';
+$wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
+$wb['dkim_selector_txt'] = 'DKIM Seçici';
+$wb['dkim_selector_error'] = 'DKIM seçici geçersiz. En fazla 63 karakter uzunluğunda, yalnız küçük İngilizce harf ve rakamları kullanın (a-z ya da 0-9)';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_admin_list.lng b/interface/web/mail/lib/lang/tr_mail_domain_admin_list.lng
index 7d56618eef..f6937ab382 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_admin_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_admin_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'E-posta Alan Adı';
+$wb['list_head_txt'] = 'E-posta Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['add_new_record_txt'] = 'Alan Adı Ekle';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
 $wb['active_txt'] = 'Etkin';
 $wb['sys_groupid_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
index c5f8725a72..bcdf629846 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['destination_txt'] = 'Hedef';
 $wb['active_txt'] = 'Etkin';
-$wb['domain_error_unique'] = 'Bu alan adı için zaten bir tümünü al kayıdı var.';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz ya da geçersiz karakterler içeriyor.';
+$wb['domain_error_unique'] = 'Bu etki alanı için zaten bir tümünü al kayıdı var.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz ya da geçersiz karakterler içeriyor.';
 $wb['limit_mailcatchall_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla tümünü al hesabı sayısına ulaştınız.';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['source_txt'] = 'Kaynak';
 $wb['destination_error_isemail'] = 'Hedef e-posta adresi geçersiz.';
-$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/tr_mail_domain_catchall_list.lng
index 596e2dbdae..45a59fe831 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_catchall_list.lng
@@ -2,8 +2,8 @@
 $wb['list_head_txt'] = 'E-posta Tümünü Al Hesabı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_txt'] = 'Kaynak';
-$wb['destination_txt'] = 'Hedef e-posta adresi';
+$wb['destination_txt'] = 'Hedef E-posta Adresi';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['add_new_record_txt'] = 'Tümünü Al Hesabı Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_list.lng b/interface/web/mail/lib/lang/tr_mail_domain_list.lng
index 7a4a1f2b64..06a44455eb 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'E-posta Alan Adı';
+$wb['list_head_txt'] = 'E-posta Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['add_new_record_txt'] = 'Alan Adı Ekle';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
 $wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_forward.lng b/interface/web/mail/lib/lang/tr_mail_forward.lng
index f96a0e4c07..2352cd945f 100644
--- a/interface/web/mail/lib/lang/tr_mail_forward.lng
+++ b/interface/web/mail/lib/lang/tr_mail_forward.lng
@@ -3,11 +3,11 @@ $wb['email_txt'] = 'E-posta';
 $wb['destination_txt'] = 'Hedef E-posta';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_mailforward_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta yönlendirme sayısına ulaştınız.';
-$wb['duplicate_mailbox_txt'] = 'Bu e-posta adresini kullanan bir posta kutusu zaten var';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['duplicate_mailbox_txt'] = 'Bu e-posta adresini kullanan bir e-posta kutusu zaten var';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['source_txt'] = 'Kaynak E-posta';
-$wb['email_error_isemail'] = 'Please enter a valid email address.';
-$wb['send_as_txt'] = 'Send as';
-$wb['send_as_exp'] = 'Allow target to send mail using this address as origin (if target is internal)';
-$wb['greylisting_txt'] = 'Enable greylisting';
+$wb['email_error_isemail'] = 'Lütfen geçerli bir e-posta adresi yazın.';
+$wb['send_as_txt'] = 'Gönderen';
+$wb['send_as_exp'] = 'Hedef bu adresi kaynak olarak göstererek e-posta gönderebilsin (hedef iç kullanıcı ise)';
+$wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_get.lng b/interface/web/mail/lib/lang/tr_mail_get.lng
index b82b6c8c9a..2ad3434265 100644
--- a/interface/web/mail/lib/lang/tr_mail_get.lng
+++ b/interface/web/mail/lib/lang/tr_mail_get.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['source_server_txt'] = 'POP3/IMAP Sunucusu';
 $wb['source_username_txt'] = 'Kullanıcı Adı';
 $wb['source_password_txt'] = 'Parola';
@@ -9,11 +9,11 @@ $wb['source_delete_note_txt'] = 'Lütfen bu seçeneği etkinleştirmeden önce,
 $wb['source_read_all_txt'] = 'Tüm e-postalar alınsın (okunmuşlar dahil)';
 $wb['destination_txt'] = 'Hedef';
 $wb['active_txt'] = 'Etkin';
-$wb['limit_fetchmail_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla posta alma kaydı sayısına ulaştınız.';
+$wb['limit_fetchmail_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta alma kaydı sayısına ulaştınız.';
 $wb['source_server_error_isempty'] = 'Sunucu boÅŸ olamaz.';
 $wb['source_username_error_isempty'] = 'Kullanıcı adı boş olamaz.';
 $wb['source_password_error_isempty'] = 'Parola boÅŸ olamaz.';
 $wb['destination_error_isemail'] = 'Hedef seçilmemiş.';
-$wb['source_server_error_regex'] = 'POP3/IMAP Sunucu alan adı geçersiz.';
-$wb['error_delete_read_all_combination'] = 'Seçenek kombinasyonu geçersiz. You can not use \\"E-postalar alındıktan sonra silinsin\\" = Hayır iken \\"Tüm e-postalar alınsın\\" = Evet olamaz';
+$wb['source_server_error_regex'] = 'POP3/IMAP Sunucu etki alanı geçersiz.';
+$wb['error_delete_read_all_combination'] = 'Seçenek kombinasyonu geçersiz. "E-postalar Alındıktan Sonra Silinsin" seçeneği devre dışı iken "Tüm E-postalar Alınsın" seçeneği etkin olamaz';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_mailinglist.lng b/interface/web/mail/lib/lang/tr_mail_mailinglist.lng
index 17bfab31dc..4bd52db75e 100644
--- a/interface/web/mail/lib/lang/tr_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/tr_mail_mailinglist.lng
@@ -1,19 +1,19 @@
 <?php
-$wb['mailinglist_txt'] = 'Posta Listesi';
+$wb['mailinglist_txt'] = 'E-posta Listesi';
 $wb['limit_mailmailinglist_txt'] = 'Sınıra ulaşıldı';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
 $wb['listname_error_empty'] = 'Liste adı boş olamaz.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
 $wb['email_in_use_txt'] = 'E-posta kullanımda';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['listname_txt'] = 'Liste Adı';
 $wb['client_txt'] = 'Müşteri';
 $wb['email_txt'] = 'E-posta';
 $wb['password_txt'] = 'Parola';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
diff --git a/interface/web/mail/lib/lang/tr_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/tr_mail_mailinglist_list.lng
index c605dd2442..8070d1983d 100644
--- a/interface/web/mail/lib/lang/tr_mail_mailinglist_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_mailinglist_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Posta Listesi';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['list_head_txt'] = 'E-posta Listesi';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['listname_txt'] = 'Liste Adı';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_relay_recipient.lng b/interface/web/mail/lib/lang/tr_mail_relay_recipient.lng
index 90153f8c4d..a7d83620cb 100644
--- a/interface/web/mail/lib/lang/tr_mail_relay_recipient.lng
+++ b/interface/web/mail/lib/lang/tr_mail_relay_recipient.lng
@@ -4,6 +4,6 @@ $wb['source_txt'] = 'Aktarılan Alıcı';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_error_notempty'] = 'Adres boÅŸ olamaz.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_spamfilter.lng b/interface/web/mail/lib/lang/tr_mail_spamfilter.lng
index be63f71200..6a708982f1 100644
--- a/interface/web/mail/lib/lang/tr_mail_spamfilter.lng
+++ b/interface/web/mail/lib/lang/tr_mail_spamfilter.lng
@@ -7,11 +7,11 @@ $wb['spam_rewrite_subject_txt'] = 'Konuyu yeniden yaz';
 $wb['spam_redirect_maildir_txt'] = 'Mail kutusuna yönlendir';
 $wb['active_txt'] = 'Etkin';
 $wb['spam_rewrite_txt'] = 'Bu puanın üzerindeki e-posta konusunu yeniden yaz.';
-$wb['spam_redirect_txt'] = 'Bu puanın üzerindeki e-postayı seçilmiş posta kutusuna yönlendir.';
+$wb['spam_redirect_txt'] = 'Bu puanın üzerindeki e-postayı seçilmiş e-posta kutusuna yönlendir.';
 $wb['spam_delete_txt'] = 'Bu puanın üzerindeki e-postayı sil.';
 $wb['disable_txt'] = 'İpucu: Bir süzgeç seçeneğini devre dışı bırakmak için, puanı 0.00 olarak yazın.';
 $wb['email_error_isemail'] = 'E-posta adresi geçersiz.';
-$wb['email_error_unique'] = 'Bu e-posta adresi için önemiz posta süzgeci kaydı zaten var.';
-$wb['spam_redirect_maildir_purge_txt'] = 'Posta klasörü';
+$wb['email_error_unique'] = 'Bu e-posta adresi için önemiz  e-posta süzgeci kaydı zaten var.';
+$wb['spam_redirect_maildir_purge_txt'] = 'E-posta Klasörü';
 $wb['days_txt'] = ' gün aralıklarla temizlensin.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/tr_mail_spamfilter_list.lng
index 90981ad8fe..6901f541bd 100644
--- a/interface/web/mail/lib/lang/tr_mail_spamfilter_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_spamfilter_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Süzgeci';
+$wb['list_head_txt'] = 'Önemsiz İleti Süzgeci';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['server_name_txt'] = 'server_name';
 $wb['email_txt'] = 'E-posta';
-$wb['add_new_record_txt'] = 'Önemsiz Posta Süzgeci Ekle';
+$wb['add_new_record_txt'] = 'Önemsiz İleti Süzgeci Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_transport.lng b/interface/web/mail/lib/lang/tr_mail_transport.lng
index f268fd5475..0b41770392 100644
--- a/interface/web/mail/lib/lang/tr_mail_transport.lng
+++ b/interface/web/mail/lib/lang/tr_mail_transport.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['destination_txt'] = 'Hedef';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['mx_txt'] = 'MX taraması yok';
 $wb['sort_order_txt'] = 'Sıralama';
 $wb['active_txt'] = 'Etkin';
diff --git a/interface/web/mail/lib/lang/tr_mail_transport_list.lng b/interface/web/mail/lib/lang/tr_mail_transport_list.lng
index f9608f64dc..75c5962ece 100644
--- a/interface/web/mail/lib/lang/tr_mail_transport_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_transport_list.lng
@@ -2,7 +2,7 @@
 $wb['list_head_txt'] = 'Gelişmiş E-posta Yöneltme';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['transport_txt'] = 'Aktarım';
 $wb['sort_order_txt'] = 'Sıralama';
 $wb['add_new_record_txt'] = 'Yöneltme Ekle';
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 6853b9619d..99e9860396 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -1,65 +1,65 @@
 <?php
-$wb['custom_mailfilter_txt'] = 'Özel posta süzgeci';
+$wb['custom_mailfilter_txt'] = 'Özel E-posta Süzgeci';
 $wb['email_txt'] = 'E-posta';
 $wb['cryptpwd_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['active_txt'] = 'Etkin';
 $wb['email_error_isemail'] = 'E-posta adresi geçersiz.';
 $wb['email_error_unique'] = 'Bu e-posta adresi zaten var.';
 $wb['autoresponder_subject_txt'] = 'E-posta Konusu';
-$wb['autoresponder_subject'] = 'Ofis dışında yanıtı';
+$wb['autoresponder_subject'] = 'Ofis Dışında Yanıtı';
 $wb['autoresponder_text_txt'] = 'Metin';
 $wb['autoresponder_txt'] = 'Etkin';
 $wb['autoresponder_start_date_txt'] = 'Başlangıç';
 $wb['autoresponder_start_date_ispast'] = 'Başlangıç zamanı geçmişte olamaz.';
 $wb['autoresponder_end_date_txt'] = 'BitiÅŸ';
 $wb['autoresponder_end_date_isgreater'] = 'Bitiş zamanı başlangıç zamanından sonra olmalıdır.';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
+$wb['autoresponder_start_date_is_required'] = 'Otoyanıtlayıcı kullanıldığında başlangıç tarihi belirtilmelidir.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
 $wb['error_no_pwd'] = 'Parola boÅŸ olamaz.';
-$wb['quota_error_isint'] = 'Posta kutusunun boyutu bir sayı olmalıdır.';
+$wb['quota_error_isint'] = 'E-posta kutusunun boyutu bir sayı olmalıdır.';
 $wb['quota_txt'] = 'Kota (sınırsız için 0 yazın)';
-$wb['server_id_txt'] = 'Sunucu kodu';
+$wb['server_id_txt'] = 'Sunucu Kodu';
 $wb['password_txt'] = 'Parola';
-$wb['maildir_txt'] = 'Posta Klasörü';
+$wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
+$wb['maildir_txt'] = 'E-posta Klasörü';
 $wb['postfix_txt'] = 'Alım Etkin';
+$wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 $wb['access_txt'] = 'EriÅŸim Etkin';
-$wb['policy_txt'] = 'Önemsiz Posta Süzgeci';
+$wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
 $wb['no_policy'] = '- devre dışı -';
-$wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla posta kutusu sayısına ulaştınız.';
-$wb['limit_mailquota_txt'] = 'Posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
+$wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta kutusu sayısına ulaştınız.';
+$wb['limit_mailquota_txt'] = 'E-posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
 $wb['disablesmtp_txt'] = 'SMTP Kullanılmasın (gönderim)';
 $wb['disableimap_txt'] = 'IMAP Kullanılmasın';
 $wb['disablepop3_txt'] = 'POP3 Kullanılmasın';
 $wb['duplicate_alias_or_forward_txt'] = 'Bu e-posta adresi zaten takma ya da yönlendirilmiş.';
 $wb['quota_error_value'] = 'Kota değeri geçersiz. Değer sınırsız için 0 ya da 1 değerinden büyük olmalı';
-$wb['move_junk_txt'] = 'Önemsiz Epostalar Junk Klasörüne Taşınsın';
+$wb['move_junk_txt'] = 'Önemsiz İletiler Junk Klasörüne Taşınsın';
 $wb['name_txt'] = 'Ad';
 $wb['name_optional_txt'] = '(İsteğe bağlı)';
 $wb['autoresponder_active'] = 'Otoyanıtlayıcı kullanılsın';
 $wb['cc_txt'] = 'Kopyası şuraya gönderilsin';
+$wb['sender_cc_txt'] = 'Gidenin Gizli Kopyası Şuraya Gönderilsin';
 $wb['cc_error_isemail'] = 'Kopyası şuraya gönderilsin alanına geçerli bir e-posta adresi yazılmalı';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['sender_cc_error_isemail'] = 'Gidenin gizli kopyası şuraya gönderilsin alanındaki e-posta adresi geçersiz';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['now_txt'] = 'Åžimdi';
 $wb['login_error_unique'] = 'Kullanıcı adı zaten var.';
 $wb['login_error_regex'] = 'Kullanılabilecek karakterler: A-Z, a-z, 0-9, ., _ ve -.';
-$wb['login_txt'] = 'Kullanıcı adı (isteğe bağlı)';
+$wb['login_txt'] = 'Kullanıcı Adı (İsteğe Bağlı)';
 $wb['error_login_email_txt'] = 'Bu kullanıcı adı kullanılamaz. Lütfen farklı bir kullanıcı adı yazın ya da e-posta adresini kullanın.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
+$wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
+$wb['backup_copies_txt'] = 'Yedek kopyalarının sayısı';
+$wb['no_backup_txt'] = 'Yedek yok';
+$wb['daily_backup_txt'] = 'Günlük';
+$wb['weekly_backup_txt'] = 'Haftalık';
+$wb['monthly_backup_txt'] = 'Aylık';
 $wb['email_error_isascii'] = 'E-posta istemcinizde sorun yaşamamak için lütfen parolanızda dile özel unikod karakterler kullanmayın.';
 $wb['cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
-$wb['password_click_to_set_txt'] = 'Click to set';
-$wb['greylisting_txt'] = 'Enable greylisting';
-$wb['sender_cc_txt'] = 'Send outgoing BCC to';
-$wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['backup_interval_txt'] = 'Backup interval';
-$wb['backup_copies_txt'] = 'Number of backup copies';
-$wb['no_backup_txt'] = 'No backup';
-$wb['daily_backup_txt'] = 'Daily';
-$wb['weekly_backup_txt'] = 'Weekly';
-$wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_user_filter.lng b/interface/web/mail/lib/lang/tr_mail_user_filter.lng
index 8897a9d18b..ba55be63dc 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_filter.lng
@@ -7,7 +7,7 @@ $wb['rulename_error_empty'] = 'Ad boÅŸ olamaz.';
 $wb['searchterm_is_empty'] = 'Aranacak ifade boÅŸ olamaz.';
 $wb['source_txt'] = 'Kaynak';
 $wb['target_error_regex'] = 'Hedef için yalnız şu karakterler kullanılabilir: a-z, 0-9, -, ., _, ve {boşluk}';
-$wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla posta süzgeci sayısına ulaştınız.';
+$wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.';
 $wb['subject_txt'] = 'Konu';
 $wb['from_txt'] = 'Kimden';
 $wb['to_txt'] = 'Kime';
@@ -25,5 +25,5 @@ $wb['domain_txt'] = 'Etki alanı';
 $wb['keep_txt'] = 'Tut';
 $wb['reject_txt'] = 'Reddet';
 $wb['stop_txt'] = 'Durdur';
-$wb['move_to_txt'] = 'Move to';
+$wb['move_to_txt'] = 'Şuraya Taşı';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_user_list.lng b/interface/web/mail/lib/lang/tr_mail_user_list.lng
index 6310ce4038..66d33becae 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_list.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['list_head_txt'] = 'Posta Kutusu';
+$wb['list_head_txt'] = 'E-posta Kutusu';
 $wb['email_txt'] = 'E-posta';
 $wb['autoresponder_txt'] = 'Otomatik Yanıtlayıcı';
-$wb['add_new_record_txt'] = 'Posta Kutusu Ekle';
+$wb['add_new_record_txt'] = 'E-posta Kutusu Ekle';
 $wb['name_txt'] = 'Gerçek Ad';
 $wb['login_txt'] = 'Oturum Aç';
-$wb['postfix_txt'] = 'Receiving';
+$wb['postfix_txt'] = 'Alınıyor';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
diff --git a/interface/web/mail/lib/lang/tr_mail_user_stats_list.lng b/interface/web/mail/lib/lang/tr_mail_user_stats_list.lng
index 326f69f698..b28a9f09b9 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_stats_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_stats_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Posta TrafiÄŸi';
+$wb['list_head_txt'] = 'E-posta TrafiÄŸi';
 $wb['email_txt'] = 'E-posta';
 $wb['this_month_txt'] = 'Bu ay';
 $wb['last_month_txt'] = 'Geçen ay';
diff --git a/interface/web/mail/lib/lang/tr_mail_whitelist.lng b/interface/web/mail/lib/lang/tr_mail_whitelist.lng
index 84df2143c0..c6272a9ede 100644
--- a/interface/web/mail/lib/lang/tr_mail_whitelist.lng
+++ b/interface/web/mail/lib/lang/tr_mail_whitelist.lng
@@ -4,6 +4,6 @@ $wb['source_txt'] = 'Beyaz Listedeki Adres';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_error_notempty'] = 'Adres boÅŸ olamaz.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_whitelist_list.lng b/interface/web/mail/lib/lang/tr_mail_whitelist_list.lng
index 7809a24fe8..736b395ca0 100644
--- a/interface/web/mail/lib/lang/tr_mail_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_whitelist_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'E-posta Beyaz Listesi';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['source_txt'] = 'Beyaz Listedeki Adres';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['add_new_record_txt'] = 'Beyaz Liste Kaydı Ekle';
 $wb['access_txt'] = 'EriÅŸim';
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_blacklist_list.lng
index 1e0f673474..40e3c5fb14 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_blacklist_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Kara Listesi';
+$wb['list_head_txt'] = 'Önemsiz İleti Kara Listesi';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['priority_txt'] = 'Öncelik';
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_config.lng b/interface/web/mail/lib/lang/tr_spamfilter_config.lng
index 7ccd927773..93f1417483 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_config.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_config.lng
@@ -6,15 +6,15 @@ $wb['gateway_txt'] = 'Ağ Geçidi';
 $wb['hostname_txt'] = 'Sunucu Adı';
 $wb['nameservers_txt'] = 'Ad Sunucuları';
 $wb['module_txt'] = 'Sunucu Modülü';
-$wb['maildir_path_txt'] = 'Posta Klasörü Yolu';
+$wb['maildir_path_txt'] = 'E-posta Klasörü Yolu';
 $wb['homedir_path_txt'] = 'Kullanıcı Klasörü Yolu';
-$wb['mailuser_uid_txt'] = 'Posta Kullanıcısı UID';
-$wb['mailuser_gid_txt'] = 'Posta Kullanıcısı GID';
-$wb['mailuser_name_txt'] = 'Posta Kullanıcısı Adı';
-$wb['mailuser_group_txt'] = 'Posta Kullanıcısı Grubu';
+$wb['mailuser_uid_txt'] = 'E-posta Kullanıcısı UID';
+$wb['mailuser_gid_txt'] = 'E-posta Kullanıcısı GID';
+$wb['mailuser_name_txt'] = 'E-posta Kullanıcısı Adı';
+$wb['mailuser_group_txt'] = 'E-posta Kullanıcısı Grubu';
 $wb['relayhost_txt'] = 'Aktarım Sunucusu';
 $wb['relayhost_user_txt'] = 'Aktarım Sunucu Kullanıcı Adı';
 $wb['relayhost_password_txt'] = 'Aktarım Sunucu Parolası';
-$wb['mailbox_size_limit_txt'] = 'Posta Kutusu Boyutu';
+$wb['mailbox_size_limit_txt'] = 'E-posta Kutusu Boyutu';
 $wb['message_size_limit_txt'] = 'İleti Boyutu Sınırı';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_config_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_config_list.lng
index 2b6e0b3c18..dc30cf868a 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_config_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_config_list.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['list_head_txt'] = 'Sunucu Ayarları';
 $wb['server_name_txt'] = 'Sunucu';
-$wb['server_id_txt'] = 'sunucu_kodu';
+$wb['server_id_txt'] = 'server_id';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_policy.lng b/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
index d7b76496a1..45a52ffc92 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
@@ -1,51 +1,38 @@
 <?php
 $wb['policy_name_txt'] = 'Kural Adı';
 $wb['virus_lover_txt'] = 'Virüs Koruması';
-$wb['spam_lover_txt'] = 'Önemsiz Posta Koruması';
-$wb['banned_files_lover_txt'] = 'Yasak Dosya Koruması';
-$wb['bad_header_lover_txt'] = 'Kötü Üstbilgi Koruması';
-$wb['bypass_virus_checks_txt'] = 'Virüs korumasını atla';
-$wb['bypass_banned_checks_txt'] = 'Yasak dosya korumasını atla';
-$wb['bypass_header_checks_txt'] = 'Üstbilgi korumasını atla';
-$wb['virus_quarantine_to_txt'] = 'Virüsü e-postaya ilet';
-$wb['spam_quarantine_to_txt'] = 'Önemsiz postayı e-postaya ilet';
-$wb['banned_quarantine_to_txt'] = 'Yasak dosyaları e-postaya ilet';
-$wb['bad_header_quarantine_to_txt'] = 'Kötü üstbilgiyi e-postaya ilet';
-$wb['clean_quarantine_to_txt'] = 'Temiz postaların iletileceği e-posta';
-$wb['other_quarantine_to_txt'] = 'Diğer postaların iletileceği e-posta';
-$wb['spam_tag_level_txt'] = 'Önemsiz posta etiket düzeyi';
-$wb['spam_tag2_level_txt'] = 'Önemsiz posta etiket2 düzeyi';
-$wb['spam_kill_level_txt'] = 'Önemsiz posta yok etme düzeyi';
-$wb['spam_dsn_cutoff_level_txt'] = 'Önemsiz posta DNS durdurma limiti';
-$wb['spam_quarantine_cutoff_level_txt'] = 'Önemsiz posta karantina durdurma düzeyi';
-$wb['spam_modifies_subj_txt'] = 'Önemsiz posta konu değişikliği';
-$wb['spam_subject_tag_txt'] = 'Önemsiz posta konu etiketi';
-$wb['spam_subject_tag2_txt'] = 'Önemsiz posta konu etiketi2';
-$wb['addr_extension_virus_txt'] = 'Adres Virus eki';
-$wb['addr_extension_spam_txt'] = 'Adres SPAM eki';
-$wb['addr_extension_banned_txt'] = 'Adres Yasak eki';
-$wb['addr_extension_bad_header_txt'] = 'Adres Kötü üstbilfi eki';
-$wb['warnvirusrecip_txt'] = 'Virus alıcısını uyar';
-$wb['warnbannedrecip_txt'] = 'Yasak dosya alıcısını uyar';
-$wb['warnbadhrecip_txt'] = 'Kötü üstbilgi alıcısını uyar';
+$wb['spam_lover_txt'] = 'Önemsiz İleti Koruması';
+$wb['banned_files_lover_txt'] = 'Yasaklanmış Dosya Koruması';
+$wb['bad_header_lover_txt'] = 'Kötü Üst Bilgi Koruması';
+$wb['bypass_virus_checks_txt'] = 'Virüs koruması atlansın';
+$wb['bypass_banned_checks_txt'] = 'Yasaklanmış dosya koruması atlansın';
+$wb['bypass_header_checks_txt'] = 'Üst bilgi koruması atlansın';
+$wb['virus_quarantine_to_txt'] = 'Virüs e-postaya iletilsin';
+$wb['spam_quarantine_to_txt'] = 'Önemsiz ileti e-postaya iletilsin';
+$wb['banned_quarantine_to_txt'] = 'Yasak dosya e-postaya iletilsin';
+$wb['bad_header_quarantine_to_txt'] = 'Kötü üst bilgi e-postaya iletilsin';
+$wb['clean_quarantine_to_txt'] = 'Temiz e-postaların iletileceği e-posta';
+$wb['other_quarantine_to_txt'] = 'Diğer e-postaların iletileceği e-posta';
+$wb['spam_tag_level_txt'] = 'Önemsiz ileti etiket düzeyi';
+$wb['spam_tag2_level_txt'] = 'Önemsiz ileti etiket2 düzeyi';
+$wb['spam_kill_level_txt'] = 'Önemsiz ileti yok etme düzeyi';
+$wb['spam_dsn_cutoff_level_txt'] = 'Önemsiz ileti DNS durdurma limiti';
+$wb['spam_quarantine_cutoff_level_txt'] = 'Önemsiz ileti karantina durdurma düzeyi';
+$wb['spam_modifies_subj_txt'] = 'Önemsiz ileti konu değişikliği';
+$wb['spam_subject_tag_txt'] = 'Önemsiz ileti konu etiketi';
+$wb['spam_subject_tag2_txt'] = 'Önemsiz ileti konu etiketi2';
+$wb['addr_extension_virus_txt'] = 'Adres virus uzantısı';
+$wb['addr_extension_spam_txt'] = 'Adres önemsiz ileti uzantısı';
+$wb['addr_extension_banned_txt'] = 'Adres yasaklanmış uzantısı';
+$wb['addr_extension_bad_header_txt'] = 'Adres kötü üst bilgi uzantısı';
+$wb['warnvirusrecip_txt'] = 'Virus alıcısı uyarılsın';
+$wb['warnbannedrecip_txt'] = 'Yasak dosya alıcısı uyarılsın';
+$wb['warnbadhrecip_txt'] = 'Kötü üst bilgi alıcısı uyarılsın';
 $wb['newvirus_admin_txt'] = 'Yeni virus yönetici';
 $wb['virus_admin_txt'] = 'Virus yönetici';
 $wb['banned_admin_txt'] = 'Yasak dosya yönetici';
-$wb['bad_header_admin_txt'] = 'Kötü üstbilgi yönetici';
-$wb['spam_admin_txt'] = 'Önemsiz posta yönetici';
+$wb['bad_header_admin_txt'] = 'Kötü üst bilgi yönetici';
+$wb['spam_admin_txt'] = 'Önemsiz ileti yönetici';
 $wb['message_size_limit_txt'] = 'İleti boyutu sınırı';
 $wb['banned_rulenames_txt'] = 'Yasak kural adları';
-$wb['rspamd_greylisting_txt'] = 'Use greylisting';
-$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
-$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
-$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
-$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['amavis_settings_txt'] = 'Settings';
-$wb['amavis_taglevel_txt'] = 'Tag-Level';
-$wb['amavis_quarantine_txt'] = 'Quarantine';
-$wb['amavis_other_txt'] = 'Other';
-$wb['add_header_txt'] = 'Add header';
-$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_policy_list.lng
index 78459c3f23..cb5b9b83af 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_policy_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_policy_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Süzgeci Kuralları';
+$wb['list_head_txt'] = 'Önemsiz İleti Süzgeci Kuralları';
 $wb['policy_name_txt'] = 'Ad';
 $wb['virus_lover_txt'] = 'Virüs Koruması';
-$wb['spam_lover_txt'] = 'Önemsiz Posta Koruması';
+$wb['spam_lover_txt'] = 'Önemsiz İleti Koruması';
 $wb['banned_files_lover_txt'] = 'Yasaklı Dosya Koruması';
-$wb['bad_header_lover_txt'] = 'Kötü Üstbilgi Koruması';
+$wb['bad_header_lover_txt'] = 'Kötü Üst Bilgi Koruması';
 $wb['add_new_record_txt'] = 'Kural Kaydı Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_users_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_users_list.lng
index 847c5bdf4f..bee9372cbf 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_users_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_users_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Süzgeci Kullanıcıları';
+$wb['list_head_txt'] = 'Önemsiz İleti Süzgeci Kullanıcıları';
 $wb['local_txt'] = 'Yerel';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['priority_txt'] = 'Öncelik';
 $wb['policy_id_txt'] = 'Kural';
 $wb['fullname_txt'] = 'Ad';
 $wb['email_txt'] = 'E-posta';
-$wb['add_new_record_txt'] = 'Önemsiz Posta Süzgeci Kullanıcısı Ekle';
+$wb['add_new_record_txt'] = 'Önemsiz İleti Süzgeci Kullanıcısı Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_whitelist_list.lng
index c29bf003c5..5e1f95da1c 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_whitelist_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Beyaz Listesi';
+$wb['list_head_txt'] = 'Önemsiz İleti Beyaz Listesi';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['priority_txt'] = 'Öncelik';
diff --git a/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng b/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng
index d97ab317f6..ecab0f7735 100755
--- a/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng
+++ b/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Posta Kutusu Kotası';
+$wb['list_head_txt'] = 'E-posta Kutusu Kotası';
 $wb['quota_txt'] = 'Kota';
 $wb['name_txt'] = 'Ad';
 $wb['email_txt'] = 'E-posta Adresi';
diff --git a/interface/web/mail/lib/lang/tr_xmpp_domain.lng b/interface/web/mail/lib/lang/tr_xmpp_domain.lng
index 0541203b2e..5c0c1acd05 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_domain.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_domain.lng
@@ -1,62 +1,62 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['client_group_id_txt'] = 'Client';
-$wb['domain_txt'] = 'Domain';
-$wb['type_txt'] = 'Type';
-$wb['active_txt'] = 'Active';
-$wb['client_txt'] = 'Client';
-$wb['management_method_txt'] = 'Management of user accounts';
-$wb['public_registration_txt'] = 'Enable public registration';
-$wb['registration_url_txt'] = 'Registration URL';
-$wb['registration_message_txt'] = 'Registration Message';
-$wb['domain_admins_txt'] = 'Domain Admins (JIDs)';
-$wb['use_pubsub_txt'] = 'Enable Pubsub';
-$wb['use_proxy_txt'] = 'Enable Bytestream Proxy';
-$wb['use_anon_host_txt'] = 'Enable Anonymous Host';
-$wb['use_vjud_txt'] = 'Enable VJUD User Directory';
-$wb['vjud_opt_mode_txt'] = 'VJUD Opt Mode';
-$wb['use_muc_host_txt'] = 'Enable Multi User Chatrooms';
-$wb['muc_name_txt'] = 'Name in MUC Service Discovery';
-$wb['muc_restrict_room_creation_txt'] = 'Permission to create chatrooms';
-$wb['muc_admins_txt'] = 'MUC Admins (JIDs)';
-$wb['use_pastebin_txt'] = 'Enable Pastebin';
-$wb['pastebin_expire_after_txt'] = 'Pastes expire after (hours)';
-$wb['pastebin_trigger_txt'] = 'Pastebin trigger';
-$wb['use_http_archive_txt'] = 'Enable HTTP chatroom archive';
-$wb['http_archive_show_join_txt'] = 'Show join messages in archive';
-$wb['http_archive_show_status_txt'] = 'Show status changes in archive';
-$wb['use_status_host_txt'] = 'Enable XML Status host';
-$wb['cant_change_domainname_txt'] = 'The Domain name of existing XMPP domain cannot be changed.';
-$wb['about_registration_url_txt'] = 'Link to your registration form.';
-$wb['about_registration_message_txt'] = 'Description about your account registration process.';
-$wb['no_corresponding_maildomain_txt'] = 'Corresponding mail domain for user management not found. Please create the mail domain first.';
-$wb['ssl_state_txt'] = 'State';
-$wb['ssl_locality_txt'] = 'Locality';
-$wb['ssl_organisation_txt'] = 'Organisation';
-$wb['ssl_organisation_unit_txt'] = 'Organisation Unit';
-$wb['ssl_country_txt'] = 'Country';
-$wb['ssl_key_txt'] = 'SSL Key';
-$wb['ssl_request_txt'] = 'SSL Request';
-$wb['ssl_cert_txt'] = 'SSL Certificate';
-$wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
-$wb['ssl_email_txt'] = 'Email Address';
-$wb['ssl_txt'] = 'SSL';
-$wb['error_ssl_state_empty'] = 'SSL State is empty.';
-$wb['error_ssl_locality_empty'] = 'SSL Locality is empty.';
-$wb['error_ssl_organisation_empty'] = 'SSL Organisation is empty.';
-$wb['error_ssl_organisation_unit_empty'] = 'SSL Organisation Unit is empty.';
-$wb['error_ssl_country_empty'] = 'SSL Country is empty.';
-$wb['error_ssl_cert_empty'] = 'SSL Certificate field is empty';
-$wb['ssl_state_error_regex'] = 'Invalid SSL State. Valid characters are: a-z, 0-9 and .,-_&äöüÄÖÜ';
-$wb['ssl_locality_error_regex'] = 'Invalid SSL Locality. Valid characters are: a-z, 0-9 and .,-_&äöüÄÖÜ';
-$wb['ssl_organisation_error_regex'] = 'Invalid SSL Organisation. Valid characters are: a-z, 0-9 and .,-_&äöüÄÖÜ';
-$wb['ssl_organistaion_unit_error_regex'] = 'Invalid SSL Organisation Unit. Valid characters are: a-z, 0-9 and .,-_&äöüÄÖÜ';
-$wb['ssl_country_error_regex'] = 'Invalid SSL Country. Valid characters are: A-Z';
-$wb['none_txt'] = 'None';
-$wb['save_certificate_txt'] = 'Save certificate';
-$wb['create_certificate_txt'] = 'Create certificate';
-$wb['delete_certificate_txt'] = 'Delete certificate';
-$wb['ssl_error_isemail'] = 'Please enter a valid email adress for generation of the SSL certificate';
-$wb['limit_xmppdomain_txt'] = 'The max. number of XMPP domains for your account is reached.';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['client_group_id_txt'] = 'Müşteri';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['type_txt'] = 'Tür';
+$wb['active_txt'] = 'Etkin';
+$wb['client_txt'] = 'Müşteri';
+$wb['management_method_txt'] = 'Kullanıcı Hesabı Yönetimi';
+$wb['public_registration_txt'] = 'Herkes Kayıt Olabilsin';
+$wb['registration_url_txt'] = 'Kayıt Adresi';
+$wb['registration_message_txt'] = 'Kayıt İletisi';
+$wb['domain_admins_txt'] = 'Etki Alanı Yöneticileri (JID)';
+$wb['use_pubsub_txt'] = 'Pubsub Kullanılsın';
+$wb['use_proxy_txt'] = 'Bytestream Vekil Sunucusu Kullanılsın';
+$wb['use_anon_host_txt'] = 'Anonim Sunucu Kullanılsın';
+$wb['use_vjud_txt'] = 'VJUD Kullanıcı Klasörü Kullanılsın';
+$wb['vjud_opt_mode_txt'] = 'VJUD Opt Kipi';
+$wb['use_muc_host_txt'] = 'Çok Kullanıcılı Sohbet Kullanılsın';
+$wb['muc_name_txt'] = 'MUC Hizmet KeÅŸfindeki Ad';
+$wb['muc_restrict_room_creation_txt'] = 'Sohbet Odaları Oluşturma İzni';
+$wb['muc_admins_txt'] = 'MUC Yöneticileri (JID)';
+$wb['use_pastebin_txt'] = 'Pastebin Kullanılsın';
+$wb['pastebin_expire_after_txt'] = 'Yapıştırmaların geçersizlik süresi (saat)';
+$wb['pastebin_trigger_txt'] = 'Pastebin Tetikleyici';
+$wb['use_http_archive_txt'] = 'HTTP Sohbet Odası Arşivi Kullanılsın';
+$wb['http_archive_show_join_txt'] = 'Katılma iletileri arşivde görüntülensin';
+$wb['http_archive_show_status_txt'] = 'Durum değişiklikleri arşivde görüntülensin';
+$wb['use_status_host_txt'] = 'XML Durum Sunucusu Kullanılsın';
+$wb['cant_change_domainname_txt'] = 'Var olan XMPP etki alanının adı değiştirilemez.';
+$wb['about_registration_url_txt'] = 'Kayıt formunuzun bağlantısı.';
+$wb['about_registration_message_txt'] = 'Hesap kaydı işlemi ile ilgili açıklama.';
+$wb['no_corresponding_maildomain_txt'] = 'Kullanıcı yönetimi için uygun e-posta etki alanı bulunamadı. Lütfen önce bir e-posta etki alanı ekleyin.';
+$wb['ssl_state_txt'] = 'Ä°l';
+$wb['ssl_locality_txt'] = 'Konum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
+$wb['ssl_organisation_unit_txt'] = 'KuruluÅŸ Birimi';
+$wb['ssl_country_txt'] = 'Ãœlke';
+$wb['ssl_key_txt'] = 'SSL Anahtarı';
+$wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
+$wb['ssl_cert_txt'] = 'SSL Sertifikası';
+$wb['ssl_bundle_txt'] = 'SSL Bağlantısı';
+$wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
+$wb['ssl_email_txt'] = 'E-posta Adresi';
+$wb['ssl_txt'] = 'SSL Süresi';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
+$wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL kuruluÅŸ birimi boÅŸ olamaz.';
+$wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
+$wb['error_ssl_cert_empty'] = 'SSL sertifika alanı boş olamaz.';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
+$wb['none_txt'] = 'Yok';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
+$wb['ssl_error_isemail'] = 'Lütfen SSL sertifikasının oluşturulması için geçerli bir e-posta adresi yazın';
+$wb['limit_xmppdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla XMPP etki alanı sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_xmpp_domain_admin_list.lng b/interface/web/mail/lib/lang/tr_xmpp_domain_admin_list.lng
index af643eab5a..0a0c7abe60 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_domain_admin_list.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_domain_admin_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'XMPP Domain';
-$wb['server_id_txt'] = 'Server';
-$wb['domain_txt'] = 'Domain';
-$wb['add_new_record_txt'] = 'Add new Domain';
-$wb['active_txt'] = 'Active';
-$wb['sys_groupid_txt'] = 'Client';
+$wb['list_head_txt'] = 'XMPP Etki Alanı';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
+$wb['active_txt'] = 'Etkin';
+$wb['sys_groupid_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_xmpp_domain_list.lng b/interface/web/mail/lib/lang/tr_xmpp_domain_list.lng
index ebfebab7d5..50a7d55cd2 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_domain_list.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_domain_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'XMPP Domain';
-$wb['server_id_txt'] = 'Server';
-$wb['domain_txt'] = 'Domain';
-$wb['add_new_record_txt'] = 'Add new Domain';
-$wb['active_txt'] = 'Active';
+$wb['list_head_txt'] = 'XMPP Etki Alanı';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_xmpp_user.lng b/interface/web/mail/lib/lang/tr_xmpp_user.lng
index 6ab739d98b..c83f1ecef0 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_user.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_user.lng
@@ -1,15 +1,15 @@
 <?php
-$wb['list_head_txt'] = 'XMPP User Accounts';
-$wb['jid_txt'] = 'Jabber ID';
-$wb['active_txt'] = 'Active';
-$wb['cryptpwd_txt'] = 'Password';
-$wb['password_strength_txt'] = 'Password strength';
-$wb['error_no_pwd'] = 'Password is empty.';
-$wb['password_txt'] = 'Password';
-$wb['generate_password_txt'] = 'Generate Password';
-$wb['repeat_password_txt'] = 'Repeat Password';
-$wb['password_mismatch_txt'] = 'The passwords do not match.';
-$wb['password_match_txt'] = 'The passwords do match.';
-$wb['no_domain_perm'] = 'You have no permission for this domain.';
-$wb['limit_xmpp_user_txt'] = 'The max. number of xmpp accounts for your account is reached.';
+$wb['list_head_txt'] = 'XMPP Kullanıcı Adı';
+$wb['jid_txt'] = 'Jabber Kodu';
+$wb['active_txt'] = 'Etkin';
+$wb['cryptpwd_txt'] = 'Parola';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
+$wb['error_no_pwd'] = 'Paroal boÅŸ olamaz.';
+$wb['password_txt'] = 'Paroal';
+$wb['generate_password_txt'] = 'Parola Ãœret';
+$wb['repeat_password_txt'] = 'Parola Onayı';
+$wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
+$wb['password_match_txt'] = 'Parolalar aynı.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
+$wb['limit_xmpp_user_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla XMPP hesabı sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_xmpp_user_list.lng b/interface/web/mail/lib/lang/tr_xmpp_user_list.lng
index f2651cb62b..a6af23d15b 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_user_list.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_user_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'XMPP User Accounts';
-$wb['jid_txt'] = 'Jabber ID';
-$wb['is_domain_admin_txt'] = 'Domain admin';
-$wb['is_muc_admin_txt'] = 'MUC admin';
-$wb['add_new_record_txt'] = 'Add new user';
-$wb['active_txt'] = 'Active';
+$wb['list_head_txt'] = 'XMPP Kullanıcı Hesapları';
+$wb['jid_txt'] = 'Jabber Kodu';
+$wb['is_domain_admin_txt'] = 'Etki Alanı Yöneticisi';
+$wb['is_muc_admin_txt'] = 'MUC Yöneticisi';
+$wb['add_new_record_txt'] = 'Kullanıcı Ekle';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br.lng b/interface/web/mailuser/lib/lang/br.lng
index 55eca578a4..64f9346808 100644
--- a/interface/web/mailuser/lib/lang/br.lng
+++ b/interface/web/mailuser/lib/lang/br.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['Email Account'] = 'Contas de e-mail';
-$wb['Overview'] = 'Visão geral';
-$wb['Autoresponder'] = 'Resposta automática';
-$wb['Send copy'] = 'Enviar cópia para';
+$wb['Email Account'] = 'Conta de e-mail';
+$wb['Overview'] = 'Visão Geral';
+$wb['Password'] = 'Senha';
+$wb['Autoresponder'] = 'Auto-resposta';
+$wb['Send copy'] = 'Enviar cópia';
 $wb['Spamfilter'] = 'Filtro anti-spam';
 $wb['Email Filters'] = 'Filtros de e-mail';
-$wb['Password'] = 'Senha';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_index.lng b/interface/web/mailuser/lib/lang/br_index.lng
index eb7d7e1e7e..9be2fbdb2a 100644
--- a/interface/web/mailuser/lib/lang/br_index.lng
+++ b/interface/web/mailuser/lib/lang/br_index.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['page_head_txt'] = 'Configurações de contas de e-mail';
-$wb['page_desc_txt'] = 'Aqui você edita as configurações para as contas de e-mail.';
+$wb['page_head_txt'] = 'Configurações de conta de e-mail';
+$wb['page_desc_txt'] = 'Aqui você pode editar as configurações da conta de e-mail.';
 $wb['email_txt'] = 'Endereço de e-mail';
 $wb['login_txt'] = 'Acesso';
 $wb['server_address_txt'] = 'Endereço do servidor de e-mails';
-$wb['cc_txt'] = 'Enviar cópia para (CC)';
-$wb['quota_txt'] = 'Tamanho da caixa postal';
-$wb['unlimited_txt'] = 'ilimitada';
+$wb['cc_txt'] = 'Enviar cópia oculta (BCC) para';
+$wb['quota_txt'] = 'Cota da conta de e-mail';
+$wb['unlimited_txt'] = 'Ilimitado';
 $wb['mb_txt'] = 'MB';
 $wb['none_txt'] = 'Nenhum';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
index 6e00682a44..9de387d798 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['mailbox_autoresponder_txt'] = 'Autoresposta';
-$wb['autoresponder_subject'] = 'Resposta de ausência temporária';
+$wb['mailbox_autoresponder_txt'] = 'Auto-resposta';
+$wb['autoresponder_subject'] = 'Resposta automática';
 $wb['autoresponder_text_txt'] = 'Texto';
 $wb['autoresponder_txt'] = 'Ativo';
-$wb['autoresponder_start_date_txt'] = 'Início';
-$wb['autoresponder_start_date_isfuture'] = 'A data de início não pode ser menor que a data atual.';
-$wb['autoresponder_end_date_txt'] = 'Término';
-$wb['autoresponder_end_date_isgreater'] = 'A data de término não pode ser menor que a data de início.';
-$wb['autoresponder_active'] = 'Habilitar autoresposta';
+$wb['autoresponder_start_date_txt'] = 'Iniciar em';
+$wb['autoresponder_start_date_isfuture'] = 'O campo "Iniciar em" não pode ser menor que data atual.';
+$wb['autoresponder_end_date_txt'] = 'Terminar em';
+$wb['autoresponder_end_date_isgreater'] = 'O campo "Terminar em" não pode ser menor que "Iniciar em".';
+$wb['autoresponder_active'] = 'Habilitar auto-resposta';
 $wb['now_txt'] = 'Agora';
 $wb['autoresponder_subject_txt'] = 'Assunto';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_cc.lng b/interface/web/mailuser/lib/lang/br_mail_user_cc.lng
index f6d96f02a3..7a1e9a3d95 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_cc.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_cc.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['mailbox_cc_txt'] = 'Enviar cópia para o e-mail';
+$wb['mailbox_cc_txt'] = 'Enviar cópia para endereço de e-mail';
 $wb['cc_txt'] = 'Enviar cópia para';
-$wb['email_txt'] = 'e-mail';
-$wb['cc_error_isemail'] = 'Endereço de e-mail inválido em \'enviar cópia para\'.';
-$wb['email_is_cc_error'] = 'Endereço de e-mail e -enviar cópia para- não podem ser iguais.';
+$wb['email_txt'] = 'e-Mail';
+$wb['cc_error_isemail'] = 'Endereço de e-mail inválido no campo "Enviar cópia para".';
+$wb['email_is_cc_error'] = 'Endereço de e-mail e "Enviar cópia para" não podem ser os mesmos.';
 $wb['name_optional_txt'] = '(Opcional)';
-$wb['cc_note_txt'] = '(Separar múltiplos e-mails por vírgulas)';
+$wb['cc_note_txt'] = '(separar múltiplos endereços de e-mail com vírgulas)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_filter.lng b/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
index 37196f5d6c..acefe8be6e 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
@@ -5,17 +5,17 @@ $wb['target_txt'] = 'Pasta';
 $wb['active_txt'] = 'Ativo';
 $wb['rulename_error_empty'] = 'Nome está em branco.';
 $wb['searchterm_is_empty'] = 'Termo de pesquisa está em branco.';
-$wb['source_txt'] = 'Fonte';
-$wb['target_error_regex'] = 'O alvo pode conter os seguintes caracteres: \'a-z\', \'0-9\', \'-\', \'.\', \'_\', e \'{espaço}\'.';
-$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mails para esta conta foi alcançado.';
+$wb['source_txt'] = 'Origem';
+$wb['target_error_regex'] = 'O alvo pode conter apenas estes caracteres: "a-z", "0-9", "-", ".", "_", e "{espaço}".';
+$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
+$wb['mailbox_filter_txt'] = 'Filtro de conta de e-mail';
 $wb['subject_txt'] = 'Assunto';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Para';
-$wb['contains_txt'] = 'Contém';
-$wb['is_txt'] = 'É';
+$wb['contains_txt'] = 'Contêm';
+$wb['is_txt'] = 'é';
 $wb['begins_with_txt'] = 'Iniciando com';
-$wb['ends_with_txt'] = 'Terminando com';
+$wb['ends_with_txt'] = 'Finalizando com';
 $wb['move_to_txt'] = 'Mover para';
 $wb['delete_txt'] = 'Remover';
-$wb['mailbox_filter_txt'] = 'Filtro de e-mail';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/br_mail_user_filter_list.lng
index 5d0f241974..5e13e8c303 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_filter_list.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_filter_list.lng
@@ -4,5 +4,5 @@ $wb['rulename_txt'] = 'Nome';
 $wb['add_new_record_txt'] = 'Adicionar novo filtro';
 $wb['page_txt'] = 'Página';
 $wb['page_of_txt'] = 'de';
-$wb['delete_confirmation'] = 'Você tem certeza que gostaria de remover este filtro de e-mail?';
+$wb['delete_confirmation'] = 'Você tem certeza que deseja remover este filtro de e-mail?';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_password.lng b/interface/web/mailuser/lib/lang/br_mail_user_password.lng
index 154a44cd7b..7a64df748a 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_password.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_password.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['mailbox_password_txt'] = 'Senha da Caixa Postal';
+$wb['mailbox_password_txt'] = 'Senha da conta de e-mail';
 $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['email_txt'] = 'e-mail';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
+$wb['email_txt'] = 'e-Mail';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
 $wb['password_mismatch_txt'] = 'As senhas não coincidem.';
 $wb['password_match_txt'] = 'As senhas coincidem.';
-$wb['password_click_to_set_txt'] = 'Confirmar';
+$wb['password_click_to_set_txt'] = 'Clique para configurar';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
index a4973817a2..eb36922041 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['mailbox_spamfilter_txt'] = 'Filtros anti-spam';
 $wb['spamfilter_txt'] = 'Filtro anti-spam';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['no_policy'] = '-desabilitado-';
 $wb['policy_txt'] = 'Política';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr.lng b/interface/web/mailuser/lib/lang/tr.lng
index fa5a7e12ab..c9d03bfff6 100644
--- a/interface/web/mailuser/lib/lang/tr.lng
+++ b/interface/web/mailuser/lib/lang/tr.lng
@@ -4,6 +4,6 @@ $wb['Overview'] = 'Özet';
 $wb['Password'] = 'Parola';
 $wb['Autoresponder'] = 'Otomatik yanıtlayıcı';
 $wb['Send copy'] = 'Kopya gönder';
-$wb['Spamfilter'] = 'Önemsiz posta süzgeci';
+$wb['Spamfilter'] = 'Önemsiz ileti süzgeci';
 $wb['Email Filters'] = 'E-posta Süzgeçleri';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_index.lng b/interface/web/mailuser/lib/lang/tr_index.lng
index 4c0c553b79..47e12d6982 100644
--- a/interface/web/mailuser/lib/lang/tr_index.lng
+++ b/interface/web/mailuser/lib/lang/tr_index.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['page_head_txt'] = 'Posta Kutusu Ayarları';
+$wb['page_head_txt'] = 'E-posta Kutusu Ayarları';
 $wb['page_desc_txt'] = 'E-posta hesabı ayarları buradan yapılabilir.';
 $wb['email_txt'] = 'E-posta adresi';
 $wb['login_txt'] = 'Kullanıcı Adı';
-$wb['server_address_txt'] = 'Posta sunucusu adresi';
-$wb['cc_txt'] = 'Kopya adresi (CC)';
-$wb['quota_txt'] = 'Posta kutusu boyutu';
+$wb['server_address_txt'] = 'E-posta Sunucusu Adresi';
+$wb['cc_txt'] = 'Kopya Adresi (CC)';
+$wb['quota_txt'] = 'E-posta Kutusu Boyutu';
 $wb['unlimited_txt'] = 'Sınırsız';
 $wb['mb_txt'] = 'MB';
 $wb['none_txt'] = 'Yok';
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng b/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
index ac4938d768..57db197901 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
@@ -7,7 +7,7 @@ $wb['rulename_error_empty'] = 'Ad boÅŸ olamaz.';
 $wb['searchterm_is_empty'] = 'Arama ifadesi boÅŸ olamaz.';
 $wb['source_txt'] = 'Kaynak';
 $wb['target_error_regex'] = 'Hedef için yalnız şu karakterler kullanılabilir: a-z, 0-9, -, ., _, ve {boşluk}';
-$wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla önemsiz posta süzgeci sayısı sınırına ulaştınız.';
+$wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla önemsiz ileti süzgeci sayısı sınırına ulaştınız.';
 $wb['subject_txt'] = 'Konu';
 $wb['from_txt'] = 'Kimden';
 $wb['to_txt'] = 'Kime';
@@ -17,5 +17,5 @@ $wb['begins_with_txt'] = 'Åžununla baÅŸlayan';
 $wb['ends_with_txt'] = 'Åžununla biten';
 $wb['move_to_txt'] = 'Şuraya taşı';
 $wb['delete_txt'] = 'Sil';
-$wb['mailbox_filter_txt'] = 'Mailbox filter';
+$wb['mailbox_filter_txt'] = 'E-posta kutusu süzgeci';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/tr_mail_user_filter_list.lng
index 36bfe6a25c..3a14043e92 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_filter_list.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_filter_list.lng
@@ -4,5 +4,5 @@ $wb['rulename_txt'] = 'Ad';
 $wb['add_new_record_txt'] = 'Süzgeç Ekle';
 $wb['page_txt'] = 'Sayfa';
 $wb['page_of_txt'] = '/';
-$wb['delete_confirmation'] = 'Posta süzgecini silmek istediğinize emin misiniz?';
+$wb['delete_confirmation'] = 'E-posta süzgecini silmek istediğinize emin misiniz?';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_password.lng b/interface/web/mailuser/lib/lang/tr_mail_user_password.lng
index d06ad94bb0..c35319ced1 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_password.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_password.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['mailbox_password_txt'] = 'Posta kutusu parolası';
+$wb['mailbox_password_txt'] = 'E-posta kutusu parolası';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['email_txt'] = 'E-posta';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['password_click_to_set_txt'] = 'Click to set';
+$wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
index d63f274e49..3426385a2e 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['mailbox_spamfilter_txt'] = 'Önemsiz Posta Süzgeci';
-$wb['spamfilter_txt'] = 'Önemsiz posta süzgeci';
+$wb['mailbox_spamfilter_txt'] = 'Önemsiz İleti Süzgeci';
+$wb['spamfilter_txt'] = 'Önemsiz ileti süzgeci';
 $wb['email_txt'] = 'E-posta';
 $wb['no_policy'] = '- devre dışı -';
 $wb['policy_txt'] = 'Kural';
diff --git a/interface/web/monitor/lib/lang/br.lng b/interface/web/monitor/lib/lang/br.lng
index 72325cc5b3..172891cfd9 100644
--- a/interface/web/monitor/lib/lang/br.lng
+++ b/interface/web/monitor/lib/lang/br.lng
@@ -1,37 +1,39 @@
 <?php
-$wb['Server online since'] = 'Servidor online desde';
+$wb['Server online since'] = 'Servidor on-line desde';
 $wb['Users online'] = 'Usuários on-line';
 $wb['System load 1 minute'] = 'Carga do sistema - 1 min';
 $wb['System load 5 minutes'] = 'Carga do sistema - 5 min';
 $wb['System load 15 minutes'] = 'Carga do sistema - 15 min';
-$wb['Server Load'] = 'Carga do servidor';
-$wb['Disk usage'] = 'Uso do disco';
-$wb['Memory usage'] = 'Uso da memória';
-$wb['no_data_serverload_txt'] = 'Sem registros da carga do servidor disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_memusage_txt'] = 'Sem registro uso de memória disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_diskusage_txt'] = 'Sem registros sobre o uso dos discos disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_cpuinfo_txt'] = 'Sem registros sobre CPU disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_services_txt'] = 'Sem registro sobre os serviços disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_updates_txt'] = 'Sem atualização de dados disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_raid_txt'] = 'Sem registros sobre RAID disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_rkhunter_txt'] = 'Sem registros sobre o RKHUNTER disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_mailq_txt'] = 'Sem registro sobre a fila de e-mails disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_logdata_txt'] = 'Sem registros de log disponíveis no momento. Tente novamente mais tarde.';
-$wb['Monitoring'] = 'Monitoramento';
+$wb['Server Load'] = 'Carga do Sistema';
+$wb['Disk usage'] = 'Uso do Disco';
+$wb['Memory usage'] = 'Uso da Memória';
+$wb['no_data_serverload_txt'] = 'Nenhum dado sobre o servidor disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_memusage_txt'] = 'Nenhum dado sobre uso da memória disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_diskusage_txt'] = 'Nenhum dado sobre o uso do disco disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_database_size_txt'] = 'Nenhum dado sobre o uso do banco de dados disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_cpuinfo_txt'] = 'Nenhum dado sobre a CPU disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_services_txt'] = 'Nenhum dado sobre os serviços disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_updates_txt'] = 'Nenhum dado sobre atualizações disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_raid_txt'] = 'Nenhum dados sobre o RAID disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_rkhunter_txt'] = 'Nenhum dado sobre o RKHunter disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_mailq_txt'] = 'Nenhum dados sobre as filas de e-mail disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_logdata_txt'] = 'Nenhum dado de log disponível no momento. Por favor, verifique mais tarde.';
+$wb['Monitoring'] = 'Monitorando';
 $wb['Server to Monitor'] = 'Servidor a monitorar';
-$wb['Logfiles'] = 'Arquivos de log';
-$wb['Status of services'] = 'Estado dos serviços';
-$wb['No Refresh'] = 'Não atualize';
+$wb['Logfiles'] = 'Log';
+$wb['Status of services'] = 'Estado dos Serviços';
+$wb['No Refresh'] = 'Não atualizar';
 $wb['minutes'] = 'minutos';
-$wb['Show Overview'] = 'Visão geral';
-$wb['System State (All Servers)'] = 'Estado do Sistema (todos os servidores)';
-$wb['Hardware-Information'] = 'Informação de hardware';
+$wb['Show Overview'] = 'Exibir visão geral';
+$wb['System State (All Servers)'] = 'Estado do Sistema (Todos os servidores)';
+$wb['Hardware-Information'] = 'Informações do Hardware';
 $wb['Show CPU info'] = 'Exibir informações da CPU';
 $wb['Server State'] = 'Estado do Servidor';
 $wb['Show Update State'] = 'Exibir estado atual';
 $wb['Show RAID state'] = 'Exibir estado do RAID';
 $wb['Show Server load'] = 'Exibir carga do servidor';
 $wb['Show Disk usage'] = 'Exibir uso do disco';
+$wb['Show MySQL Database size'] = 'Exibir tamanho do banco de dados mysql';
 $wb['Show Memory usage'] = 'Exibir uso da memória';
 $wb['Show Services'] = 'Exibir serviços';
 $wb['Show Mail-Queue'] = 'Exibir fila de e-mails';
@@ -42,124 +44,123 @@ $wb['Show System-Log'] = 'Exibir log do sistema';
 $wb['Show ISPC Cron-Log'] = 'Exibir log do cron';
 $wb['Show Freshclam-Log'] = 'Exibir log do freshclam';
 $wb['Show Clamav-Log'] = 'Exibir log do clamav';
-$wb['Show ISPConfig-Log'] = 'Exibir log do ispconfig';
+$wb['Show ISPConfig-Log'] = 'Exibir log do ISPConfig';
 $wb['Show RKHunter-Log'] = 'Exibir log do rkhunter';
-$wb['Show Jobqueue'] = 'Exibir fila de trabalho';
+$wb['Show Jobqueue'] = 'Exibir fila de tarefas';
+$wb['Show Data Log History'] = 'Exibir histórico do log';
+$wb['Show fail2ban-Log'] = 'Exibir log do fail2ban';
+$wb['Show MongoDB-Log'] = 'Exibir log do mongodb';
+$wb['Show IPTables'] = 'Exibir regras de firewall';
+$wb['Show OpenVz VE BeanCounter'] = 'Exibir beancounter do openvz';
 $wb['monitor_general_serverstate_txt'] = 'Estado do servidor';
 $wb['monitor_general_systemstate_txt'] = 'Estado do sistema';
-$wb['monitor_diskusage_filesystem_txt'] = 'Sistema de arquivos';
+$wb['monitor_diskusage_filesystem_txt'] = 'Arquivos do sistema';
 $wb['monitor_diskusage_type_txt'] = 'Tipo';
 $wb['monitor_diskusage_size_txt'] = 'Tamanho';
-$wb['monitor_diskusage_used_txt'] = 'Utilizado';
+$wb['monitor_diskusage_used_txt'] = 'Uso';
 $wb['monitor_diskusage_available_txt'] = 'Disponível';
-$wb['monitor_diskusage_usage_txt'] = 'Uso %';
+$wb['monitor_diskusage_usage_txt'] = 'Percentual Utilizado';
 $wb['monitor_diskusage_mounted_txt'] = 'Montado em';
-$wb['monitor_logs_mail_txt'] = 'Log de e-mail';
-$wb['monitor_logs_mailwarn_txt'] = 'Alertas de e-mails';
-$wb['monitor_logs_mailerr_txt'] = 'Erros de e-mails';
-$wb['monitor_logs_messages_txt'] = 'Log do sistema';
-$wb['monitor_logs_ispccron_txt'] = 'Log do cron';
-$wb['monitor_logs_freshclam_txt'] = 'Logo do freshclam';
-$wb['monitor_logs_clamav_txt'] = 'Log do clamav ';
-$wb['monitor_logs_ispc_txt'] = 'Log do ispconfig';
-$wb['monitor_norkhunter_txt'] = 'RKHunter não está instalado, então não existem logs a exibir';
+$wb['monitor_database_name_txt'] = 'Banco de dados';
+$wb['monitor_database_size_txt'] = 'Tamanho';
+$wb['monitor_database_client_txt'] = 'Cliente';
+$wb['monitor_database_domain_txt'] = 'Domínio';
+$wb['monitor_logs_mail_txt'] = 'Log - e-Mails';
+$wb['monitor_logs_mailwarn_txt'] = 'Log - Alertas de e-mail';
+$wb['monitor_logs_mailerr_txt'] = 'Log - Erros de e-mail';
+$wb['monitor_logs_messages_txt'] = 'Log - Mensagens do sistema';
+$wb['monitor_logs_ispccron_txt'] = 'Log - Tarefas no cron';
+$wb['monitor_logs_freshclam_txt'] = 'Log - freshclam';
+$wb['monitor_logs_clamav_txt'] = 'Log - clamav';
+$wb['monitor_logs_ispc_txt'] = 'Log - ISPConfig';
+$wb['monitor_nosupportedraid1_txt'] = 'No momento possuímos suporte para \'mdadm\'ou \'mpt-status\' para monitoramento do RAID.<br> Não encontramos nenhum dos dois neste servidor.<br><br> Isto significa que não podemos oferecer suporte ao seu RAID ainda.';
+$wb['monitor_norkhunter_txt'] = 'O RKHunter não está instalado, desta forma, não existe log';
 $wb['monitor_serverstate_server_txt'] = 'Servidor';
 $wb['monitor_serverstate_kernel_txt'] = 'Kernel';
 $wb['monitor_serverstate_state_txt'] = 'Estado';
-$wb['monitor_serverstate_unknown_txt'] = 'desconhecido(s)';
-$wb['monitor_serverstate_info_txt'] = 'informação(es)';
-$wb['monitor_serverstate_warning_txt'] = 'aviso(s)';
-$wb['monitor_serverstate_critical_txt'] = 'crítico(s)';
-$wb['monitor_serverstate_error_txt'] = 'erro(s)';
+$wb['monitor_serverstate_unknown_txt'] = 'desconhecido';
+$wb['monitor_serverstate_info_txt'] = 'info';
+$wb['monitor_serverstate_warning_txt'] = 'alerta';
+$wb['monitor_serverstate_critical_txt'] = 'crítico';
+$wb['monitor_serverstate_error_txt'] = 'erro';
 $wb['monitor_serverstate_moreinfo_txt'] = 'Mais informações...';
 $wb['monitor_serverstate_more_txt'] = 'Mais...';
-$wb['monitor_serverstate_fclamok_txt'] = 'Definições de anti-vírus OK';
-$wb['monitor_serverstate_fclamoutdated_txt'] = 'Definições de anti-vírus DESATUALIZADAS!';
+$wb['monitor_serverstate_fclamok_txt'] = 'A proteção anti-vírus está ok';
+$wb['monitor_serverstate_fclamoutdated_txt'] = 'A proteção anti-vírus está desatualizada!';
 $wb['monitor_serverstate_fclamunknown_txt'] = 'Freshclam: ???!';
-$wb['monitor_serverstate_hdok_txt'] = 'Disco OK';
-$wb['monitor_serverstate_hdgoingfull_txt'] = 'Disco cheio';
-$wb['monitor_serverstate_hdnearlyfull_txt'] = 'Disco com pouco espaço';
-$wb['monitor_serverstate_hdveryfull_txt'] = 'Disco com espaço insuficiente';
-$wb['monitor_serverstate_hdfull_txt'] = 'Disco sem espaço';
-$wb['monitor_serverstate_hdunknown_txt'] = 'Disco rígido: ???';
+$wb['monitor_serverstate_hdok_txt'] = 'O uso do disco está ok';
+$wb['monitor_serverstate_hdgoingfull_txt'] = 'O uso do disco está moderado';
+$wb['monitor_serverstate_hdnearlyfull_txt'] = 'O uso do disco está próximo do limite';
+$wb['monitor_serverstate_hdveryfull_txt'] = 'O uso do disco está crítico';
+$wb['monitor_serverstate_hdfull_txt'] = 'Não existe mais espaço no disco para uso';
+$wb['monitor_serverstate_hdunknown_txt'] = 'Disco(HDD): ???';
 $wb['monitor_serverstate_listok_txt'] = 'ok';
-$wb['monitor_serverstate_listinfo_txt'] = 'informação';
-$wb['monitor_serverstate_listwarning_txt'] = 'aviso';
+$wb['monitor_serverstate_listinfo_txt'] = 'info';
+$wb['monitor_serverstate_listwarning_txt'] = 'alerta';
 $wb['monitor_serverstate_listcritical_txt'] = 'crítico';
 $wb['monitor_serverstate_listerror_txt'] = 'erro';
 $wb['monitor_serverstate_listunknown_txt'] = 'desconhecido';
-$wb['monitor_serverstate_loadok_txt'] = 'Carga do servidor OK';
-$wb['monitor_serverstate_loadheavy_txt'] = 'Carga do servidor: alta';
-$wb['monitor_serverstate_loadhigh_txt'] = 'Carga do servidor: média';
-$wb['monitor_serverstate_loaghigher_txt'] = 'Carga do servidor: excessiva';
-$wb['monitor_serverstate_loadhighest_txt'] = 'Carga do servidor: extrema';
-$wb['monitor_serverstate_loadunknown_txt'] = 'Carga do servidor: ???';
-$wb['monitor_serverstate_mailqok_txt'] = 'Fila de e-mails OK';
-$wb['monitor_serverstate_mailqheavy_txt'] = 'Fila de e-mails: alta';
-$wb['monitor_serverstate_mailqhigh_txt'] = 'Fila de e-mails: média';
-$wb['monitor_serverstate_mailqhigher_txt'] = 'Fila de e-mails: excessiva';
-$wb['monitor_serverstate_mailqhighest_txt'] = 'Fila de e-mails: extrema';
+$wb['monitor_serverstate_loadok_txt'] = 'A carga do servidor está ok';
+$wb['monitor_serverstate_loadheavy_txt'] = 'O servidor está sob carga média';
+$wb['monitor_serverstate_loadhigh_txt'] = 'O servidor está sob carga alta';
+$wb['monitor_serverstate_loaghigher_txt'] = 'O servidor está sob carga muito alta';
+$wb['monitor_serverstate_loadhighest_txt'] = 'O servidor está sob carga crítica';
+$wb['monitor_serverstate_loadunknown_txt'] = 'Carga do Servidor: ???';
+$wb['monitor_serverstate_mailqok_txt'] = 'A fila de e-mails está ok';
+$wb['monitor_serverstate_mailqheavy_txt'] = 'A fila de e-mails está moderada';
+$wb['monitor_serverstate_mailqhigh_txt'] = 'A fila de e-mails está grande';
+$wb['monitor_serverstate_mailqhigher_txt'] = 'A fila de está muito grande';
+$wb['monitor_serverstate_mailqhighest_txt'] = 'A fila de e-mails está crítica';
 $wb['monitor_serverstate_mailqunknown_txt'] = 'Fila de e-mails: ???';
-$wb['monitor_serverstate_raidok_txt'] = 'RAID OK';
-$wb['monitor_serverstate_raidresync_txt'] = 'RAID em modo RESYNC';
-$wb['monitor_serverstate_raidfault_txt'] = 'RAID possui um disco com falhas. Troque-o o mais rápido possível!';
-$wb['monitor_serverstate_raiderror_txt'] = 'RAID parado.';
-$wb['monitor_serverstate_raidunknown_txt'] = 'RAID: ???';
-$wb['monitor_serverstate_servicesonline_txt'] = 'Todos os serviços necessários estão on-line';
-$wb['monitor_serverstate_servicesoffline_txt'] = 'Um ou mais serviços necessários estão off-line';
+$wb['monitor_serverstate_raidok_txt'] = 'O RAID está ok';
+$wb['monitor_serverstate_raidresync_txt'] = 'O RAID está em modo RESYNC';
+$wb['monitor_serverstate_raidfault_txt'] = 'O RAID possui uma disco com falha. Substitua o mais rápido possível!';
+$wb['monitor_serverstate_raiderror_txt'] = 'O RAID não está funcionando';
+$wb['monitor_serverstate_raidunknown_txt'] = 'Estado do RAID: ???';
+$wb['monitor_serverstate_servicesonline_txt'] = 'Todos os serviços estão on-line';
+$wb['monitor_serverstate_servicesoffline_txt'] = 'Um ou mais serviços estão off-line';
 $wb['monitor_serverstate_servicesunknown_txt'] = 'Serviços: ???';
-$wb['monitor_serverstate_syslogok_txt'] = 'O log do sistema está OK';
-$wb['monitor_serverstate_syslogwarning_txt'] = 'Existem alguns alertas no log do sistema';
-$wb['monitor_serverstate_syslogerror_txt'] = 'Existem erros no log do sistema';
-$wb['monitor_serverstate_syslogunknown_txt'] = 'syslog:???';
-$wb['monitor_serverstate_updatesok_txt'] = 'Sistema atualizado.';
-$wb['monitor_serverstate_updatesneeded_txt'] = 'Um ou mais componentes necessitam de atualização';
-$wb['monitor_serverstate_updatesunknown_txt'] = 'Estado do sistema:???';
+$wb['monitor_serverstate_syslogok_txt'] = 'O log do sistema está ok.';
+$wb['monitor_serverstate_syslogwarning_txt'] = 'Existem algumas mensagens de alerta no log do sistema';
+$wb['monitor_serverstate_syslogerror_txt'] = 'Existem algumas mensagens de erros no log do sistema';
+$wb['monitor_serverstate_syslogunknown_txt'] = 'Log do sistema: ???';
+$wb['monitor_serverstate_updatesok_txt'] = 'O sistema está atualizado.';
+$wb['monitor_serverstate_updatesneeded_txt'] = 'Um ou mais componentes do sistema necessitam atualização';
+$wb['monitor_serverstate_updatesunknown_txt'] = 'Atualizar Sistema: ???';
+$wb['monitor_serverstate_beancounterok_txt'] = 'O beancounter está ok';
+$wb['monitor_serverstate_beancounterinfo_txt'] = 'Existe uma falha de visualização no beancounter';
+$wb['monitor_serverstate_beancounterwarning_txt'] = 'Existe alguma falha no beancounter';
+$wb['monitor_serverstate_beancountercritical_txt'] = 'Existem várias falhas no beancounter';
+$wb['monitor_serverstate_beancountererror_txt'] = 'Existem muitas falhas no beancounter';
 $wb['monitor_services_online_txt'] = 'On-line';
 $wb['monitor_services_offline_txt'] = 'Off-line';
-$wb['monitor_services_web_txt'] = 'Servidor de páginas:';
-$wb['monitor_services_ftp_txt'] = 'Servidor ftp:';
-$wb['monitor_services_smtp_txt'] = 'Servidor smtp:';
-$wb['monitor_services_pop_txt'] = 'Servidor pop:';
-$wb['monitor_services_imap_txt'] = 'Servidor imap:';
-$wb['monitor_services_mydns_txt'] = 'Servidor dns:';
-$wb['monitor_services_mysql_txt'] = 'Servidor mysql:';
-$wb['monitor_settings_datafromdate_txt'] = 'Data de: ';
-$wb['monitor_settings_datetimeformat_txt'] = 'd/m/Y H:i';
-$wb['monitor_settings_refreshsq_txt'] = 'Atualizar sequência:';
+$wb['monitor_services_web_txt'] = 'Servidor WEB:';
+$wb['monitor_services_ftp_txt'] = 'Servidor FTP:';
+$wb['monitor_services_smtp_txt'] = 'Servidor SMTP:';
+$wb['monitor_services_pop_txt'] = 'Servidor POP3:';
+$wb['monitor_services_imap_txt'] = 'Servidor IMAP:';
+$wb['monitor_services_mydns_txt'] = 'Servidor DNS:';
+$wb['monitor_services_mongodb_txt'] = 'Servidor MONGODB:';
+$wb['monitor_services_mysql_txt'] = 'Servidor MYSQL:';
+$wb['monitor_settings_datafromdate_txt'] = 'Dados de: ';
+$wb['monitor_settings_datetimeformat_txt'] = 'd-m-Y H:i';
+$wb['monitor_settings_refreshsq_txt'] = 'Sequência de atualização:';
 $wb['monitor_settings_server_txt'] = 'Servidor';
-$wb['monitor_title_cpuinfo_txt'] = 'Informação da cpu';
-$wb['monitor_title_updatestate_txt'] = 'Atualizar estado';
+$wb['monitor_title_cpuinfo_txt'] = 'Informações de CPU';
+$wb['monitor_title_updatestate_txt'] = 'Atualizar Estado';
 $wb['monitor_title_mailq_txt'] = 'Fila de e-mails';
 $wb['monitor_title_raidstate_txt'] = 'Estado do RAID';
-$wb['monitor_title_rkhunterlog_txt'] = 'Log do RKHunter';
-$wb['monitor_updates_nosupport_txt'] = 'Sua distribuição não suporta este tipo de monitoramento';
+$wb['monitor_title_rkhunterlog_txt'] = 'Log do rkhunter';
 $wb['monitor_title_fail2ban_txt'] = 'Log do fail2ban';
-$wb['monitor_nosupportedraid1_txt'] = 'Até o presente momento, o suporte a mdadm ou mpt-status para monitoramento do RAID não foi encontrado.<br><br>Provavelmente seu servidor não possui recursos de RAID a serem monitorados.';
-$wb['monitor_serverstate_beancounterok_txt'] = 'Beancounter OK';
-$wb['monitor_serverstate_beancounterinfo_txt'] = 'Existem poucas falhas no beancounter';
-$wb['monitor_serverstate_beancounterwarning_txt'] = 'Existem algumas falhas no beancounter';
-$wb['monitor_serverstate_beancountercritical_txt'] = 'Existem falhas críticas no beancounter';
-$wb['monitor_serverstate_beancountererror_txt'] = 'Existem diversas falhas no beancounter';
-$wb['monitor_title_beancounter_txt'] = 'Beancounter openvz ve';
-$wb['monitor_beancounter_nosupport_txt'] = 'Este servidor não é um um contêiner openvz e não contém informações de beancounter.';
-$wb['monitor_title_iptables_txt'] = 'Regras do firewall';
-$wb['Show fail2ban-Log'] = 'Exibir log do fail2ban';
-$wb['Show IPTables'] = 'Exibir regras do firewall';
-$wb['Show OpenVz VE BeanCounter'] = 'Exibir beancounter do openvz';
+$wb['monitor_title_mongodb_txt'] = 'Log do mongodb';
+$wb['monitor_title_iptables_txt'] = 'Regras de Firewall';
+$wb['monitor_title_beancounter_txt'] = 'Beancounter openvz';
+$wb['monitor_updates_nosupport_txt'] = 'Sua distribuição não é suportada por este monitoramento';
+$wb['monitor_beancounter_nosupport_txt'] = 'Este servidor não é um openvz e não possui nenhuma informação do beancounter';
 $wb['Show Monit'] = 'Exibir Monit';
-$wb['no_monit_url_defined_txt'] = 'Nenhuma url do Monit configurada.';
+$wb['no_monit_url_defined_txt'] = 'Nenhuma URL do Monit definida.';
 $wb['no_permissions_to_view_monit_txt'] = 'Você não tem permissão para acessar o Monit.';
 $wb['Show Munin'] = 'Exibir Munin';
-$wb['no_munin_url_defined_txt'] = 'Nenhuma url do Muni configurada.';
+$wb['no_munin_url_defined_txt'] = 'Nenhuma URL do Munin definida.';
 $wb['no_permissions_to_view_munin_txt'] = 'Você não tem permissão para acessar o Munin.';
-$wb['no_data_database_size_txt'] = 'Nenhuma informação de uso do banco de dados disponível no momento. Por favor verifique novamente mais tarde.';
-$wb['monitor_database_name_txt'] = 'Banco de dados';
-$wb['monitor_database_size_txt'] = 'Tamanho';
-$wb['monitor_database_client_txt'] = 'Cliente';
-$wb['monitor_database_domain_txt'] = 'Domínio';
-$wb['Show MongoDB-Log'] = 'Exibir logs do MongoDB';
-$wb['monitor_services_mongodb_txt'] = 'Servidor MongoDB:';
-$wb['monitor_title_mongodb_txt'] = 'Logs do MongoDB';
-$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_datalog_list.lng b/interface/web/monitor/lib/lang/br_datalog_list.lng
index e6b2f554c3..8e044daeb7 100644
--- a/interface/web/monitor/lib/lang/br_datalog_list.lng
+++ b/interface/web/monitor/lib/lang/br_datalog_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Fila de trabalho';
+$wb['list_head_txt'] = 'Fila de tarefas';
 $wb['tstamp_txt'] = 'Data';
 $wb['server_id_txt'] = 'Servidor';
 $wb['dbtable_txt'] = 'Tabela do BD';
 $wb['action_txt'] = 'Ação';
-$wb['status_txt'] = 'Situação';
+$wb['status_txt'] = 'Estado';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_list.lng b/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
index f1ba8c67b8..0a02fda077 100644
--- a/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Datalog History';
-$wb['tstamp_txt'] = 'Date';
-$wb['server_id_txt'] = 'Server';
-$wb['dbtable_txt'] = 'DB Table';
-$wb['action_txt'] = 'Action';
-$wb['status_txt'] = 'Status';
+$wb['list_head_txt'] = 'Histórico do log';
+$wb['tstamp_txt'] = 'Data';
+$wb['server_id_txt'] = 'Servidor';
+$wb['dbtable_txt'] = 'Tabela do BD';
+$wb['action_txt'] = 'Ação';
+$wb['status_txt'] = 'Estado';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng
index 0e040a3e77..be544e6119 100644
--- a/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Data Log History Entry';
-$wb['success_txt'] = 'Undo successful';
-$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
-$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
-$wb['btn_cancel_txt'] = 'Back';
+$wb['list_head_txt'] = 'Histórico do log';
+$wb['success_txt'] = 'O comando "Desfazer ação" foi realizado com sucesso';
+$wb['error_txt'] = 'Erro durante desfazer ação: O registro não existe mais';
+$wb['error_undelete_txt'] = 'Erro durante a remoção: Registro com ID primário ainda existe.';
+$wb['btn_cancel_txt'] = 'Voltar';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_view.lng b/interface/web/monitor/lib/lang/br_dataloghistory_view.lng
index df9ddd286f..8354693280 100644
--- a/interface/web/monitor/lib/lang/br_dataloghistory_view.lng
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_view.lng
@@ -1,26 +1,26 @@
 <?php
-$wb['i'] = 'Insert';
-$wb['u'] = 'Update';
-$wb['d'] = 'Delete';
-$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['i'] = 'Inserir';
+$wb['u'] = 'Atualizar';
+$wb['d'] = 'Remover';
+$wb['list_head_txt'] = 'Histórico do log';
 $wb['id_txt'] = 'ID';
-$wb['timestamp_txt'] = 'Timestamp';
-$wb['table_txt'] = 'Table';
-$wb['action_txt'] = 'Action';
-$wb['session_id_txt'] = 'Session ID';
-$wb['fields_txt'] = 'Fields';
-$wb['fields_inserted_txt'] = 'Inserted Fields';
-$wb['fields_updated_txt'] = 'Updated Fields';
-$wb['fields_deleted_txt'] = 'Deleted Fields';
-$wb['no_changes_txt'] = 'No changes (re-sync)';
-$wb['is_diff_txt'] = 'The differences are highlighted';
-$wb['is_diff_inserts_txt'] = 'Insertions';
-$wb['is_diff_deletes_txt'] = 'Deletions';
-$wb['field_txt'] = 'Field';
-$wb['value_txt'] = 'Value';
-$wb['old_txt'] = 'Old';
-$wb['new_txt'] = 'New';
-$wb['btn_cancel_txt'] = 'Back';
-$wb['undo_txt'] = 'Undo action';
-$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+$wb['timestamp_txt'] = 'Data/Hora';
+$wb['table_txt'] = 'Tabela';
+$wb['action_txt'] = 'Ação';
+$wb['session_id_txt'] = 'ID da sessão';
+$wb['fields_txt'] = 'Campos';
+$wb['fields_inserted_txt'] = 'Campos cadastrados';
+$wb['fields_updated_txt'] = 'Atualizar campos';
+$wb['fields_deleted_txt'] = 'Remover campos';
+$wb['no_changes_txt'] = 'Nenhuma alteração (sincronizar)';
+$wb['is_diff_txt'] = 'As diferenças são destacadas';
+$wb['is_diff_inserts_txt'] = 'Inserções';
+$wb['is_diff_deletes_txt'] = 'Remoções';
+$wb['field_txt'] = 'Campo';
+$wb['value_txt'] = 'Valor';
+$wb['old_txt'] = 'Antigo';
+$wb['new_txt'] = 'Novo';
+$wb['btn_cancel_txt'] = 'Voltar';
+$wb['undo_txt'] = 'Desfazer ação';
+$wb['undo_confirmation_txt'] = 'Você realmente deseja desfazer esta ação?';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_syslog_list.lng b/interface/web/monitor/lib/lang/br_syslog_list.lng
index 23f3c6d5da..ca5a373564 100644
--- a/interface/web/monitor/lib/lang/br_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/br_syslog_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Log do Painel';
-$wb['tstamp_txt'] = 'Data';
+$wb['list_head_txt'] = 'Log do ISPConfig';
+$wb['tstamp_txt'] = 'Data/hora';
 $wb['server_id_txt'] = 'Servidor';
-$wb['loglevel_txt'] = 'Nível do Log';
+$wb['loglevel_txt'] = 'Nível';
 $wb['message_txt'] = 'Mensagem';
 ?>
diff --git a/interface/web/monitor/lib/lang/tr.lng b/interface/web/monitor/lib/lang/tr.lng
index 005b4d97e2..20a9e8e140 100644
--- a/interface/web/monitor/lib/lang/tr.lng
+++ b/interface/web/monitor/lib/lang/tr.lng
@@ -1,21 +1,22 @@
 <?php
 $wb['Server online since'] = 'Sunucu şu zamandan beri çevrimiçi';
 $wb['Users online'] = 'Çevrimiçi Kullanıcılar';
-$wb['System load 1 minute'] = '1 dakikalık sistem yükü';
-$wb['System load 5 minutes'] = '5 dakikalık sistem yükü';
-$wb['System load 15 minutes'] = '15 dakikalık sistem yükü';
+$wb['System load 1 minute'] = 'Son 1 dakika sistem yükü';
+$wb['System load 5 minutes'] = 'Son 5 dakika sistem yükü';
+$wb['System load 15 minutes'] = 'Son 15 dakika sistem yükü';
 $wb['Server Load'] = 'Sunucu Yükü';
 $wb['Disk usage'] = 'Disk Kullanımı';
 $wb['Memory usage'] = 'Bellek Kullanımı';
 $wb['no_data_serverload_txt'] = 'Henüz sunucu yükü hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_memusage_txt'] = 'Henüz bellek kullanımı hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_diskusage_txt'] = 'Henüz disk kullanımı hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
+$wb['no_data_database_size_txt'] = 'Henüz veritabanı kullanımı ile ilgili bir veri yok. Lütfen daha sonra yeniden deneyin.';
 $wb['no_data_cpuinfo_txt'] = 'Henüz işlemci hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_services_txt'] = 'Henüz hizmetler hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_updates_txt'] = 'Henüz güncellemeler hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_raid_txt'] = 'Henüz RAID hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_rkhunter_txt'] = 'Henüz RKHunter hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
-$wb['no_data_mailq_txt'] = 'Henüz posta kuyruğu hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
+$wb['no_data_mailq_txt'] = 'Henüz e-posta kuyruğu hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_logdata_txt'] = 'Henüz bir günlük verisi yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['Monitoring'] = 'Ä°zleme';
 $wb['Server to Monitor'] = 'Ä°zlenecek Sunucu';
@@ -34,10 +35,10 @@ $wb['Show Server load'] = 'Sistem Yükü';
 $wb['Show Disk usage'] = 'Disk Kullanımı';
 $wb['Show Memory usage'] = 'Bellek Kullanımı';
 $wb['Show Services'] = 'Hizmetler';
-$wb['Show Mail-Queue'] = 'Posta KuyruÄŸu';
-$wb['Show Mail-Log'] = 'Posta Günlüğü';
-$wb['Show Mail warn-Log'] = 'Posta Uyarı Günlüğü';
-$wb['Show Mail err-Log'] = 'Posta Hata Günlüğü';
+$wb['Show Mail-Queue'] = 'E-posta KuyruÄŸu';
+$wb['Show Mail-Log'] = 'E-posta Günlüğü';
+$wb['Show Mail warn-Log'] = 'E-posta Uyarı Günlüğü';
+$wb['Show Mail err-Log'] = 'E-posta Hata Günlüğü';
 $wb['Show System-Log'] = 'Sistem Günlüğü';
 $wb['Show ISPC Cron-Log'] = 'Zamanlı Görev Günlüğü';
 $wb['Show Freshclam-Log'] = 'Freshclam Günlüğü';
@@ -46,27 +47,32 @@ $wb['Show ISPConfig-Log'] = 'ISPConfig Günlüğü';
 $wb['Show RKHunter-Log'] = 'RKHunter Günlüğü';
 $wb['Show Jobqueue'] = 'Ä°ÅŸ KuyruÄŸu';
 $wb['Show fail2ban-Log'] = 'Fail2ban Günlüğü';
-$wb['Show IPTables'] = 'IPTabloları';
+$wb['Show MongoDB-Log'] = 'MongoDB Günlüğünü Görüntüle';
+$wb['Show IPTables'] = 'IPTables Günlüğü';
 $wb['Show OpenVz VE BeanCounter'] = 'OpenVz VE BeanCounter';
 $wb['monitor_general_serverstate_txt'] = 'Sunucu Durumu';
 $wb['monitor_general_systemstate_txt'] = 'Sistem Durumu';
 $wb['monitor_diskusage_filesystem_txt'] = 'Dosya Sistemi';
-$wb['monitor_diskusage_type_txt'] = 'Tip';
+$wb['monitor_diskusage_type_txt'] = 'Tür';
 $wb['monitor_diskusage_size_txt'] = 'Boyut';
 $wb['monitor_diskusage_used_txt'] = 'Kullanılan';
 $wb['monitor_diskusage_available_txt'] = 'Kullanılabilir';
 $wb['monitor_diskusage_usage_txt'] = 'Kullanım%';
 $wb['monitor_diskusage_mounted_txt'] = 'Bağlantı';
-$wb['monitor_logs_mail_txt'] = 'Posta Günlüğü';
-$wb['monitor_logs_mailwarn_txt'] = 'Posta Uyarı Günlüğü';
-$wb['monitor_logs_mailerr_txt'] = 'Posta Hata Günlüğü';
+$wb['monitor_database_name_txt'] = 'Veritabanı';
+$wb['monitor_database_size_txt'] = 'Boyut';
+$wb['monitor_database_client_txt'] = 'Ä°stemci';
+$wb['monitor_database_domain_txt'] = 'Etki Alanı';
+$wb['monitor_logs_mail_txt'] = 'E-posta Günlüğü';
+$wb['monitor_logs_mailwarn_txt'] = 'E-posta Uyarı Günlüğü';
+$wb['monitor_logs_mailerr_txt'] = 'E-posta Hata Günlüğü';
 $wb['monitor_logs_messages_txt'] = 'Sistem İletileri Günlüğü';
 $wb['monitor_logs_ispccron_txt'] = 'ISPConfig Zamanlı Görev Günlüğü';
 $wb['monitor_logs_freshclam_txt'] = 'Freshclam GÜnlüğü';
 $wb['monitor_logs_clamav_txt'] = 'Clamav Günlüğü';
 $wb['monitor_logs_ispc_txt'] = 'ISPConfig Günlüğü';
-$wb['monitor_nosupportedraid1_txt'] = 'Şimdilik RAID durumunu izlemek için mdadm ya da mpt-status destekleniyor.<br>Bunlardan biri sunucunuzda bulunamadı.<br><br>Bu nedenle RAID sürücünüz henüz desteklenemiyor.';
-$wb['monitor_norkhunter_txt'] = 'RKHunter yüklü olmadığından herhangi bir günlük verisi yok';
+$wb['monitor_nosupportedraid1_txt'] = 'Şimdilik RAID durumunu izlemek için  ya da  destekleniyor.<br>Bunlardan biri sunucunuzda bulunamadı.<br><br>Bu nedenle RAID sürücünüz henüz desteklenemiyor.';
+$wb['monitor_norkhunter_txt'] = 'RKHunter kurulu olmadığından herhangi bir günlük verisi yok';
 $wb['monitor_serverstate_server_txt'] = 'Sunucu';
 $wb['monitor_serverstate_kernel_txt'] = 'Kernel';
 $wb['monitor_serverstate_state_txt'] = 'Durum';
@@ -75,7 +81,7 @@ $wb['monitor_serverstate_info_txt'] = 'bilgi';
 $wb['monitor_serverstate_warning_txt'] = 'uyarı';
 $wb['monitor_serverstate_critical_txt'] = 'kritik';
 $wb['monitor_serverstate_error_txt'] = 'hata';
-$wb['monitor_serverstate_moreinfo_txt'] = 'Ayrıntılı bilgi...';
+$wb['monitor_serverstate_moreinfo_txt'] = 'Ayrıntılı bilgiler...';
 $wb['monitor_serverstate_more_txt'] = 'Ayrıntılar...';
 $wb['monitor_serverstate_fclamok_txt'] = 'Virüs koruması sorunsuz';
 $wb['monitor_serverstate_fclamoutdated_txt'] = 'Virüs koruması GÜNCEL DEĞİL!';
@@ -93,17 +99,17 @@ $wb['monitor_serverstate_listcritical_txt'] = 'kritik';
 $wb['monitor_serverstate_listerror_txt'] = 'hata';
 $wb['monitor_serverstate_listunknown_txt'] = 'bilinmiyor';
 $wb['monitor_serverstate_loadok_txt'] = 'Sunucu yükü: Sorunsuz';
-$wb['monitor_serverstate_loadheavy_txt'] = 'Sunucu yükü: Ağır';
+$wb['monitor_serverstate_loadheavy_txt'] = 'Sunucu yükü: Fazla';
 $wb['monitor_serverstate_loadhigh_txt'] = 'Sunucu yükü: Yüksek';
 $wb['monitor_serverstate_loaghigher_txt'] = 'Sunucu yükü: Çok yüksek';
 $wb['monitor_serverstate_loadhighest_txt'] = 'Sunucu yükü: En yüksek';
 $wb['monitor_serverstate_loadunknown_txt'] = 'Sunucu yükü: ???';
-$wb['monitor_serverstate_mailqok_txt'] = 'Posta kuyruğu yükü: Sorunsuz';
-$wb['monitor_serverstate_mailqheavy_txt'] = 'Posta kuyruğu yükü: Ağır';
-$wb['monitor_serverstate_mailqhigh_txt'] = 'Posta kuyruğu yükü: Yüksek';
-$wb['monitor_serverstate_mailqhigher_txt'] = 'Posta kuyruğu yükü: Çok yüksek';
-$wb['monitor_serverstate_mailqhighest_txt'] = 'Posta kuyruğu yükü: En yüksek';
-$wb['monitor_serverstate_mailqunknown_txt'] = 'Posta kuyruğu yükü: ???';
+$wb['monitor_serverstate_mailqok_txt'] = 'E-posta kuyruğu yükü: Sorunsuz';
+$wb['monitor_serverstate_mailqheavy_txt'] = 'E-posta kuyruğu yükü: Fazla';
+$wb['monitor_serverstate_mailqhigh_txt'] = 'E-posta kuyruğu yükü: Yüksek';
+$wb['monitor_serverstate_mailqhigher_txt'] = 'E-posta kuyruğu yükü: Çok yüksek';
+$wb['monitor_serverstate_mailqhighest_txt'] = 'E-posta kuyruğu yükü: En yüksek';
+$wb['monitor_serverstate_mailqunknown_txt'] = 'E-posta kuyruğu yükü: ???';
 $wb['monitor_serverstate_raidok_txt'] = 'RAID sorunsuz';
 $wb['monitor_serverstate_raidresync_txt'] = 'RAID, RESYNC kipinde';
 $wb['monitor_serverstate_raidfault_txt'] = 'RAID dizisinde hatalı bir disk var. Bu diski en kısa sürede değiştirmelisiniz!';
@@ -118,6 +124,7 @@ $wb['monitor_serverstate_syslogerror_txt'] = 'Sistem günlüğünde hatalar var'
 $wb['monitor_serverstate_syslogunknown_txt'] = 'Sistem Günlüğü: ???';
 $wb['monitor_serverstate_updatesok_txt'] = 'Sistem güncel';
 $wb['monitor_serverstate_updatesneeded_txt'] = 'Bir ya da daha fazla bileşenin güncellenmesi gerekiyor';
+$wb['monitor_serverstate_updatesunknown_txt'] = 'Sistem Güncelleme: ???';
 $wb['monitor_serverstate_beancounterok_txt'] = 'Beancounter sorunsuz';
 $wb['monitor_serverstate_beancounterinfo_txt'] = 'Beancounter kayıtlarında az sayıda hata var';
 $wb['monitor_serverstate_beancounterwarning_txt'] = 'Beancounter kayıtlarında ortalama sayıda hata var';
@@ -130,7 +137,8 @@ $wb['monitor_services_ftp_txt'] = 'FTP Sunucu:';
 $wb['monitor_services_smtp_txt'] = 'SMTP Sunucu:';
 $wb['monitor_services_pop_txt'] = 'POP3 Sunucu:';
 $wb['monitor_services_imap_txt'] = 'IMAP Sunucu:';
-$wb['monitor_services_mydns_txt'] = 'myDNS Sunucu:';
+$wb['monitor_services_mydns_txt'] = 'DNS Sunucu:';
+$wb['monitor_services_mongodb_txt'] = 'MongoDB Sunucusu:';
 $wb['monitor_services_mysql_txt'] = 'mySQL Sunucu:';
 $wb['monitor_settings_datafromdate_txt'] = 'Veri tarihi: ';
 $wb['monitor_settings_datetimeformat_txt'] = 'Y-m-d H:i';
@@ -138,10 +146,11 @@ $wb['monitor_settings_refreshsq_txt'] = 'Yenileme Sıklığı:';
 $wb['monitor_settings_server_txt'] = 'Sunucu';
 $wb['monitor_title_cpuinfo_txt'] = 'Ä°ÅŸlemci Bilgileri';
 $wb['monitor_title_updatestate_txt'] = 'Güncellik Durumu';
-$wb['monitor_title_mailq_txt'] = 'Posta KuyruÄŸu';
+$wb['monitor_title_mailq_txt'] = 'E-posta KuyruÄŸu';
 $wb['monitor_title_raidstate_txt'] = 'RAID Durumu';
 $wb['monitor_title_rkhunterlog_txt'] = 'RKHunter Günlüğü';
 $wb['monitor_title_fail2ban_txt'] = 'Fail2Ban Günlüğü';
+$wb['monitor_title_mongodb_txt'] = 'MongoDB Günlüğü';
 $wb['monitor_title_iptables_txt'] = 'IPTables Kuralları';
 $wb['monitor_title_beancounter_txt'] = 'OpenVz VE BeanCounter';
 $wb['monitor_updates_nosupport_txt'] = 'Dağıtımınız, bu izlemeyi desteklemiyor';
@@ -152,14 +161,4 @@ $wb['no_permissions_to_view_monit_txt'] = 'Monit eriÅŸimi izniniz yok.';
 $wb['Show Munin'] = 'Munin Durumu';
 $wb['no_munin_url_defined_txt'] = 'Munin adresi belirtilmemiÅŸ.';
 $wb['no_permissions_to_view_munin_txt'] = 'Munin eriÅŸimi izniniz yok.';
-$wb['no_data_database_size_txt'] = 'No data about the database usage available at the moment. Please check again later.';
-$wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
-$wb['monitor_database_name_txt'] = 'Database';
-$wb['monitor_database_size_txt'] = 'Size';
-$wb['monitor_database_client_txt'] = 'Client';
-$wb['monitor_database_domain_txt'] = 'Domain';
-$wb['monitor_serverstate_updatesunknown_txt'] = 'System Update: ???';
-$wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
-$wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
-$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/sites/lib/lang/br.lng b/interface/web/sites/lib/lang/br.lng
index 685ce6ed28..8710dc1140 100644
--- a/interface/web/sites/lib/lang/br.lng
+++ b/interface/web/sites/lib/lang/br.lng
@@ -2,34 +2,37 @@
 $wb['Websites'] = 'Sites';
 $wb['Website'] = 'Site';
 $wb['Subdomain'] = 'Subdomínio';
-$wb['Aliasdomain'] = 'Apelido de domínio';
-$wb['Database'] = 'Bancos de dados';
+$wb['Aliasdomain'] = 'Alias de domínio';
+$wb['Database'] = 'Banco de dados';
+$wb['Database User'] = 'Usuários do banco de dados';
 $wb['Web Access'] = 'Acesso web';
 $wb['FTP-User'] = 'Usuários ftp';
 $wb['Webdav-User'] = 'Usuários webdav';
 $wb['Folder'] = 'Pastas protegidas';
-$wb['Folder users'] = 'Usuários de pastas';
+$wb['Folder users'] = 'Usuários de pastas protegidas';
 $wb['Command Line'] = 'Linha de comando';
-$wb['Shell-User'] = 'Usuários shell';
+$wb['Shell-User'] = 'Usuários do shell';
 $wb['Cron Jobs'] = 'Tarefas no cron';
 $wb['Statistics'] = 'Estatísticas';
 $wb['Web traffic'] = 'Tráfego web';
-$wb['Website quota (Harddisk)'] = 'Cota para sites (disco)';
+$wb['FTP traffic'] = 'Tráfego ftp';
+$wb['Website quota (Harddisk)'] = 'Cota de site (disco)';
+$wb['Database quota'] = 'Cota do banco de dados';
+$wb['Backup Stats'] = 'Estatísticas de backups';
 $wb['Cron'] = 'Cron';
 $wb['Stats'] = 'Estatísticas';
 $wb['Shell'] = 'Shell';
 $wb['Webdav'] = 'Webdav';
 $wb['FTP'] = 'FTP';
 $wb['Options'] = 'Opções';
+$wb['Domain'] = 'Domínio';
 $wb['Redirect'] = 'Redirecionamento';
 $wb['SSL'] = 'SSL';
 $wb['Sites'] = 'Sites';
-$wb['Database User'] = 'Usuários';
-$wb['APS Installer'] = 'Instalação de apps';
+$wb['APS Installer'] = 'Instalador de APPs';
 $wb['Available packages'] = 'Pacotes disponíveis';
 $wb['Installed packages'] = 'Pacotes instalados';
 $wb['Update Packagelist'] = 'Atualizar lista de pacotes';
 $wb['Subdomain (Vhost)'] = 'Subdomínio (vhost)';
-$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \\"proxy\\" exige uma url como caminho do redirecionamento.';
-$wb['Domain'] = 'Domínio';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento "proxy" exige uma URL como caminho de redirecionamento.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_aps.lng b/interface/web/sites/lib/lang/br_aps.lng
index 27e7434359..744c215192 100644
--- a/interface/web/sites/lib/lang/br_aps.lng
+++ b/interface/web/sites/lib/lang/br_aps.lng
@@ -5,59 +5,59 @@ $wb['available_packages_txt'] = 'Pacotes disponíveis';
 $wb['installed_packages_txt'] = 'Pacotes instalados';
 $wb['yes_txt'] = 'Sim';
 $wb['no_txt'] = 'Não';
-$wb['invalid_id_txt'] = 'Nenhuma ID válida inserida.';
+$wb['invalid_id_txt'] = 'Nenhuma ID válida informada.';
 $wb['details_txt'] = 'Detalhes';
 $wb['version_txt'] = 'Versão';
 $wb['category_txt'] = 'Categoria';
-$wb['homepage_txt'] = 'Página';
+$wb['homepage_txt'] = 'Página Inicial';
 $wb['supported_languages_txt'] = 'Idiomas suportados';
 $wb['description_txt'] = 'Descrição';
 $wb['config_script_txt'] = 'Script de configuração';
-$wb['installed_size_txt'] = 'Tamanho após instalação';
+$wb['installed_size_txt'] = 'Tamanho após a instalação';
 $wb['license_txt'] = 'Licença';
-$wb['screenshots_txt'] = 'Telas';
-$wb['changelog_txt'] = 'Log de mudanças';
-$wb['server_requirements_txt'] = 'Requisitos do servidor';
-$wb['php_extensions_txt'] = 'Extensões PHP';
-$wb['php_settings_txt'] = 'Configurações do PHP';
-$wb['supported_php_versions_txt'] = 'Versões do PHP suportadas';
+$wb['screenshots_txt'] = 'Captura de telas';
+$wb['changelog_txt'] = 'Mudanças Recentes';
+$wb['server_requirements_txt'] = 'Requisitos do Servidor';
+$wb['php_extensions_txt'] = 'Extensões php';
+$wb['php_settings_txt'] = 'Configurações php';
+$wb['supported_php_versions_txt'] = 'Versões do php suportadas';
 $wb['database_txt'] = 'Banco de Dados';
 $wb['settings_txt'] = 'Configurações';
-$wb['install_package_txt'] = 'Instalar esse pacote';
+$wb['install_package_txt'] = 'Instalar este pacote';
 $wb['installation_txt'] = 'Instalação';
 $wb['install_location_txt'] = 'Local da instalação';
-$wb['acceptance_txt'] = 'Aceitação';
-$wb['acceptance_text_txt'] = 'Sim, eu li a licença e aceito os termos.';
+$wb['btn_install_txt'] = 'Instalar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+$wb['acceptance_txt'] = 'Aceitar a licença';
+$wb['acceptance_text_txt'] = 'Sim, li e aceito os termos da licença.';
 $wb['install_language_txt'] = 'Idioma da interface';
 $wb['new_database_password_txt'] = 'Nova senha do banco de dados';
 $wb['basic_settings_txt'] = 'Configurações básicas';
-$wb['package_settings_txt'] = 'Configurações do pacote';
-$wb['error_main_domain'] = 'O domínio no caminho da instalação é é inválido.';
-$wb['error_no_main_location'] = 'Você inseriu um caminho inválido para a instalação.';
-$wb['error_inv_main_location'] = 'A pasta informada para a instalação é inválida.';
-$wb['error_license_agreement'] = 'Para continuar é preciso aceitar os termos da licenciamento.';
-$wb['error_no_database_pw'] = 'Você informou uma senha inválida para o banco de dados.';
-$wb['error_short_database_pw'] = 'Por favor, escolha uma senha com maior complexidade para o banco de dados.';
-$wb['error_no_value_for'] = 'O campo \'%s\' não pode ficar está em branco.';
-$wb['error_short_value_for'] = 'O campo \'%s\' exige um valor maior.';
-$wb['error_long_value_for'] = 'O campo \'%s\' exige um valor mais curto.';
-$wb['error_inv_value_for'] = 'Você inseriu um valor inválido para o campo \'%s\'.';
-$wb['error_inv_email_for'] = 'Você inseriu um e-mail inválido para o campo \'%s\'.';
-$wb['error_inv_domain_for'] = 'Você inseriu um domínio inválido para o campo \'%s\'.';
-$wb['error_inv_integer_for'] = 'Você inseriu um número inválido para o campo \'%s\'.';
-$wb['error_inv_float_for'] = 'Você inseriu um número de ponto flutuante inválido para o campo \'%s\'.';
-$wb['error_used_location'] = 'O caminho da instalação contém um pacote de instalação.';
-$wb['installation_task_txt'] = 'Agendamento de instalação';
+$wb['package_settings_txt'] = 'Configurações de pacotes';
+$wb['error_main_domain'] = 'O domínio para a instalação é inválido.';
+$wb['error_no_main_location'] = 'Não foi informado um caminho válido para a instalação.';
+$wb['error_inv_main_location'] = 'Local da pasta de instalação informado é inválido.';
+$wb['error_license_agreement'] = 'Para continuar é necessário aceitar os termos da licença.';
+$wb['error_no_database_pw'] = 'Não foi informado uma senha válida para o banco de dados.';
+$wb['error_short_database_pw'] = 'Por favor informe uma senha do banco de dados com maior complexidade.';
+$wb['error_no_value_for'] = 'O campo "%s" não pode estar está em branco.';
+$wb['error_short_value_for'] = 'O campo "%s" requer um valor de entrada maior.';
+$wb['error_long_value_for'] = 'O campo "%s" requer um valor de entrada menor.';
+$wb['error_inv_value_for'] = 'O valor informado no campo "%s" é inválido.';
+$wb['error_inv_email_for'] = 'O e-mail informado no campo "%s" é inválido.';
+$wb['error_inv_domain_for'] = 'O domínio informado no campo "%s" é inválido.';
+$wb['error_inv_integer_for'] = 'O número informado no campo "%s" é inválido.';
+$wb['error_inv_float_for'] = 'O número de ponto flutuante informado no campo "%s" é inválido.';
+$wb['error_used_location'] = 'O caminho da instalação selecionado já possui uma instalação de pacote.';
+$wb['installation_task_txt'] = 'Instalação agendada';
 $wb['installation_error_txt'] = 'Erro de instalação';
 $wb['installation_success_txt'] = 'Instalado';
-$wb['installation_remove_txt'] = 'Remove agendamento';
-$wb['packagelist_update_finished_txt'] = 'Atualização da lista de pacotes finalizada.';
-$wb['btn_install_txt'] = 'Instalar';
-$wb['btn_cancel_txt'] = 'Cancelar';
-$wb['limit_aps_txt'] = 'O limite de instâncias de apps para esta conta foi alcançado.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['installation_remove_txt'] = 'Remover instalação agendada';
+$wb['packagelist_update_finished_txt'] = 'Lista de APPs atualizada.';
+$wb['limit_aps_txt'] = 'O limite de instâncias de APPs para esta conta foi alcançado.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 ?>
diff --git a/interface/web/sites/lib/lang/br_aps_instances_list.lng b/interface/web/sites/lib/lang/br_aps_instances_list.lng
index fb6a2addd8..da5b80d68e 100644
--- a/interface/web/sites/lib/lang/br_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/br_aps_instances_list.lng
@@ -5,7 +5,7 @@ $wb['version_txt'] = 'Versão';
 $wb['customer_txt'] = 'Cliente';
 $wb['status_txt'] = 'Estado';
 $wb['install_location_txt'] = 'Local da instalação';
-$wb['pkg_delete_confirmation'] = 'Você realmente deseja remover esta instalação?';
+$wb['pkg_delete_confirmation'] = 'Deseja realmente remover esta instalação?';
 $wb['filter_txt'] = 'Pesquisar';
 $wb['delete_txt'] = 'Remover';
 ?>
diff --git a/interface/web/sites/lib/lang/br_aps_packages_list.lng b/interface/web/sites/lib/lang/br_aps_packages_list.lng
index 641d807f52..bbd0e1ad3d 100644
--- a/interface/web/sites/lib/lang/br_aps_packages_list.lng
+++ b/interface/web/sites/lib/lang/br_aps_packages_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Pacotes Disponíveis';
+$wb['list_head_txt'] = 'Pacotes disponíveis';
 $wb['name_txt'] = 'Nome';
 $wb['version_txt'] = 'Versão';
 $wb['category_txt'] = 'Categoria';
diff --git a/interface/web/sites/lib/lang/br_aps_update_packagelist.lng b/interface/web/sites/lib/lang/br_aps_update_packagelist.lng
index 8e53fbb6b1..b81640384c 100644
--- a/interface/web/sites/lib/lang/br_aps_update_packagelist.lng
+++ b/interface/web/sites/lib/lang/br_aps_update_packagelist.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['head_txt'] = 'Atualizar lista de pacotes';
-$wb['list_desc_txt'] = 'Lista de pacotes';
+$wb['list_desc_txt'] = '';
 $wb['btn_start_txt'] = 'Atualizar lista de pacotes';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['legend_txt'] = 'Aqui você pode atualizar a lista de pacotes disponíveis. Por favor, observe que este processo poderá levar alguns minutos. Você pode fechar esta página, o processo continuará em segundo plano.';
+$wb['legend_txt'] = 'Aqui é possível atualizar a lista de pacotes disponíveis. Por favor, observe que esta operação pode demorar vários minutos. Você poderá sair dessa página se quiser; o processo continuará a execução em segundo plano.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_backup_stats_list.lng b/interface/web/sites/lib/lang/br_backup_stats_list.lng
index 5f7f2d9ec7..932ad5dba7 100644
--- a/interface/web/sites/lib/lang/br_backup_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_backup_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Estatísticas do banco de Dados';
-$wb['database_name_txt'] = 'Nome do banco de dados';
+$wb['list_head_txt'] = 'Estatísticas de backup';
+$wb['database_name_txt'] = 'Banco de Dados';
 $wb['active_txt'] = 'Ativo';
 $wb['domain_txt'] = 'Domínio';
-$wb['backup_count_txt'] = 'Contador de backup';
+$wb['backup_count_txt'] = 'Contador de backups';
 $wb['backup_server_txt'] = 'Servidor';
-$wb['backup_interval_txt'] = 'Intervalo/contador';
-$wb['backup_size_txt'] = 'Tamanho';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_size_txt'] = 'Tamanho do backup';
 ?>
diff --git a/interface/web/sites/lib/lang/br_cron.lng b/interface/web/sites/lib/lang/br_cron.lng
index 2bbadf6d1b..98d98efa25 100644
--- a/interface/web/sites/lib/lang/br_cron.lng
+++ b/interface/web/sites/lib/lang/br_cron.lng
@@ -8,19 +8,19 @@ $wb['run_hour_txt'] = 'Horas';
 $wb['run_mday_txt'] = 'Dias do mês';
 $wb['run_month_txt'] = 'Meses';
 $wb['run_wday_txt'] = 'Dias da semana';
-$wb['command_txt'] = 'Comando a executar (os comandos serão executados via sh ou urls via wget)';
+$wb['command_txt'] = 'Comando a executar (comandos são executados através do sh, urls através do wget)';
 $wb['limit_cron_txt'] = 'O limite de tarefas no cron foi alcançado.';
-$wb['limit_cron_frequency_txt'] = 'A frequência das tarefas no cron ultrapassou o limite permitido.';
-$wb['run_min_error_format'] = 'Formato dos minutos é inválido.';
-$wb['run_hour_error_format'] = 'Formato das horas é inválido.';
-$wb['run_mday_error_format'] = 'Formato dos dias do mês é inválido.';
-$wb['run_month_error_format'] = 'Formato dos meses é inválido.';
-$wb['run_wday_error_format'] = 'Formato dos dias da semana é inválido.';
-$wb['command_error_format'] = 'Formato de comando é inválido. Somente endereços url http/https são permitidos.';
-$wb['unknown_fieldtype_error'] = 'Um tipo desconhecido de campo foi usado.';
-$wb['server_id_error_empty'] = 'O ID do servidor está em branco.';
-$wb['limit_cron_url_txt'] = 'Somente url do cron. Por favor, insira uma url iniciando com \\"http://\\" e um comando do cron.';
-$wb['command_error_empty'] = 'Comando está em branco.';
-$wb['command_hint_txt'] = 'Você poderá usar, por exemplo: \\"/var/www/clients/clientX/webY/meu_script.sh\\" ou \\"http://www.dominio.com.br/path/script.php\\" e também a palavra reservada \\"[web_root]\\" substituído por \\"/var/www/clients/clientX/webY/web\\".';
-$wb['log_output_txt'] = 'Saída do Log';
+$wb['limit_cron_frequency_txt'] = 'O limite de execuções das tarefas no cron foi alcançado.';
+$wb['run_min_error_format'] = 'Formato inválido para minutos.';
+$wb['run_hour_error_format'] = 'Formato inválido para horas.';
+$wb['run_mday_error_format'] = 'Formato inválido para dias do mês.';
+$wb['run_month_error_format'] = 'Formato inválido para meses.';
+$wb['run_wday_error_format'] = 'Formato inválido para dias da semana.';
+$wb['command_error_format'] = 'Comando possui formato inválido. Por favor, observe que em alguns casos somente chamadas http/https são permitidas.';
+$wb['unknown_fieldtype_error'] = 'Um tipo de campo desconhecido foi utilizado.';
+$wb['server_id_error_empty'] = 'O servidor está em branco.';
+$wb['command_hint_txt'] = 'ex.: /var/www/clients/clientX/webY/myscript.sh ou http://www.dominio.com.br/caminho/script.php, você pode utilizar a área reservada [web_root] para substituir /var/www/clients/clientX/webY/web.';
+$wb['log_output_txt'] = 'Gravar saída do log';
+$wb['limit_cron_url_txt'] = 'Somente URL no cron. Por favor insira uma URL iniciando com http:// como um comando no cron.';
+$wb['command_error_empty'] = 'Comando a executar está em branco.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_cron_list.lng b/interface/web/sites/lib/lang/br_cron_list.lng
index 89fe7932f6..31017512d3 100644
--- a/interface/web/sites/lib/lang/br_cron_list.lng
+++ b/interface/web/sites/lib/lang/br_cron_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Tarefas no Cron';
-$wb['active_txt'] = 'Ativas';
+$wb['list_head_txt'] = 'Tarefas no cron';
+$wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
-$wb['run_min_txt'] = 'Minutos';
-$wb['run_hour_txt'] = 'Horas';
-$wb['run_mday_txt'] = 'Dias do mês';
+$wb['run_min_txt'] = 'Minuto';
+$wb['run_hour_txt'] = 'Hora';
+$wb['run_mday_txt'] = 'Dia do mês';
 $wb['run_month_txt'] = 'Mês';
 $wb['run_wday_txt'] = 'Dia da semana';
 $wb['command_txt'] = 'Comando';
diff --git a/interface/web/sites/lib/lang/br_database.lng b/interface/web/sites/lib/lang/br_database.lng
index ac916feef1..3690ee9cf8 100644
--- a/interface/web/sites/lib/lang/br_database.lng
+++ b/interface/web/sites/lib/lang/br_database.lng
@@ -3,47 +3,47 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['type_txt'] = 'Tipo';
 $wb['database_name_txt'] = 'Nome do banco de dados';
 $wb['database_user_txt'] = 'Usuário do banco de dados';
+$wb['database_ro_user_txt'] = 'Usuário somente leitura';
+$wb['optional_txt'] = 'opcional';
 $wb['database_password_txt'] = 'Senha do banco de dados';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['database_charset_txt'] = 'Charset do banco de dados';
+$wb['select_dbuser_txt'] = 'Selecionar usuário';
+$wb['no_dbuser_txt'] = 'Nenhum';
 $wb['remote_access_txt'] = 'Acesso Remoto';
+$wb['remote_ips_txt'] = 'Endereços IP para acesso remoto (separado por vírgula ou deixe em branco para <i>qualquer um</i>)';
+$wb['database_remote_error_ips'] = 'Ao menos um endereço IP informado é inválido.';
 $wb['client_txt'] = 'Cliente';
 $wb['active_txt'] = 'Ativo';
+$wb['database_client_differs_txt'] = 'O cliente do site pai e o banco de dados não coincidem.';
 $wb['database_name_error_empty'] = 'Nome do banco de dados está em branco.';
-$wb['database_name_error_unique'] = 'Já existe um banco de dados com este nome no servidor. O nome escolhido deve ser exclusivo.';
-$wb['database_name_error_regex'] = 'Nome do banco de dados é inválido. Só é permitido para o nome do banco os caracteres: \'a-z\', \'A-Z\', \'0-9\' e o \'underscrore\'. Tamanho: 2 - 64 caracteres.';
-$wb['database_user_error_empty'] = 'Nome do usuário do banco de dados está em branco.';
-$wb['database_user_error_unique'] = 'Já existe um usuário do banco de dados com este nome no servidor. O nome escolhido deve ser exclusivo.';
-$wb['database_user_error_regex'] = 'Nome do usuário do banco de dados é inválido. Só é permitido para nome do usuário banco de dados os caracteres: \'a-z\', \'A-Z\', \'0-9\' e o \'underscrore\'. Tamanho: 2 - 64 caracteres.';
-$wb['limit_database_txt'] = 'O limite de bancos de dados permitido para esta conta foi alcançado.';
-$wb['database_name_change_txt'] = 'O nome do banco de dados não pode ser modificado.';
-$wb['database_charset_change_txt'] = 'O charset do banco de dados não pode ser modificado.';
-$wb['remote_ips_txt'] = 'Endereços IP Remotos (separados por vírgula. Em branco para <i>quaisquer IPs</i>)';
-$wb['database_remote_error_ips'] = 'Pelo menos um dos endereços IP informados não é válido.';
-$wb['database_name_error_len'] = 'Nome do banco de dados - {db} - é muito longo. 64 caracteres, incluindo o prefixo, é o limite permitido.';
-$wb['database_user_error_len'] = 'Nome do usuário do banco de dados \'{user}\' é muito longo. 16 caracteres, incluindo o prefixo, é o limite permitido.';
+$wb['database_name_error_unique'] = 'Já existe um banco de dados com este nome no servidor. Para ter um nome exclusivo, por exemplo, insira o domínio como prefixo do nome.';
+$wb['database_name_error_regex'] = 'Nome do banco de dados é inválido. O nome do banco de dados pode conter os seguintes caracteres: a-z, A-Z, 0-9 e underscore. Comprimento 2 - 64 caracteres.';
+$wb['database_user_error_empty'] = 'Usuário do banco de dados está em branco.';
+$wb['database_user_error_unique'] = 'Já existe um usuário de banco de dados com esse nome. Para ter um nome exclusivo, por exemplo, insira o domínio como prefixo do nome.';
+$wb['database_user_error_regex'] = 'Usuário do banco de dados é inválido. O nome do usuário pode conter os seguintes caracteres: a-z, A-Z, 0-9 e underscore. Comprimento: 2 a 16 caracteres.';
+$wb['limit_database_txt'] = 'O limite de banco de dados foi alcançado para esta conta.';
+$wb['database_name_change_txt'] = 'O nome do banco de dados não pode ser alterado.';
+$wb['database_user_missing_txt'] = 'Por favor, selecione um usuário para este banco de dados.';
+$wb['database_charset_change_txt'] = 'O charset do banco de dados não pode ser alterado.';
+$wb['database_name_error_len'] = 'Nome do banco de dados - {db} - muito longo. O comprimento do nome do banco de dados, incluindo o prefixo, são 64 caracteres.';
+$wb['database_user_error_len'] = 'Nome do usuário do banco de dados - {user} - muito longo. O comprimento do nome do usuário, incluindo o prefixo, são 16 caracteres.';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['database_site_error_empty'] = 'Selecione o \\"site\\" ao qual o banco de dados pertence.';
-$wb['select_site_txt'] = '- Selecionar site -';
+$wb['database_site_error_empty'] = 'Selecione o site ao qual o banco de dados pertence.';
+$wb['select_site_txt'] = '-Selecionar Site-';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['globalsearch_resultslimit_of_txt'] = 'de';
 $wb['globalsearch_resultslimit_results_txt'] = 'resultados';
 $wb['globalsearch_noresults_text_txt'] = 'Sem resultados.';
 $wb['globalsearch_noresults_limit_txt'] = '0 resultados';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Pesquisar';
 $wb['globalsearch_suggestions_text_txt'] = 'Sugestões';
-$wb['database_ro_user_txt'] = 'Usuário do banco de dados somente leitura';
-$wb['optional_txt'] = 'opcional';
-$wb['select_dbuser_txt'] = 'Selecionar o usuário do banco de dados';
-$wb['no_dbuser_txt'] = 'Nenhum';
-$wb['database_client_differs_txt'] = 'O cliente do site e banco de dados não coincidem.';
-$wb['database_user_missing_txt'] = 'Por favor, selecione um usuário do banco de dados para este banco de dados.';
-$wb['limit_database_quota_txt'] = 'Cota para banco de dados';
-$wb['limit_database_quota_error_notint'] = 'O valor da cota para banco de dados deve ser um número positivo.';
-$wb['limit_database_quota_free_txt'] = 'Cota para banco de dados';
+$wb['limit_database_quota_txt'] = 'Cota do banco de dados';
+$wb['limit_database_quota_error_notint'] = 'O limite da cota do banco de dados deve ser um número.';
+$wb['limit_database_quota_free_txt'] = 'Limite da cota do banco de dados disponível';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_admin_list.lng b/interface/web/sites/lib/lang/br_database_admin_list.lng
index 4f8f6ba611..eef9b6e3fa 100644
--- a/interface/web/sites/lib/lang/br_database_admin_list.lng
+++ b/interface/web/sites/lib/lang/br_database_admin_list.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['list_head_txt'] = 'Banco de dados';
+$wb['list_head_txt'] = 'Banco de Dados';
 $wb['active_txt'] = 'Ativo';
-$wb['remote_access_txt'] = 'Acesso remoto';
+$wb['remote_access_txt'] = 'Acesso Remoto';
+$wb['type_txt'] = 'Tipo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['database_user_txt'] = 'Usuário do banco de dados';
 $wb['database_name_txt'] = 'Nome do banco de dados';
 $wb['add_new_record_txt'] = 'Adicionar novo banco de dados';
 $wb['sys_groupid_txt'] = 'Cliente';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['type_txt'] = 'Tipo';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_list.lng b/interface/web/sites/lib/lang/br_database_list.lng
index afb5d36a0d..b3d438e04b 100644
--- a/interface/web/sites/lib/lang/br_database_list.lng
+++ b/interface/web/sites/lib/lang/br_database_list.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['list_head_txt'] = 'Bancos de Dados';
+$wb['list_head_txt'] = 'Banco de Dados';
 $wb['active_txt'] = 'Ativo';
 $wb['remote_access_txt'] = 'Acesso Remoto';
+$wb['type_txt'] = 'Tipo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['database_user_txt'] = 'Usuário do banco de dados';
 $wb['database_name_txt'] = 'Nome do banco de dados';
-$wb['add_new_record_txt'] = 'Adicionar um novo banco de dados';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['type_txt'] = 'Tipo';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_quota_stats_list.lng b/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
index 90202f115f..41fd305a3a 100644
--- a/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['database_txt'] = 'Banco de dados';
+$wb['database_txt'] = 'Banco de Dados';
 $wb['server_name_txt'] = 'Servidor';
 $wb['client_txt'] = 'Cliente';
-$wb['used_txt'] = 'Espaço utilizado';
+$wb['used_txt'] = 'Espaço Utilizado';
 $wb['quota_txt'] = 'Cota';
-$wb['percentage_txt'] = 'Espaço utilizado em %';
-$wb['list_head_txt'] = 'Cota para banco de dados';
+$wb['percentage_txt'] = 'Espaço Utilizado em %';
+$wb['list_head_txt'] = 'Cota do banco de dados';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_user.lng b/interface/web/sites/lib/lang/br_database_user.lng
index 59b9fce627..193dbc7406 100644
--- a/interface/web/sites/lib/lang/br_database_user.lng
+++ b/interface/web/sites/lib/lang/br_database_user.lng
@@ -1,25 +1,25 @@
 <?php
-$wb['database_user_txt'] = 'Usuário';
+$wb['database_user_txt'] = 'Usuário do banco de Dados';
 $wb['database_password_txt'] = 'Senha do banco de dados';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['client_txt'] = 'Cliente';
 $wb['active_txt'] = 'Ativo';
 $wb['database_user_error_empty'] = 'Usuário do banco de dados está em branco.';
-$wb['database_user_error_unique'] = 'Já existe um usuário do banco de dados com este nome no servidor. Para configurar um nome exclusivo, use como prefixo o domínio para o nome do usuário.';
-$wb['database_user_error_regex'] = 'Usuário do banco de dados inválido! O nome do usuário pode conter os seguintes caracteres: \'\\"a-z\', \'A-Z\', \'0-9\' e o \'underscore\'. Tamanho: 2 - 64 caracteres.';
-$wb['database_user_error_len'] = 'O usuário do banco de dados - {user} - é muito longo. O limite do nome do usuário, incluindo o prefixo, são 16 caracteres.';
+$wb['database_user_error_unique'] = 'Já existe este usuário no servidor. Para ter um nome exclusivo insira um prefixo como o domínio antes do nome.';
+$wb['database_user_error_regex'] = 'Nome do usuário de banco de dados inválido. O nome do usuário deve conter apenas os caracteres: a-z, A-Z, 0-9 e underscore. Comprimento: 2 - 64 caracteres.';
+$wb['database_user_error_len'] = 'Nome do usuário de banco de dados - {user} - muito longo. Comprimento permitido, incluindo o prefixo, não pode ultrapassr 16 caracteres.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['globalsearch_resultslimit_of_txt'] = 'de';
 $wb['globalsearch_resultslimit_results_txt'] = 'resultados';
 $wb['globalsearch_noresults_text_txt'] = 'Sem resultados.';
-$wb['globalsearch_noresults_limit_txt'] = '0 resultados';
+$wb['globalsearch_noresults_limit_txt'] = '0 resultado(s)';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Pesquisar';
 $wb['globalsearch_suggestions_text_txt'] = 'Sugestões';
-$wb['limit_database_user_txt'] = 'O limite de usuários do banco de dados foi alcançado.';
+$wb['limit_database_user_txt'] = 'O limite de usuários do banco de dados para esta conta foi alcançado.';
 $wb['database_password_error_empty'] = 'Senha do banco de dados está em branco.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_user_admin_list.lng b/interface/web/sites/lib/lang/br_database_user_admin_list.lng
index 1d610bd1b0..bb21e97b1c 100644
--- a/interface/web/sites/lib/lang/br_database_user_admin_list.lng
+++ b/interface/web/sites/lib/lang/br_database_user_admin_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Usuários';
-$wb['database_user_txt'] = 'Usuário';
+$wb['list_head_txt'] = 'Usuário do banco de dados';
+$wb['database_user_txt'] = 'Nome do usuário';
 $wb['add_new_record_txt'] = 'Adicionar novo usuário';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_user_list.lng b/interface/web/sites/lib/lang/br_database_user_list.lng
index 855265e958..d2e4332fc7 100644
--- a/interface/web/sites/lib/lang/br_database_user_list.lng
+++ b/interface/web/sites/lib/lang/br_database_user_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Usuários';
-$wb['database_user_txt'] = 'Usuário';
+$wb['list_head_txt'] = 'Usuário do banco de dados';
+$wb['database_user_txt'] = 'Usuário do banco de dados';
 $wb['add_new_record_txt'] = 'Adicionar novo usuário';
 ?>
diff --git a/interface/web/sites/lib/lang/br_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/br_ftp_sites_stats_list.lng
index 93a02f6c25..e4fabd5959 100644
--- a/interface/web/sites/lib/lang/br_ftp_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_ftp_sites_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Tráfego ftp';
+$wb['list_head_txt'] = 'Tráfego FTP';
 $wb['domain_txt'] = 'Domínio';
 $wb['this_month_txt'] = 'Este mês';
 $wb['last_month_txt'] = 'Último mês';
 $wb['this_year_txt'] = 'Este ano';
 $wb['last_year_txt'] = 'Último ano';
 $wb['sum_txt'] = 'Soma (Download + Upload)';
-$wb['in_out_txt'] = 'DL/UL';
+$wb['in_out_txt'] = 'DOWN/UP';
 ?>
diff --git a/interface/web/sites/lib/lang/br_ftp_user.lng b/interface/web/sites/lib/lang/br_ftp_user.lng
index 3df741ed9e..370fe0f366 100644
--- a/interface/web/sites/lib/lang/br_ftp_user.lng
+++ b/interface/web/sites/lib/lang/br_ftp_user.lng
@@ -1,35 +1,36 @@
 <?php
-$wb['uid_txt'] = 'UID';
-$wb['gid_txt'] = 'GID';
+$wb['uid_txt'] = 'ID do usuário (UID)';
+$wb['gid_txt'] = 'ID do grupo (GID)';
 $wb['dir_txt'] = 'Diretório';
 $wb['quota_files_txt'] = 'Cota de arquivos';
 $wb['quota_files_unity_txt'] = 'Arquivos';
-$wb['ul_ratio_txt'] = 'Taxa para upload';
-$wb['dl_ratio_txt'] = 'Taxa para download';
-$wb['ul_bandwidth_txt'] = 'Banda para upload';
-$wb['dl_bandwidth_txt'] = 'Banda para download';
+$wb['ul_ratio_txt'] = 'Taxa de upload';
+$wb['dl_ratio_txt'] = 'Taxa de download';
+$wb['ul_bandwidth_txt'] = 'Banda de upload';
+$wb['dl_bandwidth_txt'] = 'Banda de download';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['quota_size_txt'] = 'Cota de disco';
+$wb['quota_size_txt'] = 'Cota do Disco';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_ftp_user_txt'] = 'o limite de usuários ftp para esta conta foi alcançado.';
-$wb['username_error_empty'] = 'Nome do usuário está em branco.';
+$wb['limit_ftp_user_txt'] = 'O limite de usuários ftp para esta conta foi alcançado.';
+$wb['username_error_empty'] = 'Usuário está em branco.';
 $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
-$wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
+$wb['username_error_regex'] = 'O nome do usuário possui caracteres não permitidos.';
 $wb['quota_size_error_empty'] = 'Cota está em branco.';
+$wb['uid_error_empty'] = 'UID está em branco.';
 $wb['uid_error_empty'] = 'GID está em branco.';
 $wb['directory_error_empty'] = 'Diretório está em branco.';
-$wb['directory_error_notinweb'] = 'O diretório não está dentro do diretório web principal.';
+$wb['directory_error_notinweb'] = 'Diretório não está dentro do diretório web.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['quota_size_error_regex'] = 'Cota: insira -1 para ilimitado ou um número > 0';
-$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \\"./\\" no caminho.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['expires_txt'] = 'Expira em';
+$wb['quota_size_error_regex'] = 'Cota: insira -1 para ilimitado ou um número > 0.';
+$wb['dir_dot_error'] = 'Não é permitido ".." no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido "./" no caminho.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['expires_txt'] = 'Expirar em';
 ?>
diff --git a/interface/web/sites/lib/lang/br_shell_user.lng b/interface/web/sites/lib/lang/br_shell_user.lng
index 3cbc911ab3..8cd0520554 100644
--- a/interface/web/sites/lib/lang/br_shell_user.lng
+++ b/interface/web/sites/lib/lang/br_shell_user.lng
@@ -1,36 +1,36 @@
 <?php
+$wb['puser_txt'] = 'Usuário web';
+$wb['pgroup_txt'] = 'Grupo web';
 $wb['shell_txt'] = 'Shell';
-$wb['dir_txt'] = 'Diretório';
+$wb['dir_txt'] = 'Diretório Base';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['username_txt'] = 'Nome do usuário';
+$wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['chroot_txt'] = 'Shell enjaulado (chroot)';
+$wb['chroot_txt'] = 'Chroot Shell';
 $wb['quota_size_txt'] = 'Cota';
 $wb['active_txt'] = 'Ativo';
-$wb['username_error_empty'] = 'Nome de usuário está em branco.';
-$wb['username_error_unique'] = 'O nome de usuário deve ser exclusivo.';
-$wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
+$wb['username_error_empty'] = 'Nome do usuário está em branco.';
+$wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
+$wb['username_error_regex'] = 'O nome do usuário possui caracteres não permitidos.';
 $wb['quota_size_error_empty'] = 'Cota está em branco.';
 $wb['uid_error_empty'] = 'GID está em branco.';
-$wb['directory_error_empty'] = 'Diretório está em branco.';
-$wb['limit_shell_user_txt'] = 'O limite de usuários shell para esta conta foi alcançado.';
+$wb['directory_error_empty'] = 'O diretório está em branco.';
+$wb['limit_shell_user_txt'] = 'O limite de usuários foi alcançado.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['puser_txt'] = 'Usuário web';
-$wb['pgroup_txt'] = 'Grupo web';
 $wb['ssh_rsa_txt'] = 'Chave pública SSH-RSA (para acessos baseados em chave)';
-$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido  \\"./\\" no caminho.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['username_must_not_exceed_32_chars_txt'] = 'O nome do usuário não pode ultrapassar 32 caracteres.';
-$wb['username_not_allowed_txt'] = 'O nome do usuário nao é permitido.';
-$wb['invalid_system_user_or_group_txt'] = 'Usuário ou grupo inválido';
-$wb['directory_error_regex'] = 'Diretório inválido';
-$wb['shell_error_regex'] = 'Shell inválido';
-$wb['invalid_username_txt'] = 'Usuário inválido';
-$wb['directory_error_notinweb'] = 'O diretório deve estar dentro do diretório web principal.';
+$wb['dir_dot_error'] = 'Não é permitido \'..\' no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \'./\' no caminho.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['username_must_not_exceed_32_chars_txt'] = 'O nome do usuário não pode exceder 32 caracteres.';
+$wb['username_not_allowed_txt'] = 'O nome do usuário não é permitido.';
+$wb['invalid_system_user_or_group_txt'] = 'Usuário ou grupo inválido.';
+$wb['directory_error_regex'] = 'Diretório inválido.';
+$wb['shell_error_regex'] = 'Shell inválido.';
+$wb['invalid_username_txt'] = 'Usuário inválido.';
+$wb['directory_error_notinweb'] = 'O diretório deve estar dentro do diretório web.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_shell_user_list.lng b/interface/web/sites/lib/lang/br_shell_user_list.lng
index 587c988ccd..21bb3d4dfd 100644
--- a/interface/web/sites/lib/lang/br_shell_user_list.lng
+++ b/interface/web/sites/lib/lang/br_shell_user_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Usuário shell';
+$wb['list_head_txt'] = 'Usuário do Shell';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
diff --git a/interface/web/sites/lib/lang/br_user_quota_stats_list.lng b/interface/web/sites/lib/lang/br_user_quota_stats_list.lng
index fe41b018dc..d979210483 100644
--- a/interface/web/sites/lib/lang/br_user_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_user_quota_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Cota do Disco';
-$wb['domain_txt'] = 'Domínio';
+$wb['list_head_txt'] = 'Cota do disco para site';
+$wb['domain_txt'] = 'Domínio/Site';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['used_txt'] = 'Espaço utilizado';
-$wb['hard_txt'] = 'Limite';
+$wb['hard_txt'] = 'Limite para bloqueio';
 $wb['soft_txt'] = 'Limite para alerta';
 $wb['files_txt'] = 'Arquivos simples';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain.lng b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
index 4acadb2c54..d6142fd374 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['domain_txt'] = 'Apelido de domínio';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias do backup';
+$wb['domain_txt'] = 'Alias de domínio';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
@@ -10,64 +10,64 @@ $wb['ssl_country_txt'] = 'País';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
-$wb['web_folder_error_regex'] = 'Pasta inválida inserida. Por favor, não use barra \\"/\\".';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Site pai';
+$wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho do redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
-$wb['document_root_txt'] = 'Pasta personalizada documentroot';
+$wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
 $wb['ip_address_txt'] = 'Endereço IPv4';
-$wb['ipv6_address_txt'] = 'Endreço IPv6';
-$wb['vhost_type_txt'] = 'Tipo VHost';
-$wb['hd_quota_txt'] = 'Cota de Disco';
+$wb['ipv6_address_txt'] = 'Endereço IPv6';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
 $wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
-$wb['errordocs_txt'] = 'Pasta personalizada errordocuments';
+$wb['errordocs_txt'] = 'Proprietário do Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio para esta conta foi alcançado.';
-$wb['limit_web_subdomain_txt'] = 'Limite  subdomínios de site para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
+$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'O domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou apelido de domínio com este nome.';
-$wb['domain_error_regex'] = 'Domínio inválido!';
+$wb['domain_error_empty'] = 'O campo "Domínio" está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O campo "Domínio" é inválido.';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
-$wb['hd_quota_error_empty'] = 'Cota de disco é 0 ou está em branco.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
 $wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' está em branco.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
 $wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
-$wb['allow_override_txt'] = 'Diretiva apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Cota máxima de disco disponível';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
-$wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
+$wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = 'Limite da cota de disco disponível';
+$wb['ssl_state_error_regex'] = 'O campo "Estado" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. São caracteres válidos: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. São redirecionamentos válidos, por exemplo, /teste/ ou http://www.dominio.com.br/teste/';
+$wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
 $wb['stats_user_txt'] = 'Usuário de estatísticas web';
-$wb['stats_type_txt'] = 'Programa de estatísticas web';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
 $wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
 $wb['none_txt'] = 'Nenhum';
 $wb['disabled_txt'] = 'Desabilitado';
@@ -77,39 +77,39 @@ $wb['save_certificate_txt'] = 'Salvar certificado';
 $wb['create_certificate_txt'] = 'Adicionar certificado';
 $wb['delete_certificate_txt'] = 'Remover certificado';
 $wb['nginx_directives_txt'] = 'Diretivas do nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretivas Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretivas www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para o PHP-FPM';
-$wb['error_no_sni_txt'] = 'O SNI para SSL não está ativo neste servidor. Você só pode habilitar um certificado para cada endereço IP.';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Os valores permitidos para configurações do PHP-FPM pm são: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do PHP-FPM pm.start_servers deve ser um número positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor inválido para cota de disco.';
-$wb['traffic_quota_error_regex'] = 'Valor inválido para cota de tráfego.';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de Processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx disponíveis:';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['Domain'] = 'Apelido de domínio';
+$wb['Domain'] = 'Alias de Domínio';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain_list.lng b/interface/web/sites/lib/lang/br_web_aliasdomain_list.lng
index 153aa33400..770ec725e4 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain_list.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain_list.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['list_head_txt'] = 'Apelidos de domínios';
+$wb['list_head_txt'] = 'Alias de Domínio';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['domain_txt'] = 'Apelido de domínio';
-$wb['add_new_record_txt'] = 'Adicionar novo apelido';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
+$wb['domain_txt'] = 'Alias de Domínio';
+$wb['add_new_record_txt'] = 'Adicionar novo alias de domínio';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
 $wb['domain_error_unique'] = 'O domínio deve ser exclusivo.';
-$wb['domain_error_regex'] = 'Domínio inválido!';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['none_txt'] = 'Nenhum';
diff --git a/interface/web/sites/lib/lang/br_web_backup_list.lng b/interface/web/sites/lib/lang/br_web_backup_list.lng
index 137f8bc7e0..82883c1f29 100644
--- a/interface/web/sites/lib/lang/br_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/br_web_backup_list.lng
@@ -3,19 +3,20 @@ $wb['list_head_txt'] = 'Backups existentes';
 $wb['date_txt'] = 'Data';
 $wb['backup_type_txt'] = 'Tipo';
 $wb['filename_txt'] = 'Arquivo de backup';
-$wb['restore_backup_txt'] = 'Restaurar backup';
-$wb['download_backup_txt'] = 'Baixar backup';
-$wb['download_info_txt'] = 'O arquivo de backup estará disponível para download na pasta de backup do site em alguns minutos.';
-$wb['restore_info_txt'] = 'Restauração do backup iniciada. Esta ação poderá levar vários minutos para ser concluída. Aguarde.';
-$wb['restore_confirm_txt'] = 'A restauração do backup reescreverá os arquivos existes do seu site. Tem certeza que deseja restaurar este backup?';
-$wb['download_pending_txt'] = 'Já existe um download deste backup em execução.';
-$wb['restore_pending_txt'] = 'Já existe uma restauração deste backup em execução.';
-$wb['delete_backup_txt'] = 'Remover backup';
-$wb['delete_info_txt'] = 'Remoção do backup iniciada. Esta ação poderá levar vários minutos para ser concluída. Aguarde.';
+$wb['filesize_txt'] = 'Tamanho do arquivo';
+$wb['restore_backup_txt'] = 'Restaurar';
+$wb['download_backup_txt'] = 'Download';
+$wb['download_info_txt'] = 'O arquivo de backup estará disponível para download na pasta de backup dentro de alguns minutos.';
+$wb['restore_info_txt'] = 'Restauração do backup foi iniciada. Esta ação demora vários minutos para concluir.';
+$wb['restore_confirm_txt'] = 'Restaurar arquivo de backup reescreve os arquivos existentes do site. Tem certeza que deseja restaurar este backup?';
+$wb['download_pending_txt'] = 'Já existe um download de backup em andamento.';
+$wb['restore_pending_txt'] = 'Já existe uma restauração de backup em andamento.';
+$wb['delete_backup_txt'] = 'Remover Backup';
+$wb['delete_info_txt'] = 'Remoção de backup foi iniciada. Esta ação demora vários minutos para concluir.';
 $wb['delete_confirm_txt'] = 'Tem certeza que deseja remover este backup?';
-$wb['delete_pending_txt'] = 'Já existe uma remoção deste backup em execução.';
-$wb['backup_type_mysql'] = 'Banco de dados MySQL';
+$wb['delete_pending_txt'] = 'Já existe uma remoção de backup em andamento.';
+$wb['backup_type_mongodb'] = 'MongoDB';
+$wb['backup_type_mysql'] = 'MySQL';
 $wb['backup_type_web'] = 'Arquivos do site';
-$wb['filesize_txt'] = 'Tamanho';
-$wb['backup_type_mongodb'] = 'Banco de dados MongoDB';
+
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_childdomain.lng b/interface/web/sites/lib/lang/br_web_childdomain.lng
index ecff0c2ae8..fbbb40635e 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain.lng
@@ -4,117 +4,117 @@ $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
 $wb['ssl_organisation_unit_txt'] = 'Departamento';
 $wb['ssl_country_txt'] = 'País';
-$wb['ssl_request_txt'] = 'Requisição SSL';
-$wb['ssl_cert_txt'] = 'Certificado SSL';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_request_txt'] = 'Requisição';
+$wb['ssl_cert_txt'] = 'Certificado';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Site pai';
+$wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho para redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
 $wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['vhost_type_txt'] = 'Tipo de vhost';
-$wb['hd_quota_txt'] = 'Cota de disco';
-$wb['traffic_quota_txt'] = 'Cota de tráfego';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
+$wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
-$wb['limit_web_domain_txt'] = 'o limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio de site para esta conta foi alcançado.';
+$wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
 $wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
-$wb['domain_error_regex'] = 'Nome de domínio é inválido.';
-$wb['host_txt'] = 'Nome do servidor';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['domain_error_acme_invalid'] = 'Domínio genérico inválido não permitido.';
+$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
+$wb['host_txt'] = 'Host';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
-$wb['domain_error_wildcard'] = 'Curingas para subdomínios não são permitidos.';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento \\"proxy\\" exige uma url no caminho de redirecionamento.';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias do backup';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento "proxy" exige uma URL como caminho de redirecionamento.';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_key_txt'] = 'Chave';
-$wb['ssl_domain_txt'] = 'Domínio do SSL';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não use uma barra - \\"/\\".';
+$wb['ssl_domain_txt'] = 'Domínio';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['ipv6_address_txt'] = 'Endereço IPv6';
-$wb['errordocs_txt'] = 'Pasta personalizada Error-Documents';
+$wb['errordocs_txt'] = 'Proprietário do Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
-$wb['hd_quota_error_empty'] = 'Cota de disco é 0 ou está em branco.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
 $wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Organização\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' em branco';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
 $wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
-$wb['allow_override_txt'] = 'Diretiva apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Cota de disco';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Cota de tráfego';
+$wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = 'Limite da cota de disco disponível';
+$wb['ssl_state_error_regex'] = 'O campo "Estado" é inválido. Caracteres válidos são: "a-z", "0-9",".", "-", e "_".';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. Caracteres válidos são: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego alcançada';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Usuário para estatísticas web';
-$wb['stats_type_txt'] = 'Programa para estatísticas web';
+$wb['stats_user_txt'] = 'Usuário de estatísticas web';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
 $wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
 $wb['none_txt'] = 'Nenhum';
-$wb['disabled_txt'] = 'Inativo';
+$wb['disabled_txt'] = 'Desabilitado';
 $wb['save_certificate_txt'] = 'Salvar certificado';
 $wb['create_certificate_txt'] = 'Adicionar certificado';
 $wb['delete_certificate_txt'] = 'Remover certificado';
 $wb['nginx_directives_txt'] = 'Diretivas do nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretivas Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretivas www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para PHP-FPM';
-$wb['error_no_sni_txt'] = 'SNI para SSL não está ativo neste servidor. Você só pode ativar um certificado SSL para cada endereço IP.';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Valores para as configurações do PHP-FPM pm devem obedecer as seguintes condições: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do PHP-FPM pm.start_servers deve ser um número positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor da cota de disco é inválido.';
-$wb['traffic_quota_error_regex'] = 'Valor da cota de tráfego é inválido.';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de Processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx disponíveis:';
-$wb['Domain'] = 'Apelido de domínio';
-$wb['ssl_letsencrypt_exclude_txt'] = 'Não adicionar certificado Let\'s Encrypt';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
+$wb['Domain'] = 'Alias de domínio';
+$wb['ssl_letsencrypt_exclude_txt'] = 'Sem certificado Let \'s Encrypt';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_childdomain_list.lng b/interface/web/sites/lib/lang/br_web_childdomain_list.lng
index 20b559b128..583ae2d360 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain_list.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain_list.lng
@@ -4,15 +4,15 @@ $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
 $wb['domain_txt'] = 'Subdomínio';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'O nome do domínio deve ser exclusivo.';
-$wb['domain_error_regex'] = 'Nome do domínio é inválido.';
+$wb['add_new_subdomain_txt'] = 'Adicionar novo subdomínio';
+$wb['add_new_aliasdomain_txt'] = 'Adicionar novo alias de domínio';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'O domínio deve ser exclusivo.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['domain_error_acme_invalid'] = 'Domínio genérico inválido não permitido.';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['none_txt'] = 'Nenhum';
-$wb['add_new_subdomain_txt'] = 'Adicionar novo subdomínio';
-$wb['add_new_aliasdomain_txt'] = 'Adicionar novo apelido';
-$wb['aliasdomain_list_head_txt'] = 'Apelidos de domínios';
+$wb['aliasdomain_list_head_txt'] = 'Alias de domínios';
 $wb['subdomain_list_head_txt'] = 'Subdomínios';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_domain.lng b/interface/web/sites/lib/lang/br_web_domain.lng
index 662fdb407c..1a2a2b301b 100644
--- a/interface/web/sites/lib/lang/br_web_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_domain.lng
@@ -1,116 +1,115 @@
 <?php
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
 $wb['ssl_organisation_unit_txt'] = 'Departamento';
 $wb['ssl_country_txt'] = 'País';
+$wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
+$wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Site pai';
+$wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho do redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
-$wb['document_root_txt'] = 'Diretório Documentroot';
+$wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
-$wb['ip_address_txt'] = 'Endereço IP';
-$wb['vhost_type_txt'] = 'Tipo de VHost';
-$wb['hd_quota_txt'] = 'Cota de disco';
-$wb['traffic_quota_txt'] = 'Cota de tráfego';
+$wb['ip_address_txt'] = 'Endereço IPv4';
+$wb['ipv6_address_txt'] = 'Endereço IPv6';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
+$wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
-$wb['errordocs_txt'] = 'Páginas de erro personalizadas (error-documents)';
+$wb['errordocs_txt'] = 'Proprietário do Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio domínio para esta conta foi alcançado.';
-$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
+$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe site, apelido ou subdomínio com este nome';
-$wb['domain_error_regex'] = 'Nome de domínio é inválido.';
-$wb['hd_quota_error_empty'] = 'Cota de disco está em branco.';
+$wb['domain_error_empty'] = 'O campo "Domínio" está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O campo "Domínio" é inválido.';
+$wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
 $wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'o Campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
-$wb['stats_password_txt'] = 'Senha do diretório de estatísticas';
-$wb['ssl_domain_txt'] = 'Domínio';
-$wb['allow_override_txt'] = 'Permitir Sobrescrever';
-$wb['limit_web_quota_free_txt'] = 'Cota máxima de disco disponível';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \\"a-z\\", \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
+$wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = 'Limite da cota do disco disponível';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. São caracteres válidos: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Usuário para estatísticas web';
-$wb['stats_type_txt'] = 'Tipo de estatísticas web';
-$wb['custom_php_ini_txt'] = 'php.ini personalizado';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' vazio';
-$wb['none_txt'] = 'Nenhuma';
+$wb['stats_user_txt'] = 'Usuário de estatísticas web';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
+$wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
+$wb['none_txt'] = 'Nenhum';
 $wb['disabled_txt'] = 'Desabilitado';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
-$wb['save_certificate_txt'] = 'Salvar certificado';
-$wb['create_certificate_txt'] = 'Adicionar certificado';
-$wb['delete_certificate_txt'] = 'Remover certificado';
-$wb['ipv6_address_txt'] = 'Endereço IPv6';
-$wb['nginx_directives_txt'] = 'Diretivas nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretiva Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretiva www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para PHP-FPM';
-$wb['error_no_sni_txt'] = 'O SNI para SSL não está ativo neste servidor. Você só pode habilitar um certificado para cada endereço IP.';
+$wb['save_certificate_txt'] = 'Salvar Certificado';
+$wb['create_certificate_txt'] = 'Adicionar Certificado';
+$wb['delete_certificate_txt'] = 'Remover Certificado';
+$wb['nginx_directives_txt'] = 'Diretivas do nginx';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Valores para as configurações do PHP-FPM pm devem obedecer as seguintes condições: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do PHP-FPM pm.start_servers deve ser um inteiro positvo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor da cota de disco é é inválido.';
-$wb['traffic_quota_error_regex'] = 'Valor da cota de tráfego é é inválido.';
-$wb['ssl_key_txt'] = 'Chave';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de Processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida! Por favor não insira barra \\"/\\".';
-$wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx:';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
-$wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy:';
+$wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
 $wb['no_server_error'] = 'Nenhum servidor selecionado.';
 $wb['no_backup_txt'] = 'Sem backup';
 $wb['daily_backup_txt'] = 'Diário';
@@ -118,20 +117,20 @@ $wb['weekly_backup_txt'] = 'Semanal';
 $wb['monthly_backup_txt'] = 'Mensal';
 $wb['rewrite_rules_txt'] = 'Reescrever Regras';
 $wb['invalid_rewrite_rules_txt'] = 'Regras de reescrita inválidas';
-$wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas Permitidas:';
+$wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 $wb['variables_txt'] = 'Variáveis';
-$wb['added_by_txt'] = 'Cadastrado por';
+$wb['added_by_txt'] = 'Cadastrador por';
 $wb['added_date_txt'] = 'Data do cadastro';
-$wb['backup_excludes_txt'] = 'Diretórios excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgula. Exemplo: web/cache/*,web/backup)';
-$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos!';
+$wb['backup_excludes_txt'] = 'Diretórios Excluídos';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*, web/backup)';
+$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracteres inválidos.';
 $wb['invalid_custom_php_ini_settings_txt'] = 'Configurações do php.ini inválidas';
-$wb['invalid_system_user_or_group_txt'] = 'Configurações inválidas para usuário ou grupo do sistema';
-$wb['apache_directive_blocked_error'] = 'Diretiva do apache bloqueada por configurações de segurança:';
-$wb['http_port_txt'] = 'Porta HTTP';
-$wb['https_port_txt'] = 'Porta HTTPS';
-$wb['http_port_error_regex'] = 'Porta HTTP inválida.';
-$wb['https_port_error_regex'] = 'Porta HTTPS inválida.';
-$wb['nginx_directive_blocked_error'] = 'Nginx directive blocked by security settings:';
+$wb['invalid_system_user_or_group_txt'] = 'Usuário ou grupo inválido.';
+$wb['apache_directive_blocked_error'] = 'Diretivas do apache bloqueadas pelas configurações de segurança:';
+$wb['http_port_txt'] = 'Porta http';
+$wb['https_port_txt'] = 'Porta https';
+$wb['http_port_error_regex'] = 'Porta http inválida.';
+$wb['https_port_error_regex'] = 'Porta https inválida.';
+$wb['nginx_directive_blocked_error'] = 'Diretivas do nginx bloqueadas pelas configurações de segurança:';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_folder.lng b/interface/web/sites/lib/lang/br_web_folder.lng
index 34a3f65b0c..193cb4636f 100644
--- a/interface/web/sites/lib/lang/br_web_folder.lng
+++ b/interface/web/sites/lib/lang/br_web_folder.lng
@@ -4,5 +4,5 @@ $wb['parent_domain_id_txt'] = 'Site';
 $wb['path_txt'] = 'Caminho';
 $wb['active_txt'] = 'Ativo';
 $wb['path_error_regex'] = 'Caminho da pasta é inválido.';
-$wb['error_folder_already_protected_txt'] = 'Já existe um registro para esta pasta.';
+$wb['error_folder_already_protected_txt'] = 'Já existe esta pasta.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_folder_user.lng b/interface/web/sites/lib/lang/br_web_folder_user.lng
index dd63d02eec..5dc0354fec 100644
--- a/interface/web/sites/lib/lang/br_web_folder_user.lng
+++ b/interface/web/sites/lib/lang/br_web_folder_user.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['web_folder_id_txt'] = 'Pastas protegidas';
+$wb['web_folder_id_txt'] = 'Pasta';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['active_txt'] = 'Ativo';
 $wb['folder_error_empty'] = 'Nenhuma pasta selecionada.';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['no_folder_perm'] = 'Você não tem permissão para esta pasta.';
 $wb['error_user_exists_already_txt'] = 'Já existe um registro igual para este usuário.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_folder_user_list.lng b/interface/web/sites/lib/lang/br_web_folder_user_list.lng
index e108c219b9..8ad8c48257 100644
--- a/interface/web/sites/lib/lang/br_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/br_web_folder_user_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Usuários de pastas';
+$wb['list_head_txt'] = 'Usuário de Pasta';
 $wb['active_txt'] = 'Ativo';
-$wb['web_folder_id_txt'] = 'ID da pasta';
+$wb['web_folder_id_txt'] = 'Pasta';
 $wb['username_txt'] = 'Usuário';
 $wb['add_new_record_txt'] = 'Adicionar novo usuário';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_subdomain.lng b/interface/web/sites/lib/lang/br_web_subdomain.lng
index 0ccc574805..53cb94ab54 100644
--- a/interface/web/sites/lib/lang/br_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_subdomain.lng
@@ -6,21 +6,21 @@ $wb['ssl_organisation_unit_txt'] = 'Departamento';
 $wb['ssl_country_txt'] = 'País';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['type_txt'] = 'Tipo';
 $wb['parent_domain_id_txt'] = 'Site Pai';
-$wb['redirect_type_txt'] = 'Tipo do Redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho do Redirecionamento';
+$wb['redirect_type_txt'] = 'Tipo de redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
 $wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['vhost_type_txt'] = 'Tipo VHost';
-$wb['hd_quota_txt'] = 'Cota de Disco';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
 $wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
@@ -29,22 +29,22 @@ $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio para esta conta foi alcançado.';
-$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
+$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
-$wb['domain_error_regex'] = 'Nome do domínio é inválido.';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
 $wb['host_txt'] = 'Host';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
-$wb['domain_error_wildcard'] = 'Curingas de subdomínios não são permitidos.';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \'proxy\' exige uma URL como caminho de redirecionamento.';
-$wb['http_port_txt'] = 'Porta HTTP';
-$wb['https_port_txt'] = 'Porta HTTPS';
-$wb['http_port_error_regex'] = 'Porta HTTP inválida.';
-$wb['https_port_error_regex'] = 'Porta HTTPS inválida.';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento "proxy" exige uma URL como caminho de redirecionamento.';
+$wb['http_port_txt'] = 'Porta http';
+$wb['https_port_txt'] = 'Porta https';
+$wb['http_port_error_regex'] = 'Porta http inválida.';
+$wb['https_port_error_regex'] = 'Porta https inválida.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index 4c72b1fd88..01a7414a98 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -1,116 +1,116 @@
 <?php
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
 $wb['ssl_organisation_unit_txt'] = 'Departamento';
 $wb['ssl_country_txt'] = 'País';
+$wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
+$wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Site Parente';
-$wb['redirect_type_txt'] = 'Tipo Redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho do redirecionamento';
+$wb['parent_domain_id_txt'] = 'Site Pai';
+$wb['redirect_type_txt'] = 'Tipo de redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
-$wb['document_root_txt'] = 'Pasta personalizada documentroot';
+$wb['document_root_txt'] = 'Document-root';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
-$wb['ip_address_txt'] = 'Endereço IP';
-$wb['vhost_type_txt'] = 'Tipo VHost';
-$wb['hd_quota_txt'] = 'Cota de Disco';
+$wb['ip_address_txt'] = 'Endereço IPv4';
+$wb['ipv6_address_txt'] = 'Endereço IPv6';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
 $wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
-$wb['errordocs_txt'] = 'Pasta personalizada errordocuments';
+$wb['errordocs_txt'] = 'Proprietário do Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['ssl_txt'] = 'SSL';
-$wb['ssl_letsencrypt_txt'] = 'Let\'s Encrypt';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio de site para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
 $wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe site, apelido de domínio ou subdomínio com este nome';
-$wb['domain_error_regex'] = 'Nome do domínio é inválido.';
-$wb['hd_quota_error_empty'] = 'Cota de disco está em branco.';
+$wb['domain_error_empty'] = 'O campo "Domínio" está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O campo "Domínio" é inválido.';
+$wb['domain_error_acme_invalid'] = 'Domínio genérico inválido não permitido.';
+$wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
 $wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
-$wb['stats_password_txt'] = 'Senha do diretório de estatísticas';
-$wb['ssl_domain_txt'] = 'Domínio SSL';
-$wb['allow_override_txt'] = 'Permitir sobrescrever';
-$wb['limit_web_quota_free_txt'] = 'Cota de disco máxima';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \\"/teste\\" ou \\"http://www.dominio.com.br/teste/\\".';
+$wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
+$wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = 'Limite da cota de disco disponível';
+$wb['ssl_state_error_regex'] = 'O campo "Estado" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. São caracteres válidos: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
 $wb['stats_user_txt'] = 'Usuário de estatísticas web';
-$wb['stats_type_txt'] = 'Tipo de estatística web';
-$wb['custom_php_ini_txt'] = 'php.ini personalizado';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' em branco';
-$wb['none_txt'] = 'Nenhuma';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
+$wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
+$wb['none_txt'] = 'Nenhum';
 $wb['disabled_txt'] = 'Desabilitado';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
-$wb['save_certificate_txt'] = 'Salvar certificado';
-$wb['create_certificate_txt'] = 'Adicionar certificado';
-$wb['delete_certificate_txt'] = 'Remover certificado';
-$wb['ipv6_address_txt'] = 'Endereço IPv6';
+$wb['save_certificate_txt'] = 'Salvar Certificado';
+$wb['create_certificate_txt'] = 'Adicionar Certificado';
+$wb['delete_certificate_txt'] = 'Remover Certificado';
 $wb['nginx_directives_txt'] = 'Diretivas do nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretivas Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretivas www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para o PHP-FPM';
-$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
-$wb['error_no_sni_txt'] = 'O SNI para SSL não está ativo neste servidor. Você só pode habilitar um certificado para cada endereço IP.';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['php_fpm_chroot_txt'] = 'Chroot php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Valores permitidos para configurações do PHP-FPM pm devem obedecer os critérios: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do  PHP-FPM pm.start_servers deve ser um número positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor da cota de disco é inválido.';
-$wb['traffic_quota_error_regex'] = 'Valor da cota de tráfego é inválido.';
-$wb['ssl_key_txt'] = 'Chave';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não insira barra - \\"\\".';
-$wb['domain_error_autosub'] = 'Já existe um subdomínio com essas configurações.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx disponíveis:';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
 $wb['no_server_error'] = 'Nenhum servidor selecionado.';
@@ -118,39 +118,44 @@ $wb['no_backup_txt'] = 'Sem backup';
 $wb['daily_backup_txt'] = 'Diário';
 $wb['weekly_backup_txt'] = 'Semanal';
 $wb['monthly_backup_txt'] = 'Mensal';
-$wb['rewrite_rules_txt'] = 'Regras de reescrita';
+$wb['rewrite_rules_txt'] = 'Reescrever Regras';
 $wb['invalid_rewrite_rules_txt'] = 'Regras de reescrita inválidas';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
-$wb['web_folder_txt'] = 'Pasta web';
-$wb['web_folder_invalid_txt'] = 'A pasta web informada é inválida, por favor escolha um nome diferente.';
-$wb['web_folder_unique_txt'] = 'A pasta web informada já existe, por favor escolha um nome diferente.';
-$wb['host_txt'] = 'Nome do servidor';
-$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
+$wb['server_chosen_not_ok'] = 'O servidor selecionado não é permitido para esta conta.';
 $wb['variables_txt'] = 'Variáveis';
 $wb['added_by_txt'] = 'Cadastrado por';
 $wb['added_date_txt'] = 'Data do cadastro';
-$wb['backup_excludes_txt'] = 'Diretórios excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*,web/backup)';
-$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos.';
-$wb['server_chosen_not_ok'] = 'O servidor selecionado não é permitido para esta conta.';
-$wb['subdomain_error_empty'] = 'O campo subdomínio está em branco ou contém caracteres inválidos.';
+$wb['backup_excludes_txt'] = 'Diretórios Excluídos';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*, web/backup)';
+$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracteres inválidos.';
+$wb['web_folder_txt'] = 'Pasta web';
+$wb['web_folder_invalid_txt'] = 'A pasta web é inválida, por favor selecione outra.';
+$wb['web_folder_unique_txt'] = 'A pasta web é já está em uso, por favor selecione outra.';
+$wb['host_txt'] = 'Nome do host';
+$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
+$wb['variables_txt'] = 'Variáveis';
+$wb['backup_excludes_txt'] = 'Diretórios Excluídos';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*, web/backup)';
+$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracteres inválidos.';
+$wb['subdomain_error_empty'] = 'O subdomínio está em branco ou possui caracteres inválidos.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['enable_spdy_txt'] = 'Habilitar SPDY/HTTP2';
-$wb['load_client_data_txt'] = 'Carregas detalhes do cliente';
+$wb['load_client_data_txt'] = 'Carregar detalhes do cliente';
 $wb['load_my_data_txt'] = 'Carregar detalhes do contato';
 $wb['reset_client_data_txt'] = 'Limpar dados';
+$wb['document_root_txt'] = 'Document Root';
+$wb['ssl_letsencrypt_txt'] = 'Let\'s Encrypt SSL';
 $wb['rewrite_to_https_txt'] = 'Reescrever HTTP para HTTPS';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['directive_snippets_id_txt'] = 'Configurações do servidor de páginas';
-$wb['http_port_txt'] = 'Porta HTTP';
-$wb['https_port_txt'] = 'Porta HTTPS';
-$wb['http_port_error_regex'] = 'Porta HTTP inválida.';
-$wb['https_port_error_regex'] = 'Porta HTTPS inválida.';
+$wb['directive_snippets_id_txt'] = 'Configurações do servidor web';
+$wb['http_port_txt'] = 'Porta http';
+$wb['https_port_txt'] = 'Porta https';
+$wb['http_port_error_regex'] = 'Porta http inválida.';
+$wb['https_port_error_regex'] = 'Porta https inválida.';
 $wb['enable_pagespeed_txt'] = 'Habilitar PageSpeed';
-$wb['log_retention_txt'] = 'Tempo de armazenamenro dos arquivos de log';
-$wb['log_retention_error_regex'] = 'Tempo de armazenamento, em dias (valores permitidos: min. 0 - max. 9999)';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
-$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['log_retention_txt'] = 'Tempo de retenção do log de arquivos';
+$wb['log_retention_error_regex'] = 'Tempo de retenção em dias (valores permitidos: mínimo 0, máximo 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Cota de disco não pode ser configurada para 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain_admin_list.lng b/interface/web/sites/lib/lang/br_web_vhost_domain_admin_list.lng
index 6b1385926d..3c0c7fd01e 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain_admin_list.lng
@@ -7,8 +7,8 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['add_new_record_txt'] = 'Adicionar novo site';
 $wb['add_new_subdomain_txt'] = 'Adicionar novo subdomínio';
-$wb['add_new_aliasdomain_txt'] = 'Adicionar novo apelido de domínio';
+$wb['add_new_aliasdomain_txt'] = 'Adicionar novo alias de domínio';
 $wb['domain_list_head_txt'] = 'Sites';
-$wb['aliasdomain_list_head_txt'] = 'Apelidos de domínios (vhost)';
+$wb['aliasdomain_list_head_txt'] = 'Alias de domínio (vhost)';
 $wb['subdomain_list_head_txt'] = 'Subdomínios (vhost)';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain_list.lng b/interface/web/sites/lib/lang/br_web_vhost_domain_list.lng
index e8fb6bfb09..8170afc2d3 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain_list.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain_list.lng
@@ -5,10 +5,10 @@ $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['add_new_record_txt'] = 'Adicionar novo site';
-$wb['parent_domain_id_txt'] = 'Site';
 $wb['add_new_subdomain_txt'] = 'Adicionar novo subdomínio';
-$wb['add_new_aliasdomain_txt'] = 'Adicionar novo apelido';
+$wb['add_new_aliasdomain_txt'] = 'Adicionar novo alias de domínio';
+$wb['parent_domain_id_txt'] = 'Site';
 $wb['domain_list_head_txt'] = 'Sites';
-$wb['aliasdomain_list_head_txt'] = 'Apelidos de domínios (vhost)';
+$wb['aliasdomain_list_head_txt'] = 'Alias de domínio (vhost)';
 $wb['subdomain_list_head_txt'] = 'Subdomínios (vhost)';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
index fa6ddad484..390b7402e7 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
@@ -1,10 +1,10 @@
 <?php
 $wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['web_folder_txt'] = 'Pasta web';
-$wb['web_folder_invalid_txt'] = 'A pasta web informada é inválida, por favor insira um nome diferente.';
-$wb['web_folder_unique_txt'] = 'A pasta web informada já existe, por favor insira um nome diferente.';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias do backup';
+$wb['web_folder_invalid_txt'] = 'A pasta é escolhida é inválida, por favor escolha outra.';
+$wb['web_folder_unique_txt'] = 'A pasta web escolhida está em uso, por favor escolha outra.';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
@@ -13,65 +13,66 @@ $wb['ssl_country_txt'] = 'País';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
-$wb['host_txt'] = 'Hostname';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida. Por favor, não insira barra - \\"/\\".';
+$wb['host_txt'] = 'Nome do host';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['type_txt'] = 'Tipo';
+$wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho para redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
 $wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
 $wb['ip_address_txt'] = 'Endereço IPv4';
 $wb['ipv6_address_txt'] = 'Endereço IPv6';
-$wb['vhost_type_txt'] = 'Tipo vhost';
-$wb['hd_quota_txt'] = 'Cota de Disco';
-$wb['traffic_quota_txt'] = 'Cota de Tráfego';
+$wb['vhost_type_txt'] = 'Tipo do vHost';
+$wb['hd_quota_txt'] = 'Cota de disco';
+$wb['traffic_quota_txt'] = 'Cota de tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
-$wb['errordocs_txt'] = 'Páginas de erro personalizadas (error-documents)';
+$wb['errordocs_txt'] = 'Proprietário do error-documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio para esta conta foi alcançado.';
-$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios site para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
+$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe um site, apelido de domínio ou subdomínio para este domínio.';
-$wb['domain_error_regex'] = 'Nome do domínio é inválido.';
-$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios';
-$wb['hd_quota_error_empty'] = 'Valor da cota de disco é 0 ou está em branco.';
-$wb['traffic_quota_error_empty'] = 'Valor da cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' está em branco.';
+$wb['domain_error_empty'] = 'O campo "Domínio" está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O campo "Domínio" é inválido.';
+$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
+$wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
-$wb['stats_password_txt'] = 'Senha para estatísticas web';
+$wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
 $wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Cota de disco';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. Caracteres válidos são: \'0-9\' e \\".,-_\\".';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. Caracteres válidos são: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \\"/teste/\\" ou \\"http://www.dominio.com.br/teste/\\".';
-$wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
+$wb['limit_web_quota_free_txt'] = 'Limite disponível da cota de disco';
+$wb['ssl_state_error_regex'] = 'O campo "Estado" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. Caracteres válidos são: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
+$wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Usuário para estatísticas web';
-$wb['stats_type_txt'] = 'Programa para estatísticas web';
+$wb['stats_user_txt'] = 'Usuário de estatísticas web';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
 $wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
 $wb['none_txt'] = 'Nenhum';
 $wb['disabled_txt'] = 'Desabilitado';
@@ -81,51 +82,51 @@ $wb['save_certificate_txt'] = 'Salvar certificado';
 $wb['create_certificate_txt'] = 'Adicionar certificado';
 $wb['delete_certificate_txt'] = 'Remover certificado';
 $wb['nginx_directives_txt'] = 'Diretivas do nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretivas Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretivas www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para o PHP-FPM';
-$wb['error_no_sni_txt'] = 'O SNI para SSL não está ativo neste servidor. Você só pode habilitar um certificado para cada endereço IP.';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Valores permitidos para configurações do PHP-FPM pm devem obedecer os critérios: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do PHP-FPM pm.start_servers deve ser um número positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor da cota de disco é inválido.';
-$wb['traffic_quota_error_regex'] = 'Valor da cota de tráfego é inválido.';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de Processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx disponíveis:';
-$wb['proxy_directives_txt'] = 'Diretivas do Proxy';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
+$wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['rewrite_rules_txt'] = 'Regras de Reescrita';
+$wb['rewrite_rules_txt'] = 'Reescrever regras';
 $wb['invalid_rewrite_rules_txt'] = 'Regras de reescrita inválidas';
-$wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas Permitidas:';
+$wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 $wb['variables_txt'] = 'Variáveis';
 $wb['backup_excludes_txt'] = 'Diretórios Excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: \\"web/cache/*,web/backup\\".)';
-$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos.';
-$wb['subdomain_error_empty'] = 'O campo \\"Subdomínio\\" está em branco ou contém caracteres inválidos.';
-$wb['http_port_txt'] = 'Porta HTTP';
-$wb['https_port_txt'] = 'Porta HTTPS';
-$wb['http_port_error_regex'] = 'Porta HTTP inválida.';
-$wb['https_port_error_regex'] = 'Porta HTTPS inválida.';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*, web/backup)';
+$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracteres inválidos.';
+$wb['subdomain_error_empty'] = 'O subdomínio está em branco ou possui caracteres inválidos.';
+$wb['http_port_txt'] = 'Porta http';
+$wb['https_port_txt'] = 'Porta https';
+$wb['http_port_error_regex'] = 'Porta http inválida.';
+$wb['https_port_error_regex'] = 'Porta https inválida.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_webdav_user.lng b/interface/web/sites/lib/lang/br_webdav_user.lng
index 4347f8ae36..485e3a7747 100644
--- a/interface/web/sites/lib/lang/br_webdav_user.lng
+++ b/interface/web/sites/lib/lang/br_webdav_user.lng
@@ -7,15 +7,15 @@ $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_webdav_user_txt'] = 'O limite de usuários webdav para esta conta foi alcançado.';
-$wb['username_error_empty'] = 'Usuário está em branco.';
+$wb['username_error_empty'] = 'O nome do usuário está em branco.';
 $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
-$wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
-$wb['directory_error_empty'] = 'Diretório está em branco.';
+$wb['username_error_regex'] = 'O nome de usuário possui caracteres não permitidos.';
+$wb['directory_error_empty'] = 'O diretório está em branco.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['dir_dot_error'] = 'Não é permitido \\"..\\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \\"./\\" no caminho.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['dir_dot_error'] = 'Não é permitido \'..\' no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \'./\' no caminho.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr.lng b/interface/web/sites/lib/lang/tr.lng
index d0570f6c12..b5e7f42e2e 100644
--- a/interface/web/sites/lib/lang/tr.lng
+++ b/interface/web/sites/lib/lang/tr.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['Websites'] = 'Web Sitesi';
+$wb['Websites'] = 'Web Siteleri';
 $wb['Website'] = 'Web Sitesi';
-$wb['Subdomain'] = 'Alt Alan Adı';
-$wb['Aliasdomain'] = 'Başka Alan Adı';
+$wb['Subdomain'] = 'Alt Etki Alanı';
+$wb['Aliasdomain'] = 'Takma Etki Alanı';
 $wb['Database'] = 'Veritabanı';
 $wb['Database User'] = 'Veritabanı Kullanıcıları';
 $wb['Web Access'] = 'Web EriÅŸimi';
@@ -22,7 +22,7 @@ $wb['Shell'] = 'Kabuk';
 $wb['Webdav'] = 'WebDAV';
 $wb['FTP'] = 'FTP';
 $wb['Options'] = 'Ayarlar';
-$wb['Domain'] = 'Alan Adı';
+$wb['Domain'] = 'Etki Alanı';
 $wb['Redirect'] = 'Yönlendirme';
 $wb['SSL'] = 'SSL';
 $wb['Sites'] = 'Siteler';
@@ -30,6 +30,6 @@ $wb['APS Installer'] = 'APS Yükleyici';
 $wb['Available packages'] = 'Kullanılabilecek Paketler';
 $wb['Installed packages'] = 'Yüklü Paketler';
 $wb['Update Packagelist'] = 'Güncelleme Paketi Listesi';
-$wb['Subdomain (Vhost)'] = 'Alt alan adı (SSunucu)';
-$wb['error_proxy_requires_url'] = '\\"Vekil Sunucu\\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
+$wb['Subdomain (Vhost)'] = 'Alt Etki Alanı (Sanal Sunucu)';
+$wb['error_proxy_requires_url'] = '"Vekil Sunucu" yönlendirme türü için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_aps.lng b/interface/web/sites/lib/lang/tr_aps.lng
index 1c6ccd49a6..c876629a74 100644
--- a/interface/web/sites/lib/lang/tr_aps.lng
+++ b/interface/web/sites/lib/lang/tr_aps.lng
@@ -34,20 +34,20 @@ $wb['install_language_txt'] = 'Arayüz dili';
 $wb['new_database_password_txt'] = 'Yeni veritabanı parolası';
 $wb['basic_settings_txt'] = 'Temel ayarlar';
 $wb['package_settings_txt'] = 'Paket ayarları';
-$wb['error_main_domain'] = 'Yükleme yolundaki alan adı geçersiz.';
+$wb['error_main_domain'] = 'Yükleme yolundaki etki alanı geçersiz.';
 $wb['error_no_main_location'] = 'Yazdığınız yükleme yolu geçersiz.';
 $wb['error_inv_main_location'] = 'Yazdığınız yükleme konumunu klasörü geçersiz.';
 $wb['error_license_agreement'] = 'Devam etmek için lisans anlaşmasını onaylamalısınız.';
 $wb['error_no_database_pw'] = 'Yazdığınız veritabanı parolası geçersiz.';
 $wb['error_short_database_pw'] = 'Lütfen daha uzun bir veritabanı parolası yazın.';
-$wb['error_no_value_for'] = '\\"%s\\" alanı boş olamaz.';
-$wb['error_short_value_for'] = '\\"%s\\" alanına daha uzun bir değer yazılmalıdır.';
-$wb['error_long_value_for'] = '\\"%s\\" alanına daha kısa bir değer yazılmalıdır.';
-$wb['error_inv_value_for'] = '\\"%s\\" alanına yazılan değer geçersiz.';
-$wb['error_inv_email_for'] = '\\"%s\\" alanına yazılan e-posta adresi geçersiz.';
-$wb['error_inv_domain_for'] = '\\"%s\\" alanına yazılan alan adı geçersiz.';
-$wb['error_inv_integer_for'] = '\\"%s\\" alanına yazılan sayı geçersiz.';
-$wb['error_inv_float_for'] = '\\"%s\\" alanına yazılan küsuratlı sayı geçersiz.';
+$wb['error_no_value_for'] = '"%s" alanı boş olamaz.';
+$wb['error_short_value_for'] = '"%s" alanına daha uzun bir değer yazılmalıdır.';
+$wb['error_long_value_for'] = '"%s" alanına daha kısa bir değer yazılmalıdır.';
+$wb['error_inv_value_for'] = '"%s" alanına yazılan değer geçersiz.';
+$wb['error_inv_email_for'] = '"%s" alanına yazılan e-posta adresi geçersiz.';
+$wb['error_inv_domain_for'] = '"%s" alanına yazılan etki alanı geçersiz.';
+$wb['error_inv_integer_for'] = '"%s" alanına yazılan sayı geçersiz.';
+$wb['error_inv_float_for'] = '"%s" alanına yazılan küsuratlı sayı geçersiz.';
 $wb['error_used_location'] = 'Yükleme yoluna daha önce yüklenmiş bir paket var.';
 $wb['installation_task_txt'] = 'Yükleme planlandı';
 $wb['installation_error_txt'] = 'Yükleme hatası';
@@ -55,9 +55,4 @@ $wb['installation_success_txt'] = 'Yüklendi';
 $wb['installation_remove_txt'] = 'Kaldırma planlandı';
 $wb['packagelist_update_finished_txt'] = 'APS paket listesi güncellendi.';
 $wb['limit_aps_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla APS kopyası sayısına ulaştınız.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
-$wb['repeat_password_txt'] = 'Parola Onayı';
-$wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
-$wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_aps_instances_list.lng b/interface/web/sites/lib/lang/tr_aps_instances_list.lng
index e8b3532ff4..292c627f85 100644
--- a/interface/web/sites/lib/lang/tr_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/tr_aps_instances_list.lng
@@ -4,8 +4,8 @@ $wb['name_txt'] = 'Ad';
 $wb['version_txt'] = 'Sürüm';
 $wb['customer_txt'] = 'Müşteri';
 $wb['status_txt'] = 'Durum';
-$wb['install_location_txt'] = 'Yükleme Konumu';
-$wb['pkg_delete_confirmation'] = 'Bu yüklemeyi silmek istediğinize emin misiniz?';
+$wb['install_location_txt'] = 'Kurulum Konumu';
+$wb['pkg_delete_confirmation'] = 'Bu kurulumu silmek istediÄŸinize emin misiniz?';
 $wb['filter_txt'] = 'Arama';
 $wb['delete_txt'] = 'Sil';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_backup_stats_list.lng b/interface/web/sites/lib/lang/tr_backup_stats_list.lng
index 65792aa591..f59fcae70a 100644
--- a/interface/web/sites/lib/lang/tr_backup_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_backup_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Backup Stats';
+$wb['list_head_txt'] = 'Yedekleme Durumu';
 $wb['database_name_txt'] = '';
-$wb['active_txt'] = 'Active';
-$wb['domain_txt'] = 'Domain';
-$wb['backup_count_txt'] = 'Backup count';
-$wb['backup_server_txt'] = 'Server';
-$wb['backup_interval_txt'] = 'Interval / cnt.';
-$wb['backup_size_txt'] = 'Backupsize';
+$wb['active_txt'] = 'Etkin';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['backup_count_txt'] = 'Yedek sayısı';
+$wb['backup_server_txt'] = 'Sunucu';
+$wb['backup_interval_txt'] = 'Sıklık / Sayı';
+$wb['backup_size_txt'] = 'Yedek Boyutu';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_cron.lng b/interface/web/sites/lib/lang/tr_cron.lng
index f645d76325..d00e6868c7 100644
--- a/interface/web/sites/lib/lang/tr_cron.lng
+++ b/interface/web/sites/lib/lang/tr_cron.lng
@@ -17,10 +17,10 @@ $wb['run_mday_error_format'] = 'Ayın günü biçimi geçersiz.';
 $wb['run_month_error_format'] = 'Ay biçimi geçersiz.';
 $wb['run_wday_error_format'] = 'Haftanın günü biçimi geçersiz.';
 $wb['command_error_format'] = 'Komut biçimi geçersiz. İnternet adreslerinde yalnız http/https kullanılabilir.';
-$wb['unknown_fieldtype_error'] = 'Bilinmeyen bir alan tipi kullanılmış.';
+$wb['unknown_fieldtype_error'] = 'Bilinmeyen bir alan türü kullanılmış.';
 $wb['server_id_error_empty'] = 'Sunucu kodu boÅŸ olamaz.';
+$wb['command_hint_txt'] = 'Örnek: /var/www/clients/musteriX/webY/betigim.sh ya da http://www.etkialanim.com/yol/betik.php, /var/www/clients/musteriX/webY/web yerine [web_root] kodunu kullanabilirsiniz.';
+$wb['log_output_txt'] = 'Günlük çıktısı';
 $wb['limit_cron_url_txt'] = 'Yalnız İnternet adresli zamanlanmış görev kullanılabilir. Lütfen zamanlanmış görev komutu olarak http:// ile başlayan bir İnternet adresi yazın.';
 $wb['command_error_empty'] = 'Komut boÅŸ olamaz.';
-$wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or http://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.';
-$wb['log_output_txt'] = 'Log output';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database.lng b/interface/web/sites/lib/lang/tr_database.lng
index d5d8c7d856..f443bbb620 100644
--- a/interface/web/sites/lib/lang/tr_database.lng
+++ b/interface/web/sites/lib/lang/tr_database.lng
@@ -1,13 +1,13 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['database_name_txt'] = 'Veritabanı Adı';
 $wb['database_user_txt'] = 'Veritabanı Kullanıcısı';
 $wb['database_ro_user_txt'] = 'Salt okunur veritabanı kullanıcısı';
 $wb['optional_txt'] = 'isteğe bağlı';
 $wb['database_password_txt'] = 'Veritabanı Parolası';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
-$wb['database_charset_txt'] = 'Veritabanı Karakter Seti';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
+$wb['database_charset_txt'] = 'Veritabanı Karakter Kümesi';
 $wb['select_dbuser_txt'] = 'Veritabanı kullanıcısını seçin';
 $wb['no_dbuser_txt'] = 'Yok';
 $wb['remote_access_txt'] = 'Uzaktan EriÅŸim';
@@ -16,34 +16,34 @@ $wb['database_remote_error_ips'] = 'Yazılan IP adreslerinden en az biri hatalı
 $wb['client_txt'] = 'Müşteri';
 $wb['active_txt'] = 'Etkin';
 $wb['database_client_differs_txt'] = 'Web sitesi ve veritabanının ait olduğu müşteriler farklı.';
-$wb['database_name_error_empty'] = 'Veritabanı adı boş.';
-$wb['database_name_error_unique'] = 'Sunucu üzerinde aynı adlı bir veritabanı var. Benzersiz bir ad vermek için, veritabanı adının başına alan adınız gibi bir ek  ekleyebilirsiniz.';
+$wb['database_name_error_empty'] = 'Veritabanı adı boş olamaz.';
+$wb['database_name_error_unique'] = 'Sunucu üzerinde aynı adlı bir veritabanı var. Benzersiz bir ad vermek için, veritabanı adının başına etki alanı adınızı ekleyebilirsiniz.';
 $wb['database_name_error_regex'] = 'Veritabanı adı geçersiz. Veritabanı adı 2-64 uzunluğunda olmalı ve yalnız a-z, A-Z, 0-9 ve alt çizgi(_) karakterlerinden oluşmalıdır.';
-$wb['database_user_error_empty'] = 'Veritabanı kullanıcısı boş olamaz.';
-$wb['database_user_error_unique'] = 'Sunucu üzerinde aynı adlı bir veritabanı kullanıcısı zaten var. Benzersiz bir ad vermek için, örneğin veritabanı kullanıcısı adının başına alan adınızı ekleyebilirsiniz.';
+$wb['database_user_error_empty'] = 'Veritabanı kullanıcı adı boş olamaz.';
+$wb['database_user_error_unique'] = 'Sunucu üzerinde aynı adlı bir veritabanı kullanıcısı zaten var. Benzersiz bir ad vermek için, örneğin veritabanı kullanıcısı adının başına etki alanı adınızı ekleyebilirsiniz.';
 $wb['database_user_error_regex'] = 'Veritabanı kullanıcı adı geçersiz. Veritabanı kullanıcı adı 2-64 uzunluğunda olmalı ve yalnız a-z, A-Z, 0-9 ve alt çizgi(_) karakterlerinden oluşmalıdır.';
-$wb['limit_database_txt'] = 'Ekleyebileceğiniz en fazla veritabanı sayısına ulaştınız.';
+$wb['limit_database_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla veritabanı sayısına ulaştınız.';
 $wb['database_name_change_txt'] = 'Veritabanı adı değiştirilemedi';
 $wb['database_user_missing_txt'] = 'Lütfen bu veritabanı için bir veritabanı kullanıcısı seçin.';
-$wb['database_charset_change_txt'] = 'Veritabanı karakter seti değiştirilemedi';
+$wb['database_charset_change_txt'] = 'Veritabanı karakter kümesi değiştirilemedi';
 $wb['database_name_error_len'] = 'Veritabanı adı - {db} - çok uzun. Veritabanı adı ön ek dahil en fazla 64 karakter olabilir.';
 $wb['database_user_error_len'] = 'Veritabanı kullanıcı adı - {user} - çok uzun. Veritabanı kullanıcı adı ön ek dahil en fazla 16 karakter olabilir.';
-$wb['parent_domain_id_txt'] = 'Site';
+$wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['database_site_error_empty'] = 'Veritabanının ait olduğu siteyi seçin.';
 $wb['select_site_txt'] = '- Siteyi Seçin -';
 $wb['btn_save_txt'] = 'Kaydet';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
 $wb['globalsearch_resultslimit_of_txt'] = '/';
 $wb['globalsearch_resultslimit_results_txt'] = 'sonuç';
-$wb['globalsearch_noresults_text_txt'] = 'Sonuç yok';
+$wb['globalsearch_noresults_text_txt'] = 'Uygun bir sonuç bulunamadı.';
 $wb['globalsearch_noresults_limit_txt'] = '0 sonuç';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Arama';
 $wb['globalsearch_suggestions_text_txt'] = 'Öneriler';
-$wb['limit_database_quota_txt'] = 'Database quota';
-$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
-$wb['limit_database_quota_free_txt'] = 'Max. available DB quota ';
+$wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
+$wb['limit_database_quota_error_notint'] = 'Veritabanı kotası bir sayı olmalıdır';
+$wb['limit_database_quota_free_txt'] = 'Kullanılabilecek en fazla veritabanı kotası';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database_admin_list.lng b/interface/web/sites/lib/lang/tr_database_admin_list.lng
index fc92e1957e..e13404415c 100644
--- a/interface/web/sites/lib/lang/tr_database_admin_list.lng
+++ b/interface/web/sites/lib/lang/tr_database_admin_list.lng
@@ -2,11 +2,11 @@
 $wb['list_head_txt'] = 'Veritabanı';
 $wb['active_txt'] = 'Etkin';
 $wb['remote_access_txt'] = 'Uzaktan EriÅŸim';
+$wb['type_txt'] = 'Tür';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['database_user_txt'] = 'Veritabanı kullanıcısı';
-$wb['database_name_txt'] = 'Veritabanı adı';
-$wb['add_new_record_txt'] = 'Veritabanı ekle';
+$wb['database_user_txt'] = 'Veritabanı Kullanıcı Adı';
+$wb['database_name_txt'] = 'Veritabanı Adı';
+$wb['add_new_record_txt'] = 'Veritabanı Ekle';
 $wb['sys_groupid_txt'] = 'Müşteri';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['type_txt'] = 'Type';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database_list.lng b/interface/web/sites/lib/lang/tr_database_list.lng
index 43ea5f9b6f..591a72af11 100644
--- a/interface/web/sites/lib/lang/tr_database_list.lng
+++ b/interface/web/sites/lib/lang/tr_database_list.lng
@@ -2,10 +2,10 @@
 $wb['list_head_txt'] = 'Veritabanı';
 $wb['active_txt'] = 'Etkin';
 $wb['remote_access_txt'] = 'Uzaktan EriÅŸim';
+$wb['type_txt'] = 'Tür';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['database_user_txt'] = 'Veritabanı Kullanıcısı';
 $wb['database_name_txt'] = 'Veritabanı Adı';
 $wb['add_new_record_txt'] = 'Veritabanı Ekle';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['type_txt'] = 'Type';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng b/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
index 50f2dcc496..a65174977b 100644
--- a/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['database_txt'] = 'Database';
-$wb['server_name_txt'] = 'Server';
-$wb['client_txt'] = 'Client';
-$wb['used_txt'] = 'Used space';
-$wb['quota_txt'] = 'Quota';
-$wb['percentage_txt'] = 'Used in %';
-$wb['list_head_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Veritabanı';
+$wb['server_name_txt'] = 'Sunucu';
+$wb['client_txt'] = 'Müşteri';
+$wb['used_txt'] = 'Kullanılan';
+$wb['quota_txt'] = 'Kota';
+$wb['percentage_txt'] = 'Kullanım Yüzdesi';
+$wb['list_head_txt'] = 'Veritabanı Kotası';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database_user.lng b/interface/web/sites/lib/lang/tr_database_user.lng
index 785c4ecce4..3f6ba89f49 100644
--- a/interface/web/sites/lib/lang/tr_database_user.lng
+++ b/interface/web/sites/lib/lang/tr_database_user.lng
@@ -1,25 +1,25 @@
 <?php
 $wb['database_user_txt'] = 'Veritabanı Kullanıcısı';
 $wb['database_password_txt'] = 'Veritabanı Parolası';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['client_txt'] = 'Müşteri';
 $wb['active_txt'] = 'Etkin';
 $wb['database_user_error_empty'] = 'Veritabanı kullanıcısı boş olamaz.';
-$wb['database_user_error_unique'] = 'Sunucuda aynı adlı bir veritabanı kullanıcısı var. Benzersiz bir ad vermek için, kullanıcı adının başına alan adınız gibi bir ek  ekleyebilirsiniz.';
+$wb['database_user_error_unique'] = 'Sunucuda aynı adlı bir veritabanı kullanıcısı var. Benzersiz bir ad vermek için, kullanıcı adının başına etki alanınızı ekleyebilirsiniz.';
 $wb['database_user_error_regex'] = 'Veritabanı kullanıcı adı geçersiz. Veritabanı kullanıcı adı 2-64 uzunluğunda olmalı ve yalnız a-z, A-Z, 0-9 ve alt çizgi(_) karakterlerinden oluşmalıdır.';
 $wb['database_user_error_len'] = 'Veritabanı kullanıcı adı - {user} - çok uzun. Ön ek dahil en uzun veritabanı kullanıcı adı 16 karakter olmalıdır.';
 $wb['btn_save_txt'] = 'Kaydet';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
 $wb['globalsearch_resultslimit_of_txt'] = '/';
 $wb['globalsearch_resultslimit_results_txt'] = 'sonuç';
-$wb['globalsearch_noresults_text_txt'] = 'Sonuç yok.';
+$wb['globalsearch_noresults_text_txt'] = 'Uygun bir sonuç bulunamadı.';
 $wb['globalsearch_noresults_limit_txt'] = '0 sonuç';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Arama';
 $wb['globalsearch_suggestions_text_txt'] = 'Öneriler';
-$wb['limit_database_user_txt'] = 'The max. number of database users is reached.';
-$wb['database_password_error_empty'] = 'Database password is empty.';
+$wb['limit_database_user_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla veritabanı kullanıcısı sayısına ulaştınız.';
+$wb['database_password_error_empty'] = 'Veritabanı parolası boş.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/tr_ftp_sites_stats_list.lng
index e44025a715..6d2da369d2 100644
--- a/interface/web/sites/lib/lang/tr_ftp_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_ftp_sites_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'FTP traffic';
-$wb['domain_txt'] = 'Domain';
-$wb['this_month_txt'] = 'This month';
-$wb['last_month_txt'] = 'Last month';
-$wb['this_year_txt'] = 'This year';
-$wb['last_year_txt'] = 'Last year';
-$wb['sum_txt'] = 'Sum (Download + Upload)';
-$wb['in_out_txt'] = 'DL/UL';
+$wb['list_head_txt'] = 'FTP TrafiÄŸi';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['this_month_txt'] = 'Bu ay';
+$wb['last_month_txt'] = 'Geçen ay';
+$wb['this_year_txt'] = 'Bu yıl';
+$wb['last_year_txt'] = 'Geçen yıl';
+$wb['sum_txt'] = 'Toplam (İndirme + Yükleme)';
+$wb['in_out_txt'] = 'İnd/Yük';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_ftp_user.lng b/interface/web/sites/lib/lang/tr_ftp_user.lng
index 665d2ec477..155573595e 100644
--- a/interface/web/sites/lib/lang/tr_ftp_user.lng
+++ b/interface/web/sites/lib/lang/tr_ftp_user.lng
@@ -12,7 +12,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['quota_size_txt'] = 'Disk Kotası';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_ftp_user_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla FTP kullanıcısı sayısına ulaştınız.';
@@ -21,15 +21,16 @@ $wb['username_error_unique'] = 'Bu kullanıcı adı zaten var.';
 $wb['username_error_regex'] = 'Kullanıcı adında izin verilmeyen karakterler var.';
 $wb['quota_size_error_empty'] = 'Kota boÅŸ olamaz.';
 $wb['uid_error_empty'] = 'UID boÅŸ olamaz.';
+$wb['gid_error_empty'] = 'GID boÅŸ olamaz.';
 $wb['directory_error_empty'] = 'Klasör boş olamaz.';
 $wb['directory_error_notinweb'] = 'Klasör web kök klasörünün altında bulunmalıdır.';
 $wb['parent_domain_id_error_empty'] = 'Bir web sitesi seçmelisiniz.';
 $wb['quota_size_error_regex'] = 'Kota: Sınırsız olması için -1 sınırlamak için sıfırdan büyük bir rakam yazın';
 $wb['dir_dot_error'] = 'Yol içinde .. kullanılamaz.';
 $wb['dir_slashdot_error'] = 'Yol içinde ./ kullanılamaz.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['expires_txt'] = 'Expire at';
+$wb['expires_txt'] = 'Sona Erme Zamanı';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_shell_user.lng b/interface/web/sites/lib/lang/tr_shell_user.lng
index 5610d59939..e2aa844843 100644
--- a/interface/web/sites/lib/lang/tr_shell_user.lng
+++ b/interface/web/sites/lib/lang/tr_shell_user.lng
@@ -7,7 +7,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['chroot_txt'] = 'Chroot KabuÄŸu';
 $wb['quota_size_txt'] = 'Kota';
 $wb['active_txt'] = 'Etkin';
@@ -22,7 +22,7 @@ $wb['parent_domain_id_error_empty'] = 'Bir web sitesi seçmelisiniz.';
 $wb['ssh_rsa_txt'] = 'SSH-RSA Genel Anahtarı (anahtar ile oturum açmak için)';
 $wb['dir_dot_error'] = 'Yol içinde .. . kullanılamaz.';
 $wb['dir_slashdot_error'] = 'Yol içinde ./ kullanılamaz.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
diff --git a/interface/web/sites/lib/lang/tr_shell_user_list.lng b/interface/web/sites/lib/lang/tr_shell_user_list.lng
index b88c7fa748..5c375a232a 100644
--- a/interface/web/sites/lib/lang/tr_shell_user_list.lng
+++ b/interface/web/sites/lib/lang/tr_shell_user_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Shell Kullanıcısı';
+$wb['list_head_txt'] = 'Kabuk Kullanıcısı';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['parent_domain_id_txt'] = 'Site';
+$wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['username_txt'] = 'Kullanıcı Adı';
-$wb['add_new_record_txt'] = 'Shell Kullanıcısı Ekle';
+$wb['add_new_record_txt'] = 'Kabuk Kullanıcısı Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_user_quota_stats_list.lng b/interface/web/sites/lib/lang/tr_user_quota_stats_list.lng
index 82103410fe..be7712fd46 100644
--- a/interface/web/sites/lib/lang/tr_user_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_user_quota_stats_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Web Sitesi Disk Kotası';
-$wb['domain_txt'] = 'Alan Adı / Web Sitesi';
+$wb['domain_txt'] = 'Etki Alanı / Web Sitesi';
 $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['used_txt'] = 'Kullanılan Alan';
 $wb['hard_txt'] = 'Donanım Sınırı';
diff --git a/interface/web/sites/lib/lang/tr_web_aliasdomain.lng b/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
index 7e4c0b7c51..d7ded7849a 100644
--- a/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['domain_txt'] = 'Takma Alan Adı';
+$wb['domain_txt'] = 'Takma Etki Alanı';
 $wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
 $wb['backup_copies_txt'] = 'Yedek Kopyası Sayısı';
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_key_txt'] = 'SSL Anahtarı';
@@ -12,12 +12,12 @@ $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
-$wb['ssl_domain_txt'] = 'SSL Alan Adı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. / karakterini yazmayın.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
@@ -25,30 +25,30 @@ $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IPv4 Adresi';
 $wb['ipv6_address_txt'] = 'IPv6 Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['errordocs_txt'] = 'Özel Hata Sayfaları';
-$wb['subdomain_txt'] = 'Otomatik Alt Alan';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt alan adı zaten var.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt etki alanı zaten var.';
 $wb['hd_quota_error_empty'] = 'Disk kotası 0 ya da boş olamaz.';
 $wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
-$wb['error_ssl_state_empty'] = 'SSL ÅŸehri boÅŸ olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
 $wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
-$wb['error_ssl_organisation_empty'] = 'SSL kurumu boÅŸ olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
 $wb['error_ssl_organisation_unit_empty'] = 'SSL birimi boÅŸ olamaz.';
 $wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
 $wb['error_ssl_cert_empty'] = 'SSL sertifikası alanı boş olamaz';
@@ -56,31 +56,31 @@ $wb['client_group_id_txt'] = 'Müşteri';
 $wb['stats_password_txt'] = 'Web İstatistikleri Parolası';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Kullanılabilecek En Fazla Disk Kotası';
-$wb['ssl_state_error_regex'] = 'SSL şehri geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_organisation_error_regex'] = 'SSL kurumu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_organistaion_unit_error_regex'] = 'SSL birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
 $wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Web istatistikleri kullanıcı adı';
-$wb['stats_type_txt'] = 'Web istatistikleri yazılımı';
-$wb['custom_php_ini_txt'] = 'Özel php.ini ayarları';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
 $wb['none_txt'] = 'Yok';
 $wb['disabled_txt'] = 'Devre dışı';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['save_certificate_txt'] = 'Sertifikayı kaydet';
-$wb['create_certificate_txt'] = 'Sertifika ekle';
-$wb['delete_certificate_txt'] = 'Sertifikayı sil';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
 $wb['nginx_directives_txt'] = 'nginx Yönergeleri';
 $wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'PHP-FPM İçin Soket Kullanılsın';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
 $wb['error_no_sni_txt'] = 'Bu sunucuda SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası etkinleştirebilirsiniz.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -102,14 +102,14 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri sıfır ya da pozitif bir tamsayı olmalıdır.';
 $wb['pm_ondemand_hint_txt'] = 'İsteğe bağlı işlem yöneticisini kullanabilmek için PHP Sürümünüz >= 5.3.9 olmalıdır. Daha önceki bir PHP sürümü için ondemand özelliğini seçerseniz, PHP başlatılamaz!';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Parçaları:';
-$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Parçaları:';
-$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Parçaları:';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
-$wb['Domain'] = 'Başka alan adı';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
+$wb['Domain'] = 'Takma Etki Alanı';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_aliasdomain_list.lng b/interface/web/sites/lib/lang/tr_web_aliasdomain_list.lng
index b7acfd099a..e4dcaacbe7 100644
--- a/interface/web/sites/lib/lang/tr_web_aliasdomain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_aliasdomain_list.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['list_head_txt'] = 'Takma Alan Adı';
+$wb['list_head_txt'] = 'Takma Etki Alanı Adı';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['domain_txt'] = 'Takma Alan Adı';
-$wb['add_new_record_txt'] = 'Takma Alan Adı Ekle';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı alan adı zaten var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
+$wb['parent_domain_id_txt'] = 'Web SitesÅŸ';
+$wb['domain_txt'] = 'Takma Etki Alanı Adı';
+$wb['add_new_record_txt'] = 'Yeni takma etki alanı adı ekle';
+$wb['domain_error_empty'] = 'Etki alanı adı boş olamaz.';
+$wb['domain_error_unique'] = 'Etki alanı adı eşsiz olmalıdır.';
+$wb['domain_error_regex'] = 'Etki alanı adı geçersiz.';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['none_txt'] = 'Yok';
+$wb['none_txt'] = 'Hiçbiri';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_backup_list.lng b/interface/web/sites/lib/lang/tr_web_backup_list.lng
index c9bc16ae78..31aea494ca 100644
--- a/interface/web/sites/lib/lang/tr_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_backup_list.lng
@@ -1,8 +1,9 @@
 <?php
 $wb['list_head_txt'] = 'Alınmış Yedekler';
 $wb['date_txt'] = 'Tarih';
-$wb['backup_type_txt'] = 'Tip';
+$wb['backup_type_txt'] = 'Tür';
 $wb['filename_txt'] = 'Yedek Dosyası';
+$wb['filesize_txt'] = 'Dosya Boyutu';
 $wb['restore_backup_txt'] = 'Geri Yükle';
 $wb['download_backup_txt'] = 'Ä°ndir';
 $wb['download_info_txt'] = 'Yedek dosyası bir kaç dakika içinde web sitesinin backup klasörü altında indirilmeye hazır olacak.';
@@ -10,12 +11,12 @@ $wb['restore_info_txt'] = 'Yedeğin geri yüklenmesine başlandı. Bu işlemin t
 $wb['restore_confirm_txt'] = 'Geri yükleme işlemi web sitenizde bulunan dosyaların üzerine yazar. Bu yedeği geri yüklemek istediğinize emin misiniz?';
 $wb['download_pending_txt'] = 'Zaten bekleyen bir yedek indirme iÅŸlemi var.';
 $wb['restore_pending_txt'] = 'Zaten bekleyen bir yedek geri yükleme işlemi var.';
+$wb['delete_backup_txt'] = 'YedeÄŸi Sil';
+$wb['delete_info_txt'] = 'Yedeğin silinmesine başlandı. Bu işlemin tamamlanması bir kaç dakika sürebilir.';
+$wb['delete_confirm_txt'] = 'Gerçekten bu yedeği silmek istediğinize emin misiniz?';
+$wb['delete_pending_txt'] = 'Bekleyen bir yedek silme iÅŸlemi var.';
+$wb['backup_type_mongodb'] = 'MongoDB Veritabanı';
 $wb['backup_type_mysql'] = 'MySQL Veritabanı';
 $wb['backup_type_web'] = 'Web sitesi dosyaları';
-$wb['filesize_txt'] = 'Filesize';
-$wb['delete_backup_txt'] = 'Delete Backup';
-$wb['delete_info_txt'] = 'Delete of the backup has been started. This action takes several minutes to be completed.';
-$wb['delete_confirm_txt'] = 'Really delete this backup?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
-$wb['backup_type_mongodb'] = 'MongoDB Database';
+
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_childdomain.lng b/interface/web/sites/lib/lang/tr_web_childdomain.lng
index e11c6a92b5..235e870117 100644
--- a/interface/web/sites/lib/lang/tr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_childdomain.lng
@@ -1,26 +1,26 @@
 <?php
-$wb['ssl_state_txt'] = 'Mevki';
-$wb['ssl_locality_txt'] = 'Semt';
-$wb['ssl_organisation_txt'] = 'Organizasyon';
-$wb['ssl_organisation_unit_txt'] = 'Organizasyon Unitesi';
+$wb['ssl_state_txt'] = 'Ä°l';
+$wb['ssl_locality_txt'] = 'Bölge';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
+$wb['ssl_organisation_unit_txt'] = 'KuruluÅŸ Birimi';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
-$wb['ssl_action_txt'] = 'SSL Eylemi';
+$wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Domain';
-$wb['type_txt'] = 'Çeşit';
-$wb['parent_domain_id_txt'] = 'Ana Website';
-$wb['redirect_type_txt'] = 'Yönlendirme Çeşidi';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['type_txt'] = 'Tür';
+$wb['parent_domain_id_txt'] = 'Ana Web Sitesi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
-$wb['active_txt'] = 'Aktif';
-$wb['document_root_txt'] = 'Documentroot';
+$wb['active_txt'] = 'Etkin';
+$wb['document_root_txt'] = 'Belge Kök Klasörü';
 $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IP Adresleri';
-$wb['vhost_type_txt'] = 'VHost Çeşidi';
-$wb['hd_quota_txt'] = 'Harddisk Kotası';
+$wb['vhost_type_txt'] = 'VHost Türü';
+$wb['hd_quota_txt'] = 'Sabit Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
@@ -28,93 +28,93 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınızdaki max. web domaini sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınızdaki max. aliasdomain sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınızdaki max. web subdomain sayısına ulaştınız.';
-$wb['apache_directives_txt'] = 'Apache direktifleri';
-$wb['domain_error_empty'] = 'Domain boÅŸ.';
-$wb['domain_error_unique'] = 'Bu isimde websitesi veya sub / aliasdomain zaten var.';
-$wb['domain_error_regex'] = 'Domain ismi geçersiz.';
-$wb['host_txt'] = 'Host';
-$wb['redirect_error_regex'] = 'Geçersiz yönlendirme yolu. Geçerli yönlendirmeler örneğin: /test/ veya http://www.domain.tld/test/';
-$wb['no_redirect_txt'] = 'No redirect';
-$wb['no_flag_txt'] = 'No flag';
-$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
-$wb['proxy_directives_txt'] = 'Proxy Directives';
-$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
-$wb['backup_interval_txt'] = 'Backup interval';
-$wb['backup_copies_txt'] = 'Number of backup copies';
-$wb['ssl_key_txt'] = 'SSL Key';
-$wb['ssl_domain_txt'] = 'SSL Domain';
-$wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.';
-$wb['ipv6_address_txt'] = 'IPv6-Address';
-$wb['errordocs_txt'] = 'Own Error-Documents';
-$wb['subdomain_txt'] = 'Auto-Subdomain';
-$wb['domain_error_autosub'] = 'There is already a subdomain with these settings.';
-$wb['hd_quota_error_empty'] = 'Harddisk quota is 0 or empty.';
-$wb['traffic_quota_error_empty'] = 'Traffic quota is empty.';
-$wb['error_ssl_state_empty'] = 'SSL State is empty.';
-$wb['error_ssl_locality_empty'] = 'SSL Locality is empty.';
-$wb['error_ssl_organisation_empty'] = 'SSL Organisation is empty.';
-$wb['error_ssl_organisation_unit_empty'] = 'SSL Organisation Unit is empty.';
-$wb['error_ssl_country_empty'] = 'SSL Country is empty.';
-$wb['error_ssl_cert_empty'] = 'SSL Certificate field is empty';
-$wb['client_group_id_txt'] = 'Client';
-$wb['stats_password_txt'] = 'Set Webstatistics password';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
+$wb['apache_directives_txt'] = 'Apache Yönergeleri';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt / takma etki alanı zaten var.';
+$wb['domain_error_regex'] = 'Etki alanı adı geçersiz.';
+$wb['domain_error_acme_invalid'] = 'acme.invalid etki alanı adı kullanılamaz.';
+$wb['domain_error_wildcard'] = 'Genel alt etki alanları kullanılamaz.';
+$wb['host_txt'] = 'Sunucu';
+$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Örnek yönlendirmeler: /test/ ya da http://www.domain.tld/test/';
+$wb['no_redirect_txt'] = 'Yönlendirme Yok';
+$wb['no_flag_txt'] = 'Ä°ÅŸaret Yok';
+$wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
+$wb['error_proxy_requires_url'] = '"Vekil Sunucu" yönlendirme türü için yönlendirilecek yol olarak kullanılacak bir adres gereklidir.';
+$wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
+$wb['backup_copies_txt'] = 'Yedek Sayısı';
+$wb['ssl_key_txt'] = 'SSL Anahtarı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
+$wb['web_folder_error_regex'] = 'Yazılan klasör geçersiz. Lütfen bölü karakterini yazmayın.';
+$wb['ipv6_address_txt'] = 'IPv6-Adresi';
+$wb['errordocs_txt'] = 'Özel Hata Sayfaları';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
+$wb['domain_error_autosub'] = 'Aynı ayarları kullanan bir alt etki alanı zaten var.';
+$wb['hd_quota_error_empty'] = 'Sabit disk kotası 0 ya da boş.';
+$wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
+$wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL kuruluÅŸ birimi boÅŸ olamaz.';
+$wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
+$wb['error_ssl_cert_empty'] = 'SSL sertifika alanı boş olamaz.';
+$wb['client_group_id_txt'] = 'Müşteri';
+$wb['stats_password_txt'] = 'Web İstatistikleri Parolası';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Max. available Harddisk Quota';
-$wb['ssl_state_error_regex'] = 'Invalid SSL State. Valid characters are: a-z, 0-9 and .,-_';
-$wb['ssl_locality_error_regex'] = 'Invalid SSL Locality. Valid characters are: a-z, 0-9 and .,-_';
-$wb['ssl_organisation_error_regex'] = 'Invalid SSL Organisation. Valid characters are: a-z, 0-9 and .,-_';
-$wb['ssl_organistaion_unit_error_regex'] = 'Invalid SSL Organisation Unit. Valid characters are: a-z, 0-9 and .,-_';
-$wb['ssl_country_error_regex'] = 'Invalid SSL Country. Valid characters are: A-Z';
-$wb['limit_traffic_quota_free_txt'] = 'Max. available Traffic Quota';
+$wb['limit_web_quota_free_txt'] = 'Kullanılabilecek en fazla sabit disk kotası';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
+$wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
-$wb['traffic_quota_exceeded_txt'] = 'Traffic quota exceeded';
+$wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Webstatistics username';
-$wb['stats_type_txt'] = 'Webstatistics program';
-$wb['custom_php_ini_txt'] = 'Custom php.ini settings';
-$wb['none_txt'] = 'None';
-$wb['disabled_txt'] = 'Disabled';
-$wb['save_certificate_txt'] = 'Save certificate';
-$wb['create_certificate_txt'] = 'Create certificate';
-$wb['delete_certificate_txt'] = 'Delete certificate';
-$wb['nginx_directives_txt'] = 'nginx Directives';
-$wb['seo_redirect_txt'] = 'SEO Redirect';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
+$wb['none_txt'] = 'Yok';
+$wb['disabled_txt'] = 'Devre Dışı';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
+$wb['nginx_directives_txt'] = 'nginx Yönergeleri';
+$wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
-$wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
+$wb['error_no_sni_txt'] = 'Bu sunucu üzerinde SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası kullanılabilir.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
 $wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
 $wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
 $wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Values of PHP-FPM pm settings must be as follows: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children must be a positive integer value.';
-$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers must be a positive integer value.';
-$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be a positive integer value.';
-$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
-$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
-$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['pm_txt'] = 'PHP-FPM Process Manager';
+$wb['error_php_fpm_pm_settings_txt'] = 'Values of PHP-FPM pm ayarları şu şekilde olmalıdır: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children değeri pozitif bir tamsayı olmalıdır.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers değeri pozitif bir tamsayı olmalıdır.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers değeri pozitif bir tamsayı olmalıdır.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
+$wb['hd_quota_error_regex'] = 'Sabit disk kotası geçersiz.';
+$wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
+$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['pm_txt'] = 'PHP-FPM İşlem Yönetimi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout must be a positive integer value.';
-$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests must be an integer value >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Please note that you must have PHP version >= 5.3.9 in order to use the ondemand process manager. If you select ondemand for an older PHP version, PHP will not start anymore!';
-$wb['generate_password_txt'] = 'Generate Password';
-$wb['repeat_password_txt'] = 'Repeat Password';
-$wb['password_mismatch_txt'] = 'The passwords do not match.';
-$wb['password_match_txt'] = 'The passwords do match.';
-$wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:';
-$wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:';
-$wb['available_nginx_directive_snippets_txt'] = 'Available nginx Directive Snippets:';
-$wb['Domain'] = 'Aliasdomain';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
-$wb['ssl_letsencrypt_exclude_txt'] = 'Don\'t add to Let\'s Encrypt certificate';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri pozitif bir tamsayı olmalıdır >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Ondemand işlem yönetimini kullanabilmek için PHP sürümünüz >= 5.3.9 olmalıdır. Daha eski bir PHP sürümü için ondemand seçilirse PHP çalışmaya başlayamaz!';
+$wb['generate_password_txt'] = 'Parola Ãœret';
+$wb['repeat_password_txt'] = 'Parola Onayı';
+$wb['password_mismatch_txt'] = 'Parola ve onayı aynı değil';
+$wb['password_match_txt'] = 'Parola ve onayı aynı değil.';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
+$wb['Domain'] = 'Takma Etki Alanı Adı';
+$wb['ssl_letsencrypt_exclude_txt'] = 'Let\'s Encrypt sertifikası eklenmesin';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_childdomain_list.lng b/interface/web/sites/lib/lang/tr_web_childdomain_list.lng
index 26b3acc9e9..33127c84cf 100644
--- a/interface/web/sites/lib/lang/tr_web_childdomain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_childdomain_list.lng
@@ -1,18 +1,18 @@
 <?php
-$wb['list_head_txt'] = 'Takma Alan Adı';
+$wb['list_head_txt'] = 'Takma Etki Alanı';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['domain_txt'] = 'Takma Alan Adı';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı alan adı zaten var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
+$wb['domain_txt'] = 'Takma Etki Alanı';
+$wb['add_new_subdomain_txt'] = 'Alt Etki Alanı Ekle';
+$wb['add_new_aliasdomain_txt'] = 'Takma Etki Alanı Ekle';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı etki alanı zaten var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_acme_invalid'] = 'acme.invalid etki alanı adı kullanılamaz.';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
 $wb['none_txt'] = 'Yok';
-$wb['add_new_subdomain_txt'] = 'Add new Subdomain';
-$wb['add_new_aliasdomain_txt'] = 'Add new Aliasdomain';
-$wb['aliasdomain_list_head_txt'] = 'Aliasdomains';
-$wb['subdomain_list_head_txt'] = 'Subdomains';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['aliasdomain_list_head_txt'] = 'Takma Etki Alanları';
+$wb['subdomain_list_head_txt'] = 'Alt Etki Alanları';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_directive_snippets.lng b/interface/web/sites/lib/lang/tr_web_directive_snippets.lng
index d2590e53cf..a4380942e6 100644
--- a/interface/web/sites/lib/lang/tr_web_directive_snippets.lng
+++ b/interface/web/sites/lib/lang/tr_web_directive_snippets.lng
@@ -1,3 +1,3 @@
 <?php
-$wb['directive_snippets_id_txt'] = 'Desired configuration';
+$wb['directive_snippets_id_txt'] = 'İstenilen Yapılandırma';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_domain.lng b/interface/web/sites/lib/lang/tr_web_domain.lng
index c97ce73778..65db621f56 100644
--- a/interface/web/sites/lib/lang/tr_web_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_domain.lng
@@ -3,7 +3,7 @@ $wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
 $wb['backup_copies_txt'] = 'Yedek Kopyası Sayısı';
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_key_txt'] = 'SSL Anahtarı';
@@ -11,13 +11,13 @@ $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
-$wb['ssl_domain_txt'] = 'SSL Alan Adı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. Lütfen / karakterini yazmayın.';
-$wb['type_txt'] = 'Tip';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. Lütfen bölü karakterini yazmayın.';
+$wb['type_txt'] = 'Tür';
 $wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
@@ -25,62 +25,62 @@ $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IPv4 Adresi';
 $wb['ipv6_address_txt'] = 'IPv6 Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['errordocs_txt'] = 'Özel Hata Sayfaları';
-$wb['subdomain_txt'] = 'Otomatik Alt Alan';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt alan adı zaten var.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt etki alanı zaten var.';
 $wb['hd_quota_error_empty'] = 'Disk kotası 0 ya da boş olamaz.';
 $wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
-$wb['error_ssl_state_empty'] = 'SSL ÅŸehri boÅŸ olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
 $wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
-$wb['error_ssl_organisation_empty'] = 'SSL kurumu boÅŸ olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
 $wb['error_ssl_organisation_unit_empty'] = 'SSL birimi boÅŸ olamaz.';
 $wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
 $wb['error_ssl_cert_empty'] = 'SSL sertifikası alanı boş olamaz';
 $wb['client_group_id_txt'] = 'Müşteri';
-$wb['stats_password_txt'] = 'Web istatistikleri parolası';
+$wb['stats_password_txt'] = 'Web İstatistikleri Parolası';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Kullanılabilecek en fazla disk kotası';
-$wb['ssl_state_error_regex'] = 'SSL şehri geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
-$wb['ssl_organisation_error_regex'] = 'SSL kurumu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
-$wb['ssl_organistaion_unit_error_regex'] = 'SSL birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
-$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
+$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Web istatistikleri kullanıcı adı';
-$wb['stats_type_txt'] = 'Web istatistikleri yazılımı';
-$wb['custom_php_ini_txt'] = 'Özel php.ini ayarları';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
 $wb['none_txt'] = 'Yok';
 $wb['disabled_txt'] = 'Devre Dışı';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['save_certificate_txt'] = 'Sertifikayı kaydet';
-$wb['create_certificate_txt'] = 'Sertifika ekle';
-$wb['delete_certificate_txt'] = 'Sertifikayı sil';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
 $wb['nginx_directives_txt'] = 'nginx Yönergeleri';
 $wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'PHP-FPM İçin Soket Kullanılsın';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
 $wb['error_no_sni_txt'] = 'Bu sunucuda SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası etkinleştirebilirsiniz.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -102,15 +102,15 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri sıfır ya da pozitif bir tamsayı olmalıdır.';
 $wb['pm_ondemand_hint_txt'] = 'İsteğe bağlı işlem yöneticisini kullanabilmek için PHP Sürümünüz >= 5.3.9 olmalıdır. Daha önceki bir PHP sürümü için ondemand özelliğini seçerseniz, PHP başlatılamaz!';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Parçaları:';
-$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Parçaları:';
-$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Parçaları:';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
 $wb['no_server_error'] = 'Bir sunucu seçmelisiniz.';
 $wb['no_backup_txt'] = 'Yedek alınmasın';
 $wb['daily_backup_txt'] = 'Günlük';
@@ -122,16 +122,16 @@ $wb['allowed_rewrite_rule_directives_txt'] = 'Kullanılabilecek Yönergeler:';
 $wb['configuration_error_txt'] = 'AYAR HATASI';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['added_by_txt'] = 'Ekleyen';
-$wb['added_date_txt'] = 'EklendiÄŸi tarih';
+$wb['added_date_txt'] = 'Eklenme Tarihi';
 $wb['backup_excludes_txt'] = 'Katılmayacak Klasörler';
 $wb['backup_excludes_note_txt'] = '(Klasörleri virgül ile ayırarak yazın. Örnek: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karakterler bulunuyor.';
 $wb['invalid_custom_php_ini_settings_txt'] = 'php.ini ayarları geçersiz';
 $wb['invalid_system_user_or_group_txt'] = 'Sistem kullanıcısı ya da grubu geçersiz';
 $wb['apache_directive_blocked_error'] = 'Apache yönergesi güvenlik ayarları tarafından engellenmiş:';
-$wb['http_port_txt'] = 'HTTP Port';
-$wb['https_port_txt'] = 'HTTPS Port';
-$wb['http_port_error_regex'] = 'HTTP Port invalid.';
-$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
-$wb['nginx_directive_blocked_error'] = 'Nginx directive blocked by security settings:';
+$wb['http_port_txt'] = 'HTTP Kapı Numarası';
+$wb['https_port_txt'] = 'HTTPS Kapı Numarası';
+$wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.';
+$wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
+$wb['nginx_directive_blocked_error'] = 'nginx yönergesi güvenlik ayarları tarafından engellendi:';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_domain_admin_list.lng b/interface/web/sites/lib/lang/tr_web_domain_admin_list.lng
index f86967d0d4..487c6a087c 100644
--- a/interface/web/sites/lib/lang/tr_web_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_domain_admin_list.lng
@@ -4,6 +4,6 @@ $wb['list_head_txt'] = 'Web Siteleri';
 $wb['domain_id_txt'] = 'Kod';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['add_new_record_txt'] = 'Web Sitesi Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_domain_list.lng b/interface/web/sites/lib/lang/tr_web_domain_list.lng
index a2320b5dcd..fbfa573470 100644
--- a/interface/web/sites/lib/lang/tr_web_domain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_domain_list.lng
@@ -3,6 +3,6 @@ $wb['list_head_txt'] = 'Web Siteleri';
 $wb['domain_id_txt'] = 'Kod';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['add_new_record_txt'] = 'Web Sitesi Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_folder_user.lng b/interface/web/sites/lib/lang/tr_web_folder_user.lng
index a0479ee0d1..afbe01cab1 100644
--- a/interface/web/sites/lib/lang/tr_web_folder_user.lng
+++ b/interface/web/sites/lib/lang/tr_web_folder_user.lng
@@ -4,8 +4,8 @@ $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
 $wb['active_txt'] = 'Etkin';
 $wb['folder_error_empty'] = 'Bir web klasörü seçilmemiş.';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
diff --git a/interface/web/sites/lib/lang/tr_web_sites_stats_list.lng b/interface/web/sites/lib/lang/tr_web_sites_stats_list.lng
index 4fbdef871d..685fc22fc6 100644
--- a/interface/web/sites/lib/lang/tr_web_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_sites_stats_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Web TrafiÄŸi';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['this_month_txt'] = 'Bu ay';
 $wb['last_month_txt'] = 'Geçen ay';
 $wb['this_year_txt'] = 'Bu yıl';
diff --git a/interface/web/sites/lib/lang/tr_web_subdomain.lng b/interface/web/sites/lib/lang/tr_web_subdomain.lng
index 188b257589..7d1cdcc5c0 100644
--- a/interface/web/sites/lib/lang/tr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_subdomain.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
@@ -9,17 +9,17 @@ $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['type_txt'] = 'Tip';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['type_txt'] = 'Tür';
 $wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
 $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IP Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
@@ -28,23 +28,23 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_wildcard'] = 'Genel karakterler içeren alt alan adları kullanılamaz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_wildcard'] = 'Genel karakterler içeren alt etki alanları kullanılamaz.';
 $wb['host_txt'] = 'Sunucu';
-$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
+$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
-$wb['error_proxy_requires_url'] = '\\"Vekil Sunucu\\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
-$wb['http_port_txt'] = 'HTTP Port';
-$wb['https_port_txt'] = 'HTTPS Port';
-$wb['http_port_error_regex'] = 'HTTP Port invalid.';
-$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
+$wb['error_proxy_requires_url'] = '"Vekil Sunucu" yönlendirme türü için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
+$wb['http_port_txt'] = 'HTTP Kapı Numarası';
+$wb['https_port_txt'] = 'HTTPS Kapı Numarası';
+$wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.';
+$wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_subdomain_list.lng b/interface/web/sites/lib/lang/tr_web_subdomain_list.lng
index 8155af64b3..6527242e2d 100644
--- a/interface/web/sites/lib/lang/tr_web_subdomain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_subdomain_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Alt Alan Adları';
+$wb['list_head_txt'] = 'Alt Etki Alanları';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['domain_txt'] = 'Alt Alan Adı';
-$wb['add_new_record_txt'] = 'Alt Alan Ekle';
+$wb['domain_txt'] = 'Alt Etki Alanı';
+$wb['add_new_record_txt'] = 'Alt Etki Alanı Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 2e9384fee4..4cfe808bfb 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -3,7 +3,7 @@ $wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
 $wb['backup_copies_txt'] = 'Yedek Kopyası Sayısı';
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_key_txt'] = 'SSL Anahtarı';
@@ -11,13 +11,13 @@ $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
-$wb['ssl_domain_txt'] = 'SSL Alan Adı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. Lütfen / karakterini yazmayın.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
@@ -25,63 +25,63 @@ $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IPv4 Adresi';
 $wb['ipv6_address_txt'] = 'IPv6 Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['errordocs_txt'] = 'Özel Hata Sayfaları';
-$wb['subdomain_txt'] = 'Otomatik Alt Alan';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt alan adı zaten var.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_acme_invalid'] = 'acme.invalid etki alanı adı kullanılamaz.';
+$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt etki alanı zaten var.';
 $wb['hd_quota_error_empty'] = 'Disk kotası 0 ya da boş olamaz.';
 $wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
-$wb['error_ssl_state_empty'] = 'SSL ÅŸehri boÅŸ olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
 $wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
-$wb['error_ssl_organisation_empty'] = 'SSL kurumu boÅŸ olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
 $wb['error_ssl_organisation_unit_empty'] = 'SSL birimi boÅŸ olamaz.';
 $wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
 $wb['error_ssl_cert_empty'] = 'SSL sertifikası alanı boş olamaz';
 $wb['client_group_id_txt'] = 'Müşteri';
-$wb['stats_password_txt'] = 'Web istatistikleri parolası';
+$wb['stats_password_txt'] = 'Web İstatistikleri Parolası';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Kullanılabilecek en fazla disk kotası';
-$wb['ssl_state_error_regex'] = 'SSL şehri geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
-$wb['ssl_organisation_error_regex'] = 'SSL kurumu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
-$wb['ssl_organistaion_unit_error_regex'] = 'SSL birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
 $wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Web istatistikleri kullanıcı adı';
-$wb['stats_type_txt'] = 'Web istatistikleri yazılımı';
-$wb['custom_php_ini_txt'] = 'Özel php.ini ayarları';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
 $wb['none_txt'] = 'Yok';
 $wb['disabled_txt'] = 'Devre Dışı';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['save_certificate_txt'] = 'Sertifikayı kaydet';
-$wb['create_certificate_txt'] = 'Sertifika ekle';
-$wb['delete_certificate_txt'] = 'Sertifikayı sil';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
 $wb['nginx_directives_txt'] = 'nginx Yönergeleri';
 $wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'PHP-FPM İçin Soket Kullanılsın';
-$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
 $wb['error_no_sni_txt'] = 'Bu sunucuda SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası etkinleştirebilirsiniz.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -103,15 +103,15 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri sıfır ya da pozitif bir tamsayı olmalıdır.';
 $wb['pm_ondemand_hint_txt'] = 'İsteğe bağlı işlem yöneticisini kullanabilmek için PHP Sürümünüz >= 5.3.9 olmalıdır. Daha önceki bir PHP sürümü için ondemand özelliğini seçerseniz, PHP başlatılamaz!';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Parçaları:';
-$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Parçaları:';
-$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Parçaları:';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
 $wb['no_server_error'] = 'Bir sunucu seçmelisiniz.';
 $wb['no_backup_txt'] = 'Yedek alınmasın';
 $wb['daily_backup_txt'] = 'Günlük';
@@ -121,36 +121,39 @@ $wb['rewrite_rules_txt'] = 'Yeniden Yazma Kuralları';
 $wb['invalid_rewrite_rules_txt'] = 'Yeniden Yazma Kuralları Geçersiz';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Kullanılabilecek Yönergeler:';
 $wb['configuration_error_txt'] = 'AYAR HATASI';
+$wb['server_chosen_not_ok'] = 'Seçilmiş sunucuda bu hesap kullanılamıyor.';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['added_by_txt'] = 'Ekleyen';
-$wb['added_date_txt'] = 'EklendiÄŸi tarih';
+$wb['added_date_txt'] = 'Eklenme Tarihi';
 $wb['backup_excludes_txt'] = 'Katılmayacak Klasörler';
 $wb['backup_excludes_note_txt'] = '(Klasörleri virgül ile ayırarak yazın. Örnek: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karakterler bulunuyor.';
-$wb['server_chosen_not_ok'] = 'The selected server is not allowed for this account.';
-$wb['web_folder_txt'] = 'Web folder';
-$wb['web_folder_invalid_txt'] = 'The web folder is invalid, please choose a different one.';
-$wb['web_folder_unique_txt'] = 'The web folder is already used, please choose a different one.';
-$wb['host_txt'] = 'Hostname';
-$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
-$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
-$wb['load_client_data_txt'] = 'Load client details';
-$wb['load_my_data_txt'] = 'Load my contact details';
-$wb['reset_client_data_txt'] = 'Reset data';
-$wb['ssl_letsencrypt_txt'] = 'Let\'s Encrypt SSL';
-$wb['rewrite_to_https_txt'] = 'Rewrite HTTP to HTTPS';
-$wb['password_strength_txt'] = 'Password strength';
-$wb['directive_snippets_id_txt'] = 'Web server config';
-$wb['http_port_txt'] = 'HTTP Port';
-$wb['https_port_txt'] = 'HTTPS Port';
-$wb['http_port_error_regex'] = 'HTTP Port invalid.';
-$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
-$wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
-$wb['log_retention_txt'] = 'Logfiles retention time';
-$wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
-$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['web_folder_txt'] = 'Web klasörü';
+$wb['web_folder_invalid_txt'] = 'Web klasörü geçersiz, lütfen başka bir klasör seçin.';
+$wb['web_folder_unique_txt'] = 'Web klasörü zaten kullanılıyor, lütfen başka bir klasör seçin.';
+$wb['host_txt'] = 'Sunucu adı';
+$wb['domain_error_wildcard'] = 'Genel alt etki alanları kullanılamaz.';
+$wb['variables_txt'] = 'DeÄŸiÅŸkenler';
+$wb['backup_excludes_txt'] = 'Katılmayacak Klasörler';
+$wb['backup_excludes_note_txt'] = '(Klasörleri virgül ile ayırarak yazın. Örnek: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karakterler bulunuyor.';
+$wb['subdomain_error_empty'] = 'Alt etki alanı boş ya da geçersiz karakterler içeriyor.';
+$wb['btn_save_txt'] = 'Kaydet';
+$wb['btn_cancel_txt'] = 'Ä°ptal';
+$wb['enable_spdy_txt'] = 'SPDY kullanılsın';
+$wb['load_client_data_txt'] = 'Müşteri Bilgilerini Yükle';
+$wb['load_my_data_txt'] = 'Profil Bilgilerimi Yükle';
+$wb['reset_client_data_txt'] = 'Verileri Sıfırla';
+$wb['document_root_txt'] = 'Belge Kök Klasörü';
+$wb['ssl_letsencrypt_txt'] = 'Let';
+$wb['rewrite_to_https_txt'] = 'HTTP, HTTPS Yönlendirme';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
+$wb['directive_snippets_id_txt'] = 'Web Sunucu Yapılandırması';
+$wb['http_port_txt'] = 'HTTP Kapı Numarası';
+$wb['https_port_txt'] = 'HTTPS Kapı Numarası';
+$wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.';
+$wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
+$wb['enable_pagespeed_txt'] = 'PageSpeed Kullanılsın';
+$wb['log_retention_txt'] = 'Günlük Dosyalarının Silinme Sıklığı';
+$wb['log_retention_error_regex'] = 'Gün cinsinden günlük dosyalarının silinme sıklığı (En küçük: 0 - En büyük: 9999)';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain_admin_list.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain_admin_list.lng
index 4f07fd8588..423e956234 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain_admin_list.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['sys_groupid_txt'] = 'Client';
-$wb['list_head_txt'] = 'Websites';
-$wb['domain_id_txt'] = 'ID';
-$wb['active_txt'] = 'Active';
-$wb['server_id_txt'] = 'Server';
-$wb['domain_txt'] = 'Domain';
-$wb['add_new_record_txt'] = 'Add new website';
-$wb['add_new_subdomain_txt'] = 'Add new subdomain';
-$wb['add_new_aliasdomain_txt'] = 'Add new aliasdomain';
-$wb['domain_list_head_txt'] = 'Websites';
-$wb['aliasdomain_list_head_txt'] = 'Aliasdomains (Vhost)';
-$wb['subdomain_list_head_txt'] = 'Subdomains (Vhost)';
+$wb['sys_groupid_txt'] = 'Müşteri';
+$wb['list_head_txt'] = 'Web Siteleri';
+$wb['domain_id_txt'] = 'Kod';
+$wb['active_txt'] = 'Etkin';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Web Sitesi Ekle';
+$wb['add_new_subdomain_txt'] = 'Alt Etki Alanı Ekle';
+$wb['add_new_aliasdomain_txt'] = 'Takma Etki Alanı Ekle';
+$wb['domain_list_head_txt'] = 'Web Siteleri';
+$wb['aliasdomain_list_head_txt'] = 'Takma Etki Alanları (Sanal Sunucu)';
+$wb['subdomain_list_head_txt'] = 'Alt Etki Alanları (Sanal Sunucu)';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain_list.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain_list.lng
index b7df7ed9d0..061afec494 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain_list.lng
@@ -3,12 +3,12 @@ $wb['list_head_txt'] = 'Web Siteleri';
 $wb['domain_id_txt'] = 'Kod';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['parent_domain_id_txt'] = 'Website';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['add_new_record_txt'] = 'Web Sitesi Ekle';
-$wb['add_new_subdomain_txt'] = 'Add new subdomain';
-$wb['add_new_aliasdomain_txt'] = 'Add new aliasdomain';
-$wb['domain_list_head_txt'] = 'Websites';
-$wb['aliasdomain_list_head_txt'] = 'Aliasdomains (Vhost)';
-$wb['subdomain_list_head_txt'] = 'Subdomains (Vhost)';
+$wb['add_new_subdomain_txt'] = 'Alt Etki Alanı Ekle';
+$wb['add_new_aliasdomain_txt'] = 'Takma Etki Alanı Ekle';
+$wb['parent_domain_id_txt'] = 'Web Sitesi';
+$wb['domain_list_head_txt'] = 'Web Siteleri';
+$wb['aliasdomain_list_head_txt'] = 'Takma Etki Alanları (Sanal Sunucu)';
+$wb['subdomain_list_head_txt'] = 'Alt Etki Alanı Adları (Sanal Sunucu)';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
index 2bbcfb661c..a24883881f 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
@@ -7,7 +7,7 @@ $wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
 $wb['backup_copies_txt'] = 'Yedek Kopyası Sayısı';
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_key_txt'] = 'SSL Anahtarı';
@@ -15,13 +15,14 @@ $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
-$wb['ssl_domain_txt'] = 'SSL Alan Adı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['host_txt'] = 'Sunucu Adı';
 $wb['web_folder_error_regex'] = 'Yazılan klasör geçersiz. Lütfen / karakteri kullanmadan yazın.';
-$wb['type_txt'] = 'Tip';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['type_txt'] = 'Tür';
+$wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
@@ -29,30 +30,30 @@ $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IPv4 Adresi';
 $wb['ipv6_address_txt'] = 'IPv6 Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['errordocs_txt'] = 'Özel Hata Sayfaları';
-$wb['subdomain_txt'] = 'Otomatik Alt Alan';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_wildcard'] = 'Genel karakterler içeren alt alan adları kullanılamaz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_wildcard'] = 'Genel karakterler içeren alt etki alanları kullanılamaz.';
 $wb['hd_quota_error_empty'] = 'Disk kotası 0 ya da boş olamaz.';
 $wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
-$wb['error_ssl_state_empty'] = 'SSL ÅŸehri boÅŸ olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
 $wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
-$wb['error_ssl_organisation_empty'] = 'SSL kurumu boÅŸ olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
 $wb['error_ssl_organisation_unit_empty'] = 'SSL birimi boÅŸ olamaz.';
 $wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
 $wb['error_ssl_cert_empty'] = 'SSL sertifikası alanı boş olamaz';
@@ -60,31 +61,31 @@ $wb['client_group_id_txt'] = 'Müşteri';
 $wb['stats_password_txt'] = 'Web istatistikleri parolasını ayarla';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Kullanılabilecek en fazla disk kotası';
-$wb['ssl_state_error_regex'] = 'SSL şehri geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_organisation_error_regex'] = 'SSL kurumu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_organistaion_unit_error_regex'] = 'SSL birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
 $wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Web istatistikleri kullanıcı adı';
-$wb['stats_type_txt'] = 'Web istatistikleri yazılımı';
-$wb['custom_php_ini_txt'] = 'Özel php.ini ayarları';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
 $wb['none_txt'] = 'Yok';
 $wb['disabled_txt'] = 'Devre Dışı';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['save_certificate_txt'] = 'Sertifikayı kaydet';
-$wb['create_certificate_txt'] = 'Sertifika ekle';
-$wb['delete_certificate_txt'] = 'Sertifikayı sil';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
 $wb['nginx_directives_txt'] = 'nginx Yönergeleri';
 $wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'PHP-FPM İçin Soket Kullanılsın';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
 $wb['error_no_sni_txt'] = 'Bu sunucuda SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası etkinleştirebilirsiniz.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -106,26 +107,26 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri sıfır ya da pozitif bir tamsayı olmalıdır.';
 $wb['pm_ondemand_hint_txt'] = 'İsteğe bağlı işlem yöneticisini kullanabilmek için PHP Sürümünüz >= 5.3.9 olmalıdır. Daha önceki bir PHP sürümü için ondemand özelliğini seçerseniz, PHP başlatılamaz!';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Parçaları:';
-$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Parçaları:';
-$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Parçaları:';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
 $wb['rewrite_rules_txt'] = 'Yeniden Yazma Kuralları';
 $wb['invalid_rewrite_rules_txt'] = 'Yeniden Yazma Kuralları Geçersiz';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Kullanılabilecek Yönergeler:';
-$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
+$wb['configuration_error_txt'] = 'YAPILANDIRMA HATASI';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['backup_excludes_txt'] = 'Katılmayacak Klasörler';
 $wb['backup_excludes_note_txt'] = '(Klasörleri virgül ile ayırarak yazın. Örnek: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karakterler bulunuyor.';
-$wb['subdomain_error_empty'] = 'Alt alan adı boş ya da geçersiz karakterler içeriyor.';
-$wb['http_port_txt'] = 'HTTP Port';
-$wb['https_port_txt'] = 'HTTPS Port';
-$wb['http_port_error_regex'] = 'HTTP Port invalid.';
-$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
+$wb['subdomain_error_empty'] = 'Alt etki alanı boş ya da geçersiz karakterler içeriyor.';
+$wb['http_port_txt'] = 'HTTP Kapı Numarası';
+$wb['https_port_txt'] = 'HTTPS Kapı Numarası';
+$wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.';
+$wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_subdomain_list.lng b/interface/web/sites/lib/lang/tr_web_vhost_subdomain_list.lng
index bc7e7622c2..6527242e2d 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_subdomain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_subdomain_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Alt Alanlar';
+$wb['list_head_txt'] = 'Alt Etki Alanları';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['domain_txt'] = 'Alt Alan Adı';
-$wb['add_new_record_txt'] = 'Alt alan ekle';
+$wb['domain_txt'] = 'Alt Etki Alanı';
+$wb['add_new_record_txt'] = 'Alt Etki Alanı Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_webdav_user.lng b/interface/web/sites/lib/lang/tr_webdav_user.lng
index e592f052c4..c80088da95 100644
--- a/interface/web/sites/lib/lang/tr_webdav_user.lng
+++ b/interface/web/sites/lib/lang/tr_webdav_user.lng
@@ -4,7 +4,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_webdav_user_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla webdav kullanıcısı sayısına ulaştınız.';
 $wb['username_error_empty'] = 'Kullanıcı adı boş olamaz.';
@@ -14,7 +14,7 @@ $wb['directory_error_empty'] = 'Klasör boş olamaz.';
 $wb['parent_domain_id_error_empty'] = 'Bir web sitesi seçmelisiniz.';
 $wb['dir_dot_error'] = 'Yol içinde .. kullanılamaz.';
 $wb['dir_slashdot_error'] = 'Yol içinde ./ kullanılamaz.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
diff --git a/interface/web/strengthmeter/lib/lang/br_strengthmeter.lng b/interface/web/strengthmeter/lib/lang/br_strengthmeter.lng
index 172646f212..2b2fb51f9a 100644
--- a/interface/web/strengthmeter/lib/lang/br_strengthmeter.lng
+++ b/interface/web/strengthmeter/lib/lang/br_strengthmeter.lng
@@ -2,7 +2,7 @@
 $wb['password_strength_0_txt'] = 'Muito curta';
 $wb['password_strength_1_txt'] = 'Fraca';
 $wb['password_strength_2_txt'] = 'Razoável';
-$wb['password_strength_3_txt'] = 'Bom';
+$wb['password_strength_3_txt'] = 'Boa';
 $wb['password_strength_4_txt'] = 'Forte';
-$wb['password_strength_5_txt'] = 'Muito Forte';
+$wb['password_strength_5_txt'] = 'Muito forte';
 ?>
diff --git a/interface/web/tools/lib/lang/br.lng b/interface/web/tools/lib/lang/br.lng
index 3000e972fc..1c11472165 100644
--- a/interface/web/tools/lib/lang/br.lng
+++ b/interface/web/tools/lib/lang/br.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['User Settings'] = 'Configurações do usuário';
+$wb['User Settings'] = 'Configurações de usuários';
 $wb['Settings'] = 'Configurações';
 $wb['ISPConfig Tools'] = 'Ferramentas';
+$wb['Interface'] = 'Interface';
 $wb['Password and Language'] = 'Senha e Idioma';
-$wb['ispconfig_tools_note'] = 'Este módulo permite você alterar a senha e o idioma e sincronizar os registros dns.';
+$wb['ispconfig_tools_note'] = 'Este módulo permite alterar a senha e idioma e iniciar a sincronização de registros dns.';
+$wb['Sync Tools'] = 'Sincronização';
 $wb['Resync'] = 'Sincronizar';
-$wb['Sync Tools'] = 'Sincronismo';
 $wb['Import'] = 'Importar';
-$wb['ISPConfig 3 mail'] = 'ISPConfig 3';
-$wb['PDNS Tupa'] = 'Tupa PowerDNS';
-$wb['Interface'] = 'Interface';
+$wb['ISPConfig 3 mail'] = 'e-Mails do ISPConfig';
+$wb['PDNS Tupa'] = 'PowerDNS';
 ?>
diff --git a/interface/web/tools/lib/lang/br_import_ispconfig.lng b/interface/web/tools/lib/lang/br_import_ispconfig.lng
index 8124d13f10..d77242b483 100644
--- a/interface/web/tools/lib/lang/br_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/br_import_ispconfig.lng
@@ -1,23 +1,23 @@
 <?php
 $wb['head_txt'] = 'Importar configuração de e-mail do ISPConfig 3';
-$wb['legend_txt'] = 'Detalhes da conexão do servidor remoto';
-$wb['legend2_txt'] = 'Importar domínio de e-mails';
+$wb['legend_txt'] = 'Detalhes da conexão remota do servidor';
+$wb['legend2_txt'] = 'Importar domínio de e-mail';
 $wb['resync_sites_txt'] = 'Sincronizar sites';
 $wb['resync_ftp_txt'] = 'Sincronizar usuários ftp';
-$wb['resync_shell_txt'] = 'Sincronizar usuários shell';
-$wb['resync_cron_txt'] = 'Sincronizar tarefas na cron';
-$wb['resync_db_txt'] = 'Sincronizar configurações de usuários do banco de dados';
-$wb['resync_mailbox_txt'] = 'Sincronizar e-mails';
+$wb['resync_shell_txt'] = 'Sincronizar usuários do shell';
+$wb['resync_cron_txt'] = 'Sincronizar tarefas no cron';
+$wb['resync_db_txt'] = 'Sincronizar configurações do cliente de banco de dados';
+$wb['resync_mailbox_txt'] = 'Sincronizar contas de e-mail';
 $wb['resync_dns_txt'] = 'Sincronizar registros dns';
 $wb['btn_start_txt'] = 'Iniciar importação';
-$wb['btn_connect_txt'] = 'Conectar no servidor remoto';
+$wb['btn_connect_txt'] = 'Conectar ao servidor remoto';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['client_group_id_txt'] = 'Cliente local';
-$wb['mail_domain_txt'] = 'Domínio de e-mails remoto';
-$wb['import_mailbox_txt'] = 'Importar e-mails';
-$wb['import_aliasdomain_txt'] = 'Importar apelidos de domínio';
-$wb['import_alias_txt'] = 'Importar apelidos de e-mails';
-$wb['import_forward_txt'] = 'Importar encaminhamentos de e-mails';
-$wb['import_user_filter_txt'] = 'Importar filtros de e-mail de usuários';
+$wb['mail_domain_txt'] = 'Domínio de e-mail remoto';
+$wb['import_mailbox_txt'] = 'Importar contas de e-mail';
+$wb['import_aliasdomain_txt'] = 'Importar alias de domínios';
+$wb['import_alias_txt'] = 'Importar alias de e-mail';
+$wb['import_forward_txt'] = 'Importar encaminhamentos de e-mail';
+$wb['import_user_filter_txt'] = 'Importar filtros de e-mail';
 $wb['import_spamfilter_txt'] = 'Importar filtros anti-spam';
 ?>
diff --git a/interface/web/tools/lib/lang/br_import_vpopmail.lng b/interface/web/tools/lib/lang/br_import_vpopmail.lng
index 55bc0bf238..c18b0b6810 100644
--- a/interface/web/tools/lib/lang/br_import_vpopmail.lng
+++ b/interface/web/tools/lib/lang/br_import_vpopmail.lng
@@ -1,7 +1,8 @@
 <?php
-$wb['head_txt'] = 'Importar configuração de e-mail do vpopmail';
-$wb['legend_txt'] = 'Detalhes da conexão do servidor de banco de dados remoto';
-$wb['btn_start_txt'] = 'Iniciar importação';
-$wb['btn_connect_txt'] = 'Conectar servidor remoto';
+$wb['head_txt'] = 'Importar configurações de e-mail do vpopmail';
+$wb['legend_txt'] = 'Detalhes da conexão remota do servidor de banco de dados';
+$wb['btn_start_txt'] = 'Iniciar Importação';
+$wb['btn_connect_txt'] = 'Conectar ao servidor remoto';
 $wb['btn_cancel_txt'] = 'Cancelar';
+
 ?>
diff --git a/interface/web/tools/lib/lang/br_index.lng b/interface/web/tools/lib/lang/br_index.lng
index 437e1f01c3..bbb7085209 100644
--- a/interface/web/tools/lib/lang/br_index.lng
+++ b/interface/web/tools/lib/lang/br_index.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['page_head_txt'] = 'Ferramentas';
+$wb['page_head_txt'] = 'Ferramentas do ISPConfig';
 $wb['page_desc_txt'] = 'Alterar configurações de usuário';
 ?>
diff --git a/interface/web/tools/lib/lang/br_interface.lng b/interface/web/tools/lib/lang/br_interface.lng
index 45341060c5..95677c4b59 100644
--- a/interface/web/tools/lib/lang/br_interface.lng
+++ b/interface/web/tools/lib/lang/br_interface.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['interface_head_txt'] = 'Configurações da interface';
-$wb['interface_desc_txt'] = 'Alterar interface';
+$wb['interface_head_txt'] = 'Configurações da Interface';
+$wb['interface_desc_txt'] = 'Alterar a interface';
 $wb['language_txt'] = 'Idioma';
-$wb['startmodule_txt'] = 'Módulo inicial';
+$wb['startmodule_txt'] = 'Módulo Inicial';
 $wb['app_theme_txt'] = 'Tema';
 ?>
diff --git a/interface/web/tools/lib/lang/br_resync.lng b/interface/web/tools/lib/lang/br_resync.lng
index bf854b33b3..160a35dd0c 100644
--- a/interface/web/tools/lib/lang/br_resync.lng
+++ b/interface/web/tools/lib/lang/br_resync.lng
@@ -1,53 +1,53 @@
 <?php
-$wb['head_txt'] = 'Sincronismo';
-$wb['legend_txt'] = 'Sincronizar';
+$wb['head_txt'] = 'Ferramentas de Sincronização';
+$wb['legend_txt'] = 'Sincronização';
 $wb['resync_all_txt'] = 'Todos os serviços';
 $wb['resync_sites_txt'] = 'Sites';
-$wb['resync_ftp_txt'] = 'Contas ftp';
+$wb['resync_ftp_txt'] = 'Contas FTP';
 $wb['resync_webdav_txt'] = 'Usuários webdav';
-$wb['resync_shell_txt'] = 'Usuários shell';
+$wb['resync_shell_txt'] = 'Usuários do shell';
 $wb['resync_cron_txt'] = 'Tarefas no cron';
-$wb['resync_db_txt'] = 'Configurações de banco de dados de clientes';
-$wb['resync_mailbox_txt'] = 'e-mails';
-$wb['resync_mail_txt'] = 'Domínio de e-mails';
+$wb['resync_db_txt'] = 'Configurações do banco de dados de clientes';
+$wb['resync_mailbox_txt'] = 'Contas de e-mail';
+$wb['resync_mail_txt'] = 'Domínios de e-mail';
 $wb['resync_mailfilter_txt'] = 'Filtros de e-mail';
 $wb['resync_mailinglist_txt'] = 'Listas de e-mail';
 $wb['resync_dns_txt'] = 'Registros dns';
-$wb['resync_vserver_txt'] = 'Servidores virtuais';
+$wb['resync_vserver_txt'] = 'Máquinas virtuais';
 $wb['resync_client_txt'] = 'Clientes e revendas';
 $wb['all_active_txt'] = 'Todos os servidores ativos';
 $wb['all_active_mail_txt'] = 'Todos os servidores de e-mail ativos';
 $wb['all_active_web_txt'] = 'Todos os servidores web ativos';
 $wb['all_active_dns_txt'] = 'Todos os servidores dns ativos';
-$wb['all_active_file_txt'] = 'Todos servidores ftp ativos';
+$wb['all_active_file_txt'] = 'Todos os servidores ftp ativos';
 $wb['all_active_db_txt'] = 'Todos os servidores de banco de dados ativos';
-$wb['all_active_vserver_txt'] = 'Todos servidores virtuais ativos';
-$wb['do_sites_txt'] = 'Sites sincronizados';
-$wb['do_ftp_txt'] = 'Usuários ftp sincronizados';
-$wb['do_webdav_txt'] = 'Usuários webdav sincronizados';
-$wb['do_shell_txt'] = 'Usuários shell sincronizados';
-$wb['do_cron_txt'] = 'Tarefas no cron sincronizadas';
-$wb['do_db_user_txt'] = 'Usuários de banco de dados sincronizados';
-$wb['do_db_txt'] = 'Banco de dados sincronizados';
-$wb['do_mail_txt'] = 'Domínio de e-mails sincronizados';
-$wb['do_mailbox_txt'] = 'Contas de e-mail sincronizadas';
-$wb['do_mail_alias_txt'] = 'Apelidos de e-mail sincronizados';
-$wb['do_mail_access_txt'] = 'Usuários remotos de e-mail sincronizados';
-$wb['do_mail_contentfilter_txt'] = 'Filtros de e-mail sincronizados';
-$wb['do_mail_userfilter_txt'] = 'Filtros de e-mail de usuários sincronizados';
-$wb['do_mailinglist_txt'] = 'Listas de e-mail sincronizadas';
-$wb['do_dns_txt'] = 'Zonas dns sincronizadas';
-$wb['do_vserver_txt'] = 'Servidores virtuais sincronizados';
-$wb['do_clients_txt'] = 'Clientes e revendas sincronizados';
-$wb['no_results_txt'] = 'Não encontrado';
+$wb['all_active_vserver_txt'] = 'Todos as máquinas virtuais ativas';
+$wb['do_sites_txt'] = 'Sites sincronizados.';
+$wb['do_ftp_txt'] = 'Usuários ftp sincronizados.';
+$wb['do_webdav_txt'] = 'Usuários webdav sincronizados.';
+$wb['do_shell_txt'] = 'Usuários do shell sincronizados.';
+$wb['do_cron_txt'] = 'Tarefas no cron sincronizadas.';
+$wb['do_db_user_txt'] = 'Usuários do banco de dados sincronizados.';
+$wb['do_db_txt'] = 'Banco de dados sincronizados.';
+$wb['do_mail_txt'] = 'Domínios de e-mal sincronizados.';
+$wb['do_mailbox_txt'] = 'Contas de e-mail sincronizadas.';
+$wb['do_mail_alias_txt'] = 'Alias de domínios de e-mail sincronizados.';
+$wb['do_mail_access_txt'] = 'Acessos de e-mail sincronizados.';
+$wb['do_mail_contentfilter_txt'] = 'Filtros de conteúdo de e-mail sincronizados.';
+$wb['do_mail_userfilter_txt'] = 'Filtros de e-mail sincronizados.';
+$wb['do_mailinglist_txt'] = 'Listas de e-mail sincronizadas.';
+$wb['do_dns_txt'] = 'Zonas DNS sincronizadas.';
+$wb['do_vserver_txt'] = 'Máquinas virtuais sincronizados.';
+$wb['do_clients_txt'] = 'Clientes e revendas sincronizados.';
+$wb['no_results_txt'] = 'Nada foi encontrado.';
 $wb['btn_start_txt'] = 'Iniciar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['do_mail_spamfilter_policy_txt'] = 'Políticas anti-spam sincronizadas';
-$wb['do_mail_spamfilter_txt'] = 'Filtros anti-spam sincronizados';
-$wb['do_mailget_txt'] = 'Contas de busca de e-mail sincronizadas';
-$wb['resync_mailget_txt'] = 'Contas de busca de e-mails';
-$wb['resync_mailtransport_txt'] = 'E-Mail Transport';
-$wb['resync_mailrelay_txt'] = 'E-Mail Relay';
-$wb['do_mailtransport_txt'] = 'Resynced Mailtransport';
-$wb['do_mailrelay_txt'] = 'Resynced Mailrelay';
+$wb['do_mail_spamfilter_policy_txt'] = 'Sincronizar políticas anti-spam';
+$wb['do_mail_spamfilter_txt'] = 'Políticas anti-spam sincronizadas.';
+$wb['do_mailget_txt'] = 'Contas de busca sincronizadas.';
+$wb['resync_mailget_txt'] = 'Sincronizar contas de busca.';
+$wb['resync_mailtransport_txt'] = 'Sincronizar transportes de e-mail';
+$wb['resync_mailrelay_txt'] = 'Sincronizar retransmissão de e-mail';
+$wb['do_mailtransport_txt'] = 'Transportes de e-mail sincronizados.';
+$wb['do_mailrelay_txt'] = 'Retransmissões de e-mail sincronizados.';
 ?>
diff --git a/interface/web/tools/lib/lang/br_tpl_default.lng b/interface/web/tools/lib/lang/br_tpl_default.lng
index 1e09eea22c..30ae32b17a 100644
--- a/interface/web/tools/lib/lang/br_tpl_default.lng
+++ b/interface/web/tools/lib/lang/br_tpl_default.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Configurações do tema padrão';
+$wb['list_head_txt'] = 'Configuração padrão de temas';
 $wb['list_desc_txt'] = 'Alterar opções específicas do tema padrão';
-$wb['no_settings_txt'] = 'Não existem configurações para o tema padrão.';
+$wb['no_settings_txt'] = 'Não existe configurações para o tema padrão.';
 $wb['btn_start_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Voltar';
 ?>
diff --git a/interface/web/tools/lib/lang/br_usersettings.lng b/interface/web/tools/lib/lang/br_usersettings.lng
index 8fccd26852..cb3ae2dc4f 100644
--- a/interface/web/tools/lib/lang/br_usersettings.lng
+++ b/interface/web/tools/lib/lang/br_usersettings.lng
@@ -2,11 +2,11 @@
 $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['language_txt'] = 'Idioma';
-$wb['password_mismatch'] = 'As senhas não coincidem';
-$wb['Form to edit the user password and language.'] = 'Alterar idioma e senha';
+$wb['password_mismatch'] = 'A senha e confirmação da senha não coincidem.';
+$wb['Form to edit the user password and language.'] = 'Editar senha e idioma do usuário';
 $wb['Settings'] = 'Configurações';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 ?>
diff --git a/interface/web/tools/lib/lang/tr.lng b/interface/web/tools/lib/lang/tr.lng
index 5782a862cf..6115b8a7a3 100644
--- a/interface/web/tools/lib/lang/tr.lng
+++ b/interface/web/tools/lib/lang/tr.lng
@@ -4,10 +4,10 @@ $wb['Settings'] = 'Ayarlar';
 $wb['ISPConfig Tools'] = 'ISPConfig Araçları';
 $wb['Interface'] = 'Arayüz';
 $wb['Password and Language'] = 'Parola ve Dil';
-$wb['ispconfig_tools_note'] = 'Bu modül parola ve dilin değiştirilmesini sağlayarak DNS kayıtları eşleştirmesini başlatır.';
-$wb['Sync Tools'] = 'Eşleştirme Araçları';
-$wb['Resync'] = 'EÅŸleÅŸtirme';
-$wb['Import'] = 'Al';
-$wb['ISPConfig 3 mail'] = 'ISPConfig 3 postası';
+$wb['ispconfig_tools_note'] = 'Bu modül parola ve dilin değiştirilmesini sağlayarak DNS kayıtları eşitlemesini başlatır.';
+$wb['Sync Tools'] = 'Eşitleme Araçları';
+$wb['Resync'] = 'EÅŸitleme';
+$wb['Import'] = 'İçe Aktar';
+$wb['ISPConfig 3 mail'] = 'ISPConfig 3 E-postaları';
 $wb['PDNS Tupa'] = 'PowerDNS Tupa Yöneticisi';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_import_ispconfig.lng b/interface/web/tools/lib/lang/tr_import_ispconfig.lng
index 7aec6bd470..67c98edbe7 100644
--- a/interface/web/tools/lib/lang/tr_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/tr_import_ispconfig.lng
@@ -1,23 +1,24 @@
 <?php
-$wb['head_txt'] = 'ISPConfig 3 E-posta Ayarları Alma';
-$wb['legend_txt'] = 'Uzak sunucu bağlantı bilgileri';
-$wb['legend2_txt'] = 'E-posta alan adı alınsın';
-$wb['resync_sites_txt'] = 'Web siteleri eÅŸleÅŸtirilsin';
-$wb['resync_ftp_txt'] = 'FTP kullanıcıları eşleştirilsin';
-$wb['resync_shell_txt'] = 'Kabuk kullanıcıları eşleştirilsin';
-$wb['resync_cron_txt'] = 'Zamanlanmış görevler eşleştirilsin';
-$wb['resync_db_txt'] = 'Müşteri veritabanı ayarları eşleştirilsin';
-$wb['resync_mailbox_txt'] = 'Posta kutuları eşleştirilsin';
-$wb['resync_dns_txt'] = 'DNS kayıtları eşleştirilsin';
-$wb['btn_start_txt'] = 'Almayı Başlat';
+$wb['head_txt'] = 'ISPConfig 3 E-posta Ayarlarını İçe Aktarma';
+$wb['legend_txt'] = 'Uzak Sunucu Bağlantı Bilgileri';
+$wb['legend2_txt'] = 'E-posta etki alanı içe aktarılsın';
+$wb['resync_sites_txt'] = 'Web Siteleri EÅŸitlensin';
+$wb['resync_ftp_txt'] = 'FTP Kullanıcıları Eşitlensin';
+$wb['resync_shell_txt'] = 'Kabuk Kullanıcıları Eşitlensin';
+$wb['resync_cron_txt'] = 'Zamanlanmış Görevler Eşitlensin';
+$wb['resync_db_txt'] = 'Müşteri Veritabanı Ayarları Eşitlensin';
+$wb['resync_mailbox_txt'] = 'E-posta Kutuları Eşitlensin';
+$wb['resync_dns_txt'] = 'DNS Kayıtları Eşitlensin';
+$wb['btn_start_txt'] = 'İçe Aktarmayı Başlat';
 $wb['btn_connect_txt'] = 'Uzak Sunucuya BaÄŸlan';
 $wb['btn_cancel_txt'] = 'Geri';
 $wb['client_group_id_txt'] = 'Yerel Müşteri';
-$wb['mail_domain_txt'] = 'Uzak e-posta alan adı';
-$wb['import_mailbox_txt'] = 'Posta kutusunu al';
-$wb['import_aliasdomain_txt'] = 'Takma alan adını al';
-$wb['import_alias_txt'] = 'Takma e-postayı al';
-$wb['import_forward_txt'] = 'Yönlendirmeyi al';
-$wb['import_user_filter_txt'] = 'Kullanıcı süzgecini al';
-$wb['import_spamfilter_txt'] = 'Önemsiz posta süzgecini al';
+$wb['mail_domain_txt'] = 'Uzak E-posta Etki Alanı';
+$wb['import_mailbox_txt'] = 'E-posta Kutusu İçe Aktarılsın';
+$wb['import_aliasdomain_txt'] = 'Takma Etki Alanı İçe Aktarılsın';
+$wb['import_alias_txt'] = 'Takma E-posta İçe Aktarılsın';
+$wb['import_forward_txt'] = 'Yönlendirme İçe Aktarılsın';
+$wb['import_user_filter_txt'] = 'Kullanıcı Süzgeci İçe Aktarılsın';
+$wb['import_spamfilter_txt'] = 'Önemsiz İleti Süzgeci İçe Aktarılsın';
+
 ?>
diff --git a/interface/web/tools/lib/lang/tr_import_vpopmail.lng b/interface/web/tools/lib/lang/tr_import_vpopmail.lng
index 66fe56da1c..f0c05ea741 100644
--- a/interface/web/tools/lib/lang/tr_import_vpopmail.lng
+++ b/interface/web/tools/lib/lang/tr_import_vpopmail.lng
@@ -1,7 +1,8 @@
 <?php
-$wb['head_txt'] = 'Import email configuration from Vpopmail';
-$wb['legend_txt'] = 'Remote database server connection details';
-$wb['btn_start_txt'] = 'Start Import';
-$wb['btn_connect_txt'] = 'Connect to remote server';
-$wb['btn_cancel_txt'] = 'Cancel';
+$wb['head_txt'] = 'Vpopmail e-posta yapılandırmasını içe aktar';
+$wb['legend_txt'] = 'Uzak veritabanı sunucusu bağlantı bilgileri';
+$wb['btn_start_txt'] = 'İçe Aktarmayı Başlat';
+$wb['btn_connect_txt'] = 'Uzak Sunucuya BaÄŸlan';
+$wb['btn_cancel_txt'] = 'Ä°ptal';
+
 ?>
diff --git a/interface/web/tools/lib/lang/tr_index.lng b/interface/web/tools/lib/lang/tr_index.lng
index d8ea10cf55..6d9a6c361c 100644
--- a/interface/web/tools/lib/lang/tr_index.lng
+++ b/interface/web/tools/lib/lang/tr_index.lng
@@ -1,4 +1,4 @@
 <?php
 $wb['page_head_txt'] = 'ISPConfig Araçları';
-$wb['page_desc_txt'] = 'Kullanıcı ayarlarını değiştirme';
+$wb['page_desc_txt'] = 'Kullanıcı Ayarlarını Değiştirme';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_interface.lng b/interface/web/tools/lib/lang/tr_interface.lng
index 2ff88a976e..2384c71107 100644
--- a/interface/web/tools/lib/lang/tr_interface.lng
+++ b/interface/web/tools/lib/lang/tr_interface.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['interface_head_txt'] = 'Arayüz Ayarları';
-$wb['interface_desc_txt'] = 'Arayüzü düzenleyin';
+$wb['interface_desc_txt'] = 'Arayüzü Düzenle';
 $wb['language_txt'] = 'Dil';
 $wb['startmodule_txt'] = 'Başlangıç modülü';
 $wb['app_theme_txt'] = 'Tasarım';
diff --git a/interface/web/tools/lib/lang/tr_resync.lng b/interface/web/tools/lib/lang/tr_resync.lng
index 71ebb0dda2..7cdfa91b9e 100644
--- a/interface/web/tools/lib/lang/tr_resync.lng
+++ b/interface/web/tools/lib/lang/tr_resync.lng
@@ -1,53 +1,53 @@
 <?php
-$wb['head_txt'] = 'Eşleştirme Aracı';
-$wb['legend_txt'] = 'EÅŸleÅŸtirme';
-$wb['resync_sites_txt'] = 'Web siteleri eÅŸleÅŸtirilsin';
-$wb['resync_ftp_txt'] = 'FTP kullanıcıları eşleştirilsin';
-$wb['resync_shell_txt'] = 'Kabuk kullanıcıları eşleştirilsin';
-$wb['resync_cron_txt'] = 'Zamanlanmış görevler eşleştirilsin';
-$wb['resync_db_txt'] = 'Müşteri veritabanı ayarları eşleştirilsin';
-$wb['resync_mailbox_txt'] = 'Posta kutuları eşleştirilsin';
-$wb['resync_dns_txt'] = 'DNS kayıtları eşleştirilsin';
-$wb['resync_client_txt'] = 'Müşteri kayıtları eşleştirilsin';
-$wb['btn_start_txt'] = 'EÅŸleÅŸtir';
+$wb['head_txt'] = 'Eşitleme Aracı';
+$wb['legend_txt'] = 'EÅŸitleme';
+$wb['resync_all_txt'] = 'Tüm Hizmetler';
+$wb['resync_sites_txt'] = 'Web Siteleri EÅŸitlensin';
+$wb['resync_ftp_txt'] = 'FTP Kullanıcıları Eşitlensin';
+$wb['resync_webdav_txt'] = 'WebDAV Kullanıcıları';
+$wb['resync_shell_txt'] = 'Kabuk Kullanıcıları Eşitlensin';
+$wb['resync_cron_txt'] = 'Zamanlanmış Görevler Eşitlensin';
+$wb['resync_db_txt'] = 'Müşteri Veritabanı Ayarları Eşitlensin';
+$wb['resync_mailbox_txt'] = 'E-posta Kutuları Eşitlensin';
+$wb['resync_mail_txt'] = 'E-posta Etki Alanları';
+$wb['resync_mailfilter_txt'] = 'E-posta Süzgeci';
+$wb['resync_mailinglist_txt'] = 'E-posta Listesi';
+$wb['resync_dns_txt'] = 'DNS Kayıtları Eşitlensin';
+$wb['resync_vserver_txt'] = 'sSunucu';
+$wb['resync_client_txt'] = 'Müşteri Kayıtları Eşitlensin';
+$wb['all_active_txt'] = 'Tüm Etkin Sunucular';
+$wb['all_active_mail_txt'] = 'Tüm Etkin E-posta Sunucuları';
+$wb['all_active_web_txt'] = 'Tüm Etkin Web Sunucuları';
+$wb['all_active_dns_txt'] = 'Tüm Etkin DNS Sunucuları';
+$wb['all_active_file_txt'] = 'Tüm Etkin Dosya Sunucuları';
+$wb['all_active_db_txt'] = 'Tüm Etkin Veritabanı Sunucuları';
+$wb['all_active_vserver_txt'] = 'Tüm Etkin Sanal Sunucular';
+$wb['do_sites_txt'] = 'EÅŸitlenen Web Sitesi';
+$wb['do_ftp_txt'] = 'Eşitlenen FTP Kullanıcısı';
+$wb['do_webdav_txt'] = 'Eşitlenen WebDav Kullanıcısı';
+$wb['do_shell_txt'] = 'Eşitlenen Kabuk Kullanıcısı';
+$wb['do_cron_txt'] = 'Eşitlenen Zamanlanmış Görev';
+$wb['do_db_user_txt'] = 'Eşitlenen Veritabanı Kullanıcısı';
+$wb['do_db_txt'] = 'Eşitlenen Veritabanı';
+$wb['do_mail_txt'] = 'Eşitlenen E-posta Etki Alanı';
+$wb['do_mailbox_txt'] = 'EÅŸitlenen E-posta Kutusu';
+$wb['do_mail_alias_txt'] = 'EÅŸitlenen Takma Ad';
+$wb['do_mail_access_txt'] = 'EÅŸitlenen E-posta EriÅŸimi';
+$wb['do_mail_contentfilter_txt'] = 'Eşitlenen İçerik Süzgeci';
+$wb['do_mail_userfilter_txt'] = 'Eşitlenen E-posta Kullanıcı Süzgeci';
+$wb['do_mailinglist_txt'] = 'EÅŸitlenen E-posta Listesi';
+$wb['do_dns_txt'] = 'Eşitlenen DNS Bölgesi';
+$wb['do_vserver_txt'] = 'EÅŸitlenen Sanal Sunucu';
+$wb['do_clients_txt'] = 'Eşitlenen Müşteri ve Bayiler';
+$wb['no_results_txt'] = 'Herhangi bir şey bulunamadı';
+$wb['btn_start_txt'] = 'EÅŸitle';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['resync_all_txt'] = 'All services';
-$wb['resync_webdav_txt'] = 'WebDAV-Users';
-$wb['resync_mail_txt'] = 'Maildomains';
-$wb['resync_mailfilter_txt'] = 'Mailfilter';
-$wb['resync_mailinglist_txt'] = 'Mailinglist';
-$wb['resync_vserver_txt'] = 'vServer';
-$wb['all_active_txt'] = 'All active server';
-$wb['all_active_mail_txt'] = 'All active Mail-Server';
-$wb['all_active_web_txt'] = 'All active Web-Server';
-$wb['all_active_dns_txt'] = 'All active DNS-Server';
-$wb['all_active_file_txt'] = 'All active File-Server';
-$wb['all_active_db_txt'] = 'All active Database-Server';
-$wb['all_active_vserver_txt'] = 'All active vServer';
-$wb['do_sites_txt'] = 'Resynced Website';
-$wb['do_ftp_txt'] = 'Resynced FTP user';
-$wb['do_webdav_txt'] = 'Resynced WebDav user';
-$wb['do_shell_txt'] = 'Resynced Shell user';
-$wb['do_cron_txt'] = 'Resynced Cronjob';
-$wb['do_db_user_txt'] = 'Resynced Database User';
-$wb['do_db_txt'] = 'Resynced Database';
-$wb['do_mail_txt'] = 'Resynced Maildomain';
-$wb['do_mailbox_txt'] = 'Resynced Mailbox';
-$wb['do_mail_alias_txt'] = 'Resynced Alias';
-$wb['do_mail_access_txt'] = 'Resynced Mail access';
-$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
-$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
-$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
-$wb['do_dns_txt'] = 'Resynced DNS zone';
-$wb['do_vserver_txt'] = 'Resynced vServer';
-$wb['do_clients_txt'] = 'Resynced clients and reseller';
-$wb['no_results_txt'] = 'Nothing found';
-$wb['do_mail_spamfilter_policy_txt'] = 'Resynced Spamfilter Policies';
-$wb['do_mail_spamfilter_txt'] = 'Resynced Spamfilter';
-$wb['do_mailget_txt'] = 'Resynced Fetchmail';
+$wb['do_mail_spamfilter_policy_txt'] = 'Eşitlenen Önemsiz İleti Süzgeci İlkeleri';
+$wb['do_mail_spamfilter_txt'] = 'Eşitlenen Önemsiz İleti Süzgeci';
+$wb['do_mailget_txt'] = 'EÅŸitlenen Fetchmail';
 $wb['resync_mailget_txt'] = 'Fetchmail';
-$wb['resync_mailtransport_txt'] = 'E-Mail Transport';
-$wb['resync_mailrelay_txt'] = 'E-Mail Relay';
-$wb['do_mailtransport_txt'] = 'Resynced Mailtransport';
-$wb['do_mailrelay_txt'] = 'Resynced Mailrelay';
+$wb['resync_mailtransport_txt'] = 'E-posta Gönderici';
+$wb['resync_mailrelay_txt'] = 'E-posta Aktarıcı';
+$wb['do_mailtransport_txt'] = 'E-posta Gönderici Eşitlendi';
+$wb['do_mailrelay_txt'] = 'E-posta Aktarıcı Eşitlendi';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_usersettings.lng b/interface/web/tools/lib/lang/tr_usersettings.lng
index 60c7679b9f..fa2eff63d7 100644
--- a/interface/web/tools/lib/lang/tr_usersettings.lng
+++ b/interface/web/tools/lib/lang/tr_usersettings.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_txt'] = 'Parola';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['language_txt'] = 'Dil';
 $wb['password_mismatch'] = 'Parola ile onayı aynı değil.';
 $wb['Form to edit the user password and language.'] = 'Parola ve dil ayarlarını değiştirme formu.';
 $wb['Settings'] = 'Ayarlar';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['password_txt'] = 'Password';
 ?>
diff --git a/interface/web/vm/lib/lang/br.lng b/interface/web/vm/lib/lang/br.lng
index 513a018bf5..ae59107a78 100644
--- a/interface/web/vm/lib/lang/br.lng
+++ b/interface/web/vm/lib/lang/br.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['Virtual Servers'] = 'Servidores virtuais';
-$wb['OS Templates'] = 'Gabaritos do SO';
-$wb['VM Templates'] = 'Gabaritos de máquina virtual';
+$wb['Virtual Servers'] = 'Máquinas virtuais';
+$wb['OS Templates'] = 'Gabaritos de SO';
+$wb['VM Templates'] = 'Gabaritos de VM';
 $wb['IP addresses'] = 'Endereço IP';
 $wb['OpenVZ'] = 'OpenVZ';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_action.lng b/interface/web/vm/lib/lang/br_openvz_action.lng
index a301f51d0e..cc191c14e9 100644
--- a/interface/web/vm/lib/lang/br_openvz_action.lng
+++ b/interface/web/vm/lib/lang/br_openvz_action.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['head_txt'] = 'Ações do servidor virtual para máquinas virtuais:';
+$wb['head_txt'] = 'Ações do virtualizador:';
 $wb['start_txt'] = 'Iniciar máquina virtual';
 $wb['stop_txt'] = 'Parar máquina virtual';
 $wb['restart_txt'] = 'Reiniciar máquina virtual';
-$wb['ostemplate_txt'] = 'Adicionar gabarito de SO';
-$wb['ostemplate_desc_txt'] = '(exemplo: debian-6.0-i386-custom)';
+$wb['ostemplate_txt'] = 'Adicionar gabarito de sistema operacional';
+$wb['ostemplate_desc_txt'] = '(exemplo: debian-9.0-amd64-custom)';
 $wb['btn_save_txt'] = 'Executar ação selecionada';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['start_exec_txt'] = 'O comando -iniciar- foi enviado ao servidor servidor de máquinas virtuais. Espere alguns minutos até que a máquina virtual seja iniciada.';
-$wb['stop_exec_txt'] = 'O comando -parar- foi enviado ao servidor servidor de máquinas virtuais. Espere alguns minutos até que a máquina virtual pare.';
-$wb['restart_exec_txt'] = 'O comando -reiniciar- foi enviado ao servidor servidor de máquinas virtuais. Espere alguns minutos até que a máquina virtual seja reiniciada.';
-$wb['ostemplate_name_error'] = 'O gabarito de SO contém caracteres não permitidos.';
-$wb['ostemplate_name_unique_error'] = 'Já existe um gabarito de SO com este nome.';
-$wb['ostemplate_exec_txt'] = 'O comando -criar máquina virtual- foi enviado ao servidor servidor de máquinas virtuais. Espere alguns minutos até que a máquina virtual seja criada.';
+$wb['start_exec_txt'] = 'O comando "Iniciar" foi enviado para o virtualizador. Aguarde alguns instantes para a máquina virtual carregar.';
+$wb['stop_exec_txt'] = 'O comando "Parar" foi enviado para o virtualizador. Aguarde alguns instantes para a máquina virtual parar.';
+$wb['restart_exec_txt'] = 'O comando "Reiniciar" foi enviando para o virtualizador. Aguarde alguns instantes para a máquina virtual reiniciar.';
+$wb['ostemplate_name_error'] = 'O gabarito de sistema operacional contém caracteres não permitidos.';
+$wb['ostemplate_name_unique_error'] = 'Já existe um gabarito de sistema operacional com o mesmo nome.';
+$wb['ostemplate_exec_txt'] = 'O comando "Adicionar gabarito de SO" foi enviado para o virtualizador. Aguarde alguns instantes para o gabarito ser adicionado.';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_ip.lng b/interface/web/vm/lib/lang/br_openvz_ip.lng
index 61fbd6ed68..612c391c94 100644
--- a/interface/web/vm/lib/lang/br_openvz_ip.lng
+++ b/interface/web/vm/lib/lang/br_openvz_ip.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['server_id_txt'] = 'Servidor servidor';
+$wb['server_id_txt'] = 'Virtualizador';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['vm_id_txt'] = 'Servidor virtual';
-$wb['reserved_txt'] = 'Reservedo';
+$wb['vm_id_txt'] = 'Máquina virtual';
+$wb['reserved_txt'] = 'Reservado';
 $wb['ip_error_wrong'] = 'Por favor, insira um endereço IPv4 válido.';
 $wb['ip_error_unique'] = 'O endereço IP já existe.';
 $wb['IP address'] = 'Endereço IP';
diff --git a/interface/web/vm/lib/lang/br_openvz_ip_list.lng b/interface/web/vm/lib/lang/br_openvz_ip_list.lng
index 99ddfbc7d8..f9a9f33622 100644
--- a/interface/web/vm/lib/lang/br_openvz_ip_list.lng
+++ b/interface/web/vm/lib/lang/br_openvz_ip_list.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['list_head_txt'] = 'Endereço IP do OpenVZ';
 $wb['server_id_txt'] = 'Servidor';
+$wb['vm_id_txt'] = 'VM';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['reserved_txt'] = 'Reservado';
-$wb['vm_id_txt'] = 'VPS';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_ostemplate.lng b/interface/web/vm/lib/lang/br_openvz_ostemplate.lng
index edce912056..ea76c915b7 100644
--- a/interface/web/vm/lib/lang/br_openvz_ostemplate.lng
+++ b/interface/web/vm/lib/lang/br_openvz_ostemplate.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['template_name_txt'] = 'Nome do gabarito';
-$wb['template_file_txt'] = 'Arquivo do gabarito';
-$wb['server_id_txt'] = 'Servidor';
+$wb['template_file_txt'] = 'Nome do arquivo';
+$wb['server_id_txt'] = 'Virtualizador';
 $wb['allservers_txt'] = 'Disponível em todos os servidores';
 $wb['active_txt'] = 'Ativo';
 $wb['description_txt'] = 'Descrição';
 $wb['template_name_error_empty'] = 'Nome do gabarito está em branco.';
-$wb['template_file_error_empty'] = 'Nome o arquivo do gabarito está em branco.';
+$wb['template_file_error_empty'] = 'Nome do arquivo está em branco.';
 $wb['Template'] = 'Gabarito';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_ostemplate_list.lng b/interface/web/vm/lib/lang/br_openvz_ostemplate_list.lng
index 04e94a889d..9e60baf179 100644
--- a/interface/web/vm/lib/lang/br_openvz_ostemplate_list.lng
+++ b/interface/web/vm/lib/lang/br_openvz_ostemplate_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Gabarito do SO openVZ';
+$wb['list_head_txt'] = 'Gabarito de sistema operacional';
 $wb['active_txt'] = 'Ativo';
-$wb['template_name_txt'] = 'Nome';
-$wb['server_id_txt'] = 'Servidor';
+$wb['template_name_txt'] = 'Nome do gabarito';
+$wb['server_id_txt'] = 'Virtualizador';
 $wb['allservers_txt'] = 'Disponível em todos os servidores';
 $wb['ostemplate_id_txt'] = 'ID';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_template.lng b/interface/web/vm/lib/lang/br_openvz_template.lng
index 4190a31f9c..23d4c9b6af 100644
--- a/interface/web/vm/lib/lang/br_openvz_template.lng
+++ b/interface/web/vm/lib/lang/br_openvz_template.lng
@@ -1,97 +1,97 @@
 <?php
-$wb['numproc_txt'] = 'Nº de Processadores';
-$wb['numtcpsock_txt'] = 'Nº de soquetes TCP';
-$wb['numothersock_txt'] = 'Nº de outros soquetes';
-$wb['vmguarpages_txt'] = 'Páginas de guarda';
-$wb['kmemsize_txt'] = 'Kmemsize';
-$wb['tcpsndbuf_txt'] = 'Tcpsndbuf';
-$wb['tcprcvbuf_txt'] = 'Tcprcvbuf';
-$wb['othersockbuf_txt'] = 'Othersockbuf';
-$wb['dgramrcvbuf_txt'] = 'Dgramrcvbuf';
-$wb['oomguarpages_txt'] = 'Oomguarpages';
-$wb['privvmpages_txt'] = 'Privvmpages';
-$wb['lockedpages_txt'] = 'Lockedpages';
-$wb['shmpages_txt'] = 'Shmpages';
-$wb['physpages_txt'] = 'Physpages';
-$wb['numfile_txt'] = 'Numfile';
-$wb['avnumproc_txt'] = 'Avnumproc';
-$wb['numflock_txt'] = 'Numflock';
-$wb['numpty_txt'] = 'Numpty';
-$wb['numsiginfo_txt'] = 'Numsiginfo';
-$wb['dcachesize_txt'] = 'Dcachesize';
-$wb['numiptent_txt'] = 'Numiptent';
-$wb['swappages_txt'] = 'Swappages';
-$wb['hostname_txt'] = 'Nome do servidor';
-$wb['nameserver_txt'] = 'Servidor(es) de nome';
-$wb['nameserver_desc_txt'] = '(separado por espaços em branco)';
+$wb['numproc_txt'] = 'Número de Processadores';
+$wb['numtcpsock_txt'] = 'Número de sockets tcp';
+$wb['numothersock_txt'] = '(numothersock)';
+$wb['vmguarpages_txt'] = 'Páginas de guarda da vm (vmguardpages)';
+$wb['kmemsize_txt'] = 'Tamanho da memória (Kmemsize)';
+$wb['tcpsndbuf_txt'] = 'Buffers tcp de envio (tcpsndbuf)';
+$wb['tcprcvbuf_txt'] = 'Buffers tcp de recepção (tcprcvbuf)';
+$wb['othersockbuf_txt'] = 'Outros buffers (othersockbuf)';
+$wb['dgramrcvbuf_txt'] = 'Buffers datagrama de envio (dgramrcvbuf)';
+$wb['oomguarpages_txt'] = '(oomguarpages)';
+$wb['privvmpages_txt'] = 'Tamanho da memória alocada para aplicações, em páginas (privvmpages)';
+$wb['lockedpages_txt'] = 'Páginas bloqueadas (lockedpages)';
+$wb['shmpages_txt'] = '(Shmpages)';
+$wb['physpages_txt'] = '(Physpages)';
+$wb['numfile_txt'] = 'Número de arquivos';
+$wb['avnumproc_txt'] = 'Média de processadores';
+$wb['numflock_txt'] = 'Número de arquivos bloqueados (numflock)';
+$wb['numpty_txt'] = 'Número de PTY (numpty)';
+$wb['numsiginfo_txt'] = 'Número de siginfo (informações de geração de sinal)';
+$wb['dcachesize_txt'] = 'Tamanho do cache (dcachesize)';
+$wb['numiptent_txt'] = 'Número de endereços IP (numiptent)';
+$wb['swappages_txt'] = 'Páginas de troca (swappages)';
+$wb['hostname_txt'] = 'Nome do host';
+$wb['nameserver_txt'] = 'Servidor(es) dns';
+$wb['nameserver_desc_txt'] = '(separado por espaço)';
 $wb['capability_txt'] = 'Capacidade';
 $wb['template_name_txt'] = 'Nome do gabarito';
-$wb['diskspace_txt'] = 'Espaço em disco';
+$wb['diskspace_txt'] = 'Espaço do disco';
 $wb['ram_txt'] = 'RAM (garantida)';
 $wb['ram_burst_txt'] = 'RAM (rajada)';
-$wb['cpu_units_txt'] = 'Unidades de CPU';
-$wb['cpu_num_txt'] = 'Cores de CPU';
-$wb['cpu_limit_txt'] = 'Limite de CPU %';
+$wb['cpu_units_txt'] = 'Número de cores da CPU';
+$wb['cpu_num_txt'] = 'Número de CPUs';
+$wb['cpu_limit_txt'] = 'Limite da CPU %';
 $wb['io_priority_txt'] = 'Prioridade de E/S';
 $wb['active_txt'] = 'Ativo';
 $wb['description_txt'] = 'Descrição';
-$wb['numproc_desc_txt'] = 'Número de processos e tarefas.';
-$wb['numtcpsock_desc_txt'] = 'Número de soquetes TCP.';
-$wb['numothersock_desc_txt'] = 'Número de soquetes não TCP.';
-$wb['vmguarpages_desc_txt'] = 'Alocação de memória garantida, em páginas.';
-$wb['kmemsize_desc_txt'] = 'Tamanho da memória sem swap no kernel, alocada para processos neste contêiner.';
-$wb['tcpsndbuf_desc_txt'] = 'Tamanho total de buffers TCP enviados.';
-$wb['tcprcvbuf_desc_txt'] = 'Tamanho total de buffers TCP recebidos.';
-$wb['othersockbuf_desc_txt'] = 'Tamanho total de soquetes de UNIX-domain UDP e outros protocolos de datagrama que enviam buffers..';
-$wb['dgramrcvbuf_desc_txt'] = 'Receber buffers de UDP e outros protocolos de datagrama.';
-$wb['oomguarpages_desc_txt'] = 'A garantia de memória para o caso de rajadas é superior à reserva (out-of-memory), em páginas.';
+$wb['numproc_desc_txt'] = 'Número de processos e threads.';
+$wb['numtcpsock_desc_txt'] = 'Número de sockets tcp.';
+$wb['numothersock_desc_txt'] = 'Número de outros sockets.';
+$wb['vmguarpages_desc_txt'] = 'Garantia de alocação de memória, em páginas.';
+$wb['kmemsize_desc_txt'] = 'Tamanho da memória do kernel não cambiável, alocada para processos neste contêiner.';
+$wb['tcpsndbuf_desc_txt'] = 'Tamanho de buffers de envio tcp.';
+$wb['tcprcvbuf_desc_txt'] = 'Tamanho de buffers de recepção tcp.';
+$wb['othersockbuf_desc_txt'] = 'Tamanho de buffers de socket de domínio unix, udp e outros buffers de envio de protocolos de datagrama.';
+$wb['dgramrcvbuf_desc_txt'] = 'Tamanho de buffers de recepção udp e outros protocolos de datagrama.';
+$wb['oomguarpages_desc_txt'] = 'Quantidade garantida de memória para o caso da memória estar "com excesso de reserva" (garantia de eliminação de falta de memória), em páginas.';
 $wb['privvmpages_desc_txt'] = 'Limite de alocação de memória, em páginas.';
-$wb['lockedpages_desc_txt'] = 'Páginas de processo não tem permissão para troca (páginas bloqueadas por mlock(2)).';
-$wb['shmpages_desc_txt'] = 'Tamanho total da memória compartilhada (IPC, mapeamentos anônimos compartilhados e objetos tmpfs), em páginas.';
-$wb['physpages_desc_txt'] = 'Número total de páginas de RAM, usada pelos processos.';
+$wb['lockedpages_desc_txt'] = 'Páginas de processos que não podem ser trocadas (páginas bloqueadas por mlock(2)).';
+$wb['shmpages_desc_txt'] = 'Tamanho da memória compartilhada (ISPC, mapeamentos anônimos compartilhados e objetos tmpfs), em páginas.';
+$wb['physpages_desc_txt'] = 'Número total de páginas RAM usadas pelos processos';
 $wb['numfile_desc_txt'] = 'Número de arquivos abertos.';
 $wb['numflock_desc_txt'] = 'Número de arquivos bloqueados.';
-$wb['numpty_desc_txt'] = 'Número de pseudo terminais.';
-$wb['numsiginfo_desc_txt'] = 'Número de estruturas de siginfo.';
-$wb['dcachesize_desc_txt'] = 'Tamanho total de dentry e estruturas inode bloqueados na memória.';
-$wb['numiptent_desc_txt'] = 'Número de entradas no firewall (Filtros de pacotes IP).';
-$wb['swappages_desc_txt'] = 'Quantidade de área de troca a ser exibida no container.';
-$wb['create_dns_txt'] = 'Adicionar dns para servidor';
-$wb['template_name_error_empty'] = 'Nome do gabarito está em branco.';
-$wb['diskspace_error_empty'] = 'Espaço do disco está em branco.';
+$wb['numpty_desc_txt'] = 'Número de pseudo-terminais (tty).';
+$wb['numsiginfo_desc_txt'] = 'Número de estruturas siginfo.';
+$wb['dcachesize_desc_txt'] = 'Tamanho de estruturas dentry e inode bloqueadas na memória.';
+$wb['numiptent_desc_txt'] = 'Número total de entradas NETFILTER (filtragem de pacotes IP).';
+$wb['swappages_desc_txt'] = 'Quantidade de espaço de troca a ser exibido no contêiner.';
+$wb['create_dns_txt'] = 'Adicionar dns para o nome do host';
+$wb['template_name_error_empty'] = 'O nome do gabarito está em branco.';
+$wb['diskspace_error_empty'] = 'O tamanho do disco está em branco.';
 $wb['ram_error_empty'] = 'RAM (garantida) está em branco.';
 $wb['ram_burst_error_empty'] = 'RAM (rajada) está em branco.';
-$wb['cpu_units_error_empty'] = 'Unidades de CPU está em branco.';
-$wb['cpu_num_error_empty'] = 'Cores de CPU está em branco.';
-$wb['cpu_limit_error_empty'] = 'CPU limit % está em branco.';
+$wb['cpu_units_error_empty'] = 'Número de cores da CPU está em branco.';
+$wb['cpu_num_error_empty'] = 'Número de CPU está em branco.';
+$wb['cpu_limit_error_empty'] = 'Limite da CPU está em branco.';
 $wb['io_priority_error_empty'] = 'Prioridade de E/S está em branco.';
-$wb['template_nameserver_error_empty'] = 'Servidor(es) de nome está em branco.';
-$wb['numproc_error_empty'] = 'N° de processadores está em branco.';
-$wb['numtcpsock_error_empty'] = 'N° de soquetes TCP está em branco.';
-$wb['numothersock_error_empty'] = 'N° de outros soquetes está em branco.';
-$wb['vmguarpages_error_empty'] = 'Páginas de guarda está em branco.';
+$wb['template_nameserver_error_empty'] = 'Servidor(es) dns está em branco.';
+$wb['numproc_error_empty'] = 'Número de processadores está em branco.';
+$wb['numtcpsock_error_empty'] = 'Número de sockets tcp está em branco.';
+$wb['numothersock_error_empty'] = 'Número de outros sockets está em branco.';
+$wb['vmguarpages_error_empty'] = 'Página de guarda da vm está em branco.';
 $wb['kmemsize_error_empty'] = 'Kmemsize está em branco.';
-$wb['tcpsndbuf_error_empty'] = 'Tcpsndbuf está em branco.';
-$wb['tcprcvbuf_error_empty'] = 'Tcprcvbuf está em branco.';
-$wb['othersockbuf_error_empty'] = 'Othersockbuf está em branco.';
-$wb['dgramrcvbuf_error_empty'] = 'Dgramrcvbuf está em branco.';
+$wb['tcpsndbuf_error_empty'] = 'Tamanho de buffers de envio tcp está em branco.';
+$wb['tcprcvbuf_error_empty'] = 'Tamanho de buffers de recepção está em branco.';
+$wb['othersockbuf_error_empty'] = 'Tamanho de outros buffers de socket está em branco.';
+$wb['dgramrcvbuf_error_empty'] = 'Tamanho de buffers de recepção udp e outros protocolos de datagrama está em branco.';
 $wb['oomguarpages_error_empty'] = 'Oomguarpages está em branco.';
-$wb['privvmpages_error_empty'] = 'Privvmpages está em branco.';
+$wb['privvmpages_error_empty'] = 'Tamanho da memória alocada para aplicações, em páginas, está em branco.';
 $wb['lockedpages_error_empty'] = 'Lockedpages está em branco.';
 $wb['shmpages_error_empty'] = 'Shmpages está em branco.';
 $wb['physpages_error_empty'] = 'Physpages está em branco.';
-$wb['numfile_error_empty'] = 'Numfile está em branco.';
-$wb['avnumproc_error_empty'] = 'Avnumproc está em branco.';
-$wb['numflock_error_empty'] = 'Numflock está em branco.';
-$wb['numpty_error_empty'] = 'Numpty está em branco.';
-$wb['numsiginfo_error_empty'] = 'Numsiginfo está em branco.';
-$wb['dcachesize_error_empty'] = 'Dcachesize está em branco.';
-$wb['numiptent_error_empty'] = 'Numiptent está em branco.';
-$wb['swappages_error_empty'] = 'Swappages está em branco.';
+$wb['numfile_error_empty'] = 'Número de arquivos está em branco.';
+$wb['avnumproc_error_empty'] = 'Média de processadores está em branco.';
+$wb['numflock_error_empty'] = 'Número de arquivos bloqueados está em branco.';
+$wb['numpty_error_empty'] = 'Número de pseudo-terminais está em branco.';
+$wb['numsiginfo_error_empty'] = 'Número de informações siginfo está em branco.';
+$wb['dcachesize_error_empty'] = 'Tamanho do cache está em branco.';
+$wb['numiptent_error_empty'] = 'Número de entradas NETFILTER está em branco.';
+$wb['swappages_error_empty'] = 'Páginas de troca está em branco.';
 $wb['Template'] = 'Gabarito';
 $wb['Advanced'] = 'Avançado';
 $wb['features_txt'] = 'Recursos';
-$wb['iptables_txt'] = 'Firewall';
+$wb['iptables_txt'] = 'Firewall (iptables)';
 $wb['custom_txt'] = 'Configurações personalizadas';
-$wb['custom_error'] = 'Não permitido em configurações personalizadas: ';
+$wb['custom_error'] = 'Não permitido nas configurações personalizadas: ';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_template_list.lng b/interface/web/vm/lib/lang/br_openvz_template_list.lng
index 390869859a..00d1b648d8 100644
--- a/interface/web/vm/lib/lang/br_openvz_template_list.lng
+++ b/interface/web/vm/lib/lang/br_openvz_template_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Gabarito de máquina virtual OpenVZ';
+$wb['list_head_txt'] = 'Gabarito de máquina virtual';
 $wb['active_txt'] = 'Ativo';
-$wb['template_name_txt'] = 'Nome do Gabarito';
+$wb['template_name_txt'] = 'Nome do gabarito';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_vm.lng b/interface/web/vm/lib/lang/br_openvz_vm.lng
index 04794daf86..a8176e7688 100644
--- a/interface/web/vm/lib/lang/br_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/br_openvz_vm.lng
@@ -1,45 +1,46 @@
 <?php
-$wb['diskspace_txt'] = 'Espaço em disco';
+$wb['diskspace_txt'] = 'Espaço no disco';
 $wb['ram_txt'] = 'RAM (garantida)';
 $wb['ram_burst_txt'] = 'RAM (rajada)';
-$wb['cpu_units_txt'] = 'Unidades de CPU(s)';
-$wb['cpu_num_txt'] = 'Quantidade de CPU(s)';
-$wb['cpu_limit_txt'] = 'Limite de CPU(s)';
-$wb['io_priority_txt'] = 'Prioridade de E/S';
-$wb['nameserver_txt'] = 'Servidor(es) de nome';
-$wb['nameserver_desc_txt'] = '(separado por espaços em branco)';
+$wb['cpu_units_txt'] = 'Número de cores da CPU';
+$wb['cpu_num_txt'] = 'Número de CPU';
+$wb['cpu_limit_txt'] = 'Limite de CPU (%)';
+$wb['io_priority_txt'] = 'prioridade de E/S';
+$wb['nameserver_txt'] = 'Servidor(es) dns';
+$wb['nameserver_desc_txt'] = '(separados por espaço)';
 $wb['capability_txt'] = 'Capacidade';
-$wb['server_id_txt'] = 'Servidor servidor';
-$wb['ostemplate_id_txt'] = 'Gabarito do SO';
+$wb['server_id_txt'] = 'Virtualizador';
+$wb['ostemplate_id_txt'] = 'Gabarito de sistema operacional';
 $wb['template_id_txt'] = 'Gabarito';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['hostname_txt'] = 'Servidor';
+$wb['hostname_txt'] = 'Nome do host';
 $wb['vm_password_txt'] = 'Senha da máquina virtual';
 $wb['start_boot_txt'] = 'Iniciar no boot';
 $wb['active_txt'] = 'Ativo';
 $wb['description_txt'] = 'Descrição';
 $wb['client_group_id_txt'] = 'Cliente';
 $wb['veid_txt'] = 'VEID';
-$wb['create_dns_txt'] = 'Adicionar DNS para servidor';
+$wb['create_dns_txt'] = 'Adicionar dns para a máquina virtual';
 $wb['active_until_date_txt'] = 'Ativo até a data';
 $wb['ip_address_error_empty'] = 'Endereço IP está em branco.';
-$wb['hostname_error_empty'] = 'Nome do servidor está em branco.';
+$wb['hostname_error_empty'] = 'Nome do host está em branco.';
 $wb['vm_password_error_empty'] = 'Senha da máquina virtual está em branco.';
 $wb['veid_error_empty'] = 'VEID está em branco.';
-$wb['veid_error_unique'] = 'VEID não existe.';
-$wb['diskspace_error_empty'] = 'Espaço em disco está em branco.';
+$wb['veid_error_unique'] = 'VEID já existe.';
+$wb['diskspace_error_empty'] = 'Espaço do disco está em branco.';
 $wb['ram_error_empty'] = 'RAM (garantida) está em branco.';
 $wb['ram_burst_error_empty'] = 'RAM (rajada) está em branco.';
-$wb['cpu_units_error_empty'] = 'Unidade de CPU(s) está em branco.';
-$wb['cpu_num_error_empty'] = 'Quantidade de CPU(s) está em branco.';
-$wb['cpu_limit_error_empty'] = 'Limite de CPU(s) está em branco.';
+$wb['cpu_units_error_empty'] = 'Número de cores da CPU está em branco.';
+$wb['cpu_num_error_empty'] = 'Número de CPU está em branco.';
+$wb['cpu_limit_error_empty'] = 'Limite de CPU está em branco.';
 $wb['io_priority_error_empty'] = 'Prioridade de E/S está em branco.';
-$wb['template_nameserver_error_empty'] = 'Servidor(es) de nome está em branco.';
-$wb['Virtual server'] = 'Servidor virtual';
+$wb['template_nameserver_error_empty'] = 'Servidor(es) dns está em branco.';
+$wb['Virtual server'] = 'Máquina Virtual';
 $wb['Advanced'] = 'Avançado';
+$wb['Additional IP'] = 'Endereço IP adicional';
 $wb['features_txt'] = 'Recursos';
 $wb['iptables_txt'] = 'Firewall';
 $wb['custom_txt'] = 'Configurações personalizadas';
-$wb['bootorder_txt'] = 'Prioridade do boot';
-$wb['bootorder_error_notpositive'] = 'Somente números positivos podem ser configurados na prioridade do boot.';
+$wb['bootorder_txt'] = 'Ordem da prioridade do boot';
+$wb['bootorder_error_notpositive'] = 'São permitidos apenas números inteiros, > 0, na ordem da prioridade do boot.';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_vm_list.lng b/interface/web/vm/lib/lang/br_openvz_vm_list.lng
index 03d510f2f7..c907c710ea 100644
--- a/interface/web/vm/lib/lang/br_openvz_vm_list.lng
+++ b/interface/web/vm/lib/lang/br_openvz_vm_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Servidor virtual';
+$wb['list_head_txt'] = 'Máquina virtual';
 $wb['active_txt'] = 'Ativo';
-$wb['server_id_txt'] = 'ID do servidor';
+$wb['server_id_txt'] = 'Virtualizador';
 $wb['ostemplate_id_txt'] = 'Gabarito do SO';
 $wb['template_id_txt'] = 'Gabarito';
-$wb['hostname_txt'] = 'Servidor';
+$wb['hostname_txt'] = 'Nome do host';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['veid_txt'] = 'VEID';
 ?>
diff --git a/interface/web/vm/lib/lang/tr.lng b/interface/web/vm/lib/lang/tr.lng
index 82599dd038..23bca66851 100644
--- a/interface/web/vm/lib/lang/tr.lng
+++ b/interface/web/vm/lib/lang/tr.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['Virtual Servers'] = 'Sanal Sunucular';
-$wb['OS Templates'] = 'OS Kalıpları';
-$wb['VM Templates'] = 'VM Kalıpları';
+$wb['Virtual Servers'] = 'sSunucular';
+$wb['OS Templates'] = 'İşletim Sistemi Kalıpları';
+$wb['VM Templates'] = 'Sanal Makine Kalıpları';
 $wb['IP addresses'] = 'IP Adresleri';
 $wb['OpenVZ'] = 'OpenVZ';
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_action.lng b/interface/web/vm/lib/lang/tr_openvz_action.lng
index 29759e0266..8e2a3652d2 100644
--- a/interface/web/vm/lib/lang/tr_openvz_action.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_action.lng
@@ -1,16 +1,17 @@
 <?php
-$wb['head_txt'] = 'VM Sanal Sunucu Ä°ÅŸlemleri:';
+$wb['head_txt'] = 'Sanal Makine Sanal Sunucu Ä°ÅŸlemleri:';
 $wb['start_txt'] = 'Sanal sunucuyu baÅŸlat';
 $wb['stop_txt'] = 'Sanal sunucuyu durdur';
 $wb['restart_txt'] = 'Sanal sunucuyu yeniden baÅŸlat';
-$wb['ostemplate_txt'] = 'OS Kalıbı Oluştur';
+$wb['ostemplate_txt'] = 'İşletim Sistemi Kalıbı Ekle';
 $wb['ostemplate_desc_txt'] = '(örnek: debian-6.0-i386-custom)';
 $wb['btn_save_txt'] = 'Seçilmiş işlemi yürüt';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['start_exec_txt'] = 'VM sunucusuna başlatma komutu gönderildi. VM başlatılana kadar bir dakika geçebilir.';
-$wb['stop_exec_txt'] = 'VM sunucusuna durdurma komutu gönderildi. VM durdurulana kadar bir dakika geçebilir.';
-$wb['restart_exec_txt'] = 'VM sunucusuna yeniden başlatma komutu gönderildi. VM yeniden başlatılana kadar bir dakika geçebilir.';
-$wb['ostemplate_name_error'] = 'OS kalıbı adında izin verilmeyen karakterler var.';
+$wb['start_exec_txt'] = 'Sanal makine sunucusuna başlatma komutu gönderildi. Sanal makine başlatılana kadar bir dakika geçebilir.';
+$wb['stop_exec_txt'] = 'Sanal makine sunucusuna durdurma komutu gönderildi. Sanal makine durdurulana kadar bir dakika geçebilir.';
+$wb['restart_exec_txt'] = 'Sanal makine sunucusuna yeniden başlatma komutu gönderildi. Sanal makine yeniden başlatılana kadar bir dakika geçebilir.';
+$wb['ostemplate_name_error'] = 'İşletim sistemi kalıbı adında izin verilmeyen karakterler var.';
 $wb['ostemplate_name_unique_error'] = 'Aynı adlı bir işletim sistemi kalıbı zaten var.';
-$wb['ostemplate_exec_txt'] = 'VM sunucusuna işletim sistemi kalıbı oluşturma komutu gönderildi. İşletim sistemi kalıbının oluşturulması bir kaç dakika alabilir.';
+$wb['ostemplate_exec_txt'] = 'Sanal makine sunucusuna işletim sistemi kalıbı oluşturma komutu gönderildi. İşletim sistemi kalıbının oluşturulması bir kaç dakika alabilir.';
+
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_ip.lng b/interface/web/vm/lib/lang/tr_openvz_ip.lng
index 637a70f2ea..e24b354bae 100644
--- a/interface/web/vm/lib/lang/tr_openvz_ip.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_ip.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
 $wb['ip_address_txt'] = 'IP Adresi';
-$wb['vm_id_txt'] = 'Sanal Sunucu';
+$wb['vm_id_txt'] = 'sSunucu';
 $wb['reserved_txt'] = 'Ayrılmış';
 $wb['ip_error_wrong'] = 'Lütfen geçerli bir IPv4 adresi yazın.';
 $wb['ip_error_unique'] = 'Bu IP adresi zaten var.';
diff --git a/interface/web/vm/lib/lang/tr_openvz_ostemplate_list.lng b/interface/web/vm/lib/lang/tr_openvz_ostemplate_list.lng
index bf5923aed1..3a4a10fdaa 100644
--- a/interface/web/vm/lib/lang/tr_openvz_ostemplate_list.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_ostemplate_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'OpenVZ OS Kalıbı';
+$wb['list_head_txt'] = 'OpenVZ İşletim Sistemi Kalıbı';
 $wb['active_txt'] = 'Etkin';
 $wb['template_name_txt'] = 'Kalıp Adı';
 $wb['server_id_txt'] = 'Sunucu';
diff --git a/interface/web/vm/lib/lang/tr_openvz_template.lng b/interface/web/vm/lib/lang/tr_openvz_template.lng
index fb1452e885..7768d0bae6 100644
--- a/interface/web/vm/lib/lang/tr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_template.lng
@@ -2,11 +2,11 @@
 $wb['numproc_txt'] = 'İşlemci Sayısı';
 $wb['numtcpsock_txt'] = 'TCP Soket Sayısı';
 $wb['numothersock_txt'] = 'Diğer Soket Sayısı';
-$wb['vmguarpages_txt'] = 'VM Koruma Sayfası';
+$wb['vmguarpages_txt'] = 'Sanal Makine Koruma Sayfası';
 $wb['kmemsize_txt'] = 'Kmemsize';
-$wb['tcpsndbuf_txt'] = 'TCP Gönderme Arabelleği';
-$wb['tcprcvbuf_txt'] = 'TCP Alma ArabelleÄŸi';
-$wb['othersockbuf_txt'] = 'DiÄŸer Soket ArabelleÄŸi';
+$wb['tcpsndbuf_txt'] = 'TCP Gönderme Ara Belleği';
+$wb['tcprcvbuf_txt'] = 'TCP Alma Ara BelleÄŸi';
+$wb['othersockbuf_txt'] = 'DiÄŸer Soket Ara BelleÄŸi';
 $wb['dgramrcvbuf_txt'] = 'Dgramrcvbuf';
 $wb['oomguarpages_txt'] = 'Oomguarpages';
 $wb['privvmpages_txt'] = 'Privvmpages';
@@ -40,11 +40,11 @@ $wb['numtcpsock_desc_txt'] = 'TCP soketi sayısı.';
 $wb['numothersock_desc_txt'] = 'TCP olmayan soket sayısı.';
 $wb['vmguarpages_desc_txt'] = 'Sayfa cinsinden garantili ayrılan bellek.';
 $wb['kmemsize_desc_txt'] = 'Bu taşıyıcıdaki işlemler için takas edilemez kernel belleğinin boyutu.';
-$wb['tcpsndbuf_desc_txt'] = 'TCP gönderme arabelleğinin toplam boyutu.';
-$wb['tcprcvbuf_desc_txt'] = 'TCP alma arabelleÄŸinin toplam boyutu.';
-$wb['othersockbuf_desc_txt'] = 'UNIX alan adı soket arabelleğinin toplam boyutu, UDP ve diğer datagram iletişim kuralları gönderme ara bellekleri.';
+$wb['tcpsndbuf_desc_txt'] = 'TCP gönderme ara belleğinin toplam boyutu.';
+$wb['tcprcvbuf_desc_txt'] = 'TCP alma ara belleÄŸinin toplam boyutu.';
+$wb['othersockbuf_desc_txt'] = 'UNIX etki alanı soket ara belleğinin toplam boyutu, UDP ve diğer datagram iletişim kuralları gönderme ara bellekleri.';
 $wb['dgramrcvbuf_desc_txt'] = 'UDP ve diğer datagram iletişim kuralları alma ara bellekleri.';
-$wb['oomguarpages_desc_txt'] = 'Bellek sayfası cinsinden, bellek taşması durumlarında garanti edilen bellek miktarı\\" (bellek bitti boşaltma garantisi).';
+$wb['oomguarpages_desc_txt'] = 'Bellek sayfası cinsinden, "bellek taşması" durumlarında garanti edilen bellek miktarı (bellek bitti boşaltma garantisi).';
 $wb['privvmpages_desc_txt'] = 'Bellek sayfası cinsinden ayrılacak bellek sınırı.';
 $wb['lockedpages_desc_txt'] = 'İşlem sayfaları takasına izin verilmez (mlock(2) ile kilitlenmiş sayfalar).';
 $wb['shmpages_desc_txt'] = 'Bellek sayfası cinsinden, paylaşılan belleğin toplam boyutu (IPC, paylaşılan anonim haritalama ve tmpfs nesneleri).';
@@ -90,8 +90,8 @@ $wb['numiptent_error_empty'] = 'Numiptent boÅŸ olamaz.';
 $wb['swappages_error_empty'] = 'Swappages boÅŸ olamaz.';
 $wb['Template'] = 'Kalıp';
 $wb['Advanced'] = 'GeliÅŸmiÅŸ';
-$wb['features_txt'] = 'Features';
+$wb['features_txt'] = 'Özellikle';
 $wb['iptables_txt'] = 'IP Tables';
-$wb['custom_txt'] = 'Custom settings';
-$wb['custom_error'] = 'Not allowed in Custom settings: ';
+$wb['custom_txt'] = 'Özel Ayarlar';
+$wb['custom_error'] = 'Özel ayarlarda izin verilmiyor: ';
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_vm.lng b/interface/web/vm/lib/lang/tr_openvz_vm.lng
index fad86d9f3a..7c2977cda9 100644
--- a/interface/web/vm/lib/lang/tr_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_vm.lng
@@ -10,21 +10,21 @@ $wb['nameserver_txt'] = 'Ad Sunucuları';
 $wb['nameserver_desc_txt'] = '(boşluk ile ayırarak)';
 $wb['capability_txt'] = 'Yeterlilik';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['ostemplate_id_txt'] = 'OS Kalıbı';
+$wb['ostemplate_id_txt'] = 'İşletim Sistemi Kalıbı';
 $wb['template_id_txt'] = 'Kalıp';
 $wb['ip_address_txt'] = 'IP Adresi';
 $wb['hostname_txt'] = 'Sunucu Adı';
-$wb['vm_password_txt'] = 'VM Parolası';
-$wb['start_boot_txt'] = 'Açılışta başlat';
+$wb['vm_password_txt'] = 'Sanal Makine Parolası';
+$wb['start_boot_txt'] = 'Açılışta Başlatılsın';
 $wb['active_txt'] = 'Etkin';
 $wb['description_txt'] = 'Açıklama';
 $wb['client_group_id_txt'] = 'Müşteri';
 $wb['veid_txt'] = 'VEID';
 $wb['create_dns_txt'] = 'Sunucu için DNS oluştur';
-$wb['active_until_date_txt'] = 'Åžu tarihe kadar etkin';
+$wb['active_until_date_txt'] = 'Åžu Tarihe Kadar Etkin';
 $wb['ip_address_error_empty'] = 'IP adresi boÅŸ olamaz.';
 $wb['hostname_error_empty'] = 'Sunucu adı boş olamaz.';
-$wb['vm_password_error_empty'] = 'VM parolası boş olamaz.';
+$wb['vm_password_error_empty'] = 'Sanal makine parolası boş olamaz.';
 $wb['veid_error_empty'] = 'VEID boÅŸ olamaz.';
 $wb['veid_error_unique'] = 'VEID zaten var.';
 $wb['diskspace_error_empty'] = 'Disk alanı boş olamaz.';
@@ -35,11 +35,11 @@ $wb['cpu_num_error_empty'] = 'İşlemci sayısı boş olamaz.';
 $wb['cpu_limit_error_empty'] = 'İşlemci sınırı boş olamaz.';
 $wb['io_priority_error_empty'] = 'G/Ç önceliği boş olamaz.';
 $wb['template_nameserver_error_empty'] = 'Ad sunucuları boş olamaz.';
-$wb['Virtual server'] = 'Sanal sunucu';
+$wb['Virtual server'] = 'sSunucu';
 $wb['Advanced'] = 'GeliÅŸmiÅŸ';
-$wb['features_txt'] = 'Features';
+$wb['features_txt'] = 'Özellikler';
 $wb['iptables_txt'] = 'IP Tables';
-$wb['custom_txt'] = 'Custom settings';
-$wb['bootorder_txt'] = 'Boot order priority';
-$wb['bootorder_error_notpositive'] = 'Only positive integers are allowed for Boot order priority';
+$wb['custom_txt'] = 'Özel Ayarlar';
+$wb['bootorder_txt'] = 'Başlatma Önceliği';
+$wb['bootorder_error_notpositive'] = 'Başlatma önceliği değeri yalnız pozitif bir tamsayı olabilir';
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_vm_list.lng b/interface/web/vm/lib/lang/tr_openvz_vm_list.lng
index 1a4ed0e7b9..e188f60464 100644
--- a/interface/web/vm/lib/lang/tr_openvz_vm_list.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_vm_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Sanal Sunucu';
+$wb['list_head_txt'] = 'sSunucu';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['ostemplate_id_txt'] = 'OS Kalıbı';
+$wb['ostemplate_id_txt'] = 'İşl. Sis. Kalıbı';
 $wb['template_id_txt'] = 'Kalıp';
 $wb['hostname_txt'] = 'Sunucu Adı';
 $wb['ip_address_txt'] = 'IP Adresi';
-- 
GitLab


From 2f0d607b5e26ed98be084c4977bcd2c1d4219d19 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 11 Oct 2019 16:53:03 +0200
Subject: [PATCH 160/571] Fixed #5424 Unable to change passwd or user of admin

---
 interface/web/admin/form/users.tform.php | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/interface/web/admin/form/users.tform.php b/interface/web/admin/form/users.tform.php
index b7f00b4eef..be77122b10 100644
--- a/interface/web/admin/form/users.tform.php
+++ b/interface/web/admin/form/users.tform.php
@@ -218,12 +218,6 @@ $form['tabs']['users'] = array (
 		'app_theme' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'RADIO',
-			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
-					'errmsg'=> 'app_theme_empty'),
-				1 => array (    'type' => 'REGEX',
-					'regex' => '/^[a-z0-9\_]{0,64}$/',
-					'errmsg'=> 'app_theme_regex'),
-			),
 			'regex'  => '',
 			'errmsg' => '',
 			'default' => 'default',
-- 
GitLab


From 04b0eb24cbe282017bdddb7ac5b4d6386563fa29 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 11 Oct 2019 16:56:43 +0200
Subject: [PATCH 161/571] Fixed #5425 Valid delete requests blocked by CSRF
 check

---
 interface/lib/classes/plugin_listview.inc.php      | 8 ++++++++
 interface/web/admin/templates/remote_user_list.htm | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/interface/lib/classes/plugin_listview.inc.php b/interface/lib/classes/plugin_listview.inc.php
index bd0aa0e160..ced308b2e5 100644
--- a/interface/lib/classes/plugin_listview.inc.php
+++ b/interface/lib/classes/plugin_listview.inc.php
@@ -123,6 +123,10 @@ class plugin_listview extends plugin_base {
 		$lng_file = "lib/lang/".$app->functions->check_language($_SESSION["s"]["language"])."_".$app->listform->listDef['name']."_list.lng";
 		include $lng_file;
 		$listTpl->setVar($wb);
+		
+		$csrf_token = $app->auth->csrf_token_get($app->listform->listDef['name']);
+		$_csrf_id = $csrf_token['csrf_id'];
+		$_csrf_key = $csrf_token['csrf_key'];
 
 
 		// Get the data
@@ -157,6 +161,10 @@ class plugin_listview extends plugin_base {
 				// The variable "id" contains always the index field
 				$rec["id"] = $rec[$idx_key];
 				$rec["delete_confirmation"] = $wb['delete_confirmation'];
+				
+				// CSRF Token
+				$rec["csrf_id"] = $_csrf_id;
+				$rec["csrf_key"] = $_csrf_key;
 
 				$records_new[] = $rec;
 			}
diff --git a/interface/web/admin/templates/remote_user_list.htm b/interface/web/admin/templates/remote_user_list.htm
index de65c64536..7189dc20df 100644
--- a/interface/web/admin/templates/remote_user_list.htm
+++ b/interface/web/admin/templates/remote_user_list.htm
@@ -33,7 +33,7 @@
                             <td><a href="#" data-load-content="admin/remote_user_edit.php?id={tmpl_var name='remote_userid'}">{tmpl_var name="remote_userid"}</a></td>
                             <td><a href="#" data-load-content="admin/remote_user_edit.php?id={tmpl_var name='remote_userid'}">{tmpl_var name="remote_username"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/remote_user_del.php?id={tmpl_var name='remote_userid'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/remote_user_del.php?id={tmpl_var name='remote_userid'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
-- 
GitLab


From 92d734f89346e5a1c0e430c063658d1d7b560653 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 14 Oct 2019 12:22:41 +0200
Subject: [PATCH 162/571] Improved Symlink option Apache vhost.conf.master

---
 server/conf/vhost.conf.master | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 75f6a72e87..0982a3cf41 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -93,7 +93,7 @@
 				<FilesMatch ".+\.ph(p[345]?|t|tml)$">
 						SetHandler None
 				</FilesMatch>
-				Options +FollowSymLinks
+				Options +SymlinksIfOwnerMatch
 				AllowOverride <tmpl_var name='allow_override'>
 				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 				Require all granted
@@ -125,7 +125,7 @@
 				<FilesMatch ".+\.ph(p[345]?|t|tml)$">
 						SetHandler None
 				</FilesMatch>
-				Options +FollowSymLinks
+				Options +SymlinksIfOwnerMatch
 				AllowOverride <tmpl_var name='allow_override'>
 				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 				Require all granted
-- 
GitLab


From 5d261ed7063964baada64f08faf0bca99d71bc90 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 14 Oct 2019 13:35:43 +0200
Subject: [PATCH 163/571] PHP compatibility changes (array definitions) in
 PowerDNS Plugin.

---
 server/plugins-available/powerdns_plugin.inc.php | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/server/plugins-available/powerdns_plugin.inc.php b/server/plugins-available/powerdns_plugin.inc.php
index 2e44e014d5..7ab23ec549 100644
--- a/server/plugins-available/powerdns_plugin.inc.php
+++ b/server/plugins-available/powerdns_plugin.inc.php
@@ -536,14 +536,14 @@ class powerdns_plugin {
 		$log[] = sprintf("\r\n%s %s", date('c'), 'Running set-nsec3 command...');
 		exec($cmd_set_nsec3, $log);
 
-		$pubkeys = [];
+		$pubkeys = array();
 		$cmd_show_zone = sprintf('%s show-zone %s 2>&1', $pdns_pdnssec, $zone);
 		$log[] = sprintf("\r\n%s %s", date('c'), 'Running show-zone command...');
 		exec($cmd_show_zone, $pubkeys);
 
 		$log = array_merge($log, $pubkeys);
 
-		$dnssec_info = array_merge($this->format_dnssec_pubkeys($pubkeys), ['', '== Raw log ============================'], $log);
+		$dnssec_info = array_merge($this->format_dnssec_pubkeys($pubkeys), array('', '== Raw log ============================'), $log);
 		$dnssec_info = implode("\r\n", $dnssec_info);
 
 		if ($app->dbmaster !== $app->db) {
@@ -553,7 +553,7 @@ class powerdns_plugin {
 	}
 
 	function format_dnssec_pubkeys($lines) {
-		$formatted = [];
+		$formatted = array();
 
 		// We don't care about the first two lines about presigning and NSEC
 		array_shift($lines);
@@ -574,7 +574,7 @@ class powerdns_plugin {
 					$key_type = $matches_key_type[1];
 
 					// We only care about the KSK or CSK
-					if (!in_array($key_type, ['KSK', 'CSK'], true)) {
+					if (!in_array($key_type, array('KSK', 'CSK'), true)) {
 						break;
 					}
 
@@ -677,7 +677,7 @@ class powerdns_plugin {
 		exec($cmd_disable_dnssec, $log);
 
 
-		$dnssec_info = array_merge(['== Raw log ============================'], $log);
+		$dnssec_info = array_merge(array('== Raw log ============================'), $log);
 		$dnssec_info = implode("\r\n", $dnssec_info);
 
 		if ($app->dbmaster !== $app->db) {
-- 
GitLab


From 7d41f01a2c3a4f6d4c9ae6751add7bae97bf3a12 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 16 Oct 2019 17:09:24 +0200
Subject: [PATCH 164/571] Fixed #5429 Wrong class variable in
 server/lib/classes/db_mysql.inc.php LINE 275

---
 interface/lib/classes/db_mysql.inc.php | 2 +-
 server/lib/classes/db_mysql.inc.php    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index 227fab73fa..9c7269e568 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -272,7 +272,7 @@ class db
 				if(!is_object($this->_iConnId)) {
 					$this->_iConnId = mysqli_init();
 				}
-				if(!mysqli_real_connect($this->_isConnId, $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) {
+				if(!mysqli_real_connect($this->_iConnId, $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) {
 					if(mysqli_connect_errno() == '111') {
 						// server is not available
 						if($try > 9) {
diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 227fab73fa..9c7269e568 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -272,7 +272,7 @@ class db
 				if(!is_object($this->_iConnId)) {
 					$this->_iConnId = mysqli_init();
 				}
-				if(!mysqli_real_connect($this->_isConnId, $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) {
+				if(!mysqli_real_connect($this->_iConnId, $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) {
 					if(mysqli_connect_errno() == '111') {
 						// server is not available
 						if($try > 9) {
-- 
GitLab


From 2fc824fe37ff504636a00d0a9171ba0045004795 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 16 Oct 2019 17:10:12 +0200
Subject: [PATCH 165/571] Changed PHP syntax in monitor_tools.inc.php for PHP
 5.3 compatibility.

---
 server/lib/classes/monitor_tools.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index b2bd5ede30..d8d325fe60 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -254,7 +254,7 @@ class monitor_tools {
             preg_match_all('/NAME=\"([\w ]+)\"/m', $content, $name);
             preg_match_all('/VERSION_ID=\"([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*).$/m', $content, $version);
 			$distname = is_array($name) ? $name[1][0] : 'openSUSE';
-			$distver = is_array($version) ? implode('.', array_filter([$version[1][0],$version[2][0],$version[3][0]],'strlen')) : 'Unknown';
+			$distver = is_array($version) ? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) : 'Unknown';
 			$distid = 'opensuse112';
 			$distbaseid = 'opensuse';
 		}  else {
@@ -309,7 +309,7 @@ class monitor_tools {
 		} elseif(stristr($content, 'CentOS Linux release 7')) {
 			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
 			$distname = 'CentOS';
-			$distver = is_array($version)? implode('.', array_filter([$version[1][0],$version[2][0],$version[3][0]],'strlen')) :'Unknown';
+			$distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
 			$distbaseid = 'fedora';
 			$var=explode(" ", $content);
 			$var=explode(".", $var[3]);
-- 
GitLab


From 9d1d86244a7fc64c317f1b52ab1c5e46fd8ed9e4 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 23 Oct 2019 08:35:02 +0200
Subject: [PATCH 166/571] Changed version file download URL in
 ispconfig_update.php to https.

---
 server/scripts/ispconfig_update.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/scripts/ispconfig_update.php b/server/scripts/ispconfig_update.php
index 0c2d3789e8..2c77607b65 100644
--- a/server/scripts/ispconfig_update.php
+++ b/server/scripts/ispconfig_update.php
@@ -91,7 +91,7 @@ echo "Please choose the update method. For production systems select 'stable'. \
 $method = simple_query('Select update method', array('stable', 'git-stable', 'git-master'), 'stable');
 
 if($method == 'stable') {
-	$new_version = @file_get_contents('http://www.ispconfig.org/downloads/ispconfig3_version.txt') or die('Unable to retrieve version file.');
+	$new_version = @file_get_contents('https://www.ispconfig.org/downloads/ispconfig3_version.txt') or die('Unable to retrieve version file.');
 	$new_version = trim($new_version);
 	if(version_compare($new_version, ISPC_APP_VERSION, '>')) {
 		passthru('/usr/local/ispconfig/server/scripts/update_stable.sh');
-- 
GitLab


From b047ebde79ffd12b1628cd2127b75e007ca51cbd Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 23 Oct 2019 08:36:05 +0200
Subject: [PATCH 167/571] Changed link to ispconfig download to https.

---
 interface/web/dashboard/dashboard.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/dashboard/dashboard.php b/interface/web/dashboard/dashboard.php
index 5426ba9572..005c364aa5 100644
--- a/interface/web/dashboard/dashboard.php
+++ b/interface/web/dashboard/dashboard.php
@@ -149,7 +149,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
 		$info[] = array('info_msg' => '<p>There is a new Version of ISPConfig 3 available!</p>' .
 			'<p>This Version: <b>' . $v1 . '</b></p>' .
 			'<p>New Version : <b>' . $v2 .  '</b></p>' .
-			'<p><a href="http://www.ispconfig.org/ispconfig-3/download" target="ISPC">See more...</a></p>');
+			'<p><a href="https://www.ispconfig.org/ispconfig-3/download" target="ISPC">See more...</a></p>');
 	}
 }
 
-- 
GitLab


From f0bfe454941703b2954c78fe96f736bb06a21f60 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Mon, 4 Nov 2019 15:17:20 +0100
Subject: [PATCH 168/571] show ips only with vhost = y and  show
 directive_snippets for the admin even if they are set to customer_viewable =
 'n'

---
 interface/web/sites/web_vhost_domain_edit.php | 20 +++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 86deb5b2a5..52b44acc79 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -206,7 +206,7 @@ class page_action extends tform_actions {
 			}
 			
 			//* Fill the IPv4 select field with the IP addresses that are allowed for this client on the current server
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND virtualhost = 'y' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
 			$ips = $app->db->queryAllRecords($sql, $server_id);
 			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
@@ -222,7 +222,7 @@ class page_action extends tform_actions {
 			unset($ips);
 
 			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND virtualhost = 'y' AND (client_id = 0 OR client_id=?)";
 			$ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
 			//$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//$ip_select = "";
@@ -352,7 +352,7 @@ class page_action extends tform_actions {
 			}
 			
 			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=?)";
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND virtualhost = 'y' AND (client_id = 0 OR client_id=?)";
 			$ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
 			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
@@ -368,7 +368,7 @@ class page_action extends tform_actions {
 			unset($ips);
 
 			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND virtualhost = 'y' AND (client_id = 0 OR client_id=?)";
 			$ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
 			$ip_select = "<option value=''></option>";
 			//$ip_select = "";
@@ -549,7 +549,7 @@ class page_action extends tform_actions {
 			}
 
 			//* Fill the IPv4 select field
-			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND server_id = ?";
+			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND virtualhost = 'y' AND server_id = ?";
 			$ips = $app->db->queryAllRecords($sql, $server_id);
 			$ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//$ip_select = "";
@@ -564,7 +564,7 @@ class page_action extends tform_actions {
 			unset($ips);
 
 			//* Fill the IPv6 select field
-			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND server_id = ?";
+			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND virtualhost = 'y' AND server_id = ?";
 			$ips = $app->db->queryAllRecords($sql, $server_id);
 			$ip_select = "<option value=''></option>";
 			//$ip_select = "";
@@ -863,8 +863,12 @@ class page_action extends tform_actions {
 			}
 			$directive_snippets_id_select .= '</optgroup>';
 		}
-		
-		$directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
+
+		if($is_admin) {
+			$directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE active = 'y' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
+		} else {
+			$directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
+		}
 		if(is_array($directive_snippets) && !empty($directive_snippets)){
 			$directive_snippets_id_select .= '<optgroup label="'.$app->tform->wordbook["select_directive_snippet_txt"].'">';
 			foreach($directive_snippets as $directive_snippet){
-- 
GitLab


From db4158a2c8a7e917dc3e2cad756f5e2b1419a74b Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 13 Nov 2019 13:51:45 +0100
Subject: [PATCH 169/571] - Table sys_log clean-up not deleting entries with
 server_id 0, fixes #5450

---
 server/lib/classes/cron.d/200-logfiles.inc.php | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index b229c76a8a..e2d9e9bb9e 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -240,6 +240,18 @@ class cronjob_logfiles extends cronjob {
              */
 			$sql = "DELETE FROM sys_log WHERE tstamp < ? AND server_id != 0";
 			$app->dbmaster->query($sql, $tstamp);
+			
+			/*
+			 * now delete those entries without a linked datalog entry (datalog_id = 0)
+			 */
+			$sql = "DELETE FROM sys_log WHERE tstamp < ? AND server_id = 0 AND datalog_id = 0";
+			$app->dbmaster->query($sql, $tstamp);
+
+			/*
+			 * now delete those entries with a linked datalog entry (datalog_id != 0) only if older than 30 days
+			 */
+			$sql = "DELETE FROM sys_log WHERE tstamp < ? AND server_id = 0 AND datalog_id != 0";
+			$app->dbmaster->query($sql, $tstamp - (3600 * 24 * 23));
 
 			/*
              * Delete all remote-actions "done" and older than 7 days
-- 
GitLab


From 746e79db393f22b03fdd408cc086eecc084f1991 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 19 Nov 2019 21:34:03 +0100
Subject: [PATCH 170/571] - backported acme.sh support from master branch,
 fixes #5461

---
 .../classes/cron.d/900-letsencrypt.inc.php    |  25 +-
 server/lib/classes/letsencrypt.inc.php        | 215 +++++++++++++-----
 server/lib/classes/system.inc.php             |   5 +-
 3 files changed, 180 insertions(+), 65 deletions(-)

diff --git a/server/lib/classes/cron.d/900-letsencrypt.inc.php b/server/lib/classes/cron.d/900-letsencrypt.inc.php
index 3e2c9190c6..b0f6f39c51 100644
--- a/server/lib/classes/cron.d/900-letsencrypt.inc.php
+++ b/server/lib/classes/cron.d/900-letsencrypt.inc.php
@@ -35,8 +35,6 @@ class cronjob_letsencrypt extends cronjob {
 
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
-		global $app;
-
 		parent::onPrepare();
 	}
 
@@ -52,10 +50,19 @@ class cronjob_letsencrypt extends cronjob {
 		global $app, $conf;
 		
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-		if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {
-			$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
-			$letsencrypt = reset($letsencrypt);
-			if(is_executable($letsencrypt)) {
+		if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {			
+			$acme = $app->letsencrypt->get_acme_script();
+			if($acme) {
+				// skip letsencrypt
+				parent::onRunJob();
+				return;
+			}
+			
+			$letsencrypt = $app->letsencrypt->get_certbot_script();
+			if($letsencrypt) {
+				$ret = null;
+				$val = 0;
+				$matches = array();
 				$version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
 				if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $version, $matches)) {
 					$type = strtolower($matches[1]);
@@ -86,11 +93,7 @@ class cronjob_letsencrypt extends cronjob {
 
 	/* this function is optional if it contains no custom code */
 	public function onAfterRun() {
-		global $app;
-
 		parent::onAfterRun();
 	}
 
-}
-
-?>
+}
\ No newline at end of file
diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 62080e29b4..291ee41b12 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -37,15 +37,136 @@ class letsencrypt {
 	 */
 	private $base_path = '/etc/letsencrypt';
 	private $renew_config_path = '/etc/letsencrypt/renewal';
-
+	private $certbot_use_certcommand = false;
 
 	public function __construct(){
 
 	}
+	
+	public function get_acme_script() {
+		$acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh'));
+		$acme = reset($acme);
+		if(is_executable($acme)) {
+			return $acme;
+		} else {
+			return false;
+		}
+	}
+	
+	public function get_acme_command($domains, $key_file, $bundle_file, $cert_file) {
+		
+		$letsencrypt = $this->get_acme_script();
+		
+		$cmd = '';
+		// generate cli format
+		foreach($domains as $domain) {
+			$cmd .= (string) " -d " . $domain;
+		}
+		
+		if($cmd == '') {
+			return false;
+		}
+		
+		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme ; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' --fullchain-file ' . escapeshellarg($bundle_file) . ' --cert-file ' . escapeshellarg($cert_file) . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
+		
+		return $cmd;
+	}
+	
+	public function get_certbot_script() {
+		$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
+		$letsencrypt = reset($letsencrypt);
+		if(is_executable($letsencrypt)) {
+			return $letsencrypt;
+		} else {
+			return false;
+		}
+	}
 
+	private function install_acme() {
+		$install_cmd = 'wget -O -  https://get.acme.sh | sh';
+		$ret = null;
+		$val = 0;
+		exec($install_cmd . ' 2>&1', $ret, $val);
+		
+		return ($val == 0 ? true : false);
+	}
+	
+	private function get_reload_command() {
+		global $app, $conf;
+		
+		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
+
+		$daemon = '';
+		switch ($web_config['server_type']) {
+			case 'nginx':
+				$daemon = $web_config['server_type'];
+				break;
+			default:
+				if(is_file($conf['init_scripts'] . '/' . 'httpd24-httpd') || is_dir('/opt/rh/httpd24/root/etc/httpd')) {
+					$daemon = 'httpd24-httpd';
+				} elseif(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) {
+					$daemon = 'httpd';
+				} else {
+					$daemon = 'apache2';
+				}
+		}
+
+		$cmd = $app->system->getinitcommand($daemon, 'force-reload');
+		return $cmd;
+	}
+	
+	public function get_certbot_command($domains) {
+		global $app;
+		
+		$letsencrypt = $this->get_certbot_script();
+		
+		$cmd = '';
+		// generate cli format
+		foreach($domains as $domain) {
+			$cmd .= (string) " --domains " . $domain;
+		}
+		
+		if($cmd == '') {
+			return false;
+		}
+		
+		$matches = array();
+		$ret = null;
+		$val = 0;
+		
+		$letsencrypt_version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
+		if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $letsencrypt_version, $matches)) {
+			$letsencrypt_version = $matches[2];
+		}
+		if (version_compare($letsencrypt_version, '0.22', '>=')) {
+			$acme_version = 'https://acme-v02.api.letsencrypt.org/directory';
+		} else {
+			$acme_version = 'https://acme-v01.api.letsencrypt.org/directory';
+		}
+		if (version_compare($letsencrypt_version, '0.30', '>=')) {
+			$app->log("LE version is " . $letsencrypt_version . ", so using certificates command", LOGLEVEL_DEBUG);
+			$this->certbot_use_certcommand = true;
+			$webroot_map = array();
+			for($i = 0; $i < count($domains); $i++) {
+				$webroot_map[$domains[$i]] = '/usr/local/ispconfig/interface/acme';
+			}
+			$webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map)));
+		} else {
+			$webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme";
+		}
+		
+		$cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $cmd --webroot-path /usr/local/ispconfig/interface/acme";
+		
+		return $cmd;
+	}
+	
 	public function get_letsencrypt_certificate_paths($domains = array()) {
 		global $app;
 		
+		if($this->get_acme_script()) {
+			return false;
+		}
+		
 		if(empty($domains)) return false;
 		if(!is_dir($this->renew_config_path)) return false;
 		
@@ -133,9 +254,13 @@ class letsencrypt {
 	}
 	
 	private function get_ssl_domain($data) {
-		$domain = $data['new']['ssl_domain'];
-		if(!$domain) $domain = $data['new']['domain'];
+		global $app;
 		
+		$domain = $data['new']['ssl_domain'];
+		if(!$domain) {
+			$domain = $data['new']['domain'];
+		}
+
 		if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') {
 			$domain = $data['new']['domain'];
 			if(substr($domain, 0, 2) === '*.') {
@@ -149,8 +274,6 @@ class letsencrypt {
 	}
 	
 	public function get_website_certificate_paths($data) {
-		global $app;
-		
 		$ssl_dir = $data['new']['document_root'].'/ssl';
 		$domain = $this->get_ssl_domain($data);
 		
@@ -183,11 +306,17 @@ class letsencrypt {
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		
+		$use_acme = false;
+		if($this->get_acme_script()) {
+			$use_acme = true;
+		} elseif(!$this->get_certbot_script()) {
+			// acme and le missing
+			$this->install_acme();
+		}
+		
 		$tmp = $app->letsencrypt->get_website_certificate_paths($data);
 		$domain = $tmp['domain'];
 		$key_file = $tmp['key'];
-		$key_file2 = $tmp['key2'];
-		$csr_file = $tmp['csr'];
 		$crt_file = $tmp['crt'];
 		$bundle_file = $tmp['bundle'];
 		
@@ -256,66 +385,50 @@ class letsencrypt {
 			$app->log("There were " . $le_domain_count . " domains in the domain list. LE only supports 100, so we strip the rest.", LOGLEVEL_WARN);
 		}
 
-		// generate cli format
-		foreach($temp_domains as $temp_domain) {
-			$cli_domain_arg .= (string) " --domains " . $temp_domain;
-		}
-
 		// unset useless data
 		unset($subdomains);
 		unset($aliasdomains);
 		
-		$letsencrypt_use_certcommand = false;
+		$this->certbot_use_certcommand = false;
 		$letsencrypt_cmd = '';
-		$letsencrypt = false;
-		$success = false;
-		
-		$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
-		$letsencrypt = reset($letsencrypt);
-		if(!is_executable($letsencrypt)) {
-			$letsencrypt = false;
+		$allow_return_codes = null;
+		if($use_acme) {
+			$letsencrypt_cmd = $this->get_acme_command($temp_domains, $key_file, $bundle_file, $crt_file);
+			$allow_return_codes = array(2);
+		} else {
+			$letsencrypt_cmd = $this->get_certbot_command($temp_domains);
 		}
-		if(!empty($cli_domain_arg)) {
+		
+		$success = false;
+		if($letsencrypt_cmd) {
 			if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {
 				$app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
 				$app->log("Let's Encrypt SSL Cert domains: $cli_domain_arg", LOGLEVEL_DEBUG);
-			
-				if($letsencrypt) {
-				    $letsencrypt_version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
-                    if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $letsencrypt_version, $matches)) {
-                        $letsencrypt_version = $matches[2];
-                    }
-                    if (version_compare($letsencrypt_version, '0.22', '>=')) {
-                        $acme_version = 'https://acme-v02.api.letsencrypt.org/directory';
-                    } else {
-                        $acme_version = 'https://acme-v01.api.letsencrypt.org/directory';
-                    }
-					if (version_compare($letsencrypt_version, '0.30', '>=')) {
-						$app->log("LE version is " . $letsencrypt_version . ", so using certificates command", LOGLEVEL_DEBUG);
-						$letsencrypt_use_certcommand = true;
-						$webroot_map = array();
-						for($i = 0; $i < count($temp_domains); $i++) {
-							$webroot_map[$temp_domains[$i]] = '/usr/local/ispconfig/interface/acme';
-						}
-						$webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map)));
-					} else {
-						$webroot_args = "$cli_domain_arg --webroot-path /usr/local/ispconfig/interface/acme";
-					}
-					
-                    $letsencrypt_cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $webroot_args";
-					$success = $app->system->_exec($letsencrypt_cmd);
-				}
+
+				$success = $app->system->_exec($letsencrypt_cmd, $allow_return_codes);
 			} else {
 				$app->log("Migration mode active, skipping Let's Encrypt SSL Cert creation for: $domain", LOGLEVEL_DEBUG);
 				$success = true;
 			}
 		}
+
+		if($use_acme === true) {
+			if(!$success) {
+				$app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN);
+				$app->log($letsencrypt_cmd, LOGLEVEL_WARN);
+				return false;
+			} else {
+				return true;
+			}
+		}
+		
 		$le_files = array();
-		if($letsencrypt_use_certcommand === true && $letsencrypt) {
-			$letsencrypt_cmd = $letsencrypt . " certificates " . $cli_domain_arg;
+		if($this->certbot_use_certcommand === true && $letsencrypt_cmd) {
+			$letsencrypt_cmd = $letsencrypt_cmd . " certificates " . $cli_domain_arg;
 			$output = explode("\n", shell_exec($letsencrypt_cmd . " 2>/dev/null | grep -v '^\$'"));
 			$le_path = '';
 			$skip_to_next = true;
+			$matches = null;
 			foreach($output as $outline) {
 				$outline = trim($outline);
 				$app->log("LE CERT OUTPUT: " . $outline, LOGLEVEL_DEBUG);
@@ -415,6 +528,4 @@ class letsencrypt {
 			return false;
 		}
 	}
-}
-
-?>
+}
\ No newline at end of file
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 3db57c510f..551e4e4853 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1742,13 +1742,14 @@ class system{
 
 	}
 	
-	function _exec($command) {
+	function _exec($command, $allow_return_codes = null) {
 		global $app;
 		$out = array();
 		$ret = 0;
 		$app->log('exec: '.$command, LOGLEVEL_DEBUG);
 		exec($command, $out, $ret);
-		if($ret != 0) return false;
+		if(is_array($allow_return_codes) && in_array($ret, $allow_return_codes)) return true;
+		elseif($ret != 0) return false;
 		else return true;
 	}
 
-- 
GitLab


From 58708d959ca14762b4280c42348b5f9b85cc809c Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 22 Nov 2019 13:20:06 +0100
Subject: [PATCH 171/571] - added list id to mail filter options

---
 interface/lib/classes/remote.d/server.inc.php           | 4 +---
 interface/web/mail/form/mail_user_filter.tform.php      | 2 +-
 interface/web/mail/lib/lang/ar_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/ca_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/dk_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/en_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/es_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/fi_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/fr_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/id_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/ja_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/pt_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/ro_mail_user_filter.lng     | 1 +
 interface/web/mail/lib/lang/sk_mail_user_filter.lng     | 1 +
 interface/web/mailuser/form/mail_user_filter.tform.php  | 2 +-
 interface/web/mailuser/lib/lang/ar_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/bg_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/ca_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/dk_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/el_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/en_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/es_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/fi_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/hu_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/id_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/ja_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/pl_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/pt_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/ro_mail_user_filter.lng | 1 +
 interface/web/mailuser/lib/lang/sk_mail_user_filter.lng | 1 +
 30 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/interface/lib/classes/remote.d/server.inc.php b/interface/lib/classes/remote.d/server.inc.php
index 4962cb4c59..77649d1bb4 100644
--- a/interface/lib/classes/remote.d/server.inc.php
+++ b/interface/lib/classes/remote.d/server.inc.php
@@ -288,6 +288,4 @@ class remoting_server extends remoting {
 			return false;
 		}
 	}
-}
-
-?>
+}
\ No newline at end of file
diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index c1134c5e41..be5fba3ed7 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -88,7 +88,7 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt')
+			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'List-Id'=>'list_id_txt')
 		),
 		'op' => array (
 			'datatype' => 'VARCHAR',
diff --git a/interface/web/mail/lib/lang/ar_mail_user_filter.lng b/interface/web/mail/lib/lang/ar_mail_user_filter.lng
index b5d31b589c..9a15472e88 100644
--- a/interface/web/mail/lib/lang/ar_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/ca_mail_user_filter.lng b/interface/web/mail/lib/lang/ca_mail_user_filter.lng
index 14b80ee07b..8744b2ab79 100644
--- a/interface/web/mail/lib/lang/ca_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Le nombre max de filtres courriel est atteint.';
 $wb['subject_txt'] = 'Sujet';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Pour';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contient';
 $wb['is_txt'] = 'Est';
 $wb['begins_with_txt'] = 'Commence par';
diff --git a/interface/web/mail/lib/lang/dk_mail_user_filter.lng b/interface/web/mail/lib/lang/dk_mail_user_filter.lng
index d43af17ffb..ef8be2a0c9 100644
--- a/interface/web/mail/lib/lang/dk_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Max. antal af mailfiltere er nået.';
 $wb['subject_txt'] = 'Emne';
 $wb['from_txt'] = 'Fra';
 $wb['to_txt'] = 'Til';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Indeholder';
 $wb['is_txt'] = 'Er';
 $wb['begins_with_txt'] = 'Begynder med';
diff --git a/interface/web/mail/lib/lang/en_mail_user_filter.lng b/interface/web/mail/lib/lang/en_mail_user_filter.lng
index e78f808efa..462ee6d936 100644
--- a/interface/web/mail/lib/lang/en_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/en_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb["limit_mailfilter_txt"] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/es_mail_user_filter.lng b/interface/web/mail/lib/lang/es_mail_user_filter.lng
index 94100ef7a3..ed221d5cb3 100755
--- a/interface/web/mail/lib/lang/es_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/es_mail_user_filter.lng
@@ -25,5 +25,6 @@ $wb['subject_txt'] = 'Asunto';
 $wb['target_error_regex'] = 'El destino solo puede contener los siguientes caracteres: a-z, 0-9, -, ., _, y {espacio}';
 $wb['target_txt'] = 'Carpeta';
 $wb['to_txt'] = 'Para';
+$wb['list_id_txt'] = 'List ID';
 $wb['move_to_txt'] = 'Move to';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_mail_user_filter.lng b/interface/web/mail/lib/lang/fi_mail_user_filter.lng
index 1a4e7218a2..1238dc86fd 100755
--- a/interface/web/mail/lib/lang/fi_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/fr_mail_user_filter.lng b/interface/web/mail/lib/lang/fr_mail_user_filter.lng
index 49c5076d95..b5cacf2e98 100644
--- a/interface/web/mail/lib/lang/fr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Le nombre max de filtres e-mail est atteint.';
 $wb['subject_txt'] = 'Sujet';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Pour';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contient';
 $wb['is_txt'] = 'Est';
 $wb['begins_with_txt'] = 'Commence par';
diff --git a/interface/web/mail/lib/lang/id_mail_user_filter.lng b/interface/web/mail/lib/lang/id_mail_user_filter.lng
index 0def30d1a8..93f45979f3 100644
--- a/interface/web/mail/lib/lang/id_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/id_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/ja_mail_user_filter.lng b/interface/web/mail/lib/lang/ja_mail_user_filter.lng
index 847640fee4..8ee3801cc8 100644
--- a/interface/web/mail/lib/lang/ja_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/pt_mail_user_filter.lng b/interface/web/mail/lib/lang/pt_mail_user_filter.lng
index 42a7481d70..906c27ecd2 100644
--- a/interface/web/mail/lib/lang/pt_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/ro_mail_user_filter.lng b/interface/web/mail/lib/lang/ro_mail_user_filter.lng
index 7c5c72ad72..22435d9e91 100644
--- a/interface/web/mail/lib/lang/ro_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/sk_mail_user_filter.lng b/interface/web/mail/lib/lang/sk_mail_user_filter.lng
index 20904653c6..7546cd6afa 100644
--- a/interface/web/mail/lib/lang/sk_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/form/mail_user_filter.tform.php b/interface/web/mailuser/form/mail_user_filter.tform.php
index adf7716317..9fdd8bdfc0 100644
--- a/interface/web/mailuser/form/mail_user_filter.tform.php
+++ b/interface/web/mailuser/form/mail_user_filter.tform.php
@@ -83,7 +83,7 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt')
+			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'List-Id'=>'list_id_txt')
 		),
 		'op' => array (
 			'datatype' => 'VARCHAR',
diff --git a/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng b/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng b/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
index e164d54bb2..0a92f580a1 100644
--- a/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Max. antal af mailfiltere er nået.';
 $wb['subject_txt'] = 'Emne';
 $wb['from_txt'] = 'Fra';
 $wb['to_txt'] = 'Til';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Indeholder';
 $wb['is_txt'] = 'Er';
 $wb['begins_with_txt'] = 'Begynder med';
diff --git a/interface/web/mailuser/lib/lang/el_mail_user_filter.lng b/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
index 23451b74db..c26150ba1d 100644
--- a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
@@ -12,6 +12,7 @@ $wb['mailbox_filter_txt'] = 'Mailbox filter';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_filter.lng b/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
index 426ad1ad01..b8a19359f5 100755
--- a/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
@@ -17,5 +17,6 @@ $wb['subject_txt'] = 'Asunto';
 $wb['target_error_regex'] = 'La carpeta solo debe contener estos caracteres: a-z, 0-9, -, ., _, y {espacio}';
 $wb['target_txt'] = 'Carpeta';
 $wb['to_txt'] = 'Para';
+$wb['list_id_txt'] = 'List ID';
 $wb['mailbox_filter_txt'] = 'Mailbox filter';
 ?>
diff --git a/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng b/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng b/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/id_mail_user_filter.lng b/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng b/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng b/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng b/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
index 4069a15351..9ac4be357e 100644
--- a/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
-- 
GitLab


From 141aec78b1ee07ff099d708ee5f34df5121b366f Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 22 Nov 2019 15:04:54 +0100
Subject: [PATCH 172/571] - fixed using fullchain instead of two files on
 acme.sh and apache > 2.4.8

---
 server/lib/classes/letsencrypt.inc.php | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 291ee41b12..f60ad040e7 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -53,7 +53,8 @@ class letsencrypt {
 		}
 	}
 	
-	public function get_acme_command($domains, $key_file, $bundle_file, $cert_file) {
+	public function get_acme_command($domains, $key_file, $bundle_file, $cert_file, $server_type = 'apache') {
+		global $app;
 		
 		$letsencrypt = $this->get_acme_script();
 		
@@ -66,8 +67,14 @@ class letsencrypt {
 		if($cmd == '') {
 			return false;
 		}
+
+		if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) {
+			$cert_arg = '--fullchain-file ' . escapeshellarg($cert_file);
+		} else {
+			$cert_arg = '--fullchain-file ' . escapeshellarg($bundle_file) . ' --cert-file ' . escapeshellarg($cert_file);
+		}
 		
-		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme ; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' --fullchain-file ' . escapeshellarg($bundle_file) . ' --cert-file ' . escapeshellarg($cert_file) . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
+		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme ; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' ' . $cert_arg . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
 		
 		return $cmd;
 	}
@@ -393,7 +400,7 @@ class letsencrypt {
 		$letsencrypt_cmd = '';
 		$allow_return_codes = null;
 		if($use_acme) {
-			$letsencrypt_cmd = $this->get_acme_command($temp_domains, $key_file, $bundle_file, $crt_file);
+			$letsencrypt_cmd = $this->get_acme_command($temp_domains, $key_file, $bundle_file, $crt_file, $server_type);
 			$allow_return_codes = array(2);
 		} else {
 			$letsencrypt_cmd = $this->get_certbot_command($temp_domains);
-- 
GitLab


From 26009352ab78589458b85a8ab4f585b7847e9b1e Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 22 Nov 2019 19:35:30 +0100
Subject: [PATCH 173/571] - fixed typo (amavis instead of amavisd), fixes #5453

---
 install/lib/installer_base.lib.php                     | 2 +-
 install/lib/update.lib.php                             | 2 +-
 server/plugins-available/postfix_server_plugin.inc.php | 3 +--
 3 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 4f72c6920b..513858ca68 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -326,7 +326,7 @@ class installer_base {
 		$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
 		$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
 		$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
-		$tpl_ini_array['mail']['content_filter'] = @($conf['rspamd']['installed']) ? 'rspamd' : 'amavis';
+		$tpl_ini_array['mail']['content_filter'] = @($conf['rspamd']['installed']) ? 'rspamd' : 'amavisd';
 		$tpl_ini_array['mail']['rspamd_available'] = @($conf['rspamd']['installed']) ? 'y' : 'n';
 		$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
 		$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php
index 9deb8ca10e..4dcb31cff1 100644
--- a/install/lib/update.lib.php
+++ b/install/lib/update.lib.php
@@ -336,7 +336,7 @@ function updateDbAndIni() {
 	$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
 	$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
 	// do not switch to rspamd automatically!
-	// $tpl_ini_array['mail']['content_filter'] = @($conf['rspamd']['installed']) ? 'rspamd' : 'amavis';
+	// $tpl_ini_array['mail']['content_filter'] = @($conf['rspamd']['installed']) ? 'rspamd' : 'amavisd';
 	$tpl_ini_array['mail']['rspamd_available'] = @($conf['rspamd']['installed']) ? 'y' : 'n';
 	$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
 	$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 77ac689077..ad48e3dee8 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -215,8 +215,7 @@ class postfix_server_plugin {
 				fclose($fpp);
 				fclose($fps);
 				unset($dkim_domains);
-			}	
-			if($mail_config['content_filter'] == 'amavisd'){
+			} else {
 				exec("postconf -X 'smtpd_milters'");
 				exec("postconf -X 'milter_protocol'");
 				exec("postconf -X 'milter_mail_macros'");
-- 
GitLab


From eac89bb002ac68ae832cd0642e4f5c882709dcaf Mon Sep 17 00:00:00 2001
From: Jason Townsend <jason.townsend@inbox.com>
Date: Sat, 23 Nov 2019 17:15:28 +0000
Subject: [PATCH 174/571] Added proxy protocol feature:

Added Global Setting to Server config tab to
  - Enable & Disable the feature
  - Set the Proxy HTTP & HTTPS Ports

Added Per site level switch to enable and disable feature (Located in the Web Tab under the advanced section)

Added Apache2 and Nginx vhost updates to enable proxy_protocol on the listen lines

Added New database column to web_domain called "proxy_protocol" to enable site level config (Patch file Added upd_0089.sql)

Updated the Base Table SQL file to include "proxy_protocol" field
---
 install/sql/incremental/upd_0089.sql          |  6 +++++
 install/sql/ispconfig3.sql                    |  1 +
 .../web/admin/form/server_config.tform.php    | 22 +++++++++++++++++++
 .../web/admin/lib/lang/ar_server_config.lng   |  3 +++
 .../web/admin/lib/lang/bg_server_config.lng   |  3 +++
 .../web/admin/lib/lang/br_server_config.lng   |  3 +++
 .../web/admin/lib/lang/ca_server_config.lng   |  3 +++
 .../web/admin/lib/lang/cz_server_config.lng   |  3 +++
 .../web/admin/lib/lang/de_server_config.lng   |  3 +++
 .../web/admin/lib/lang/dk_server_config.lng   |  3 +++
 .../web/admin/lib/lang/el_server_config.lng   |  3 +++
 .../web/admin/lib/lang/es_server_config.lng   |  3 +++
 .../web/admin/lib/lang/fi_server_config.lng   |  3 +++
 .../web/admin/lib/lang/fr_server_config.lng   |  3 +++
 .../web/admin/lib/lang/hr_server_config.lng   |  3 +++
 .../web/admin/lib/lang/hu_server_config.lng   |  3 +++
 .../web/admin/lib/lang/id_server_config.lng   |  3 +++
 .../web/admin/lib/lang/it_server_config.lng   |  3 +++
 .../web/admin/lib/lang/ja_server_config.lng   |  3 +++
 .../web/admin/lib/lang/nl_server_config.lng   |  3 +++
 .../web/admin/lib/lang/pl_server_config.lng   |  3 +++
 .../web/admin/lib/lang/pt_server_config.lng   |  3 +++
 .../web/admin/lib/lang/ro_server_config.lng   |  3 +++
 .../web/admin/lib/lang/ru_server_config.lng   |  3 +++
 .../web/admin/lib/lang/se_server_config.lng   |  3 +++
 .../web/admin/lib/lang/sk_server_config.lng   |  3 +++
 .../web/admin/lib/lang/tr_server_config.lng   |  3 +++
 .../templates/server_config_web_edit.htm      | 14 ++++++++++++
 .../web/sites/form/web_vhost_domain.tform.php |  6 +++++
 .../sites/lib/lang/ar_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/bg_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/br_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ca_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/cz_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/de_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/dk_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/el_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/en_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/es_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/fi_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/fr_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/hr_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/hu_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/id_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/it_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ja_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/nl_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/pl_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/pt_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ro_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ru_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/se_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/sk_web_vhost_domain.lng    |  1 +
 .../templates/web_vhost_domain_advanced.htm   |  8 ++++++-
 server/conf/nginx_vhost.conf.master           | 10 +++++++++
 server/conf/vhost.conf.master                 | 13 +++++++++++
 .../plugins-available/apache2_plugin.inc.php  | 20 +++++++++++++++++
 server/plugins-available/nginx_plugin.inc.php |  9 ++++++++
 58 files changed, 204 insertions(+), 1 deletion(-)
 create mode 100644 install/sql/incremental/upd_0089.sql

diff --git a/install/sql/incremental/upd_0089.sql b/install/sql/incremental/upd_0089.sql
new file mode 100644
index 0000000000..5c676788d6
--- /dev/null
+++ b/install/sql/incremental/upd_0089.sql
@@ -0,0 +1,6 @@
+-- add new proxy_protocol column
+ALTER TABLE `web_domain`
+    ADD COLUMN `proxy_protocol` ENUM('n','y') NOT NULL DEFAULT 'y' AFTER `log_retention`;
+
+-- Update old entrys
+UPDATE `web_domain` SET `proxy_protocol` = 'y';
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 18b3ef57eb..6998257046 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2071,6 +2071,7 @@ CREATE TABLE `web_domain` (
   `https_port` int(11) unsigned NOT NULL DEFAULT '443',
   `folder_directive_snippets` text,
   `log_retention` int(11) NOT NULL DEFAULT '10',
+  `proxy_protocol` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 2663cdd0e0..ef3676f05d 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -820,6 +820,28 @@ $form["tabs"]['web'] = array(
 			'default' => 'n',
 			'value' => array(0 => 'n',1 => 'y')
 		),
+		'vhost_proxy_protocol_enabled' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n',1 => 'y')
+		),
+		'vhost_proxy_protocol_http_port' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '880',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'vhost_proxy_protocol_https_port' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '8443',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
 		'vhost_conf_dir' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index bccdcc42c0..4a48ea19ce 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 39531461c3..1e39776aac 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index f57a2310f2..be7da0ceca 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -301,3 +301,6 @@ $wb['content_filter_txt'] = 'Filtro de conteúdo';
 $wb['rspamd_url_txt'] = 'URL do rspamd';
 $wb['rspamd_user_txt'] = 'Usuário do rspamd';
 $wb['rspamd_password_txt'] = 'Senha do rspamd';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 14f0b91d3b..9bcd747c84 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index a97d78b8eb..218742e5cf 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 960381e7c1..792d5de9bc 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content-Filter';
 $wb['rspamd_url_txt'] = 'Rspamd-URL';
 $wb['rspamd_user_txt'] = 'Rspamd-Benutzer';
 $wb['rspamd_password_txt'] = 'Rspamd-Passwort';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 73e7ef1bfd..4dfd608667 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 84992261bb..5e7a7071d4 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 01350367ae..e8164da4a0 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 6caf643abe..94af4c8e0e 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 25f7375688..3586fd5d60 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index faf08f4201..f233aec832 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 6347afb7da..1df1da23ce 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index 9a28dff300..4d99bd6323 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 3dc37a3c1d..21b8461529 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 72bef72c4b..1241b89e59 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 2884f304ec..4ac525328b 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 29cb94e96c..45876422e0 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 3703c759ed..7f29d9b161 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 3251476126..1a3a2df2dc 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index b2f0b407d6..1352fa9930 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 1103baa4d2..d2363b624a 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 125e0b1ea2..6c272fc17a 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -300,4 +300,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 3b63e881f9..27058881dc 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -294,4 +294,7 @@ $wb['log_retention_txt'] = 'Günlük Tutma Süresi (Gün)';
 $wb['log_retention_error_ispositive'] = 'Günlük tutma süresi 0 değerinden büyük bir sayı olmalıdır';
 $wb['php_default_name_txt'] = 'Varsayılan PHP Sürümü Açıklaması';
 $wb['php_default_name_error_empty'] = 'Varsayılan PHP sürümü açıklaması boş olamaz';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
 ?>
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index eb285bbc07..4d11850ebc 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -54,6 +54,20 @@
 				{tmpl_var name='vhost_rewrite_v6'}
 			</div>
 		</div>
+        <div class="form-group">
+            <label for="vhost_proxy_protocol_enabled" class="col-sm-3 control-label">{tmpl_var name='vhost_proxy_protocol_enabled_txt'}</label>
+            <div class="col-sm-9">
+                {tmpl_var name='vhost_proxy_protocol_enabled'}
+            </div>
+        </div>
+        <div class="form-group">
+            <label for="vhost_proxy_protocol_http_port" class="col-sm-3 control-label">{tmpl_var name='vhost_proxy_protocol_http_port_txt'}</label>
+            <div class="col-sm-9"><input type="text" name="vhost_proxy_protocol_http_port" id="vhost_proxy_protocol_http_port" value="{tmpl_var name='vhost_proxy_protocol_http_port'}" class="form-control"/></div>
+        </div>
+        <div class="form-group">
+            <label for="vhost_proxy_protocol_https_port" class="col-sm-3 control-label">{tmpl_var name='vhost_proxy_protocol_https_port_txt'}</label>
+            <div class="col-sm-9"><input type="text" name="vhost_proxy_protocol_https_port" id="vhost_proxy_protocol_https_port" value="{tmpl_var name='vhost_proxy_protocol_https_port'}" class="form-control"/></div>
+        </div>
             <div class="form-group apache">
                 <label for="vhost_conf_dir" class="col-sm-3 control-label">{tmpl_var name='vhost_conf_dir_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="vhost_conf_dir" id="vhost_conf_dir" value="{tmpl_var name='vhost_conf_dir'}" class="form-control" /></div></div>
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 838445e361..8b5a36441a 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -766,6 +766,12 @@ if($_SESSION["s"]["user"]["typ"] == 'admin'
 				'width'  => '30',
 				'maxlength' => '255'
 			),
+			'proxy_protocol' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'CHECKBOX',
+				'default' => 'y',
+				'value' => array(0 => 'n',1 => 'y')
+			),
 			'php_fpm_use_socket' => array (
 				'datatype' => 'VARCHAR',
 				'formtype' => 'CHECKBOX',
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index f208ab3f36..33e3609253 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index a84d915230..07732b9df1 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index 01a7414a98..38869d7201 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -158,4 +158,5 @@ $wb['enable_pagespeed_txt'] = 'Habilitar PageSpeed';
 $wb['log_retention_txt'] = 'Tempo de retenção do log de arquivos';
 $wb['log_retention_error_regex'] = 'Tempo de retenção em dias (valores permitidos: mínimo 0, máximo 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Cota de disco não pode ser configurada para 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index aae2f46339..ea6592e0a4 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index deaa3269c4..ae70021b23 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index d95b6d47e4..bc56b403d2 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Log-Dateien Aufbewahrungszeit';
 $wb['log_retention_error_regex'] = 'Aufbewahrungszeit in Tagen (Erlaubte Werte: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota kann nicht 0 sein.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index aae2f46339..ea6592e0a4 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index 0ea2c2a796..0dd4ec4a3f 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index ae546e1c4d..ce67090685 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -158,4 +158,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index f98c02db15..31eacbda72 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index c7c4a14432..48bbe91304 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 931c00a533..ece6d134e3 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index 7842d770b4..e0ad832ad0 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index a40a4b62a5..7c7a653007 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 617e7fe769..7e61328ed9 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index 9fbca551a3..194704d185 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index 0efd971187..3d22555524 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index dd007d549f..e0b580d96f 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index 8a426b0a1a..f136e2c1c6 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index 170f2feb04..08689a0cd9 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index 046c2c71a6..9b799d1d80 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index e87af3b654..dcc6b04710 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index 1a2572b950..22959a1bb0 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index 17e60da6e6..a688adac64 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -153,4 +153,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
diff --git a/interface/web/sites/templates/web_vhost_domain_advanced.htm b/interface/web/sites/templates/web_vhost_domain_advanced.htm
index 0b5ddfbd8b..11f95d9cbd 100644
--- a/interface/web/sites/templates/web_vhost_domain_advanced.htm
+++ b/interface/web/sites/templates/web_vhost_domain_advanced.htm
@@ -49,7 +49,13 @@
 			<div class="form-group nginx">
                 <label for="https_port" class="col-sm-3 control-label">{tmpl_var name='https_port_txt'}</label>
                 <div class="col-sm-9"><input name="https_port" id="https_port" value="{tmpl_var name='https_port'}" type="text" class="form-control" /></div>
-            </div>	
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='proxy_protocol_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='proxy_protocol'}
+                </div>
+            </div>
             <div class="phpfpm">
                 <div class="form-group">
                     <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_use_socket_txt'}</label>
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index b1db61fe1c..e45226d943 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -1,5 +1,10 @@
 server {
         listen <tmpl_var name='ip_address'>:<tmpl_var name='http_port'>;
+<tmpl_if name='proxy_protocol' op='==' value='y'>
+<tmpl_if name='proxy_protocol_http' op='>' value='0'>
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_http'> proxy_protocol;
+</tmpl_if>
+</tmpl_if>
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='http_port'>;
 </tmpl_if>
@@ -8,6 +13,11 @@ server {
 </tmpl_if>
 <tmpl_if name='ssl_enabled'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+<tmpl_if name='proxy_protocol' op='==' value='y'>
+<tmpl_if name='proxy_protocol_https' op='>' value='0'>
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_https'> ssl proxy_protocol;
+</tmpl_if>
+</tmpl_if>
 		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 		# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
 		# ssl_prefer_server_ciphers on;
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 0982a3cf41..47d3cef5b1 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -12,6 +12,19 @@
 
 <tmpl_loop name='vhosts'>
 <VirtualHost {tmpl_var name='ip_address'}:{tmpl_var name='port'}>
+
+<tmpl_if name='proxy_protocol' op='==' value='y'>
+<tmpl_if name='apache_version' op='>=' value='2.4.30' format='version'>
+	<IfModule mod_remoteip.c>
+		RemoteIPProxyProtocol On
+	</IfModule>
+	</tmpl_else>
+	<IfModule mod_proxy_protocol.c>
+		ProxyProtocol On
+	</IfModule>
+</tmpl_if>
+</tmpl_if>
+
 <tmpl_hook name='apache2_vhost:vhost_header'>
 <tmpl_if name='php' op='==' value='suphp'>
 		DocumentRoot <tmpl_var name='web_document_root'>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 59e97629cb..f0da9e62e0 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1675,6 +1675,16 @@ class apache2_plugin {
 		if(count($rewrite_rules) > 0)  $tmp_vhost_arr = $tmp_vhost_arr + array('redirects' => $rewrite_rules);
 		if(count($alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $alias_seo_redirects);
 		$vhosts[] = $tmp_vhost_arr;
+
+		//if proxy protocol is enabled we need to add a new port to lsiten to
+		if($web_config['vhost_proxy_protocol_enabled'] == 'y' && $data['new']['proxy_protocol'] == 'y'){
+			if((int)$web_config['vhost_proxy_protocol_http_port'] > 0) {
+				$tmp_vhost_arr['port']           = (int)$web_config['vhost_proxy_protocol_http_port'];
+				$tmp_vhost_arr['proxy_protocol'] = $data['new']['proxy_protocol'];
+				$vhosts[]                        = $tmp_vhost_arr;
+			}
+		}
+
 		unset($tmp_vhost_arr);
 
 		//* Add vhost for ipv4 IP with SSL
@@ -1689,6 +1699,16 @@ class apache2_plugin {
 			}
 			if(count($ipv4_ssl_alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $ipv4_ssl_alias_seo_redirects);
 			$vhosts[] = $tmp_vhost_arr;
+
+			//if proxy protocol is enabled we need to add a new port to lsiten to
+			if($web_config['vhost_proxy_protocol_enabled'] == 'y' && $data['new']['proxy_protocol'] == 'y'){
+				if((int)$web_config['vhost_proxy_protocol_https_port'] > 0) {
+					$tmp_vhost_arr['port']           = (int)$web_config['vhost_proxy_protocol_https_port'];
+					$tmp_vhost_arr['proxy_protocol'] = $data['new']['proxy_protocol'];
+					$vhosts[]                        = $tmp_vhost_arr;
+				}
+			}
+
 			unset($tmp_vhost_arr, $ipv4_ssl_alias_seo_redirects);
 			$app->log('Enable SSL for: '.$domain, LOGLEVEL_DEBUG);
 		}
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index a8a3c3bf16..79cb017161 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1519,6 +1519,15 @@ class nginx_plugin {
 			}
 			unset($tmp_output, $tmp_retval);
 		}
+
+		//proxy protocol settings
+		if($web_config['vhost_proxy_protocol_enabled'] == "y"){
+			$vhost_data['proxy_protocol'] = $data['new']['proxy_protocol'];
+			$vhost_data['proxy_protocol_http'] = (int)$web_config['vhost_proxy_protocol_http_port'];
+			$vhost_data['proxy_protocol_https'] = (int)$web_config['vhost_proxy_protocol_https_port'];
+		}else{
+			$vhost_data['proxy_protocol'] = "n";
+		}
 		
 		// set logging variable
 		$vhost_data['logging'] = $web_config['logging'];
-- 
GitLab


From 21559a634d07ba29c42b8d6b5c293161117fca96 Mon Sep 17 00:00:00 2001
From: Jason Townsend <jason.townsend@inbox.com>
Date: Sat, 23 Nov 2019 18:05:43 +0000
Subject: [PATCH 175/571] Added Missed patch edit, and correct the vhost loop
 Change the name from proxy_protocol to use_proxy_protocol in vhost file due
 to site level overriding the check

tested both on apache2 and nginx with haproxy load balancer on TCP Mode
---
 interface/web/admin/lib/lang/en_server_config.lng | 3 +++
 server/conf/nginx_vhost.conf.master               | 4 ++--
 server/conf/vhost.conf.master                     | 3 +--
 server/plugins-available/apache2_plugin.inc.php   | 4 ++--
 server/plugins-available/nginx_plugin.inc.php     | 4 ++--
 5 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 0ba3638a0a..9282cb4bd2 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -301,3 +301,6 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index e45226d943..4487e4e450 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -1,6 +1,6 @@
 server {
         listen <tmpl_var name='ip_address'>:<tmpl_var name='http_port'>;
-<tmpl_if name='proxy_protocol' op='==' value='y'>
+<tmpl_if name='use_proxy_protocol' op='==' value='y'>
 <tmpl_if name='proxy_protocol_http' op='>' value='0'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_http'> proxy_protocol;
 </tmpl_if>
@@ -13,7 +13,7 @@ server {
 </tmpl_if>
 <tmpl_if name='ssl_enabled'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
-<tmpl_if name='proxy_protocol' op='==' value='y'>
+<tmpl_if name='use_proxy_protocol' op='==' value='y'>
 <tmpl_if name='proxy_protocol_https' op='>' value='0'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_https'> ssl proxy_protocol;
 </tmpl_if>
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 47d3cef5b1..ab6cebe4d0 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -12,8 +12,7 @@
 
 <tmpl_loop name='vhosts'>
 <VirtualHost {tmpl_var name='ip_address'}:{tmpl_var name='port'}>
-
-<tmpl_if name='proxy_protocol' op='==' value='y'>
+<tmpl_if name='use_proxy_protocol' op='==' value='y'>
 <tmpl_if name='apache_version' op='>=' value='2.4.30' format='version'>
 	<IfModule mod_remoteip.c>
 		RemoteIPProxyProtocol On
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index f0da9e62e0..5e80be9740 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1680,7 +1680,7 @@ class apache2_plugin {
 		if($web_config['vhost_proxy_protocol_enabled'] == 'y' && $data['new']['proxy_protocol'] == 'y'){
 			if((int)$web_config['vhost_proxy_protocol_http_port'] > 0) {
 				$tmp_vhost_arr['port']           = (int)$web_config['vhost_proxy_protocol_http_port'];
-				$tmp_vhost_arr['proxy_protocol'] = $data['new']['proxy_protocol'];
+				$tmp_vhost_arr['use_proxy_protocol'] = $data['new']['proxy_protocol'];
 				$vhosts[]                        = $tmp_vhost_arr;
 			}
 		}
@@ -1704,7 +1704,7 @@ class apache2_plugin {
 			if($web_config['vhost_proxy_protocol_enabled'] == 'y' && $data['new']['proxy_protocol'] == 'y'){
 				if((int)$web_config['vhost_proxy_protocol_https_port'] > 0) {
 					$tmp_vhost_arr['port']           = (int)$web_config['vhost_proxy_protocol_https_port'];
-					$tmp_vhost_arr['proxy_protocol'] = $data['new']['proxy_protocol'];
+					$tmp_vhost_arr['use_proxy_protocol'] = $data['new']['proxy_protocol'];
 					$vhosts[]                        = $tmp_vhost_arr;
 				}
 			}
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 79cb017161..ef9300e5dc 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1522,11 +1522,11 @@ class nginx_plugin {
 
 		//proxy protocol settings
 		if($web_config['vhost_proxy_protocol_enabled'] == "y"){
-			$vhost_data['proxy_protocol'] = $data['new']['proxy_protocol'];
+			$vhost_data['use_proxy_protocol'] = $data['new']['proxy_protocol'];
 			$vhost_data['proxy_protocol_http'] = (int)$web_config['vhost_proxy_protocol_http_port'];
 			$vhost_data['proxy_protocol_https'] = (int)$web_config['vhost_proxy_protocol_https_port'];
 		}else{
-			$vhost_data['proxy_protocol'] = "n";
+			$vhost_data['use_proxy_protocol'] = "n";
 		}
 		
 		// set logging variable
-- 
GitLab


From b92c60a87f96648f1db88669a66c7eebd0a147f0 Mon Sep 17 00:00:00 2001
From: Ales Seifert <seifert@alesak.net>
Date: Sun, 24 Nov 2019 15:29:26 +1100
Subject: [PATCH 176/571] FIXES bug mysql-virtual_outgoing_bcc.cf table is not
 configured with correct DB server host when postfix configuration is updated
 during ISPConfig installation or update

---
 install/tpl/mysql-virtual_outgoing_bcc.cf        | 2 +-
 install/tpl/mysql-virtual_outgoing_bcc.cf.master | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf b/install/tpl/mysql-virtual_outgoing_bcc.cf
index dfeb04b553..78fca41a2f 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf
@@ -5,4 +5,4 @@ table = mail_user
 select_field = sender_cc
 where_field = email
 additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disables$
-hosts = 127.0.0.1
\ No newline at end of file
+hosts = {mysql_server_ip}
\ No newline at end of file
diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
index af062f66b2..53afa53106 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -5,4 +5,4 @@ table = mail_user
 select_field = sender_cc
 where_field = email
 additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disablesmtp = 'n' and sender_cc != ''
-hosts = 127.0.0.1
\ No newline at end of file
+hosts = {mysql_server_ip}
\ No newline at end of file
-- 
GitLab


From 6661b222a9a47f3b7d8efba3e3bca2763b9d49a2 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 30 Oct 2019 13:08:20 +0100
Subject: [PATCH 177/571] #5428 ignore custom directives if forced https

---
 server/conf/vhost.conf.master | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 0982a3cf41..d95d810ad3 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -529,7 +529,16 @@
 			# WEBDAV END
 		</IfModule>
 
-<tmpl_var name='apache_directives'>
+<tmpl_if name='ssl_enabled'>
+	<tmpl_var name='apache_directives'>
+<tmpl_else>
+	<tmpl_if name='rewrite_to_https' op='==' value='y'>
+		# skipping apache_directives, as that will be handled by the ssl vhost
+	<tmpl_else>
+		<tmpl_var name='apache_directives'>
+	</tmpl_if>
+</tmpl_if>
+
 <tmpl_hook name='apache2_vhost:vhost_footer'>
 </VirtualHost>
 
-- 
GitLab


From 89e4ff3334430812d423fdc5b5e7cfea83997125 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Tue, 22 Oct 2019 20:42:54 +0200
Subject: [PATCH 178/571] #5387 boyscout: wrap ProxyFCGISetEnvIf in appropriate
 IfVersion

---
 server/conf/vhost.conf.master | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 0982a3cf41..312be41b52 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -379,10 +379,12 @@
 		</IfModule>
 		<IfModule mod_proxy_fcgi.c>
 <tmpl_if name='php_fpm_chroot' op='==' value='y'>
-			ProxyFCGISetEnvIf "true" DOCUMENT_ROOT "<tmpl_var name='php_fpm_chroot_web_folder'>"
-			ProxyFCGISetEnvIf "true" CONTEXT_DOCUMENT_ROOT "%{reqenv:DOCUMENT_ROOT}"
-			ProxyFCGISetEnvIf "true" HOME "%{reqenv:DOCUMENT_ROOT}"
-			ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "%{reqenv:DOCUMENT_ROOT}%{reqenv:SCRIPT_NAME}"
+			<IfVersion >= 2.4.26>
+				ProxyFCGISetEnvIf "true" DOCUMENT_ROOT "<tmpl_var name='php_fpm_chroot_web_folder'>"
+				ProxyFCGISetEnvIf "true" CONTEXT_DOCUMENT_ROOT "%{reqenv:DOCUMENT_ROOT}"
+				ProxyFCGISetEnvIf "true" HOME "%{reqenv:DOCUMENT_ROOT}"
+				ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "%{reqenv:DOCUMENT_ROOT}%{reqenv:SCRIPT_NAME}"
+			</IfVersion>
 </tmpl_if>
 <tmpl_if name='use_tcp'>
 			#ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:<tmpl_var name='fpm_port'><tmpl_var name='web_document_root'>/$1
-- 
GitLab


From b2d8559a5323977f7e77d75d634de3babfd4bd11 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Tue, 22 Oct 2019 22:01:32 +0200
Subject: [PATCH 179/571] #5387 make apache init script overridable in server
 config

---
 install/tpl/server.ini.master                            | 1 +
 install/update.php                                       | 9 ++++++++-
 interface/lib/classes/IDS/Config/Config.ini.php          | 1 +
 interface/web/admin/form/server_config.tform.php         | 8 ++++++++
 interface/web/admin/lib/lang/ar_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/bg_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/br_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/ca_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/cz_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/de_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/dk_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/el_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/en_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/es_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/fi_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/fr_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/hr_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/hu_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/id_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/it_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/ja_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/nl_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/pl_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/pt_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/ro_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/ru_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/se_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/sk_server_config.lng        | 2 ++
 interface/web/admin/lib/lang/tr_server_config.lng        | 2 ++
 interface/web/admin/templates/server_config_web_edit.htm | 3 +++
 security/ids.whitelist                                   | 1 +
 server/mods-available/web_module.inc.php                 | 4 +++-
 32 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 36f157d8e6..3786fc2ca3 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -72,6 +72,7 @@ website_symlinks_rel=n
 network_filesystem=n
 vhost_conf_dir=/etc/apache2/sites-available
 vhost_conf_enabled_dir=/etc/apache2/sites-enabled
+apache_init_script=
 nginx_vhost_conf_dir=/etc/nginx/sites-available
 nginx_vhost_conf_enabled_dir=/etc/nginx/sites-enabled
 security_level=20
diff --git a/install/update.php b/install/update.php
index 11570aa666..3b3cf969ef 100644
--- a/install/update.php
+++ b/install/update.php
@@ -567,7 +567,14 @@ if($reconfigure_services_answer == 'yes') {
 		if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &');
 	}
 	if($conf['services']['web'] || $inst->install_ispconfig_interface) {
-		if($conf['webserver']['server_type'] == 'apache' && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
+		if($conf['webserver']['server_type'] == 'apache') {
+			// If user has configured a custom Apache init script, use that. Otherwise use the default auto-detected init script
+			if(!empty($conf['server_config']['web']['apache_init_script'])) {
+				system($inst->getinitcommand($conf['server_config']['web']['apache_init_script'], 'restart'));
+			} elseif(!empty($conf['apache']['init_script'])) {
+				system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
+			}
+		}
 		//* Reload is enough for nginx
 		if($conf['webserver']['server_type'] == 'nginx'){
 			if($conf['nginx']['php_fpm_init_script'] != '') system($inst->getinitcommand($conf['nginx']['php_fpm_init_script'], 'reload'));
diff --git a/interface/lib/classes/IDS/Config/Config.ini.php b/interface/lib/classes/IDS/Config/Config.ini.php
index 080055298d..19af5d59bd 100644
--- a/interface/lib/classes/IDS/Config/Config.ini.php
+++ b/interface/lib/classes/IDS/Config/Config.ini.php
@@ -47,6 +47,7 @@
 	; exceptions[]    = POST.website_symlinks
 	; exceptions[]    = POST.vhost_conf_dir
 	; exceptions[]    = POST.vhost_conf_enabled_dir
+	; exceptions[]    = POST.apache_init_script
 	; exceptions[]    = POST.nginx_vhost_conf_dir
 	; exceptions[]    = POST.nginx_vhost_conf_enabled_dir
 	; exceptions[]    = POST.php_open_basedir
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 2663cdd0e0..0e02b8525b 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -848,6 +848,14 @@ $form["tabs"]['web'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'apache_init_script' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
 		'nginx_enable_pagespeed' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index bccdcc42c0..dec2b56c8e 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -9,6 +9,8 @@ $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['website_basedir_txt'] = 'Website basedir';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
+$wb['apache_init_script_txt'] = 'Apache init script';
+$wb['apache_init_script_note_txt'] = 'Leaving this empty will auto-detect the Apache init script';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 39531461c3..186462720e 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -7,6 +7,8 @@ $wb['website_symlinks_txt'] = 'Website symlinks';
 $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
+$wb['apache_init_script_txt'] = 'Apache init скрипт';
+$wb['apache_init_script_note_txt'] = 'Оставянето на това празно ще открие автоматично скрипта за Apache init';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index f57a2310f2..25cb1a3a3d 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -19,6 +19,8 @@ $wb['website_autoalias_txt'] = 'Auto alias - site';
 $wb['website_autoalias_note_txt'] = 'Área reservada:';
 $wb['vhost_conf_dir_txt'] = 'Diretório de configuração vhost';
 $wb['vhost_conf_enabled_dir_txt'] = 'Diretório de configuração vhost habilitado';
+$wb['apache_init_script_txt'] = 'Script de inicialização do Apache';
+$wb['apache_init_script_note_txt'] = 'Deixando esta vontade vazio detectar automaticamente o script de inicialização do Apache';
 $wb['getmail_config_dir_txt'] = 'Diretório de configuração do getmail';
 $wb['fastcgi_starter_path_txt'] = 'Caminho de inicialização do FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Script de inicialização do FastCGI';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 14f0b91d3b..f0d79a89f9 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -19,6 +19,8 @@ $wb['website_autoalias_txt'] = 'Website auto alias';
 $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
+$wb['apache_init_script_txt'] = 'Apache init script';
+$wb['apache_init_script_note_txt'] = 'Leaving this empty will auto-detect the Apache init script';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index a97d78b8eb..100694c625 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -9,6 +9,8 @@ $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['website_basedir_txt'] = 'Website config adresář';
 $wb['vhost_conf_dir_txt'] = 'Vhost config adresář';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled adresář';
+$wb['apache_init_script_txt'] = 'Inicializační skript Apache';
+$wb['apache_init_script_note_txt'] = 'Ponecháte-li toto prázdné, automaticky detekuje iniciační skript Apache';
 $wb['getmail_config_dir_txt'] = 'Getmail složka pro konfigurace';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter cesta';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter skript';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 960381e7c1..d7f21fc473 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -8,6 +8,8 @@ $wb['website_symlinks_txt'] = 'Webseiten Symlinks';
 $wb['website_symlinks_rel_txt'] = 'Erstelle relative Symlinks';
 $wb['vhost_conf_dir_txt'] = 'vHost Konfigurationsverzeichnis';
 $wb['vhost_conf_enabled_dir_txt'] = 'vHost config enabled dir';
+$wb['apache_init_script_txt'] = 'Apache-Init-Skript';
+$wb['apache_init_script_note_txt'] = 'Wenn Sie dieses Feld leer lassen, wird das Apache-Init-Skript automatisch erkannt';
 $wb['getmail_config_dir_txt'] = 'Getmail Konfigurationsverzeichnis';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI Starter Pfad';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI Starter Script';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 73e7ef1bfd..2a8c13e143 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -19,6 +19,8 @@ $wb['website_autoalias_txt'] = 'Webside auto alias';
 $wb['website_autoalias_note_txt'] = 'Pladsholdere:';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
+$wb['apache_init_script_txt'] = 'Apache init script';
+$wb['apache_init_script_note_txt'] = 'Forlader denne tomme vilje automatisk registrering Apache init-script';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 84992261bb..60d3564e13 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -9,6 +9,8 @@ $wb['website_symlinks_rel_txt'] = 'Δημιουργία σχετικών symlink
 $wb['website_basedir_txt'] = 'Βασικός φάκελος Website';
 $wb['vhost_conf_dir_txt'] = 'Φάκελος ρυθμίσεων Vhost';
 $wb['vhost_conf_enabled_dir_txt'] = 'Φάκελος ρυθμίσεων (ενεργών) Vhost';
+$wb['apache_init_script_txt'] = 'Apache script init';
+$wb['apache_init_script_note_txt'] = 'Εάν αφήσετε αυτό το κενό, θα ανιχνευθεί αυτόματα το σενάριο εισαγωγής Apache';
 $wb['getmail_config_dir_txt'] = 'Φάκελος ρυθμίσεων Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Διαδρομή εκκίνησης FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Script εκκίνησης FastCGI';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 0ba3638a0a..82c847f88d 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -19,6 +19,8 @@ $wb["website_autoalias_txt"] = 'Website auto alias';
 $wb["website_autoalias_note_txt"] = 'Placeholders:';
 $wb["vhost_conf_dir_txt"] = 'Vhost config dir';
 $wb["vhost_conf_enabled_dir_txt"] = 'Vhost config enabled dir';
+$wb["apache_init_script_txt"] = 'Apache init script';
+$wb["apache_init_script_note_txt"] = 'Leaving this empty will auto-detect the Apache init script';
 $wb["getmail_config_dir_txt"] = 'Getmail config dir';
 $wb["fastcgi_starter_path_txt"] = 'FastCGI starter path';
 $wb["fastcgi_starter_script_txt"] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 01350367ae..04333c60a3 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -2,6 +2,8 @@
 $wb['add_web_users_to_sshusers_group_txt'] = 'Añadir usuarios web al grupo -sshusers-';
 $wb['admin_notify_events_txt'] = 'Enviar correo al administrador a partir de siguiente nivel';
 $wb['apache_group_error_empty'] = 'El grupo de Apache está vacío.';
+$wb['apache_init_script_note_txt'] = 'Dejar esto vacío detectará automáticamente el script de inicio de Apache';
+$wb['apache_init_script_txt'] = 'Apache init script';
 $wb['apache_user_error_empty'] = 'El usuario de Apache está vacío.';
 $wb['apps_vhost_enabled_txt'] = 'Host virtual de aplicaciones habilitado';
 $wb['apps_vhost_ip_error_empty'] = 'La IP para el host virtual de las aplicaciones está vacía.';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 6caf643abe..c471b4c11b 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -7,6 +7,8 @@ $wb['website_symlinks_txt'] = 'Verkkotunnuksen symmetriset linkit';
 $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['vhost_conf_dir_txt'] = 'Virtuaalipalvelimen asetuskansio';
 $wb['vhost_conf_enabled_dir_txt'] = 'Virtuaalipalvelimen käyttöönottokansio';
+$wb['apache_init_script_txt'] = 'Apache-aloituskomentosarja';
+$wb['apache_init_script_note_txt'] = 'Jätä tämä tyhjä tunnistaa Apache-aloitusohjelman automaattisesti';
 $wb['getmail_config_dir_txt'] = 'Getmail-asetuskansio';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI:n käynnistyspolku';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI:n käynnistysskripti';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 25f7375688..b7741efefc 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -7,6 +7,8 @@ $wb['website_symlinks_txt'] = 'Liens symboliques du site web';
 $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['vhost_conf_dir_txt'] = 'Répertoire de configuration des VHosts';
 $wb['vhost_conf_enabled_dir_txt'] = 'Répertoire de configuration des VHosts actifs';
+$wb['apache_init_script_txt'] = 'Script d\'initiation Apache';
+$wb['apache_init_script_note_txt'] = 'Si vous laissez ce champ vide, le script init Apache sera automatiquement détecté.';
 $wb['getmail_config_dir_txt'] = 'Répertoire de configuration de Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Chemin du lanceur de FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Script lanceur de FastCGI';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index faf08f4201..d1da411eec 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -8,6 +8,8 @@ $wb['website_symlinks_txt'] = 'Symlinkovi Web stranice';
 $wb['website_basedir_txt'] = 'Bazni direktorij Web stranice';
 $wb['vhost_conf_dir_txt'] = 'Vhost konfiguracijski direktorij';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost dozvoljeni konfiguracijski direktorij';
+$wb['apache_init_script_txt'] = 'Apache init skripta';
+$wb['apache_init_script_note_txt'] = 'Ostavite ovo prazno automatski će otkriti skriptu Apache init';
 $wb['getmail_config_dir_txt'] = 'Getmail konfiguracijski direktorij';
 $wb['fastcgi_starter_path_txt'] = 'Put do FastCGI-a';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI početna skripta';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 6347afb7da..f07dc1a7dd 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -7,6 +7,8 @@ $wb['website_symlinks_txt'] = 'Website symlinks';
 $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
+$wb['apache_init_script_txt'] = 'Apache init parancsfájl';
+$wb['apache_init_script_note_txt'] = 'Ha üresen hagyja, az automatikusan felismeri az Apache init parancsfájlját';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index 9a28dff300..71e060c0ea 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -9,6 +9,8 @@ $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['website_basedir_txt'] = 'Basedir Situs web';
 $wb['vhost_conf_dir_txt'] = 'Direktori konfigurasi vhost';
 $wb['vhost_conf_enabled_dir_txt'] = 'Direktori konfigurasi vhost yang aktif';
+$wb['apache_init_script_txt'] = 'Skrip init Apache';
+$wb['apache_init_script_note_txt'] = 'Membiarkan ini kosong akan secara otomatis mendeteksi skrip init Apache';
 $wb['getmail_config_dir_txt'] = 'Direktori konfigurasi getmail';
 $wb['fastcgi_starter_path_txt'] = 'Path pemicu FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Skrip pemicu FastCGI';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 3dc37a3c1d..b853e1f4ab 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -6,6 +6,8 @@ $wb['website_path_txt'] = 'Percorso Sito Web';
 $wb['website_symlinks_txt'] = 'Sito Web symlinks';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config dir abilitata';
+$wb['apache_init_script_txt'] = 'Apache init script';
+$wb['apache_init_script_note_txt'] = 'Lasciare questo vuoto rileverà automaticamente lo script init di Apache';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'Percorso FastCGI starter';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 72bef72c4b..efaff2df6c 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -9,6 +9,8 @@ $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['website_basedir_txt'] = 'ウェブサイトのベースディレクトリ';
 $wb['vhost_conf_dir_txt'] = 'バーチャルホスト設定ディレクトリ';
 $wb['vhost_conf_enabled_dir_txt'] = 'バーチャルホスト設定ディレクトリ(有効)';
+$wb['apache_init_script_txt'] = 'Apache initスクリプト';
+$wb['apache_init_script_note_txt'] = 'これを空のままにすると、Apache initスクリプトが自動検出されます';
 $wb['getmail_config_dir_txt'] = 'Getmail 設定ディレクトリ';
 $wb['fastcgi_starter_path_txt'] = 'FastCGIスターターのパス';
 $wb['fastcgi_starter_script_txt'] = 'FastCGIスタータースクリプト';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 2884f304ec..e081fd79ea 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -9,6 +9,8 @@ $wb['website_symlinks_rel_txt'] = 'Maak relative symlinks';
 $wb['website_basedir_txt'] = 'Website basedir';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
+$wb['apache_init_script_txt'] = 'Apache init script';
+$wb['apache_init_script_note_txt'] = 'Als u dit leeg laat, wordt het Apache init-script automatisch gedetecteerd';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter pad';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 29cb94e96c..68ad88c95a 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -9,6 +9,8 @@ $wb['website_symlinks_rel_txt'] = 'Twórz linki relatywne';
 $wb['website_basedir_txt'] = 'Ścieżka bazowa strony WWW';
 $wb['vhost_conf_dir_txt'] = 'Ścieżka do konfiguracyji wirtualnego serwera';
 $wb['vhost_conf_enabled_dir_txt'] = 'Ścieżka do aktywnej konfiguracyji Vhost';
+$wb['apache_init_script_txt'] = 'Skrypt inicjujÄ…cy Apache';
+$wb['apache_init_script_note_txt'] = 'Pozostawienie tego pustego spowoduje automatyczne wykrycie skryptu inicjujÄ…cego Apache';
 $wb['getmail_config_dir_txt'] = 'Ścieżka do konfiguracyji Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Adres startowy FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Startowy skrypt FastCGI';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 3703c759ed..8639ad3a8b 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -8,6 +8,8 @@ $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['website_basedir_txt'] = 'Website basedir: pasta base ';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost pasta de configuração activo';
+$wb['apache_init_script_txt'] = 'Script de inicialização do Apache';
+$wb['apache_init_script_note_txt'] = 'Deixando esta vontade vazio detectar automaticamente o script de inicialização do Apache';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI: Pasta inicial';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI: Script inicial';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 3251476126..4292ee008f 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -8,6 +8,8 @@ $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['website_basedir_txt'] = 'Website basedir';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
+$wb['apache_init_script_txt'] = 'Scriptul Apache init';
+$wb['apache_init_script_note_txt'] = 'Lăsând acest gol, va detecta automat scriptul inițial Apache';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index b2f0b407d6..43468ce757 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -6,6 +6,8 @@ $wb['website_path_txt'] = 'Путь к web-сайту';
 $wb['website_symlinks_txt'] = 'Симлинки Web-сайта';
 $wb['vhost_conf_dir_txt'] = 'Каталог config Vhost';
 $wb['vhost_conf_enabled_dir_txt'] = 'Каталог Vhost conf enabled';
+$wb['apache_init_script_txt'] = 'Apache init script';
+$wb['apache_init_script_note_txt'] = 'Если оставить это поле пустым, будет автоматически обнаружен скрипт инициализации Apache.';
 $wb['getmail_config_dir_txt'] = 'Папка конфига Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Стартовый путь FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Стартовый скрипт FastCGI';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 1103baa4d2..baf3c16e6f 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -7,6 +7,8 @@ $wb['website_symlinks_txt'] = 'Website symlinks';
 $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
+$wb['apache_init_script_txt'] = 'Apache init-skript';
+$wb['apache_init_script_note_txt'] = 'Om du lämnar detta tomt kommer det automatiskt att upptäcka Apache-init-skriptet';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 125e0b1ea2..4eaacc4b59 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -9,6 +9,8 @@ $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
 $wb['website_basedir_txt'] = 'Website základny adresár';
 $wb['vhost_conf_dir_txt'] = 'Vhost konfig adresár';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost konfig odblokovaný adresár';
+$wb['apache_init_script_txt'] = 'Inicializačný skript Apache';
+$wb['apache_init_script_note_txt'] = 'Ak ponecháte toto pole prázdne, automaticky zistí iniciačný skript Apache';
 $wb['getmail_config_dir_txt'] = 'Getmail konfig adresár';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter cesta';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter skript';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 3b63e881f9..a5ca5adfff 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -19,6 +19,8 @@ $wb['website_autoalias_txt'] = 'Otomatik Web Sitesi Takma Adı';
 $wb['website_autoalias_note_txt'] = 'Kodlar:';
 $wb['vhost_conf_dir_txt'] = 'Sanal Sunucu Ayarları Klasörü';
 $wb['vhost_conf_enabled_dir_txt'] = 'Etkin Sanal Sunucu Ayarları Klasörü';
+$wb['apache_init_script_txt'] = 'Apache init betiÄŸi';
+$wb['apache_init_script_note_txt'] = 'Bu değerin boş bırakılması Apache init betiğini otomatik olarak algılar';
 $wb['getmail_config_dir_txt'] = 'Getmail Ayarları Klasörü';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI Başlatıcı Yolu';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI Başlatıcı Betiği';
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index eb285bbc07..97dc0557fc 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -60,6 +60,9 @@
             <div class="form-group apache">
                 <label for="vhost_conf_enabled_dir" class="col-sm-3 control-label">{tmpl_var name='vhost_conf_enabled_dir_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="vhost_conf_enabled_dir" id="vhost_conf_enabled_dir" value="{tmpl_var name='vhost_conf_enabled_dir'}" class="form-control" /></div></div>
+            <div class="form-group apache">
+                <label for="apache_init_script" class="col-sm-3 control-label">{tmpl_var name='apache_init_script_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="apache_init_script" id="apache_init_script" value="{tmpl_var name='apache_init_script'}" class="form-control" />{tmpl_var name='apache_init_script_note_txt'}</div></div>
             <div class="form-group nginx">
                 <label for="nginx_enable_pagespeed" class="col-sm-3 control-label">{tmpl_var name='nginx_enable_pagespeed_txt'}</label>
                 <div class="col-sm-9">{tmpl_var name='nginx_enable_pagespeed'}</div></div>
diff --git a/security/ids.whitelist b/security/ids.whitelist
index a9b045e15f..6a953f45cf 100644
--- a/security/ids.whitelist
+++ b/security/ids.whitelist
@@ -7,6 +7,7 @@ admin:/admin/server_config_edit.php:POST.website_path
 admin:/admin/server_config_edit.php:POST.website_symlinks
 admin:/admin/server_config_edit.php:POST.vhost_conf_dir
 admin:/admin/server_config_edit.php:POST.vhost_conf_enabled_dir
+admin:/admin/server_config_edit.php:POST.apache_init_script
 admin:/admin/server_config_edit.php:POST.nginx_vhost_conf_dir
 admin:/admin/server_config_edit.php:POST.nginx_vhost_conf_enabled_dir
 admin:/admin/server_config_edit.php:POST.php_open_basedir
diff --git a/server/mods-available/web_module.inc.php b/server/mods-available/web_module.inc.php
index aecec10579..02f31510c2 100644
--- a/server/mods-available/web_module.inc.php
+++ b/server/mods-available/web_module.inc.php
@@ -203,7 +203,9 @@ class web_module {
 			$daemon = $web_config['server_type'];
 			break;
 		default:
-			if(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) {
+			if (!empty($web_config['apache_init_script'])) {
+				$daemon = $web_config['apache_init_script'];
+			} elseif(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) {
 				$daemon = 'httpd';
 			} else {
 				$daemon = 'apache2';
-- 
GitLab


From 215570809d0a5246a0dac783373720efc1c56a59 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Wed, 27 Nov 2019 15:43:14 +0100
Subject: [PATCH 180/571] #5387 add regex check to apache init script form
 input

---
 interface/web/admin/form/server_config.tform.php  | 4 ++++
 interface/web/admin/lib/lang/ar_server_config.lng | 1 +
 interface/web/admin/lib/lang/bg_server_config.lng | 1 +
 interface/web/admin/lib/lang/br_server_config.lng | 1 +
 interface/web/admin/lib/lang/ca_server_config.lng | 1 +
 interface/web/admin/lib/lang/cz_server_config.lng | 1 +
 interface/web/admin/lib/lang/de_server_config.lng | 1 +
 interface/web/admin/lib/lang/dk_server_config.lng | 1 +
 interface/web/admin/lib/lang/el_server_config.lng | 1 +
 interface/web/admin/lib/lang/en_server_config.lng | 1 +
 interface/web/admin/lib/lang/es_server_config.lng | 1 +
 interface/web/admin/lib/lang/fi_server_config.lng | 1 +
 interface/web/admin/lib/lang/fr_server_config.lng | 1 +
 interface/web/admin/lib/lang/hr_server_config.lng | 1 +
 interface/web/admin/lib/lang/hu_server_config.lng | 1 +
 interface/web/admin/lib/lang/id_server_config.lng | 1 +
 interface/web/admin/lib/lang/it_server_config.lng | 1 +
 interface/web/admin/lib/lang/ja_server_config.lng | 1 +
 interface/web/admin/lib/lang/nl_server_config.lng | 1 +
 interface/web/admin/lib/lang/pl_server_config.lng | 1 +
 interface/web/admin/lib/lang/pt_server_config.lng | 1 +
 interface/web/admin/lib/lang/ro_server_config.lng | 1 +
 interface/web/admin/lib/lang/ru_server_config.lng | 1 +
 interface/web/admin/lib/lang/se_server_config.lng | 1 +
 interface/web/admin/lib/lang/sk_server_config.lng | 1 +
 interface/web/admin/lib/lang/tr_server_config.lng | 1 +
 26 files changed, 29 insertions(+)

diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 0e02b8525b..c6022e6bc2 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -852,6 +852,10 @@ $form["tabs"]['web'] = array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
+			'validators' => array(	0 => array('type' => 'REGEX',
+										'regex' => '/^(|[a-zA-Z0-9\.\-\_]{1,128})$/',
+										'errmsg' => 'apache_init_script_error_regex'),
+			),
 			'value' => '',
 			'width' => '40',
 			'maxlength' => '255'
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index dec2b56c8e..f271e007d3 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -11,6 +11,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
 $wb['apache_init_script_txt'] = 'Apache init script';
 $wb['apache_init_script_note_txt'] = 'Leaving this empty will auto-detect the Apache init script';
+$wb['apache_init_script_error_regex'] = 'Invalid apache init script.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 186462720e..46c77fe794 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -9,6 +9,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
 $wb['apache_init_script_txt'] = 'Apache init скрипт';
 $wb['apache_init_script_note_txt'] = 'Оставянето на това празно ще открие автоматично скрипта за Apache init';
+$wb['apache_init_script_error_regex'] = 'Невалиден Apache скрипт за задействане.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 25cb1a3a3d..c12a1a7dad 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -21,6 +21,7 @@ $wb['vhost_conf_dir_txt'] = 'Diretório de configuração vhost';
 $wb['vhost_conf_enabled_dir_txt'] = 'Diretório de configuração vhost habilitado';
 $wb['apache_init_script_txt'] = 'Script de inicialização do Apache';
 $wb['apache_init_script_note_txt'] = 'Deixando esta vontade vazio detectar automaticamente o script de inicialização do Apache';
+$wb["apache_init_script_error_regex"] = 'Script de inicialização do Apache inválido.';
 $wb['getmail_config_dir_txt'] = 'Diretório de configuração do getmail';
 $wb['fastcgi_starter_path_txt'] = 'Caminho de inicialização do FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Script de inicialização do FastCGI';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index f0d79a89f9..1dac17eda5 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -21,6 +21,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
 $wb['apache_init_script_txt'] = 'Apache init script';
 $wb['apache_init_script_note_txt'] = 'Leaving this empty will auto-detect the Apache init script';
+$wb['apache_init_script_error_regex'] = 'Invalid Apache init script.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 100694c625..2b42cf6691 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -11,6 +11,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config adresář';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled adresář';
 $wb['apache_init_script_txt'] = 'Inicializační skript Apache';
 $wb['apache_init_script_note_txt'] = 'Ponecháte-li toto prázdné, automaticky detekuje iniciační skript Apache';
+$wb['apache_init_script_error_regex'] = 'Neplatný iniciační skript Apache.';
 $wb['getmail_config_dir_txt'] = 'Getmail složka pro konfigurace';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter cesta';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter skript';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index d7f21fc473..9e0ce6f48f 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -10,6 +10,7 @@ $wb['vhost_conf_dir_txt'] = 'vHost Konfigurationsverzeichnis';
 $wb['vhost_conf_enabled_dir_txt'] = 'vHost config enabled dir';
 $wb['apache_init_script_txt'] = 'Apache-Init-Skript';
 $wb['apache_init_script_note_txt'] = 'Wenn Sie dieses Feld leer lassen, wird das Apache-Init-Skript automatisch erkannt';
+$wb['apache_init_script_error_regex'] = 'Ungültiges Apache-Init-Skript.';
 $wb['getmail_config_dir_txt'] = 'Getmail Konfigurationsverzeichnis';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI Starter Pfad';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI Starter Script';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 2a8c13e143..e6d5eaa289 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -21,6 +21,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
 $wb['apache_init_script_txt'] = 'Apache init script';
 $wb['apache_init_script_note_txt'] = 'Forlader denne tomme vilje automatisk registrering Apache init-script';
+$wb['apache_init_script_error_regex'] = 'Ugyldigt Apache init-script.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 60d3564e13..394ba2bde9 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -11,6 +11,7 @@ $wb['vhost_conf_dir_txt'] = 'Φάκελος ρυθμίσεων Vhost';
 $wb['vhost_conf_enabled_dir_txt'] = 'Φάκελος ρυθμίσεων (ενεργών) Vhost';
 $wb['apache_init_script_txt'] = 'Apache script init';
 $wb['apache_init_script_note_txt'] = 'Εάν αφήσετε αυτό το κενό, θα ανιχνευθεί αυτόματα το σενάριο εισαγωγής Apache';
+$wb['apache_init_script_error_regex'] = 'Μη έγκυρη δέσμη ενεργειών Apache.';
 $wb['getmail_config_dir_txt'] = 'Φάκελος ρυθμίσεων Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Διαδρομή εκκίνησης FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Script εκκίνησης FastCGI';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 82c847f88d..1d2bf74ec9 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -21,6 +21,7 @@ $wb["vhost_conf_dir_txt"] = 'Vhost config dir';
 $wb["vhost_conf_enabled_dir_txt"] = 'Vhost config enabled dir';
 $wb["apache_init_script_txt"] = 'Apache init script';
 $wb["apache_init_script_note_txt"] = 'Leaving this empty will auto-detect the Apache init script';
+$wb["apache_init_script_error_regex"] = 'Invalid Apache init script.';
 $wb["getmail_config_dir_txt"] = 'Getmail config dir';
 $wb["fastcgi_starter_path_txt"] = 'FastCGI starter path';
 $wb["fastcgi_starter_script_txt"] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 04333c60a3..08c80ec80e 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -4,6 +4,7 @@ $wb['admin_notify_events_txt'] = 'Enviar correo al administrador a partir de sig
 $wb['apache_group_error_empty'] = 'El grupo de Apache está vacío.';
 $wb['apache_init_script_note_txt'] = 'Dejar esto vacío detectará automáticamente el script de inicio de Apache';
 $wb['apache_init_script_txt'] = 'Apache init script';
+$wb['apache_init_script_error_regex'] = 'Guión de inicio Apache no válido.';
 $wb['apache_user_error_empty'] = 'El usuario de Apache está vacío.';
 $wb['apps_vhost_enabled_txt'] = 'Host virtual de aplicaciones habilitado';
 $wb['apps_vhost_ip_error_empty'] = 'La IP para el host virtual de las aplicaciones está vacía.';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index c471b4c11b..b81f77ac08 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -9,6 +9,7 @@ $wb['vhost_conf_dir_txt'] = 'Virtuaalipalvelimen asetuskansio';
 $wb['vhost_conf_enabled_dir_txt'] = 'Virtuaalipalvelimen käyttöönottokansio';
 $wb['apache_init_script_txt'] = 'Apache-aloituskomentosarja';
 $wb['apache_init_script_note_txt'] = 'Jätä tämä tyhjä tunnistaa Apache-aloitusohjelman automaattisesti';
+$wb['apache_init_script_error_regex'] = 'Virheellinen Apache-aloituskomentosarja.';
 $wb['getmail_config_dir_txt'] = 'Getmail-asetuskansio';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI:n käynnistyspolku';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI:n käynnistysskripti';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index b7741efefc..705c376a29 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -9,6 +9,7 @@ $wb['vhost_conf_dir_txt'] = 'Répertoire de configuration des VHosts';
 $wb['vhost_conf_enabled_dir_txt'] = 'Répertoire de configuration des VHosts actifs';
 $wb['apache_init_script_txt'] = 'Script d\'initiation Apache';
 $wb['apache_init_script_note_txt'] = 'Si vous laissez ce champ vide, le script init Apache sera automatiquement détecté.';
+$wb['apache_init_script_error_regex'] = 'Script d\'initialisation Apache non valide.';
 $wb['getmail_config_dir_txt'] = 'Répertoire de configuration de Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Chemin du lanceur de FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Script lanceur de FastCGI';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index d1da411eec..609d9ab889 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -10,6 +10,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost konfiguracijski direktorij';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost dozvoljeni konfiguracijski direktorij';
 $wb['apache_init_script_txt'] = 'Apache init skripta';
 $wb['apache_init_script_note_txt'] = 'Ostavite ovo prazno automatski će otkriti skriptu Apache init';
+$wb['apache_init_script_error_regex'] = 'Nevažeća skripta Apache init.';
 $wb['getmail_config_dir_txt'] = 'Getmail konfiguracijski direktorij';
 $wb['fastcgi_starter_path_txt'] = 'Put do FastCGI-a';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI početna skripta';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index f07dc1a7dd..0bd058a5bc 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -9,6 +9,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
 $wb['apache_init_script_txt'] = 'Apache init parancsfájl';
 $wb['apache_init_script_note_txt'] = 'Ha üresen hagyja, az automatikusan felismeri az Apache init parancsfájlját';
+$wb['apache_init_script_error_regex'] = 'Érvénytelen Apache init parancsfájl.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index 71e060c0ea..e4c1e47ce5 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -11,6 +11,7 @@ $wb['vhost_conf_dir_txt'] = 'Direktori konfigurasi vhost';
 $wb['vhost_conf_enabled_dir_txt'] = 'Direktori konfigurasi vhost yang aktif';
 $wb['apache_init_script_txt'] = 'Skrip init Apache';
 $wb['apache_init_script_note_txt'] = 'Membiarkan ini kosong akan secara otomatis mendeteksi skrip init Apache';
+$wb['apache_init_script_error_regex'] = 'Skrip init Apache tidak valid.';
 $wb['getmail_config_dir_txt'] = 'Direktori konfigurasi getmail';
 $wb['fastcgi_starter_path_txt'] = 'Path pemicu FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Skrip pemicu FastCGI';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index b853e1f4ab..2d7d9e9ddb 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -8,6 +8,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config dir abilitata';
 $wb['apache_init_script_txt'] = 'Apache init script';
 $wb['apache_init_script_note_txt'] = 'Lasciare questo vuoto rileverà automaticamente lo script init di Apache';
+$wb['apache_init_script_error_regex'] = 'Script init Apache non valido.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'Percorso FastCGI starter';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index efaff2df6c..4d1d362502 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -11,6 +11,7 @@ $wb['vhost_conf_dir_txt'] = 'バーチャルホスト設定ディレクトリ';
 $wb['vhost_conf_enabled_dir_txt'] = 'バーチャルホスト設定ディレクトリ(有効)';
 $wb['apache_init_script_txt'] = 'Apache initスクリプト';
 $wb['apache_init_script_note_txt'] = 'これを空のままにすると、Apache initスクリプトが自動検出されます';
+$wb['apache_init_script_error_regex'] = '無効なApache initスクリプト。';
 $wb['getmail_config_dir_txt'] = 'Getmail 設定ディレクトリ';
 $wb['fastcgi_starter_path_txt'] = 'FastCGIスターターのパス';
 $wb['fastcgi_starter_script_txt'] = 'FastCGIスタータースクリプト';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index e081fd79ea..542add696b 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -11,6 +11,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
 $wb['apache_init_script_txt'] = 'Apache init script';
 $wb['apache_init_script_note_txt'] = 'Als u dit leeg laat, wordt het Apache init-script automatisch gedetecteerd';
+$wb['apache_init_script_error_regex'] = 'Ongeldig Apache init-script.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter pad';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 68ad88c95a..61509f30cf 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -11,6 +11,7 @@ $wb['vhost_conf_dir_txt'] = 'Ścieżka do konfiguracyji wirtualnego serwera';
 $wb['vhost_conf_enabled_dir_txt'] = 'Ścieżka do aktywnej konfiguracyji Vhost';
 $wb['apache_init_script_txt'] = 'Skrypt inicjujÄ…cy Apache';
 $wb['apache_init_script_note_txt'] = 'Pozostawienie tego pustego spowoduje automatyczne wykrycie skryptu inicjujÄ…cego Apache';
+$wb['apache_init_script_error_regex'] = 'Niepoprawny skrypt inicjujÄ…cy Apache.';
 $wb['getmail_config_dir_txt'] = 'Ścieżka do konfiguracyji Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Adres startowy FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Startowy skrypt FastCGI';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 8639ad3a8b..98bf41a283 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -10,6 +10,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost pasta de configuração activo';
 $wb['apache_init_script_txt'] = 'Script de inicialização do Apache';
 $wb['apache_init_script_note_txt'] = 'Deixando esta vontade vazio detectar automaticamente o script de inicialização do Apache';
+$wb['apache_init_script_error_regex'] = 'Script de inicialização do Apache inválido.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI: Pasta inicial';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI: Script inicial';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 4292ee008f..27926c44a8 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -10,6 +10,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
 $wb['apache_init_script_txt'] = 'Scriptul Apache init';
 $wb['apache_init_script_note_txt'] = 'Lăsând acest gol, va detecta automat scriptul inițial Apache';
+$wb['apache_init_script_error_regex'] = 'Scriptul inițial de Apache nevalid.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 43468ce757..db17e9ac5a 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -8,6 +8,7 @@ $wb['vhost_conf_dir_txt'] = 'Каталог config Vhost';
 $wb['vhost_conf_enabled_dir_txt'] = 'Каталог Vhost conf enabled';
 $wb['apache_init_script_txt'] = 'Apache init script';
 $wb['apache_init_script_note_txt'] = 'Если оставить это поле пустым, будет автоматически обнаружен скрипт инициализации Apache.';
+$wb['apache_init_script_error_regex'] = 'Недопустимый скрипт инициализации Apache.';
 $wb['getmail_config_dir_txt'] = 'Папка конфига Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Стартовый путь FastCGI';
 $wb['fastcgi_starter_script_txt'] = 'Стартовый скрипт FastCGI';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index baf3c16e6f..afaac77796 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -9,6 +9,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost config dir';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost config enabled dir';
 $wb['apache_init_script_txt'] = 'Apache init-skript';
 $wb['apache_init_script_note_txt'] = 'Om du lämnar detta tomt kommer det automatiskt att upptäcka Apache-init-skriptet';
+$wb['apache_init_script_error_regex'] = 'Ogiltigt Apache-init-skript.';
 $wb['getmail_config_dir_txt'] = 'Getmail config dir';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter path';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 4eaacc4b59..f97bc7f86f 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -11,6 +11,7 @@ $wb['vhost_conf_dir_txt'] = 'Vhost konfig adresár';
 $wb['vhost_conf_enabled_dir_txt'] = 'Vhost konfig odblokovaný adresár';
 $wb['apache_init_script_txt'] = 'Inicializačný skript Apache';
 $wb['apache_init_script_note_txt'] = 'Ak ponecháte toto pole prázdne, automaticky zistí iniciačný skript Apache';
+$wb['apache_init_script_error_regex'] = 'Neplatný iniciačný skript Apache.';
 $wb['getmail_config_dir_txt'] = 'Getmail konfig adresár';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI starter cesta';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI starter skript';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index a5ca5adfff..7d664b6947 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -21,6 +21,7 @@ $wb['vhost_conf_dir_txt'] = 'Sanal Sunucu Ayarları Klasörü';
 $wb['vhost_conf_enabled_dir_txt'] = 'Etkin Sanal Sunucu Ayarları Klasörü';
 $wb['apache_init_script_txt'] = 'Apache init betiÄŸi';
 $wb['apache_init_script_note_txt'] = 'Bu değerin boş bırakılması Apache init betiğini otomatik olarak algılar';
+$wb['apache_init_script_error_regex'] = 'Geçersiz Apache init betiği.';
 $wb['getmail_config_dir_txt'] = 'Getmail Ayarları Klasörü';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI Başlatıcı Yolu';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI Başlatıcı Betiği';
-- 
GitLab


From 8f069999ce0cab99d24ee88f324e73f92bffd29f Mon Sep 17 00:00:00 2001
From: Ales Seifert <seifert@alesak.net>
Date: Thu, 28 Nov 2019 21:27:03 +1100
Subject: [PATCH 181/571] added update status check for Redhat based distros

---
 .../cron.d/100-monitor_system_update.inc.php  | 24 ++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/server/lib/classes/cron.d/100-monitor_system_update.inc.php b/server/lib/classes/cron.d/100-monitor_system_update.inc.php
index bc4f521073..3d4ebf408e 100644
--- a/server/lib/classes/cron.d/100-monitor_system_update.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_system_update.inc.php
@@ -159,7 +159,29 @@ class cronjob_monitor_system_update extends cronjob {
 			 * Fetch the output
 			 */
 			$data['output'] = shell_exec('zypper lu');
-		} else {
+		} elseif(file_exists('/etc/redhat-release')) {
+			/*
+			 * update and find the upgrade.
+			 * if there is any output, then there is a needed update
+			 */
+			$aptData = shell_exec('yum -q list updates');
+			if ($aptData == '') {
+				/* There is nothing to update! */
+				$state = 'ok';
+			} else {
+				/*
+				 * There is something to update! this is in most cases not critical, so we can
+				 * do a system-update once a month or so...
+				 */
+				$state = 'info';
+			}
+
+			/*
+			 * Fetch the output
+			 */
+			$data['output'] = shell_exec('yum -q list updates');
+            
+        } else {
 			/*
 			 * It is not Debian/Ubuntu, so there is no data and no state
 			 *
-- 
GitLab


From 81768b88aff964c18444e4f6cd0d38b5d9b12666 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git_projects@michaelseevogel.de>
Date: Fri, 29 Nov 2019 11:52:12 +0100
Subject: [PATCH 182/571] use dnf as default package manager whenever possible

---
 .../cron.d/100-monitor_system_update.inc.php  | 52 +++++++++++--------
 1 file changed, 31 insertions(+), 21 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_system_update.inc.php b/server/lib/classes/cron.d/100-monitor_system_update.inc.php
index 3d4ebf408e..34f944fa67 100644
--- a/server/lib/classes/cron.d/100-monitor_system_update.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_system_update.inc.php
@@ -160,28 +160,38 @@ class cronjob_monitor_system_update extends cronjob {
 			 */
 			$data['output'] = shell_exec('zypper lu');
 		} elseif(file_exists('/etc/redhat-release')) {
-			/*
-			 * update and find the upgrade.
-			 * if there is any output, then there is a needed update
-			 */
-			$aptData = shell_exec('yum -q list updates');
-			if ($aptData == '') {
-				/* There is nothing to update! */
-				$state = 'ok';
-			} else {
-				/*
-				 * There is something to update! this is in most cases not critical, so we can
-				 * do a system-update once a month or so...
-				 */
-				$state = 'info';
-			}
-
-			/*
-			 * Fetch the output
-			 */
-			$data['output'] = shell_exec('yum -q list updates');
+                        /*
+                         * update and find the upgrade.
+                         * if there is any output, then there is a needed update
+                         */
+
+			/* try to figure out the default package manager first */
+                        if(file_exists('/usr/bin/dnf') && (is_link('/usr/bin/yum'))) {
+                                $rhPkgMgr = 'dnf';
+                        } elseif(file_exists('/usr/bin/dnf') && (!file_exists('/usr/bin/yum')) || (!is_link('/usr/bin/yum'))) {
+                                $rhPkgMgr = 'dnf';
+                        } else {
+                                $rhPkgMgr = 'yum';
+                        }
+
+                        $aptData = shell_exec($rhPkgMgr. ' -q list updates');
+                        if ($aptData == '') {
+                                /* There is nothing to update! */
+                                $state = 'ok';
+                        } else {
+                                /*
+                                 * There is something to update! this is in most cases not critical, so we can
+                                 * do a system-update once a month or so...
+                                 */
+                                $state = 'info';
+                        }
+
+                        /*
+                         * Fetch the output
+                         */
+                        $data['output'] = shell_exec($rhPkgMgr. ' -q list updates');
             
-        } else {
+	        } else {
 			/*
 			 * It is not Debian/Ubuntu, so there is no data and no state
 			 *
-- 
GitLab


From 1abf95299b76dc55e238054731e1e1e193a04989 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git_projects@michaelseevogel.de>
Date: Fri, 29 Nov 2019 11:56:20 +0100
Subject: [PATCH 183/571] added CentOS 8 detection to monitoring tools

---
 server/lib/classes/monitor_tools.inc.php | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index d8d325fe60..aba19df7a4 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -319,6 +319,14 @@ class monitor_tools {
 			} else {
 				$distid = 'centos72';
 			}
+                } elseif(stristr($content, 'CentOS Linux release 8')) {
+                        preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
+                        $distname = 'CentOS';
+                        $distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
+                        $distbaseid = 'fedora';
+                        $var=explode(" ", $content);
+                        $var=explode(".", $var[3]);
+                        $var=$var[0].".".$var[1];
 		} else {
 			$distname = 'Redhat';
 			$distver = 'Unknown';
-- 
GitLab


From f6553cd855fcd2a52f5a522e5335277400485fd8 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git_projects@michaelseevogel.de>
Date: Fri, 29 Nov 2019 12:05:43 +0100
Subject: [PATCH 184/571] added CentOS 8 detection to installer

---
 install/lib/install.lib.php | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 1e49e025ca..02ebba2850 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -341,6 +341,15 @@ function get_distname() {
 				$distid = 'centos72';
 			}
 			swriteln("Operating System: CentOS $var\n");
+                } elseif(stristr($content, 'CentOS Linux release 8')) {
+                        $distname = 'CentOS';
+                        $distver = 'Unknown';
+                        $distbaseid = 'fedora';
+			$distid = 'centos80';
+                        $var=explode(" ", $content);
+                        $var=explode(".", $var[3]);
+                        $var=$var[0].".".$var[1];
+                        swriteln("Operating System: CentOS $var\n");
 		} else {
 			$distname = 'Redhat';
 			$distver = 'Unknown';
-- 
GitLab


From 1d10294cee99e75cadebb6eff02160632f482c56 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Fri, 29 Nov 2019 14:00:48 +0100
Subject: [PATCH 185/571] Test webserver configuration on restart was not shown
 for nginx

---
 interface/web/admin/lib/lang/ar_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/bg_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/ca_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/en_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/fi_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/hu_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/ja_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/pt_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/ro_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/se_server_config.lng        | 2 +-
 interface/web/admin/lib/lang/sk_server_config.lng        | 2 +-
 interface/web/admin/templates/server_config_web_edit.htm | 2 +-
 12 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index f271e007d3..24a1a41933 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Backup directory';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['CA_path_txt'] = 'CA Path';
 $wb['CA_pass_txt'] = 'CA passphrase';
 $wb['ufw_enable_txt'] = 'Enable';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 46c77fe794..aa4385b8ae 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Директория за бекъп';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Manage Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 1dac17eda5..40f02fb637 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -96,7 +96,7 @@ $wb['backup_dir_txt'] = 'Backup directory';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['network_config_warning_txt'] = 'The network configuration option is only available for Debian and Ubuntu Servers. Do not enable this option if your network interface is not eth0.';
 $wb['CA_path_txt'] = 'CA Path';
 $wb['CA_pass_txt'] = 'CA passphrase';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 1d2bf74ec9..b8c9166d43 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -97,7 +97,7 @@ $wb["backup_tmp_txt"] = 'Backup tmp directory for zip';
 $wb["named_conf_local_path_txt"] = 'BIND named.conf.local path';
 $wb["php_ini_path_cgi_txt"] = 'CGI php.ini path';
 $wb["php_ini_path_apache_txt"] = 'Apache php.ini path';
-$wb["check_apache_config_txt"] = 'Test apache configuration on restart';
+$wb["check_apache_config_txt"] = 'Test webserver configuration on restart';
 $wb["network_config_warning_txt"] = 'The network configuration option is only available for Debian and Ubuntu Servers. Do not enable this option if your network interface is not eth0.';
 $wb["CA_path_txt"] = 'CA Path';
 $wb["CA_pass_txt"] = 'CA passphrase';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index b81f77ac08..85b994a72e 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Backup directory';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['CA_path_txt'] = 'CA Path';
 $wb['CA_pass_txt'] = 'CA passphrase';
 $wb['ufw_enable_txt'] = 'Enable';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 0bd058a5bc..52533a2c78 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Mentés könyvtára';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['network_config_warning_txt'] = 'The network configuration option is only available for Debian and Ubuntu Servers. Do not enable this option if your network interface is not eth0.';
 $wb['CA_path_txt'] = 'CA Path';
 $wb['CA_pass_txt'] = 'CA passphrase';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 4d1d362502..6cd157154a 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Backup directory';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Manage Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 98bf41a283..fabd1d61cc 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Backup directory';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['CA_path_txt'] = 'CA Path';
 $wb['CA_pass_txt'] = 'CA passphrase';
 $wb['ufw_enable_txt'] = 'Enable';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 27926c44a8..b5a1a18759 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Backup directory';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Manage Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index afaac77796..92b55336f0 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Backup directory';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Manage Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index f97bc7f86f..801a4fece1 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -84,7 +84,7 @@ $wb['backup_dir_txt'] = 'Backup directory';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local path';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini path';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini path';
-$wb['check_apache_config_txt'] = 'Test apache configuration on restart';
+$wb['check_apache_config_txt'] = 'Test webserver configuration on restart';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Manage Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 97dc0557fc..05042bac85 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -78,7 +78,7 @@
                         {tmpl_var name='security_level'}
                     </select></div>
             </div>
-            <div class="form-group apache">
+            <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='check_apache_config_txt'}</label>
                 <div class="col-sm-9">
                     {tmpl_var name='check_apache_config'}
-- 
GitLab


From 1477f12bdbbf2df77fa6e9abf5773745954b226e Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git_projects@michaelseevogel.de>
Date: Sat, 30 Nov 2019 13:50:25 +0100
Subject: [PATCH 186/571] added missing dist files

---
 install/dist/conf/centos80.conf.php | 224 ++++++++++++++++++++++++++++
 install/dist/lib/centos80.lib.php   |  40 +++++
 2 files changed, 264 insertions(+)
 create mode 100644 install/dist/conf/centos80.conf.php
 create mode 100644 install/dist/lib/centos80.lib.php

diff --git a/install/dist/conf/centos80.conf.php b/install/dist/conf/centos80.conf.php
new file mode 100644
index 0000000000..04257d4dfe
--- /dev/null
+++ b/install/dist/conf/centos80.conf.php
@@ -0,0 +1,224 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+//***  Fedora 9 default settings
+
+//* Main
+$conf['language'] = 'en';
+$conf['distname'] = 'centos80';
+$conf['hostname'] = 'server1.domain.tld'; // Full hostname
+$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
+$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
+$conf['server_id'] = 1;
+$conf['init_scripts'] = '/etc/init.d';
+$conf['runlevel'] = '/etc';
+$conf['shells'] = '/etc/shells';
+$conf['pam'] = '/etc/pam.d';
+
+//* Services provided by this server, this selection will be overridden by the expert mode
+$conf['services']['mail'] = true;
+$conf['services']['web'] = true;
+$conf['services']['dns'] = true;
+$conf['services']['file'] = true;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = true;
+
+//* MySQL
+$conf['mysql']['installed'] = false; // will be detected automatically during installation
+$conf['mysql']['init_script'] = 'mariadb';
+$conf['mysql']['host'] = 'localhost';
+$conf['mysql']['ip'] = '127.0.0.1';
+$conf['mysql']['port'] = '3306';
+$conf['mysql']['database'] = 'dbispconfig';
+$conf['mysql']['admin_user'] = 'root';
+$conf['mysql']['admin_password'] = '';
+$conf['mysql']['charset'] = 'utf8';
+$conf['mysql']['ispconfig_user'] = 'ispconfig';
+$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
+$conf['mysql']['master_slave_setup'] = 'n';
+$conf['mysql']['master_host'] = '';
+$conf['mysql']['master_database'] = 'dbispconfig';
+$conf['mysql']['master_admin_user'] = 'root';
+$conf['mysql']['master_admin_password'] = '';
+$conf['mysql']['master_ispconfig_user'] = '';
+$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
+
+//* Apache
+$conf['apache']['installed'] = false; // will be detected automatically during installation
+$conf['apache']['user'] = 'apache';
+$conf['apache']['group'] = 'apache';
+$conf['apache']['init_script'] = 'httpd';
+$conf['apache']['version'] = '2.2';
+$conf['apache']['vhost_conf_dir'] = '/etc/httpd/conf/sites-available';
+$conf['apache']['vhost_conf_enabled_dir'] = '/etc/httpd/conf/sites-enabled';
+$conf['apache']['vhost_port'] = '8080';
+$conf['apache']['php_ini_path_apache'] = '/etc/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php.ini';
+
+//* Website base settings
+$conf['web']['website_basedir'] = '/var/www';
+$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
+$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
+
+//* Apps base settings
+$conf['web']['apps_vhost_ip'] = '_default_';
+$conf['web']['apps_vhost_port'] = '8081';
+$conf['web']['apps_vhost_servername'] = '';
+$conf['web']['apps_vhost_user'] = 'ispapps';
+$conf['web']['apps_vhost_group'] = 'ispapps';
+
+//* Fastcgi
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/';
+$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
+$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
+
+//* Postfix
+$conf['postfix']['installed'] = false; // will be detected automatically during installation
+$conf['postfix']['config_dir'] = '/etc/postfix';
+$conf['postfix']['init_script'] = 'postfix';
+$conf['postfix']['user'] = 'postfix';
+$conf['postfix']['group'] = 'postfix';
+$conf['postfix']['vmail_userid'] = '5000';
+$conf['postfix']['vmail_username'] = 'vmail';
+$conf['postfix']['vmail_groupid'] = '5000';
+$conf['postfix']['vmail_groupname'] = 'vmail';
+$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
+
+//* Mailman
+$conf['mailman']['installed'] = false; // will be detected automatically during installation
+$conf['mailman']['config_dir'] = '/etc/mailman';
+$conf['mailman']['init_script'] = 'mailman';
+
+//* Getmail
+$conf['getmail']['installed'] = false; // will be detected automatically during installation
+$conf['getmail']['config_dir'] = '/etc/getmail';
+$conf['getmail']['program'] = '/usr/bin/getmail';
+
+//* Courier
+$conf['courier']['installed'] = false; // will be detected automatically during installation
+$conf['courier']['config_dir'] = '/etc/authlib';
+$conf['courier']['courier-authdaemon'] = 'courier-authlib';
+$conf['courier']['courier-imap'] = 'courier-imap';
+$conf['courier']['courier-imap-ssl'] = '';
+$conf['courier']['courier-pop'] = '';
+$conf['courier']['courier-pop-ssl'] = '';
+
+//* Dovecot
+$conf['dovecot']['installed'] = false; // will be detected automatically during installation
+$conf['dovecot']['config_dir'] = '/etc/dovecot';
+$conf['dovecot']['init_script'] = 'dovecot';
+
+//* SASL
+$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
+$conf['saslauthd']['config'] = '/etc/sysconfig/saslauthd';
+$conf['saslauthd']['init_script'] = 'saslauthd';
+
+//* Amavisd
+$conf['amavis']['installed'] = false; // will be detected automatically during installation
+$conf['amavis']['config_dir'] = '/etc/amavisd';
+$conf['amavis']['init_script'] = 'amavisd';
+
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
+//* ClamAV
+$conf['clamav']['installed'] = false; // will be detected automatically during installation
+$conf['clamav']['init_script'] = 'clamd@amavisd';
+
+//* Pureftpd
+$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
+$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
+$conf['pureftpd']['init_script'] = 'pure-ftpd';
+
+//* MyDNS
+$conf['mydns']['installed'] = false; // will be detected automatically during installation
+$conf['mydns']['config_dir'] = '/etc';
+$conf['mydns']['init_script'] = 'mydns';
+
+//* PowerDNS
+$conf['powerdns']['installed'] = false; // will be detected automatically during installation
+$conf['powerdns']['database'] = 'powerdns';
+$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
+$conf['powerdns']['init_script'] = 'pdns';
+
+//* BIND DNS Server
+$conf['bind']['installed'] = false; // will be detected automatically during installation
+$conf['bind']['bind_user'] = 'named';
+$conf['bind']['bind_group'] = 'named';
+$conf['bind']['bind_zonefiles_dir'] = '/var/named';
+$conf['bind']['named_conf_path'] = '/etc/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/named.conf.local';
+$conf['bind']['init_script'] = 'named';
+
+//* Jailkit
+$conf['jailkit']['installed'] = false; // will be detected automatically during installation
+$conf['jailkit']['config_dir'] = '/etc/jailkit';
+$conf['jailkit']['jk_init'] = 'jk_init.ini';
+$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
+$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano';
+$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
+
+//* Squid
+$conf['squid']['installed'] = false; // will be detected automatically during installation
+$conf['squid']['config_dir'] = '/etc/squid';
+$conf['squid']['init_script'] = 'squid';
+
+//* Nginx
+$conf['nginx']['installed'] = false; // will be detected automatically during installation
+$conf['nginx']['user'] = 'nginx';
+$conf['nginx']['group'] = 'nginx';
+$conf['nginx']['config_dir'] = '/etc/nginx';
+$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
+$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
+$conf['nginx']['init_script'] = 'nginx';
+$conf['nginx']['vhost_port'] = '8080';
+$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
+$conf['nginx']['php_fpm_init_script'] = 'php-fpm';
+$conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
+$conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
+$conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php5-fpm';
+
+//* vlogger
+$conf['vlogger']['config_dir'] = '/etc';
+
+//* cron
+$conf['cron']['init_script'] = 'crond';
+$conf['cron']['crontab_dir'] = '/etc/cron.d';
+$conf['cron']['wget'] = '/usr/bin/wget';
+
+//* OpenVZ
+$conf['openvz']['installed'] = false;
+
+?>
diff --git a/install/dist/lib/centos80.lib.php b/install/dist/lib/centos80.lib.php
new file mode 100644
index 0000000000..3dcd7494d3
--- /dev/null
+++ b/install/dist/lib/centos80.lib.php
@@ -0,0 +1,40 @@
+<?php
+
+/*
+Copyright (c) 2014, Till Brehm, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+require_once realpath(dirname(__FILE__)) . '/centos_base.lib.php';
+
+class installer extends installer_centos {
+
+	protected $clamav_socket = '/var/run/clamd.amavisd/clamd.sock';
+	
+	// everything else is inherited from installer_centos class
+}
+
+?>
-- 
GitLab


From fe83d4b7eb40dd0ad317623b213e4d45d1d2a271 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Sat, 30 Nov 2019 22:09:26 +0100
Subject: [PATCH 187/571] Filter aliasdomains like the form does for API

Functions mail_user_update and mail_user_add
---
 interface/lib/classes/remote.d/mail.inc.php | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php
index 477743dfc3..771698e9dc 100644
--- a/interface/lib/classes/remote.d/mail.inc.php
+++ b/interface/lib/classes/remote.d/mail.inc.php
@@ -208,9 +208,9 @@ class remoting_mail extends remoting {
 
 		//* Check if mail domain exists
 		$email_parts = explode('@', $params['email']);
-		$tmp = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = ?", $email_parts[1]);
+		$tmp = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = ? AND domain NOT IN (SELECT SUBSTR(source,2) FROM mail_forwarding WHERE type = 'aliasdomain')", $email_parts[1]);
 		if($tmp['domain'] != $email_parts[1]) {
-			throw new SoapFault('mail_domain_does_not_exist', 'Mail domain - '.$email_parts[1].' - does not exist.');
+			throw new SoapFault('mail_domain_does_not_exist', 'Mail domain - '.$email_parts[1].' - does not exist as primary.');
 			return false;
 		}
 
@@ -234,11 +234,11 @@ class remoting_mail extends remoting {
 			return false;
 		}
 
-		//* Check if mail domain exists
+		//* Check if mail domain exists, and is not used as aliasdomain
 		$email_parts = explode('@', $params['email']);
-		$tmp = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = ?", $email_parts[1]);
+		$tmp = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = ? AND domain NOT IN (SELECT SUBSTR(source,2) FROM mail_forwarding WHERE type = 'aliasdomain')", $email_parts[1]);
 		if($tmp['domain'] != $email_parts[1]) {
-			throw new SoapFault('mail_domain_does_not_exist', 'Mail domain - '.$email_parts[1].' - does not exist.');
+			throw new SoapFault('mail_domain_does_not_exist', 'Mail domain - '.$email_parts[1].' - does not exist as primary.');
 			return false;
 		}
 
-- 
GitLab


From 8c9f7aa33482877a605170085bc9c7ed8dce2f06 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Mon, 2 Dec 2019 10:32:16 +0100
Subject: [PATCH 188/571] Fix APS installer limits check

---
 interface/web/sites/aps_install_package.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/sites/aps_install_package.php b/interface/web/sites/aps_install_package.php
index 1a38190a9f..04b815bb2d 100644
--- a/interface/web/sites/aps_install_package.php
+++ b/interface/web/sites/aps_install_package.php
@@ -49,8 +49,8 @@ $app->load_language_file('web/sites/'.$lngfile);
 
 // we will check only users, not admins
 if($_SESSION["s"]["user"]["typ"] == 'user') {
-	$app->tform->formDef['db_table_idx'] = 'client_id';
-	$app->tform->formDef['db_table'] = 'client';
+	$app->tform->formDef['db_table_idx'] = 'id';
+	$app->tform->formDef['db_table'] = 'aps_instances';
 	if(!$app->tform->checkClientLimit('limit_aps')) {
 		$app->error($app->lng("limit_aps_txt"));
 	}
-- 
GitLab


From 2d4fb14e565384cac469ae7ebf20a623a34da8b7 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 3 Dec 2019 14:57:44 +0100
Subject: [PATCH 189/571] - fixed problem with invalid mail addresses in
 white/blacklists

---
 .../plugins-available/rspamd_plugin.inc.php   | 202 ++++++++++++------
 1 file changed, 137 insertions(+), 65 deletions(-)

diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index f6bb5d5a8e..cfb0979eb5 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -46,6 +46,59 @@ class rspamd_plugin {
 		}
 	}
 
+	private function isValidEmail($email) {
+		$atIndex = strrpos($email, '@');
+		if($atIndex === false) {
+			return false;
+		}
+
+		$domain = substr($email, $atIndex + 1);
+		$local = substr($email, 0, $atIndex);
+		$localLen = strlen($local);
+		$domainLen = strlen($domain);
+		if($localLen > 64) {
+			return false;
+		} elseif($domainLen < 1 || $domainLen > 255) {
+			return false;
+		} elseif(substr($local, 0, 1) == '.' || substr($local, -1, 1) == '.') {
+			return false; // first or last sign is dot
+		} elseif(strpos($local, '..') !== false) {
+			return false; // two dots not allowed
+		} elseif(!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
+			return false; // invalid character
+		} elseif(strpos($domain, '..') !== false) {
+			return false; // two dots not allowed
+		} elseif(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $local))) {
+			// character not valid in local part unless
+			// local part is quoted
+			if(!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\", "", $local))) {
+				return false;
+			}
+		}
+
+		$domain_array = explode('.', $domain);
+		for($i = 0; $i < count($domain_array); $i++) {
+			if(!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $domain_array[$i])) {
+				return false;
+			}
+		}
+
+		if(!preg_match("/^\[?[0-9\.]+\]?$/", $domain)) {
+			$domain_array = explode('.', $domain);
+			if(count($domain_array) < 2) {
+				return false; // Not enough parts to domain
+			}
+
+			for($i = 0; $i < count($domain_array); $i++) {
+				if(!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
+					return false;
+				}
+			}
+		}
+
+		return true;
+	}
+	
 	/*
 	 	This function is called when the plugin is loaded
 	*/
@@ -190,62 +243,69 @@ class rspamd_plugin {
 				$app->system->mkdirpath($this->users_config_dir);
 			}
 			
-			$app->load('tpl');
-			
-			$tpl = new tpl();
-			$tpl->newTemplate('rspamd_users.inc.conf.master');
-			
-			$tpl->setVar('record_identifier', 'ispc_' . $type . '_' . $entry_id);
-			$tpl->setVar('priority', $settings_priority);
-			
-			if($type === 'spamfilter_user') {
-				if($data[$use_data]['local'] === 'Y') {
+			if(!$this->isValidEmail($app->functions->idn_encode($email_address))) {
+				if(is_file($settings_file)) {
+					unlink($settings_file);
+				}
+			} else {
+
+				$app->load('tpl');
+
+				$tpl = new tpl();
+				$tpl->newTemplate('rspamd_users.inc.conf.master');
+
+				$tpl->setVar('record_identifier', 'ispc_' . $type . '_' . $entry_id);
+				$tpl->setVar('priority', $settings_priority);
+
+				if($type === 'spamfilter_user') {
+					if($data[$use_data]['local'] === 'Y') {
+						$tpl->setVar('to_email', $app->functions->idn_encode($email_address));
+					} else {
+						$tpl->setVar('from_email', $app->functions->idn_encode($email_address));
+					}
+					$spamfilter = $data[$use_data];
+				} else {
 					$tpl->setVar('to_email', $app->functions->idn_encode($email_address));
+
+					// need to get matching spamfilter user if any
+					$spamfilter = $app->db->queryOneRecord('SELECT * FROM spamfilter_users WHERE `email` = ?', $email_address);
+				}
+
+				if(!isset($policy['rspamd_spam_tag_level'])) {
+					$policy['rspamd_spam_tag_level'] = 6.0;
+				}
+				if(!isset($policy['rspamd_spam_tag_method'])) {
+					$policy['rspamd_spam_tag_method'] = 'add_header';
+				}
+				if(!isset($policy['rspamd_spam_kill_level'])) {
+					$policy['rspamd_spam_kill_level'] = 15.0;
+				}
+				if(!isset($policy['rspamd_virus_kill_level'])) {
+					$policy['rspamd_virus_kill_level'] = floatval($policy['rspamd_spam_kill_level']) + 1000;
+				}
+
+				$tpl->setVar('rspamd_spam_tag_level', floatval($policy['rspamd_spam_tag_level']));
+				$tpl->setVar('rspamd_spam_tag_method', floatval($policy['rspamd_spam_tag_method']));
+				$tpl->setVar('rspamd_spam_kill_level', floatval($policy['rspamd_spam_kill_level']));
+				$tpl->setVar('rspamd_virus_kill_level', floatval($policy['rspamd_spam_kill_level']) + 1000);
+
+				if(isset($policy['spam_lover']) && $policy['spam_lover'] == 'Y') {
+					$tpl->setVar('spam_lover', true);
+				}
+				if(isset($policy['virus_lover']) && $policy['virus_lover'] == 'Y') {
+					$tpl->setVar('virus_lover', true);
+				}
+
+				$tpl->setVar('greylisting', $greylisting);
+
+				if(isset($policy['rspamd_spam_greylisting_level'])) {
+					$tpl->setVar('greylisting_level', floatval($policy['rspamd_spam_greylisting_level']));
 				} else {
-					$tpl->setVar('from_email', $app->functions->idn_encode($email_address));
+					$tpl->setVar('greylisting_level', 0.1);
 				}
-				$spamfilter = $data[$use_data];
-			} else {
-				$tpl->setVar('to_email', $app->functions->idn_encode($email_address));
-				
-				// need to get matching spamfilter user if any
-				$spamfilter = $app->db->queryOneRecord('SELECT * FROM spamfilter_users WHERE `email` = ?', $email_address);
-			}
-			
-			if(!isset($policy['rspamd_spam_tag_level'])) {
-				$policy['rspamd_spam_tag_level'] = 6.0;
-			}
-			if(!isset($policy['rspamd_spam_tag_method'])) {
-				$policy['rspamd_spam_tag_method'] = 'add_header';
-			}
-			if(!isset($policy['rspamd_spam_kill_level'])) {
-				$policy['rspamd_spam_kill_level'] = 15.0;
-			}
-			if(!isset($policy['rspamd_virus_kill_level'])) {
-				$policy['rspamd_virus_kill_level'] = floatval($policy['rspamd_spam_kill_level']) + 1000;
-			}
-			
-			$tpl->setVar('rspamd_spam_tag_level', floatval($policy['rspamd_spam_tag_level']));
-			$tpl->setVar('rspamd_spam_tag_method', floatval($policy['rspamd_spam_tag_method']));
-			$tpl->setVar('rspamd_spam_kill_level', floatval($policy['rspamd_spam_kill_level']));
-			$tpl->setVar('rspamd_virus_kill_level', floatval($policy['rspamd_spam_kill_level']) + 1000);
-			
-			if(isset($policy['spam_lover']) && $policy['spam_lover'] == 'Y') {
-				$tpl->setVar('spam_lover', true);
-			}
-			if(isset($policy['virus_lover']) && $policy['virus_lover'] == 'Y') {
-				$tpl->setVar('virus_lover', true);
-			}
-			
-			$tpl->setVar('greylisting', $greylisting);
 
-			if(isset($policy['rspamd_spam_greylisting_level'])) {
-				$tpl->setVar('greylisting_level', floatval($policy['rspamd_spam_greylisting_level']));
-			} else {
-				$tpl->setVar('greylisting_level', 0.1);
+				$app->system->file_put_contents($settings_file, $tpl->grab());
 			}
-
-			$app->system->file_put_contents($settings_file, $tpl->grab());
 		}
 
 		if($mail_config['content_filter'] == 'rspamd'){
@@ -318,20 +378,32 @@ class rspamd_plugin {
 						$filter_rcpt = substr($filter_rcpt, 1);
 					}
 				}
-				
-				$tpl = new tpl();
-				$tpl->newTemplate('rspamd_wblist.inc.conf.master');
-				$tpl->setVar('list_scope', ($global_filter ? 'global' : 'spamfilter'));
-				$tpl->setVar('record_id', $record_id);
-				// we need to add 10 to priority to avoid mailbox/domain spamfilter settings overriding white/blacklists
-				$tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 10 : 20));
-				$tpl->setVar('from', $filter_from);
-				$tpl->setVar('recipient', $filter_rcpt);
-				$tpl->setVar('hostname', $filter['hostname']);
-				$tpl->setVar('ip', $filter['ip']);
-				$tpl->setVar('wblist', $filter['wb']);
-		
-				$app->system->file_put_contents($wblist_file, $tpl->grab());
+
+				if(!$this->isValidEmail($filter_from)) {
+					$filter_from = '';
+				}
+				if(!$this->isValidEmail($filter_rcpt)) {
+					$filter_rcpt = '';
+				}
+				if(($global_filter === true && !$filter_from && !$filter_rcpt) || ($global_filter === false && (!$filter_from || !$filter_rcpt))) {
+					if(is_file($wblist_file)) {
+						unlink($wblist_file);
+					}
+				} else {
+					$tpl = new tpl();
+					$tpl->newTemplate('rspamd_wblist.inc.conf.master');
+					$tpl->setVar('list_scope', ($global_filter ? 'global' : 'spamfilter'));
+					$tpl->setVar('record_id', $record_id);
+					// we need to add 10 to priority to avoid mailbox/domain spamfilter settings overriding white/blacklists
+					$tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 10 : 20));
+					$tpl->setVar('from', $filter_from);
+					$tpl->setVar('recipient', $filter_rcpt);
+					$tpl->setVar('hostname', $filter['hostname']);
+					$tpl->setVar('ip', $filter['ip']);
+					$tpl->setVar('wblist', $filter['wb']);
+
+					$app->system->file_put_contents($wblist_file, $tpl->grab());
+				}
 			} elseif(is_file($wblist_file)) {
 				unlink($wblist_file);
 			}
-- 
GitLab


From 06a08d81e53607e47baf9e1e5555f7861890ea97 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 3 Dec 2019 15:05:36 +0100
Subject: [PATCH 190/571] - added missing allow domain only for previous commit

---
 server/plugins-available/rspamd_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index cfb0979eb5..212cb2c21c 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -68,7 +68,7 @@ class rspamd_plugin {
 			return false; // invalid character
 		} elseif(strpos($domain, '..') !== false) {
 			return false; // two dots not allowed
-		} elseif(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $local))) {
+		} elseif($local && !preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $local))) {
 			// character not valid in local part unless
 			// local part is quoted
 			if(!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\", "", $local))) {
-- 
GitLab


From f8317f75d4e3a7569c64555f7b42da7eaaed432f Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 9 Dec 2019 16:15:22 +0100
Subject: [PATCH 191/571] Fixed csrf issue when deleting an invoice draft

---
 server/lib/classes/aps_installer.inc.php | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/server/lib/classes/aps_installer.inc.php b/server/lib/classes/aps_installer.inc.php
index 922f32e612..70b77a3a7e 100644
--- a/server/lib/classes/aps_installer.inc.php
+++ b/server/lib/classes/aps_installer.inc.php
@@ -550,10 +550,21 @@ class ApsInstaller extends ApsBase
 			foreach($this->putenv as $var) {
 				putenv($var);
 			}
+			
+			$tmpi = "<?php\n\n";
+			foreach($this->putenv as $var) {
+				$tmpi .= "putenv('".$var."');\n";
+			}
+			$tmpi .= "chdir('".$this->local_installpath.'install_scripts/'."');\n";
+			$tmpi .= 'exec("php '.$this->local_installpath.'install_scripts/'.$cfgscript.' install");';
+			
+			$app->system->file_put_contents($this->local_installpath.'install_scripts/ispinstall.php', $tmpi);
+			exec('php '.$this->local_installpath.'install_scripts/ispinstall.php');
+			die();
 
 			$shell_retcode = true;
 			$shell_ret = array();
-			$app->system->exec_safe('php ? install 2>&1', $this->local_installpath.'install_scripts/'.$cfgscript);
+			//$app->system->exec_safe('sudo -u ? php ? install 2>&1', $this->file_owner_user, $this->local_installpath.'install_scripts/'.$cfgscript);
 			$shell_ret = $app->system->last_exec_out();
 			$shell_retcode = $app->system->last_exec_retcode();
 			$shell_ret = array_filter($shell_ret);
-- 
GitLab


From 2bdc1c8ac9246692f53d94691d36d6485d0aafa4 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 9 Dec 2019 16:22:30 +0100
Subject: [PATCH 192/571] Revert "Fixed csrf issue when deleting an invoice
 draft"

This reverts commit f8317f75d4e3a7569c64555f7b42da7eaaed432f
---
 server/lib/classes/aps_installer.inc.php | 13 +------------
 1 file changed, 1 insertion(+), 12 deletions(-)

diff --git a/server/lib/classes/aps_installer.inc.php b/server/lib/classes/aps_installer.inc.php
index 70b77a3a7e..922f32e612 100644
--- a/server/lib/classes/aps_installer.inc.php
+++ b/server/lib/classes/aps_installer.inc.php
@@ -550,21 +550,10 @@ class ApsInstaller extends ApsBase
 			foreach($this->putenv as $var) {
 				putenv($var);
 			}
-			
-			$tmpi = "<?php\n\n";
-			foreach($this->putenv as $var) {
-				$tmpi .= "putenv('".$var."');\n";
-			}
-			$tmpi .= "chdir('".$this->local_installpath.'install_scripts/'."');\n";
-			$tmpi .= 'exec("php '.$this->local_installpath.'install_scripts/'.$cfgscript.' install");';
-			
-			$app->system->file_put_contents($this->local_installpath.'install_scripts/ispinstall.php', $tmpi);
-			exec('php '.$this->local_installpath.'install_scripts/ispinstall.php');
-			die();
 
 			$shell_retcode = true;
 			$shell_ret = array();
-			//$app->system->exec_safe('sudo -u ? php ? install 2>&1', $this->file_owner_user, $this->local_installpath.'install_scripts/'.$cfgscript);
+			$app->system->exec_safe('php ? install 2>&1', $this->local_installpath.'install_scripts/'.$cfgscript);
 			$shell_ret = $app->system->last_exec_out();
 			$shell_retcode = $app->system->last_exec_retcode();
 			$shell_ret = array_filter($shell_ret);
-- 
GitLab


From c83ce3f6b4f9007125675184e562d072892cab96 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Mon, 9 Dec 2019 18:22:38 +0100
Subject: [PATCH 193/571] add {WEBROOT} to php-directive-snippets

---
 interface/web/admin/templates/directive_snippets_edit.htm | 5 +++--
 interface/web/sites/web_vhost_domain_edit.php             | 2 +-
 server/plugins-available/apache2_plugin.inc.php           | 1 +
 server/plugins-available/nginx_plugin.inc.php             | 1 +
 4 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/interface/web/admin/templates/directive_snippets_edit.htm b/interface/web/admin/templates/directive_snippets_edit.htm
index 72eb82369c..657d0ad1ef 100644
--- a/interface/web/admin/templates/directive_snippets_edit.htm
+++ b/interface/web/admin/templates/directive_snippets_edit.htm
@@ -19,7 +19,8 @@
                 <label for="snippet" class="col-sm-3 control-label">{tmpl_var name='snippet_txt'}</label>
                 <tmpl_if name='is_master'><div class="col-sm-9 col-text"><pre>{tmpl_var name='snippet'}</pre></div></tmpl_else><div class="col-sm-9"><textarea class="form-control" name="snippet" id="snippet" rows='10' cols='50'>{tmpl_var name='snippet'}</textarea>
                 &nbsp; Nginx {tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{FASTCGIPASS}</a>, <a href="javascript:void(0);" class="addPlaceholder">{PHPFALLBACKFASTCGIPASS}</a><br />
-				&nbsp; Apache {tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT_CLIENT}</a>
+				&nbsp; Apache {tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT_CLIENT}</a> <br />
+				&nbsp; PHP {tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{WEBROOT}</a>
 				</div></tmpl_if>
             </div>
             <tmpl_if name='is_master'></tmpl_else>
@@ -81,4 +82,4 @@
         }
     });
 			
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 52b44acc79..459af39670 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -1310,7 +1310,7 @@ class page_action extends tform_actions {
 					// value inside ''
 					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*\'.*\'\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
 					// everything else
-					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s\|]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\{\}\s\|]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
 					$custom_php_ini_settings_are_valid = false;
 					break;
 				}
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 59e97629cb..db0778ce88 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -3149,6 +3149,7 @@ class apache2_plugin {
 			$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
 			$ini_settings = explode("\n", $custom_php_ini_settings);
 			if(is_array($ini_settings) && !empty($ini_settings)){
+				$ini_settings = str_replace('{DOCROOT}', $data['new']['document_root'], $ini_settings);
 				foreach($ini_settings as $ini_setting){
 					$ini_setting = trim($ini_setting);
 					if(substr($ini_setting, 0, 1) == ';') continue;
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index a8a3c3bf16..a26a96896f 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2778,6 +2778,7 @@ class nginx_plugin {
 			$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
 			$ini_settings = explode("\n", $custom_php_ini_settings);
 			if(is_array($ini_settings) && !empty($ini_settings)){
+				$ini_settings = str_replace('{WEBROOT}', $data['new']['document_root'].'/web', $ini_settings);
 				foreach($ini_settings as $ini_setting){
 					$ini_setting = trim($ini_setting);
 					if(substr($ini_setting, 0, 1) == ';') continue;
-- 
GitLab


From 9584fb94d5842177c698eb8e91e650f24e0655a5 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Mon, 9 Dec 2019 18:24:49 +0100
Subject: [PATCH 194/571] fix last commit for apache

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index db0778ce88..08730bee8e 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -3149,7 +3149,7 @@ class apache2_plugin {
 			$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
 			$ini_settings = explode("\n", $custom_php_ini_settings);
 			if(is_array($ini_settings) && !empty($ini_settings)){
-				$ini_settings = str_replace('{DOCROOT}', $data['new']['document_root'], $ini_settings);
+				$ini_settings = str_replace('{WEBROOT}', $data['new']['document_root'].'/web', $ini_settings);
 				foreach($ini_settings as $ini_setting){
 					$ini_setting = trim($ini_setting);
 					if(substr($ini_setting, 0, 1) == ';') continue;
-- 
GitLab


From 20225e7b238c13c99ed71510089d103c6da84142 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Thu, 12 Dec 2019 09:02:15 +0100
Subject: [PATCH 195/571] Prevent conflicting APS install paths

---
 interface/lib/classes/aps_guicontroller.inc.php | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/interface/lib/classes/aps_guicontroller.inc.php b/interface/lib/classes/aps_guicontroller.inc.php
index 8a764a9c5c..8e4c17af79 100644
--- a/interface/lib/classes/aps_guicontroller.inc.php
+++ b/interface/lib/classes/aps_guicontroller.inc.php
@@ -637,11 +637,27 @@ class ApsGUIController extends ApsBase
 						// The location might be empty but the DB return must not be false!
 						if($location_for_domain) $used_path .= $location_for_domain['value'];
 
+						// If user is trying to install into exactly the same path, give an error
 						if($new_path == $used_path)
 						{
 							$temp_errstr = $app->lng('error_used_location');
 							break;
 						}
+
+						// If the new path is _below_ an existing path, give an error because the
+						// installation will delete the files of the existing APS installation
+						if (mb_substr($used_path, 0, mb_strlen($new_path)) === $new_path) {
+							$temp_errstr = $app->lng('error_used_location');
+							break;
+						}
+
+						// If the new path is _within_ an existing path, give an error. Even if
+						// installation would proceed fine in theory, deleting the "lower" package
+						// in the future would also inadvertedly delete the "nested" package
+						if (mb_substr($new_path, 0, mb_strlen($used_path)) === $used_path) {
+							$temp_errstr = $app->lng('error_used_location');
+							break;
+						}
 					}
 				}
 			}
-- 
GitLab


From 044e403a3b24d94d0d0e3d859595c57dd7481da8 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Sat, 14 Dec 2019 13:41:20 +0100
Subject: [PATCH 196/571] update dovecot.conf (move mail_plugins -  Global
 setting mail_plugins won't change the setting inside an earlier filter)

---
 install/tpl/debian_dovecot2.conf.master | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index cfe3bd0182..e1929b188d 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -9,6 +9,7 @@ ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_protocols = !SSLv2 !SSLv3
 mail_max_userip_connections = 100
+mail_plugins = $mail_plugins quota
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
   driver = sql
@@ -65,7 +66,6 @@ protocol lmtp {
   mail_plugins = quota sieve
 }
 
-mail_plugins = $mail_plugins quota
 
 #2.3+ service stats {
 #2.3+     unix_listener stats-reader {
-- 
GitLab


From 605e7b1dfdf75ff9597e784eff5eeade62cfdc36 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 2 Aug 2019 22:33:27 +0200
Subject: [PATCH 197/571] Add additional option to frontend, #5325

---
 interface/web/mail/form/mail_user_filter.tform.php | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index be5fba3ed7..b1370ecaa1 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -88,13 +88,14 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'List-Id'=>'list_id_txt')
+			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'List-Id'=>'list_id_txt', 'Header' => 'header_txt', 'Size' => 'size_over_txt')
 		),
 		'op' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('contains'=>'contains_txt', 'is' => 'is_txt', 'begins'=>'begins_with_txt', 'ends'=>'ends_with_txt')
+			//'value'  => array('contains'=>'contains_txt','is' => 'Is','begins'=>'Begins with','ends'=>'Ends with')
+			'value'  => array('contains'=>'contains_txt', 'is' => 'is_txt', 'begins'=>'begins_with_txt', 'ends'=>'ends_with_txt', 'localpart' => 'localpart_txt', 'domain' => 'domain_txt')
 		),
 		'searchterm' => array (
 			'datatype' => 'VARCHAR',
@@ -115,7 +116,7 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('move' => 'move_to_txt', 'delete'=>'delete_txt')
+			'value'  => array('move' => 'move_to_txt', 'delete'=>'delete_txt', 'keep' => 'keep_txt', 'reject' => 'reject_txt')
 		),
 		'target' => array (
 			'datatype' => 'VARCHAR',
-- 
GitLab


From 30fdcaa46a6037019216beee7cecba064025e2cc Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 14 Nov 2019 12:30:10 +0100
Subject: [PATCH 198/571] Update reference to renamed plugin

---
 interface/lib/classes/remote.d/sites.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/classes/remote.d/sites.inc.php b/interface/lib/classes/remote.d/sites.inc.php
index 59c2e371f3..d90b90bd89 100644
--- a/interface/lib/classes/remote.d/sites.inc.php
+++ b/interface/lib/classes/remote.d/sites.inc.php
@@ -423,7 +423,7 @@ class remoting_sites extends remoting {
 			$params['client_group_id'] = $rec['groupid'];
 		}
 
-		//* Set a few params to "not empty" values which get overwritten by the sites_web_domain_plugin
+		//* Set a few params to "not empty" values which get overwritten by the sites_web_vhost_domain_plugin
 		if($params['document_root'] == '') $params['document_root'] = '-';
 		if($params['system_user'] == '') $params['system_user'] = '-';
 		if($params['system_group'] == '') $params['system_group'] = '-';
-- 
GitLab


From d8826462719152f83a57602b41f7f3b3c47a3d06 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Sat, 30 Nov 2019 22:11:38 +0100
Subject: [PATCH 199/571] typo

---
 interface/lib/plugins/mail_user_filter_plugin.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php
index 26c0b02b83..ccf58b853c 100644
--- a/interface/lib/plugins/mail_user_filter_plugin.inc.php
+++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php
@@ -80,7 +80,7 @@ class mail_user_filter_plugin {
 			}
 		}
 
-		// We did not found our rule, so we add it now as first rule.
+		// We did not find our rule, so we add it now as first rule.
 		if($found == false && $page_form->dataRecord["active"] == 'y') {
 			$new_rule = $this->mail_user_filter_get_rule($page_form);
 			$out = $new_rule . $out;
@@ -92,7 +92,7 @@ class mail_user_filter_plugin {
 	}
 
 	/*
-	 *	Remove the rendered filter from custom_mailfilter when a mail_user_filter is deleted
+	 *	Remove the rendered filter from custom_mailfilter when a mail_user_filter is deleted.
 	 */
 	function mail_user_filter_del($event_name, $page_form) {
 		global $app, $conf;
-- 
GitLab


From 13da3ecd1d2359a2e884c9507961a505e6b540a7 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 24 Dec 2019 09:43:05 +0100
Subject: [PATCH 200/571] Document _ispconfig_pw_crypted parameter

---
 remoting_client/API-docs/mail_user_add.html    | 1 +
 remoting_client/API-docs/mail_user_update.html | 1 +
 2 files changed, 2 insertions(+)

diff --git a/remoting_client/API-docs/mail_user_add.html b/remoting_client/API-docs/mail_user_add.html
index 88ab952e6a..a893e24e3f 100644
--- a/remoting_client/API-docs/mail_user_add.html
+++ b/remoting_client/API-docs/mail_user_add.html
@@ -25,6 +25,7 @@
 <p class="margin"> email&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> login&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> password&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> _ispconfig_pw_crypted&nbsp;&nbsp;(<span class="paratype">int(11)</span>) Set to 1 to indicate that the password is already crypted.</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> uid&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> gid&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/mail_user_update.html b/remoting_client/API-docs/mail_user_update.html
index 46d23dacf9..1f46858473 100644
--- a/remoting_client/API-docs/mail_user_update.html
+++ b/remoting_client/API-docs/mail_user_update.html
@@ -24,6 +24,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> email&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> password&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> _ispconfig_pw_crypted&nbsp;&nbsp;(<span class="paratype">int(11)</span>) Set to 1 to indicate that the password is already crypted.</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> uid&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> gid&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
-- 
GitLab


From 91d3122279481debf00a0c9e95818e24dd9dee79 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 24 Dec 2019 09:44:00 +0100
Subject: [PATCH 201/571] fix syntax error

---
 remoting_client/API-docs/mail_user_update.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/remoting_client/API-docs/mail_user_update.html b/remoting_client/API-docs/mail_user_update.html
index 1f46858473..8cb900fb40 100644
--- a/remoting_client/API-docs/mail_user_update.html
+++ b/remoting_client/API-docs/mail_user_update.html
@@ -12,7 +12,7 @@
 
   </style></head>
 
-<body style="color: rgb(0, 0, 0); alink="#804080" link="#804080" vlink="#603060">
+<body style="color: rgb(0, 0, 0);" alink="#804080" link="#804080" vlink="#603060">
 <div style="padding:40px">
 <h1>mail_user_update(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
 <br>
-- 
GitLab


From 00260e643ae681ecd74f3169da54eab6c43f8acd Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 24 Dec 2019 09:50:54 +0100
Subject: [PATCH 202/571] Add Dutch email template

---
 server/conf/mail/welcome_email_nl.txt | 4 ++++
 1 file changed, 4 insertions(+)
 create mode 100644 server/conf/mail/welcome_email_nl.txt

diff --git a/server/conf/mail/welcome_email_nl.txt b/server/conf/mail/welcome_email_nl.txt
new file mode 100644
index 0000000000..cd4baf4815
--- /dev/null
+++ b/server/conf/mail/welcome_email_nl.txt
@@ -0,0 +1,4 @@
+From: ISPConfig <postmaster@localhost.localdomain>
+Subject: Welkom in uw nieuwe account.
+
+Welkom in uw nieuwe email account. Uw webmaster.
-- 
GitLab


From d8d70b33cf3de5444ea5580e234bf1f511ad50c0 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Mon, 30 Dec 2019 12:18:33 +0100
Subject: [PATCH 203/571] Use translated string instead of untranslated string
 unlimited #5476

---
 interface/lib/classes/quota_lib.inc.php      | 12 ++++++------
 interface/web/mail/user_quota_stats.php      |  2 +-
 interface/web/sites/database_quota_stats.php |  2 +-
 interface/web/sites/user_quota_stats.php     | 12 ++++++------
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/interface/lib/classes/quota_lib.inc.php b/interface/lib/classes/quota_lib.inc.php
index 3946b216dd..3bae97f046 100644
--- a/interface/lib/classes/quota_lib.inc.php
+++ b/interface/lib/classes/quota_lib.inc.php
@@ -71,11 +71,11 @@ class quota_lib {
 						$sites[$i]['hard'] .= ' KB';
 					}
 			
-					if($sites[$i]['soft'] == " KB") $sites[$i]['soft'] = $app->lng('unlimited');
-					if($sites[$i]['hard'] == " KB") $sites[$i]['hard'] = $app->lng('unlimited');
+					if($sites[$i]['soft'] == " KB") $sites[$i]['soft'] = $app->lng('unlimited_txt');
+					if($sites[$i]['hard'] == " KB") $sites[$i]['hard'] = $app->lng('unlimited_txt');
 					
-					if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = $app->lng('unlimited');
-					if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = $app->lng('unlimited');
+					if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = $app->lng('unlimited_txt');
+					if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = $app->lng('unlimited_txt');
 					
 					/*
 					 if(!strstr($sites[$i]['used'],'M') && !strstr($sites[$i]['used'],'K')) $sites[$i]['used'].= ' B';
@@ -266,7 +266,7 @@ class quota_lib {
 					if($used_ratio >= 1) $emails[$i]['display_colour'] = '#cc0000';
 			
 					if($emails[$i]['quota'] == 0){
-						$emails[$i]['quota'] = $app->lng('unlimited');
+						$emails[$i]['quota'] = $app->lng('unlimited_txt');
 					} else {
                                                $emails[$i]['quota'] = round($emails[$i]['quota'] / 1048576, 1).' MB';
 					}
@@ -327,7 +327,7 @@ class quota_lib {
 					if($used_ratio >= 1) $databases[$i]['display_colour'] = '#cc0000';
 						
 					if($databases[$i]['database_quota'] == 0){
-						$databases[$i]['database_quota'] = $app->lng('unlimited');
+						$databases[$i]['database_quota'] = $app->lng('unlimited_txt');
 					} else {
 						$databases[$i]['database_quota'] = $databases[$i]['database_quota'] . ' MB';
 					}
diff --git a/interface/web/mail/user_quota_stats.php b/interface/web/mail/user_quota_stats.php
index 90a92558fa..9699acafda 100644
--- a/interface/web/mail/user_quota_stats.php
+++ b/interface/web/mail/user_quota_stats.php
@@ -52,7 +52,7 @@ class list_action extends listform_actions {
 		if (!is_numeric($rec['used'])) $rec['used']=$rec['used'][1];
 
 		if($rec['quota'] == 0){
-			$rec['quota'] = $app->lng('unlimited');
+			$rec['quota'] = $app->lng('unlimited_txt');
 			$rec['percentage'] = '';
 			$rec['percentage_sort'] = 0;
 		} else {
diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php
index 5f550cf8d1..4e960bce27 100644
--- a/interface/web/sites/database_quota_stats.php
+++ b/interface/web/sites/database_quota_stats.php
@@ -72,7 +72,7 @@ class list_action extends listform_actions {
 			$rec['quota'] = $monitor_data[$rec['server_id'].'.'.$database_name]['quota'];
 
 			if($rec['quota'] == 0){
-				$rec['quota'] = $app->lng('unlimited');
+				$rec['quota'] = $app->lng('unlimited_txt');
 				$rec['percentage'] = '';
 			} else {
 				if ($rec['used'] > 0 ) $rec['percentage'] = round(100 * intval($rec['used']) / ( intval($rec['quota'])*1024*1024) ).'%';
diff --git a/interface/web/sites/user_quota_stats.php b/interface/web/sites/user_quota_stats.php
index 9c93008076..8c641eede9 100644
--- a/interface/web/sites/user_quota_stats.php
+++ b/interface/web/sites/user_quota_stats.php
@@ -63,8 +63,8 @@ class list_action extends listform_actions {
 		$rec['used']=$app->functions->formatBytes($rec['used']*1024);
 		$rec['soft']=$app->functions->formatBytes($rec['soft']*1024);
 		$rec['hard']=$app->functions->formatBytes($rec['hard']*1024);
-		if($rec['soft'] == "NAN") $rec['soft'] = $app->lng('unlimited');
-		if($rec['hard'] == "NAN") $rec['hard'] = $app->lng('unlimited');
+		if($rec['soft'] == "NAN") $rec['soft'] = $app->lng('unlimited_txt');
+		if($rec['hard'] == "NAN") $rec['hard'] = $app->lng('unlimited_txt');
 /*
 		if($rec['used'] > 1024) {
 			$rec['used'] = round($rec['used'] / 1024, 2).' MB';
@@ -84,8 +84,8 @@ class list_action extends listform_actions {
 			$rec['hard'] .= ' KB';
 		}
 
-		if($rec['soft'] == " KB") $rec['soft'] = $app->lng('unlimited');
-		if($rec['hard'] == " KB") $rec['hard'] = $app->lng('unlimited');
+		if($rec['soft'] == " KB") $rec['soft'] = $app->lng('unlimited_txt');
+		if($rec['hard'] == " KB") $rec['hard'] = $app->lng('unlimited_txt');
 */
 
 		/*
@@ -94,8 +94,8 @@ class list_action extends listform_actions {
 		if(!strstr($rec['hard'],'M') && !strstr($rec['hard'],'K')) $rec['hard'].= ' B';
 		*/
 /*
-		if($rec['soft'] == '0 B' || $rec['soft'] == '0 KB' || $rec['soft'] == '0') $rec['soft'] = $app->lng('unlimited');
-		if($rec['hard'] == '0 B' || $rec['hard'] == '0 KB' || $rec['hard'] == '0') $rec['hard'] = $app->lng('unlimited');
+		if($rec['soft'] == '0 B' || $rec['soft'] == '0 KB' || $rec['soft'] == '0') $rec['soft'] = $app->lng('unlimited_txt');
+		if($rec['hard'] == '0 B' || $rec['hard'] == '0 KB' || $rec['hard'] == '0') $rec['hard'] = $app->lng('unlimited_txt');
 */
 		//* The variable "id" contains always the index variable
 		$rec['id'] = $rec[$this->idx_key];
-- 
GitLab


From b7dc74dc5344167f8217732e7986d779cad0da4f Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 31 Dec 2019 15:46:30 +0100
Subject: [PATCH 204/571] Move unlimited_txt string to global scope #5476

---
 interface/lib/lang/ar.lng                              | 1 +
 interface/lib/lang/bg.lng                              | 1 +
 interface/lib/lang/br.lng                              | 1 +
 interface/lib/lang/ca.lng                              | 1 +
 interface/lib/lang/cz.lng                              | 1 +
 interface/lib/lang/de.lng                              | 1 +
 interface/lib/lang/dk.lng                              | 1 +
 interface/lib/lang/el.lng                              | 1 +
 interface/lib/lang/en.lng                              | 3 ++-
 interface/lib/lang/es.lng                              | 1 +
 interface/lib/lang/fi.lng                              | 1 +
 interface/lib/lang/fr.lng                              | 1 +
 interface/lib/lang/hr.lng                              | 1 +
 interface/lib/lang/hu.lng                              | 1 +
 interface/lib/lang/id.lng                              | 1 +
 interface/lib/lang/it.lng                              | 1 +
 interface/lib/lang/ja.lng                              | 1 +
 interface/lib/lang/nl.lng                              | 1 +
 interface/lib/lang/pl.lng                              | 1 +
 interface/lib/lang/pt.lng                              | 1 +
 interface/lib/lang/ro.lng                              | 1 +
 interface/lib/lang/ru.lng                              | 1 +
 interface/lib/lang/se.lng                              | 1 +
 interface/lib/lang/sk.lng                              | 1 +
 interface/lib/lang/tr.lng                              | 1 +
 interface/web/dashboard/lib/lang/ar_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/bg_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/br_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/ca_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/cz_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/de_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/dk_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/el_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/en_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/es_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/fi_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/fr_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/hr_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/hu_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/id_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/it_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/ja_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/nl_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/pl_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/pt_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/ro_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/ru_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/se_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/sk_dashlet_limits.lng | 1 -
 interface/web/dashboard/lib/lang/tr_dashlet_limits.lng | 1 -
 50 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/interface/lib/lang/ar.lng b/interface/lib/lang/ar.lng
index 25dd920831..f8fd2b5a50 100644
--- a/interface/lib/lang/ar.lng
+++ b/interface/lib/lang/ar.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Unlimited';
 ?>
diff --git a/interface/lib/lang/bg.lng b/interface/lib/lang/bg.lng
index ff1e39fe34..049807e66d 100644
--- a/interface/lib/lang/bg.lng
+++ b/interface/lib/lang/bg.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Неограничен';
 ?>
diff --git a/interface/lib/lang/br.lng b/interface/lib/lang/br.lng
index 60a0dcf910..3bab13ab3a 100644
--- a/interface/lib/lang/br.lng
+++ b/interface/lib/lang/br.lng
@@ -158,4 +158,5 @@ $wb['security_check1_txt'] = 'Verifique as permissões de segurança:';
 $wb['security_check2_txt'] = 'falhou.';
 $wb['select_directive_snippet_txt'] = 'Diretiva de trechos de código';
 $wb['select_master_directive_snippet_txt'] = 'Diretiva mestre de trechos de código';
+$wb['unlimited_txt'] = 'Ilimitado';
 ?>
diff --git a/interface/lib/lang/ca.lng b/interface/lib/lang/ca.lng
index c39cd0db27..6d48482cfc 100644
--- a/interface/lib/lang/ca.lng
+++ b/interface/lib/lang/ca.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Illimité';
 ?>
diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng
index eeb0819292..93eeb671e5 100644
--- a/interface/lib/lang/cz.lng
+++ b/interface/lib/lang/cz.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Smazat XMPP doménu';
 $wb['datalog_status_i_xmpp_user'] = 'Vytvořit XMPP uživatele';
 $wb['datalog_status_u_xmpp_user'] = 'Aktualizovat XMPP uživatele';
 $wb['datalog_status_d_xmpp_user'] = 'Smazat XMPP uživatele';
+$wb['unlimited_txt'] = 'neomezeno';
 ?>
diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng
index 61551ceeab..54091c1417 100644
--- a/interface/lib/lang/de.lng
+++ b/interface/lib/lang/de.lng
@@ -158,4 +158,5 @@ $wb['security_check1_txt'] = 'Sicherheitsüberprüfung für:';
 $wb['security_check2_txt'] = 'fehlgeschlagen.';
 $wb['select_directive_snippet_txt'] = 'Direktiven Schnipsel';
 $wb['select_master_directive_snippet_txt'] = 'Master Direktiven Schnipsel';
+$wb['unlimited_txt'] = 'unlimitiert';
 ?>
diff --git a/interface/lib/lang/dk.lng b/interface/lib/lang/dk.lng
index 798d2ccd45..cbb9fc5efd 100644
--- a/interface/lib/lang/dk.lng
+++ b/interface/lib/lang/dk.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Ubegrænset';
 ?>
diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng
index 382bf4a758..3e6c60c90f 100644
--- a/interface/lib/lang/el.lng
+++ b/interface/lib/lang/el.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Απεριόριστα';
 ?>
diff --git a/interface/lib/lang/en.lng b/interface/lib/lang/en.lng
index 66f4ee3811..b5b2ebcdae 100644
--- a/interface/lib/lang/en.lng
+++ b/interface/lib/lang/en.lng
@@ -159,4 +159,5 @@ $wb['security_check1_txt'] = 'Check for security permission:';
 $wb['security_check2_txt'] = 'failed.';
 $wb['select_directive_snippet_txt'] = 'Directive Snippets';
 $wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets';
-?>
\ No newline at end of file
+$wb['unlimited_txt'] = "Unlimited";
+?>
diff --git a/interface/lib/lang/es.lng b/interface/lib/lang/es.lng
index 3b1bae0b46..b78499f800 100644
--- a/interface/lib/lang/es.lng
+++ b/interface/lib/lang/es.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Ilimitado';
 ?>
diff --git a/interface/lib/lang/fi.lng b/interface/lib/lang/fi.lng
index d4c23ca777..27749510bb 100755
--- a/interface/lib/lang/fi.lng
+++ b/interface/lib/lang/fi.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Unlimited';
 ?>
diff --git a/interface/lib/lang/fr.lng b/interface/lib/lang/fr.lng
index 3e9bfa8daa..c302b32faa 100644
--- a/interface/lib/lang/fr.lng
+++ b/interface/lib/lang/fr.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Illimité';
 ?>
diff --git a/interface/lib/lang/hr.lng b/interface/lib/lang/hr.lng
index 310371be47..3be5dc7e16 100644
--- a/interface/lib/lang/hr.lng
+++ b/interface/lib/lang/hr.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'neograničeno';
 ?>
diff --git a/interface/lib/lang/hu.lng b/interface/lib/lang/hu.lng
index dd4cce79b3..3fc91bd600 100644
--- a/interface/lib/lang/hu.lng
+++ b/interface/lib/lang/hu.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Korlátlan';
 ?>
diff --git a/interface/lib/lang/id.lng b/interface/lib/lang/id.lng
index bd90fd5a1b..13fbff1a08 100644
--- a/interface/lib/lang/id.lng
+++ b/interface/lib/lang/id.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Tak terbatas';
 ?>
diff --git a/interface/lib/lang/it.lng b/interface/lib/lang/it.lng
index 33d16c3d5f..4a85a58e09 100644
--- a/interface/lib/lang/it.lng
+++ b/interface/lib/lang/it.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'illimitati';
 ?>
diff --git a/interface/lib/lang/ja.lng b/interface/lib/lang/ja.lng
index 2a56e77399..bb1290173c 100644
--- a/interface/lib/lang/ja.lng
+++ b/interface/lib/lang/ja.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Unlimited';
 ?>
diff --git a/interface/lib/lang/nl.lng b/interface/lib/lang/nl.lng
index 888f9c0200..a733142d49 100644
--- a/interface/lib/lang/nl.lng
+++ b/interface/lib/lang/nl.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Ongelimiteerd';
 ?>
diff --git a/interface/lib/lang/pl.lng b/interface/lib/lang/pl.lng
index b5b62c816d..ffbac09ef4 100644
--- a/interface/lib/lang/pl.lng
+++ b/interface/lib/lang/pl.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'nielimitowane';
 ?>
diff --git a/interface/lib/lang/pt.lng b/interface/lib/lang/pt.lng
index 7845520a5b..195da8e619 100644
--- a/interface/lib/lang/pt.lng
+++ b/interface/lib/lang/pt.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Unlimited';
 ?>
diff --git a/interface/lib/lang/ro.lng b/interface/lib/lang/ro.lng
index 613f2377a1..1365a54172 100644
--- a/interface/lib/lang/ro.lng
+++ b/interface/lib/lang/ro.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Unlimited';
 ?>
diff --git a/interface/lib/lang/ru.lng b/interface/lib/lang/ru.lng
index e5e8ce6278..19cdcf8a04 100644
--- a/interface/lib/lang/ru.lng
+++ b/interface/lib/lang/ru.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Удалить  домен XMPP';
 $wb['datalog_status_i_xmpp_user'] = 'Создать пользователя XMPP';
 $wb['datalog_status_u_xmpp_user'] = 'Обновить пользователя XMPP';
 $wb['datalog_status_d_xmpp_user'] = 'Удалить пользователя XMPP';
+$wb['unlimited_txt'] = 'Безлимитный';
 ?>
diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng
index b6767144df..2d3146f033 100644
--- a/interface/lib/lang/se.lng
+++ b/interface/lib/lang/se.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Obegränsat';
 ?>
diff --git a/interface/lib/lang/sk.lng b/interface/lib/lang/sk.lng
index 6b4ef7676f..ece15b3a22 100644
--- a/interface/lib/lang/sk.lng
+++ b/interface/lib/lang/sk.lng
@@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
 $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['unlimited_txt'] = 'Unlimited';
 ?>
diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng
index cf4491ad5d..31e5f2fbef 100644
--- a/interface/lib/lang/tr.lng
+++ b/interface/lib/lang/tr.lng
@@ -159,4 +159,5 @@ $wb['security_check1_txt'] = 'Güvenlik iznini denetle:';
 $wb['security_check2_txt'] = 'başarısız.';
 $wb['select_directive_snippet_txt'] = 'Yönerge Kod Parçaları';
 $wb['select_master_directive_snippet_txt'] = 'Ana Komut Parçaları';
+$wb['unlimited_txt'] = 'Sınırsız';
 ?>
diff --git a/interface/web/dashboard/lib/lang/ar_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ar_dashlet_limits.lng
index 6ec82aad5b..b15261dfc4 100644
--- a/interface/web/dashboard/lib/lang/ar_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ar_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Account limits';
 $wb['of_txt'] = 'of';
-$wb['unlimited_txt'] = 'Unlimited';
 $wb['limit_maildomain_txt'] = 'Number of email domains';
 $wb['limit_mailbox_txt'] = 'Number of mailboxes';
 $wb['limit_mailalias_txt'] = 'Number of email aliases';
diff --git a/interface/web/dashboard/lib/lang/bg_dashlet_limits.lng b/interface/web/dashboard/lib/lang/bg_dashlet_limits.lng
index dad751aaf0..961e6825df 100644
--- a/interface/web/dashboard/lib/lang/bg_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/bg_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Акаунт ограничения';
 $wb['of_txt'] = 'на';
-$wb['unlimited_txt'] = 'Неограничен';
 $wb['limit_maildomain_txt'] = 'Брой на email домейни';
 $wb['limit_mailbox_txt'] = 'Брой на пощенските кутии';
 $wb['limit_mailalias_txt'] = 'Брой на email псевдоними';
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_limits.lng b/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
index 72558f5797..739c7e4445 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Limites de contas';
 $wb['of_txt'] = 'de';
-$wb['unlimited_txt'] = 'Ilimitado';
 $wb['limit_maildomain_txt'] = 'Número de domínios de e-mail';
 $wb['limit_mailmailinglist_txt'] = 'Número de listas de e-mail';
 $wb['limit_mailbox_txt'] = 'Número de contas de e-mail';
diff --git a/interface/web/dashboard/lib/lang/ca_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ca_dashlet_limits.lng
index f482b47e38..ae78112c85 100644
--- a/interface/web/dashboard/lib/lang/ca_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ca_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Limites du compte';
 $wb['of_txt'] = 'sur';
-$wb['unlimited_txt'] = 'Illimité';
 $wb['limit_maildomain_txt'] = 'Nombre de domaines courriel';
 $wb['limit_mailmailinglist_txt'] = 'Nombre de mailing lists';
 $wb['limit_mailbox_txt'] = 'Nombre de boites courriel';
diff --git a/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng b/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
index a7aecc4a53..d93dd87761 100644
--- a/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Limity účtů';
 $wb['of_txt'] = 'z';
-$wb['unlimited_txt'] = 'neomezeno';
 $wb['limit_maildomain_txt'] = 'Počet e-mailových domén';
 $wb['limit_mailbox_txt'] = 'Počet e-mailových schránek';
 $wb['limit_mailalias_txt'] = 'Počet e-mailových přezdívek';
diff --git a/interface/web/dashboard/lib/lang/de_dashlet_limits.lng b/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
index 335c17ca85..22e87237d5 100644
--- a/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Kontobeschränkungen';
 $wb['of_txt'] = 'von';
-$wb['unlimited_txt'] = 'unlimitiert';
 $wb['limit_maildomain_txt'] = 'Anzahl der E-Mail Domains';
 $wb['limit_mailbox_txt'] = 'Anzahl der E-Mail Konten';
 $wb['limit_mailalias_txt'] = 'Anzahl der E-Mail Aliase';
diff --git a/interface/web/dashboard/lib/lang/dk_dashlet_limits.lng b/interface/web/dashboard/lib/lang/dk_dashlet_limits.lng
index eb128750b2..402aa722f5 100644
--- a/interface/web/dashboard/lib/lang/dk_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/dk_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Konto begrænsninger';
 $wb['of_txt'] = 'af';
-$wb['unlimited_txt'] = 'Ubegrænset';
 $wb['limit_maildomain_txt'] = 'Antal af e-mail domæner';
 $wb['limit_mailmailinglist_txt'] = 'Antal af mail-lister';
 $wb['limit_mailbox_txt'] = 'Antal af mail-bokse';
diff --git a/interface/web/dashboard/lib/lang/el_dashlet_limits.lng b/interface/web/dashboard/lib/lang/el_dashlet_limits.lng
index dac3b55623..f51c1da1b5 100644
--- a/interface/web/dashboard/lib/lang/el_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/el_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Όρια Λογαριασμών';
 $wb['of_txt'] = 'από';
-$wb['unlimited_txt'] = 'Απεριόριστα';
 $wb['limit_maildomain_txt'] = 'Αριθμός email domains';
 $wb['limit_mailbox_txt'] = 'Αριθμός θυρίδων';
 $wb['limit_mailalias_txt'] = 'Αριθμός ψευδωνύμων email';
diff --git a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
index 5d504c8e9b..d30977799f 100644
--- a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = "Account limits";
 $wb['of_txt'] = "of";
-$wb['unlimited_txt'] = "Unlimited";
 $wb['limit_maildomain_txt'] = "Number of email domains";
 $wb['limit_mailmailinglist_txt'] = "Number of mailing lists";
 $wb['limit_mailbox_txt'] = "Number of mailboxes";
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
index da6cd6b513..d56d17c661 100755
--- a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
@@ -27,7 +27,6 @@ $wb['limit_web_subdomain_txt'] = 'Cantidad de sub-dominios';
 $wb['limit_webdav_user_txt'] = 'Cantidad de usuarios Webdav';
 $wb['limits_txt'] = 'Límites de la cuenta';
 $wb['of_txt'] = 'de';
-$wb['unlimited_txt'] = 'Ilimitado';
 $wb['limit_mailquota_txt'] = 'Assigned mailbox quota';
 $wb['limit_web_quota_txt'] = 'Assigned web quota';
 $wb['limit_database_quota_txt'] = 'Assigned database quota';
diff --git a/interface/web/dashboard/lib/lang/fi_dashlet_limits.lng b/interface/web/dashboard/lib/lang/fi_dashlet_limits.lng
index 6ec82aad5b..b15261dfc4 100644
--- a/interface/web/dashboard/lib/lang/fi_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/fi_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Account limits';
 $wb['of_txt'] = 'of';
-$wb['unlimited_txt'] = 'Unlimited';
 $wb['limit_maildomain_txt'] = 'Number of email domains';
 $wb['limit_mailbox_txt'] = 'Number of mailboxes';
 $wb['limit_mailalias_txt'] = 'Number of email aliases';
diff --git a/interface/web/dashboard/lib/lang/fr_dashlet_limits.lng b/interface/web/dashboard/lib/lang/fr_dashlet_limits.lng
index 525249f6d4..fa5043ab85 100644
--- a/interface/web/dashboard/lib/lang/fr_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/fr_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Limites du compte';
 $wb['of_txt'] = 'sur';
-$wb['unlimited_txt'] = 'Illimité';
 $wb['limit_maildomain_txt'] = 'Nombre de domaines e-mail';
 $wb['limit_mailmailinglist_txt'] = 'Nombre de liste de distribution';
 $wb['limit_mailbox_txt'] = 'Nombre de boîtes aux lettres';
diff --git a/interface/web/dashboard/lib/lang/hr_dashlet_limits.lng b/interface/web/dashboard/lib/lang/hr_dashlet_limits.lng
index 1a3db42a24..2aa1792f91 100644
--- a/interface/web/dashboard/lib/lang/hr_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/hr_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Ograničenja';
 $wb['of_txt'] = 'od';
-$wb['unlimited_txt'] = 'neograničeno';
 $wb['limit_maildomain_txt'] = 'Mail domene';
 $wb['limit_mailbox_txt'] = 'Mailboxi';
 $wb['limit_mailalias_txt'] = 'Mail aliasi';
diff --git a/interface/web/dashboard/lib/lang/hu_dashlet_limits.lng b/interface/web/dashboard/lib/lang/hu_dashlet_limits.lng
index 13c5a4e450..76498eed86 100644
--- a/interface/web/dashboard/lib/lang/hu_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/hu_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Account limits';
 $wb['of_txt'] = '-';
-$wb['unlimited_txt'] = 'Korlátlan';
 $wb['limit_maildomain_txt'] = 'Email domainek száma';
 $wb['limit_mailbox_txt'] = 'Mailbox-ok száma';
 $wb['limit_mailalias_txt'] = 'Email aliasok száma';
diff --git a/interface/web/dashboard/lib/lang/id_dashlet_limits.lng b/interface/web/dashboard/lib/lang/id_dashlet_limits.lng
index 8079b742b7..94a64e226f 100644
--- a/interface/web/dashboard/lib/lang/id_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/id_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Batasan Akun';
 $wb['of_txt'] = 'dari';
-$wb['unlimited_txt'] = 'Tak terbatas';
 $wb['limit_maildomain_txt'] = 'Jumlah domain email';
 $wb['limit_mailbox_txt'] = 'Jumlah mailbox';
 $wb['limit_mailalias_txt'] = 'Jumlah alias email';
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_limits.lng b/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
index a1a2000edf..dd83e1ad58 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Sintesi account';
 $wb['of_txt'] = 'su';
-$wb['unlimited_txt'] = 'illimitati';
 $wb['limit_maildomain_txt'] = 'Domini email';
 $wb['limit_mailbox_txt'] = 'Caselle email';
 $wb['limit_mailalias_txt'] = 'Alias di email';
diff --git a/interface/web/dashboard/lib/lang/ja_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ja_dashlet_limits.lng
index 6ec82aad5b..b15261dfc4 100644
--- a/interface/web/dashboard/lib/lang/ja_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ja_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Account limits';
 $wb['of_txt'] = 'of';
-$wb['unlimited_txt'] = 'Unlimited';
 $wb['limit_maildomain_txt'] = 'Number of email domains';
 $wb['limit_mailbox_txt'] = 'Number of mailboxes';
 $wb['limit_mailalias_txt'] = 'Number of email aliases';
diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng b/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng
index 10d1e82837..35a2b9e0be 100644
--- a/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Account limieten';
 $wb['of_txt'] = 'van';
-$wb['unlimited_txt'] = 'Ongelimiteerd';
 $wb['limit_maildomain_txt'] = 'Aantal email domeinen';
 $wb['limit_mailbox_txt'] = 'Aantal mailboxes';
 $wb['limit_mailalias_txt'] = 'Aantal e-mail aliassen';
diff --git a/interface/web/dashboard/lib/lang/pl_dashlet_limits.lng b/interface/web/dashboard/lib/lang/pl_dashlet_limits.lng
index 4d5b971469..5513b32551 100644
--- a/interface/web/dashboard/lib/lang/pl_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/pl_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Limity konta';
 $wb['of_txt'] = 'z';
-$wb['unlimited_txt'] = 'nielimitowane';
 $wb['limit_maildomain_txt'] = 'Liczba domen e-mail';
 $wb['limit_mailbox_txt'] = 'Liczba skrzynek pocztowych';
 $wb['limit_mailalias_txt'] = 'Liczba aliasów e-mail';
diff --git a/interface/web/dashboard/lib/lang/pt_dashlet_limits.lng b/interface/web/dashboard/lib/lang/pt_dashlet_limits.lng
index 6ec82aad5b..b15261dfc4 100644
--- a/interface/web/dashboard/lib/lang/pt_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/pt_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Account limits';
 $wb['of_txt'] = 'of';
-$wb['unlimited_txt'] = 'Unlimited';
 $wb['limit_maildomain_txt'] = 'Number of email domains';
 $wb['limit_mailbox_txt'] = 'Number of mailboxes';
 $wb['limit_mailalias_txt'] = 'Number of email aliases';
diff --git a/interface/web/dashboard/lib/lang/ro_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ro_dashlet_limits.lng
index 6ec82aad5b..b15261dfc4 100644
--- a/interface/web/dashboard/lib/lang/ro_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ro_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Account limits';
 $wb['of_txt'] = 'of';
-$wb['unlimited_txt'] = 'Unlimited';
 $wb['limit_maildomain_txt'] = 'Number of email domains';
 $wb['limit_mailbox_txt'] = 'Number of mailboxes';
 $wb['limit_mailalias_txt'] = 'Number of email aliases';
diff --git a/interface/web/dashboard/lib/lang/ru_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ru_dashlet_limits.lng
index 19295b65e3..9e77f43d8d 100644
--- a/interface/web/dashboard/lib/lang/ru_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ru_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Лимиты учётной записи';
 $wb['of_txt'] = 'из';
-$wb['unlimited_txt'] = 'Безлимитный';
 $wb['limit_maildomain_txt'] = 'Количество почтовых аккаунтов';
 $wb['limit_mailbox_txt'] = 'Количество почтовых ящиков';
 $wb['limit_mailalias_txt'] = 'Количество алиасов почты';
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_limits.lng b/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
index d1f38b1b0d..f02f83bffd 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Kontogränser';
 $wb['of_txt'] = 'av';
-$wb['unlimited_txt'] = 'Obegränsat';
 $wb['limit_maildomain_txt'] = 'Antal epostdomäner';
 $wb['limit_mailbox_txt'] = 'Antal epostkonton';
 $wb['limit_mailalias_txt'] = 'Antal epostalias';
diff --git a/interface/web/dashboard/lib/lang/sk_dashlet_limits.lng b/interface/web/dashboard/lib/lang/sk_dashlet_limits.lng
index 6ec82aad5b..b15261dfc4 100644
--- a/interface/web/dashboard/lib/lang/sk_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/sk_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Account limits';
 $wb['of_txt'] = 'of';
-$wb['unlimited_txt'] = 'Unlimited';
 $wb['limit_maildomain_txt'] = 'Number of email domains';
 $wb['limit_mailbox_txt'] = 'Number of mailboxes';
 $wb['limit_mailalias_txt'] = 'Number of email aliases';
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng b/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
index 9fa1fb5b90..6a4a6a0d24 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
@@ -1,7 +1,6 @@
 <?php
 $wb['limits_txt'] = 'Hesap Sınırları';
 $wb['of_txt'] = '/';
-$wb['unlimited_txt'] = 'Sınırsız';
 $wb['limit_maildomain_txt'] = 'E-posta Etki Alanı Sayısı';
 $wb['limit_mailmailinglist_txt'] = 'E-posta Listesi Sayısı';
 $wb['limit_mailbox_txt'] = 'E-posta Kutusu Sayısı';
-- 
GitLab


From a6c847e030c316b988b06c3d9d05ad0c449f2924 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Fri, 3 Jan 2020 14:40:30 +0100
Subject: [PATCH 205/571] add ipv6-addresses for ispconfig slave-users on the
 master-server (#5493)

---
 install/lib/installer_base.lib.php | 180 +++++++++++++++++------------
 1 file changed, 104 insertions(+), 76 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 513858ca68..0cf2ee23e7 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -409,80 +409,92 @@ class installer_base {
 
 
 	}
-	
+
+	public function get_host_ips() {
+		$out = array();
+		exec('hostname --all-ip-addresses', $ret, $val);
+		if($val == 0) {
+			if(is_array($ret) && !empty($ret)){
+				$temp = (explode(' ', $ret[0]));
+				foreach($temp as $ip) {
+					$out[] = $ip;
+				}
+			}
+		}
+
+		return $out;
+	}
+
 	public function detect_ips(){
 		global $conf;
+			
+		$output = $this->get_host_ips();
 
-		exec("ip addr show | awk '/global/ { print $2 }' | cut -d '/' -f 1", $output, $retval);
-		
-		if($retval == 0){
-			if(is_array($output) && !empty($output)){
-				foreach($output as $line){
-					$line = trim($line);
-					$ip_type = '';
-					if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
-						$ip_type = 'IPv4';
-					}
-					if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
-						$ip_type = 'IPv6';
-					}
-					if($ip_type == '') continue;
-					if($this->db->dbHost != $this->dbmaster->dbHost){
-						$this->dbmaster->query('INSERT INTO server_ip (
-							sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
-							sys_perm_other, server_id, client_id, ip_type, ip_address,
-							virtualhost, virtualhost_port
-						) VALUES (
-							1,
-							1,
-							"riud",
-							"riud",
-							"",
-							?,
-							0,
-							?,
-							?,
-							"y",
-							"80,443"
-						)', $conf['server_id'], $ip_type, $line);
-						$server_ip_id = $this->dbmaster->insertID();
-						$this->db->query('INSERT INTO server_ip (
-							server_php_id, sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
-							sys_perm_other, server_id, client_id, ip_type, ip_address,
-							virtualhost, virtualhost_port
-						) VALUES (
-							?,
-							1,
-							1,
-							"riud",
-							"riud",
-							"",
-							?,
-							0,
-							?,
-							?,
-							"y",
-							"80,443"
-						)', $server_ip_id, $conf['server_id'], $ip_type, $line);
-					} else {
-						$this->db->query('INSERT INTO server_ip (
-							sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
-							sys_perm_other, server_id, client_id, ip_type, ip_address,
-							virtualhost, virtualhost_port
-						) VALUES (
-							1,
-							1,
-							"riud",
-							"riud",
-							"",
-							?,
-							0,
-							?,
-							?,
-							"y",
-							"80,443"
-						)', $conf['server_id'], $ip_type, $line);
-					}
+		if(is_array($output) && !empty($output)){
+			foreach($output as $line){
+				$ip_type = '';
+				if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+					$ip_type = 'IPv4';
+				}
+				if (filter_var($line, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+					$ip_type = 'IPv6';
+				}
+				if($ip_type == '') continue;
+				if($this->db->dbHost != $this->dbmaster->dbHost){
+					$this->dbmaster->query('INSERT INTO server_ip (
+						sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
+						sys_perm_other, server_id, client_id, ip_type, ip_address,
+						virtualhost, virtualhost_port
+					) VALUES (
+						1,
+						1,
+						"riud",
+						"riud",
+						"",
+						?,
+						0,
+						?,
+						?,
+						"y",
+						"80,443"
+					)', $conf['server_id'], $ip_type, $line);
+					$server_ip_id = $this->dbmaster->insertID();
+					$this->db->query('INSERT INTO server_ip (
+						server_php_id, sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
+						sys_perm_other, server_id, client_id, ip_type, ip_address,
+						virtualhost, virtualhost_port
+					) VALUES (
+						?,
+						1,
+						1,
+						"riud",
+						"riud",
+						"",
+						?,
+						0,
+						?,
+						?,
+						"y",
+						"80,443"
+					)', $server_ip_id, $conf['server_id'], $ip_type, $line);
+				} else {
+					$this->db->query('INSERT INTO server_ip (
+						sys_userid, sys_groupid, sys_perm_user, sys_perm_group,
+						sys_perm_other, server_id, client_id, ip_type, ip_address,
+						virtualhost, virtualhost_port
+					) VALUES (
+						1,
+						1,
+						"riud",
+						"riud",
+						"",
+						?,
+						0,
+						?,
+						?,
+						"y",
+						"80,443"
+					)', $conf['server_id'], $ip_type, $line);
 				}
 			}
 		}
@@ -509,15 +521,23 @@ class installer_base {
 
 			//* insert the ispconfig user in the remote server
 			$from_host = $conf['hostname'];
-			$from_ip = gethostbyname($conf['hostname']);
-
 			$hosts[$from_host]['user'] = $conf['mysql']['master_ispconfig_user'];
 			$hosts[$from_host]['db'] = $conf['mysql']['master_database'];
 			$hosts[$from_host]['pwd'] = $conf['mysql']['master_ispconfig_password'];
 
-			$hosts[$from_ip]['user'] = $conf['mysql']['master_ispconfig_user'];
-			$hosts[$from_ip]['db'] = $conf['mysql']['master_database'];
-			$hosts[$from_ip]['pwd'] = $conf['mysql']['master_ispconfig_password'];
+			$host_ips = $this->get_host_ips();
+			if(is_arary($host_ips) && !empty($host_ips)) {
+				foreach($host_ips as $ip) {
+					$hosts[$ip]['user'] = $conf['mysql']['master_ispconfig_user'];
+					$hosts[$ip]['db'] = $conf['mysql']['master_database'];
+					$hosts[$ip]['pwd'] = $conf['mysql']['master_ispconfig_password'];
+				}
+			} else {
+				$from_ip = gethostbyname($conf['hostname']);
+				$hosts[$from_ip]['user'] = $conf['mysql']['master_ispconfig_user'];
+				$hosts[$from_ip]['db'] = $conf['mysql']['master_database'];
+				$hosts[$from_ip]['pwd'] = $conf['mysql']['master_ispconfig_password'];
+			}
 		} else{
 			/*
 			 * it is NOT a master-slave - Setup so we have to find out all clients and their
@@ -696,6 +716,14 @@ class installer_base {
 					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
 				}
 
+				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
+				if ($verbose){
+					echo $query ."\n";
+				}
+				if(!$this->dbmaster->query($query, $value['db'] . '.managed_php', $value['user'], $host)) {
+					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+				}
+
 			}
 
 		}
-- 
GitLab


From 2d03b4525a9574736c0f9312e7024d3652ac2b8c Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Fri, 3 Jan 2020 14:43:54 +0100
Subject: [PATCH 206/571] remove code from last commit

---
 install/lib/installer_base.lib.php | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 0cf2ee23e7..94ffd5703f 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -716,14 +716,6 @@ class installer_base {
 					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
 				}
 
-				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
-				if ($verbose){
-					echo $query ."\n";
-				}
-				if(!$this->dbmaster->query($query, $value['db'] . '.managed_php', $value['user'], $host)) {
-					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-				}
-
 			}
 
 		}
-- 
GitLab


From a08a29104365e40418ef7b5261f71cdec56adce1 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Tue, 7 Jan 2020 08:11:00 +0100
Subject: [PATCH 207/571] BUG - Cleanup website tmp directories (#5434)

---
 server/lib/classes/cron.d/200-logfiles.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index e2d9e9bb9e..203d3c0bda 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -217,7 +217,7 @@ class cronjob_logfiles extends cronjob {
 			foreach($records as $rec){
 				$tmp_path = realpath($rec['document_root'].'/tmp');
 				if($tmp_path != '' && strlen($tmp_path) > 10 && is_dir($tmp_path) && $app->system->is_user($rec['system_user'])){
-					exec("cd ?; find . -mtime +1 -name 'sess_*' | grep -v -w .no_delete | xargs rm > /dev/null 2> /dev/null", $tmp_path);
+					$app->system->exec_safe("cd ?; find . -mtime +1 -name 'sess_*' | grep -v -w .no_delete | xargs rm > /dev/null 2> /dev/null", $tmp_path);
 				}
 			}
 		}
-- 
GitLab


From 4b281bf70d5668769eda440bceeb4fb01d376a4d Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 14 Jan 2020 10:56:48 +0100
Subject: [PATCH 208/571] Fix exec to exec_safe to make placeholder work again,
 #5434 #5510

---
 server/lib/classes/cron.d/200-logfiles.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index e2d9e9bb9e..203d3c0bda 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -217,7 +217,7 @@ class cronjob_logfiles extends cronjob {
 			foreach($records as $rec){
 				$tmp_path = realpath($rec['document_root'].'/tmp');
 				if($tmp_path != '' && strlen($tmp_path) > 10 && is_dir($tmp_path) && $app->system->is_user($rec['system_user'])){
-					exec("cd ?; find . -mtime +1 -name 'sess_*' | grep -v -w .no_delete | xargs rm > /dev/null 2> /dev/null", $tmp_path);
+					$app->system->exec_safe("cd ?; find . -mtime +1 -name 'sess_*' | grep -v -w .no_delete | xargs rm > /dev/null 2> /dev/null", $tmp_path);
 				}
 			}
 		}
-- 
GitLab


From 88fd29a6c91f226ca4a2ffca536f30e80588ea59 Mon Sep 17 00:00:00 2001
From: Silviu CHINGARU <silviuchingaru@yahoo.com>
Date: Thu, 16 Jan 2020 21:32:07 +0200
Subject: [PATCH 209/571] Fixes ispconfig/ispconfig3#5513 - right exposing tag
 method to template.

---
 .../plugins-available/rspamd_plugin.inc.php   | 56 +++++++++----------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 212cb2c21c..4812deb683 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -33,7 +33,7 @@ class rspamd_plugin {
 	var $plugin_name = 'rspamd_plugin';
 	var $class_name  = 'rspamd_plugin';
 	var $users_config_dir = '/etc/rspamd/local.d/users/';
-	
+
 	//* This function is called during ispconfig installation to determine
 	//  if a symlink shall be created for this plugin.
 	function onInstall() {
@@ -98,7 +98,7 @@ class rspamd_plugin {
 
 		return true;
 	}
-	
+
 	/*
 	 	This function is called when the plugin is loaded
 	*/
@@ -114,17 +114,17 @@ class rspamd_plugin {
 		$app->plugins->registerEvent('spamfilter_wblist_insert', $this->plugin_name, 'spamfilter_wblist_insert');
 		$app->plugins->registerEvent('spamfilter_wblist_update', $this->plugin_name, 'spamfilter_wblist_update');
 		$app->plugins->registerEvent('spamfilter_wblist_delete', $this->plugin_name, 'spamfilter_wblist_delete');
-		
+
 		//* global mail access filters
 		$app->plugins->registerEvent('mail_access_insert', $this->plugin_name, 'spamfilter_wblist_insert');
 		$app->plugins->registerEvent('mail_access_update', $this->plugin_name, 'spamfilter_wblist_update');
 		$app->plugins->registerEvent('mail_access_delete', $this->plugin_name, 'spamfilter_wblist_delete');
-		
+
 		//* server ip
 		$app->plugins->registerEvent('server_ip_insert', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_ip_update', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_ip_delete', $this->plugin_name, 'server_ip');
-		
+
 		//* spamfilter_users
 		$app->plugins->registerEvent('spamfilter_users_insert', $this->plugin_name, 'user_settings_update');
 		$app->plugins->registerEvent('spamfilter_users_update', $this->plugin_name, 'user_settings_update');
@@ -141,11 +141,11 @@ class rspamd_plugin {
 
 	function user_settings_update($event_name, $data) {
 		global $app, $conf;
-		
+
 		if(!is_dir('/etc/rspamd')) {
 			return;
 		}
-		
+
 		$use_data = 'new';
 		if(substr($event_name, -7) === '_delete') {
 			$mode = 'delete';
@@ -159,7 +159,7 @@ class rspamd_plugin {
 		// get the config
 		$app->uses('getconf,system,functions');
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-		
+
 		$type = false;
 		$identifier = false;
 		$entry_id = false;
@@ -180,7 +180,7 @@ class rspamd_plugin {
 			$app->log('Invalid event name for rspamd_plugin: ' . $event_name, LOGLEVEL_WARN);
 			return;
 		}
-		
+
 		$is_domain = false;
 		$email_address = $data[$use_data][$identifier];
 		$settings_name =  $email_address;
@@ -199,13 +199,13 @@ class rspamd_plugin {
 			$email_address = '@' . $email_address;
 			$is_domain = true;
 		}
-		
+
 		if($settings_name == '') {
 			// missing settings file name
 			$app->log('Empty rspamd identifier in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN);
 			return;
 		}
-		
+
 		$settings_file = $this->users_config_dir . str_replace('@', '_', $settings_name) . '.conf';
 		//$app->log('Settings file for rspamd is ' . $settings_file, LOGLEVEL_WARN);
 		if($mode === 'delete') {
@@ -219,11 +219,11 @@ class rspamd_plugin {
 			} elseif($is_domain === true) {
 				$settings_priority = 18;
 			}
-			
+
 			// get policy for entry
 			if($type === 'spamfilter_user') {
 				$policy = $app->db->queryOneRecord("SELECT * FROM spamfilter_policy WHERE id = ?", intval($data['new']['policy_id']));
-				
+
 				$check = $app->db->queryOneRecord('SELECT `greylisting` FROM `mail_user` WHERE `server_id` = ? AND `email` = ? UNION SELECT `greylisting` FROM `mail_forwarding` WHERE `server_id` = ? AND `source` = ? ORDER BY (`greylisting` = ?) DESC', $conf['server_id'], $email_address, $conf['server_id'], $email_address, 'y');
 				if($check) {
 					$greylisting = $check['greylisting'];
@@ -233,16 +233,16 @@ class rspamd_plugin {
 			} else {
 				$search_for_policy[] = $email_address;
 				$search_for_policy[] = substr($email_address, strpos($email_address, '@'));
-				
+
 				$policy = $app->db->queryOneRecord("SELECT p.* FROM spamfilter_users as u INNER JOIN spamfilter_policy as p ON (p.id = u.policy_id) WHERE u.server_id = ? AND u.email IN ? ORDER BY u.priority DESC", $conf['server_id'], $search_for_policy);
-				
+
 				$greylisting = $data[$use_data]['greylisting'];
 			}
-			
+
 			if(!is_dir($this->users_config_dir)){
 				$app->system->mkdirpath($this->users_config_dir);
 			}
-			
+
 			if(!$this->isValidEmail($app->functions->idn_encode($email_address))) {
 				if(is_file($settings_file)) {
 					unlink($settings_file);
@@ -285,7 +285,7 @@ class rspamd_plugin {
 				}
 
 				$tpl->setVar('rspamd_spam_tag_level', floatval($policy['rspamd_spam_tag_level']));
-				$tpl->setVar('rspamd_spam_tag_method', floatval($policy['rspamd_spam_tag_method']));
+				$tpl->setVar('rspamd_spam_tag_method', $policy['rspamd_spam_tag_method']);
 				$tpl->setVar('rspamd_spam_kill_level', floatval($policy['rspamd_spam_kill_level']));
 				$tpl->setVar('rspamd_virus_kill_level', floatval($policy['rspamd_spam_kill_level']) + 1000);
 
@@ -324,7 +324,7 @@ class rspamd_plugin {
 
 		$app->uses('getconf,system,functions');
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-		
+
 		if(is_dir('/etc/rspamd')) {
 			$global_filter = false;
 			//* Create the config file
@@ -354,12 +354,12 @@ class rspamd_plugin {
 					);
 				}
 			}
-		
+
 			if($data['new']['active'] == 'y' && is_array($filter) && !empty($filter)){
 				if(!is_dir($this->users_config_dir)){
 					$app->system->mkdirpath($this->users_config_dir);
 				}
-		
+
 				$app->load('tpl');
 
 				$filter_from = $filter['from'];
@@ -407,13 +407,13 @@ class rspamd_plugin {
 			} elseif(is_file($wblist_file)) {
 				unlink($wblist_file);
 			}
-			
+
 			if($mail_config['content_filter'] == 'rspamd' && is_file('/etc/init.d/rspamd')) {
 				$app->services->restartServiceDelayed('rspamd', 'reload');
 			}
 		}
 	}
-	
+
 	function spamfilter_wblist_delete($event_name, $data) {
 		global $app, $conf;
 
@@ -439,17 +439,17 @@ class rspamd_plugin {
 
 	function server_ip($event_name, $data) {
 		global $app, $conf;
- 
+
 		// get the config
 		$app->uses("getconf,system");
 		$app->load('tpl');
 
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-		
+
 		if(is_dir('/etc/rspamd')) {
 			$tpl = new tpl();
 			$tpl->newTemplate('rspamd_users.conf.master');
-				
+
 			$whitelist_ips = array();
 			$ips = $app->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']);
 			if(is_array($ips) && !empty($ips)){
@@ -459,13 +459,13 @@ class rspamd_plugin {
 			}
 			$tpl->setLoop('whitelist_ips', $whitelist_ips);
 			$app->system->file_put_contents('/etc/rspamd/local.d/users.conf', $tpl->grab());
-				
+
 			if($mail_config['content_filter'] == 'rspamd'){
 				$app->services->restartServiceDelayed('rspamd', 'reload');
 			}
 		}
 	}
-	
+
 	private function _is_valid_ip_address($ip) {
 		if(function_exists('filter_var')) {
 			if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6)) {
-- 
GitLab


From dfe37d7241403e12f8d62d6e26a9044cc8594f80 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 17 Jan 2020 15:04:49 +0100
Subject: [PATCH 210/571] Fixed #5515 API client_template_additional_get always
 return just one template

---
 interface/lib/classes/remote.d/client.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/classes/remote.d/client.inc.php b/interface/lib/classes/remote.d/client.inc.php
index e07e227e60..1457bf569a 100644
--- a/interface/lib/classes/remote.d/client.inc.php
+++ b/interface/lib/classes/remote.d/client.inc.php
@@ -257,7 +257,7 @@ class remoting_client extends remoting {
 
 		if(@is_numeric($client_id)) {
 			$sql = "SELECT * FROM `client_template_assigned` WHERE `client_id` = ?";
-			return $app->db->queryOneRecord($sql, $client_id);
+			return $app->db->queryAllRecords($sql, $client_id);
 		} else {
 			throw new SoapFault('The ID must be an integer.');
 			return array();
-- 
GitLab


From a5cdc4751b17e972f47d98a496a9d6176c399148 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 22 Jan 2020 10:56:47 +0100
Subject: [PATCH 211/571] - merged request !945 to stable

---
 interface/web/dashboard/lib/lang/it.lng       |  1 +
 .../lib/lang/it_dashlet_customer.lng          |  4 ++--
 .../lib/lang/it_dashlet_databasequota.lng     |  8 +++----
 .../dashboard/lib/lang/it_dashlet_limits.lng  | 24 +++++++++----------
 .../lib/lang/it_dashlet_mailquota.lng         | 10 ++++----
 .../dashboard/lib/lang/it_dashlet_modules.lng |  2 +-
 .../dashboard/lib/lang/it_dashlet_quota.lng   | 12 +++++-----
 interface/web/login/lib/lang/it.lng           | 20 ++++++++--------
 8 files changed, 41 insertions(+), 40 deletions(-)

diff --git a/interface/web/dashboard/lib/lang/it.lng b/interface/web/dashboard/lib/lang/it.lng
index db8858aafd..6a22e7cf5e 100644
--- a/interface/web/dashboard/lib/lang/it.lng
+++ b/interface/web/dashboard/lib/lang/it.lng
@@ -1,4 +1,5 @@
 <?php
 $wb['welcome_user_txt'] = 'Buongiorno %s';
 $wb['available_modules_txt'] = 'Moduli disponibili';
+$wb['last_login_ip'] = "Ultimo login %s da %s";
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_customer.lng b/interface/web/dashboard/lib/lang/it_dashlet_customer.lng
index 4fe6cb0ef7..bb6c2c5a6d 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_customer.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_customer.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['customerdata_txt'] = 'My Data';
-$wb['edit_txt'] = 'Edit';
+$wb['customerdata_txt'] = 'I miei dati';
+$wb['edit_txt'] = 'Modifica';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/it_dashlet_databasequota.lng
index bd2402dbf6..61ab6d9b21 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_databasequota.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_databasequota.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['databasequota_txt'] = 'Database Quota';
-$wb['database_txt'] = 'Database Name';
-$wb['used_txt'] = 'Used Space';
+$wb['databasequota_txt'] = 'Quota Database';
+$wb['database_txt'] = 'Nome Database';
+$wb['used_txt'] = 'Spazio Usato';
 $wb['quota_txt'] = 'Quota';
-$wb['no_database_accounts_txt'] = 'No databases found.';
+$wb['no_database_accounts_txt'] = 'Nessun database trovato.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_limits.lng b/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
index dd83e1ad58..895f619864 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
@@ -1,14 +1,14 @@
 <?php
 $wb['limits_txt'] = 'Sintesi account';
 $wb['of_txt'] = 'su';
-$wb['limit_maildomain_txt'] = 'Domini email';
-$wb['limit_mailbox_txt'] = 'Caselle email';
-$wb['limit_mailalias_txt'] = 'Alias di email';
+$wb['limit_maildomain_txt'] = 'Domini e-mail';
+$wb['limit_mailbox_txt'] = 'Caselle e-mail';
+$wb['limit_mailalias_txt'] = 'Alias di e-mail';
 $wb['limit_mailaliasdomain_txt'] = 'Alias di domini';
-$wb['limit_mailforward_txt'] = 'Inoltro email';
-$wb['limit_mailcatchall_txt'] = 'Account catchall email';
-$wb['limit_mailrouting_txt'] = 'Instradamento email';
-$wb['limit_mailfilter_txt'] = 'Filtri email';
+$wb['limit_mailforward_txt'] = 'Inoltro e-mail';
+$wb['limit_mailcatchall_txt'] = 'Account catchall e-mail';
+$wb['limit_mailrouting_txt'] = 'Instradamento e-mail';
+$wb['limit_mailfilter_txt'] = 'Filtri e-mail';
 $wb['limit_fetchmail_txt'] = 'Account fetchmail';
 $wb['limit_spamfilter_wblist_txt'] = 'Filtri spamfilter white / blacklist';
 $wb['limit_spamfilter_user_txt'] = 'Utenti spamfilter';
@@ -25,9 +25,9 @@ $wb['limit_shell_user_txt'] = 'Utenti Shell';
 $wb['limit_webdav_user_txt'] = 'Utenti Webdav';
 $wb['limit_client_txt'] = 'Client';
 $wb['limit_database_txt'] = 'Database';
-$wb['limit_mailmailinglist_txt'] = 'Number of mailing lists';
-$wb['limit_domain_txt'] = 'Number of Domains';
-$wb['limit_mailquota_txt'] = 'Assigned mailbox quota';
-$wb['limit_web_quota_txt'] = 'Assigned web quota';
-$wb['limit_database_quota_txt'] = 'Assigned database quota';
+$wb['limit_mailmailinglist_txt'] = 'Numero mailing-list';
+$wb['limit_domain_txt'] = 'Numero domini';
+$wb['limit_mailquota_txt'] = 'Quota mailbox assegnata';
+$wb['limit_web_quota_txt'] = 'Quota web assegnata';
+$wb['limit_database_quota_txt'] = 'Quota database assegnata';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/it_dashlet_mailquota.lng
index 1ab1e66658..daaaa67f49 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_mailquota.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_mailquota.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['mailquota_txt'] = 'Mailbox Quota';
-$wb['email_txt'] = 'Email Address';
-$wb['name_txt'] = 'Name';
-$wb['used_txt'] = 'Used Space';
+$wb['mailquota_txt'] = 'Quota Mailbox';
+$wb['email_txt'] = 'Indirizzo e-mail';
+$wb['name_txt'] = 'Nome';
+$wb['used_txt'] = 'Spazio Usato';
 $wb['quota_txt'] = 'Quota';
-$wb['no_email_accounts_txt'] = 'No email accounts found.';
+$wb['no_email_accounts_txt'] = 'Nessun account e-mail trovato.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_modules.lng b/interface/web/dashboard/lib/lang/it_dashlet_modules.lng
index 69d5c07997..a80b302092 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_modules.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_modules.lng
@@ -1,4 +1,4 @@
 <?php
 $wb['available_modules_txt'] = 'Moduli disponibili';
-$wb['go_to_txt'] = 'Go to';
+$wb['go_to_txt'] = 'Vai a';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_quota.lng b/interface/web/dashboard/lib/lang/it_dashlet_quota.lng
index de7b5a8936..63799d2ee3 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_quota.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_quota.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['quota_txt'] = 'Website Harddisk Quota';
-$wb['domain_txt'] = 'Domain / Website';
-$wb['used_txt'] = 'Used space';
-$wb['hard_txt'] = 'Hard limit';
-$wb['soft_txt'] = 'Soft limit';
-$wb['no_sites_txt'] = 'No web sites found.';
+$wb['quota_txt'] = 'Quota disco domini';
+$wb['domain_txt'] = 'Dominio';
+$wb['used_txt'] = 'Spazio usato';
+$wb['hard_txt'] = 'Limite (forzato)';
+$wb['soft_txt'] = 'Limite';
+$wb['no_sites_txt'] = 'Nessun dominio trovato.';
 ?>
diff --git a/interface/web/login/lib/lang/it.lng b/interface/web/login/lib/lang/it.lng
index 017d60df78..6d23aa0ccb 100644
--- a/interface/web/login/lib/lang/it.lng
+++ b/interface/web/login/lib/lang/it.lng
@@ -2,32 +2,32 @@
 $wb['error_user_password_empty'] = 'Nome utente o password vuoti.';
 $wb['error_user_password_incorrect'] = 'Nome utente o password errati.';
 $wb['error_user_blocked'] = 'Utente bloccato.';
-$wb['error_user_too_many_logins'] = 'Troppi tentativi errati di login. Riprovare tra 15 minuti';
+$wb['error_user_too_many_logins'] = 'Troppi tentativi errati di login. Riprovare tra 15 minuti.';
 $wb['pass_reset_txt'] = 'Una nuova password sarà  generata e spedita alla tua email se lemail inserita corrisponde a quella delle impostazioni dellutente.';
 $wb['pw_reset'] = 'La password è stata reimpostata e spedita al tuo indirizzo mail.';
-$wb['pw_error'] = 'Nome utente o email non corrispondenti.';
-$wb['pw_error_noinput'] = 'Inserisci nome utente e indirizzo email.';
-$wb['pw_reset_mail_msg'] = 'La password nel tuo pannello di controllo ISPConfig 3 è stata reimpostata. La nuova password è: ';
-$wb['pw_reset_mail_title'] = 'Password del pannello di controllo ISPConfig 3 reimpostata.';
+$wb['pw_error'] = 'Nome utente o e-mail non corrispondenti.';
+$wb['pw_error_noinput'] = 'Inserisci nome utente e indirizzo e-mail.';
+$wb['pw_reset_mail_msg'] = 'La password nel tuo pannello di controllo è stata reimpostata. La nuova password è: ';
+$wb['pw_reset_mail_title'] = 'Password del pannello di controllo reimpostata.';
 $wb['user_regex_error'] = 'Nome utente contenente caratteri non permessi oppure più lungo di 64 caratteri.';
 $wb['pw_error_length'] = 'Lunghezza password maggiore di 64 caratteri.';
 $wb['username_txt'] = 'Nome utente';
 $wb['password_txt'] = 'Password';
 $wb['login_button_txt'] = 'Accedi';
 $wb['pw_lost_txt'] = 'Password smarrita';
-$wb['error_maintenance_mode'] = 'Il pannello di controllo ISPConfig è in manutenzione. Saremo online tra breve. Grazie per la collaborazione.';
+$wb['error_maintenance_mode'] = 'Il pannello di controllo è in manutenzione.';
 $wb['login_txt'] = 'Accedi';
 $wb['pw_reset_txt'] = 'Password reset';
 $wb['pw_button_txt'] = 'Invia password';
-$wb['email_txt'] = 'Email';
-$wb['theme_not_compatible'] = 'Il tema selezionato non è compatibile con questa versione del pannello ISPConfig. Verificare esistenza di una nuova versione del tema.<br />Il tema di default è stato attivato automaticamente.';
+$wb['email_txt'] = 'E-mail';
+$wb['theme_not_compatible'] = 'Il tema selezionato non è compatibile con questa versione del pannello. Verificare esistenza di una nuova versione del tema.<br />Il tema di default è stato attivato automaticamente.';
 $wb['back_txt'] = 'Indietro';
 $wb['email_error'] = 'Email contiene caratteri non autorizzati o un formato non valido.';
 $wb['stay_logged_in_txt'] = 'Ricordami';
 $wb['lost_password_function_disabled_txt'] = 'The lost password function is not available for this user.';
 $wb['pw_reset_act'] = 'You have been sent an activation link. Please visit the link to confirm your password request.';
-$wb['pw_reset_act_mail_title'] = 'Confirm ISPConfig 3 Control panel password reset';
-$wb['pw_reset_act_mail_msg'] = 'Please confirm that your want to reset your ISPConfig 3 control panel account password by visiting the following activation link: ';
+$wb['pw_reset_act_mail_title'] = 'Conferma reset password';
+$wb['pw_reset_act_mail_msg'] = 'Per confermare il reset della password si prega di visitare questo link: ';
 $wb['lost_password_function_wait_txt'] = 'You cannot request a new password, yet. Please wait a few minutes.';
 $wb['lost_password_function_expired_txt'] = 'This activation link has expired. Please request a new one.';
 $wb['lost_password_function_denied_txt'] = 'This activation link is not valid.';
-- 
GitLab


From 0e59b84685f12dd7d0440d53390427da1267121c Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 24 Jan 2020 09:59:39 +0100
Subject: [PATCH 212/571] Fixed Typo in installer

---
 install/lib/installer_base.lib.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 94ffd5703f..346b62b9ab 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -526,7 +526,7 @@ class installer_base {
 			$hosts[$from_host]['pwd'] = $conf['mysql']['master_ispconfig_password'];
 
 			$host_ips = $this->get_host_ips();
-			if(is_arary($host_ips) && !empty($host_ips)) {
+			if(is_array($host_ips) && !empty($host_ips)) {
 				foreach($host_ips as $ip) {
 					$hosts[$ip]['user'] = $conf['mysql']['master_ispconfig_user'];
 					$hosts[$ip]['db'] = $conf['mysql']['master_database'];
-- 
GitLab


From f3065bc8f710619303123c7af16b05f056c5cda5 Mon Sep 17 00:00:00 2001
From: Xaver Maierhofer <xwissen@xwissen.info>
Date: Fri, 24 Jan 2020 10:18:53 +0100
Subject: [PATCH 213/571] Show 0 & -1 as unlimited in database stats

---
 interface/web/sites/database_quota_stats.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php
index 4e960bce27..03431a6ded 100644
--- a/interface/web/sites/database_quota_stats.php
+++ b/interface/web/sites/database_quota_stats.php
@@ -37,7 +37,7 @@ if(is_array($tmp_rec)) {
 			} else {
 				$temp['username'] = 'admin';
 			}
-			
+
 			if(is_array($temp) && !empty($temp)) {
 				$monitor_data[$server_id.'.'.$db_name]['database_name'] = $data['database_name'];
 				$monitor_data[$server_id.'.'.$db_name]['client'] = isset($temp['username']) ? $temp['username'] : '';
@@ -61,7 +61,7 @@ class list_action extends listform_actions {
 		$rec['bgcolor'] = $this->DataRowColor;
 
 		$database_name = $rec['database_name'];
-		
+
 		if(!empty($monitor_data[$rec['server_id'].'.'.$database_name])){
 			$rec['database'] = $monitor_data[$rec['server_id'].'.'.$database_name]['database_name'];
 			$rec['client'] = $monitor_data[$rec['server_id'].'.'.$database_name]['client'];
@@ -71,7 +71,7 @@ class list_action extends listform_actions {
 			$rec['used'] = $monitor_data[$rec['server_id'].'.'.$database_name]['used'];
 			$rec['quota'] = $monitor_data[$rec['server_id'].'.'.$database_name]['quota'];
 
-			if($rec['quota'] == 0){
+			if($rec['quota'] <= 0){
 				$rec['quota'] = $app->lng('unlimited_txt');
 				$rec['percentage'] = '';
 			} else {
-- 
GitLab


From a64c9c806330edfb0785a193fd2e0cea70d1bbdf Mon Sep 17 00:00:00 2001
From: Xaver Maierhofer <xwissen@xwissen.info>
Date: Fri, 24 Jan 2020 10:19:52 +0100
Subject: [PATCH 214/571] Sort list quota correct

---
 interface/lib/classes/listform_actions.inc.php | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/interface/lib/classes/listform_actions.inc.php b/interface/lib/classes/listform_actions.inc.php
index 4a463fe015..097b41fc0d 100644
--- a/interface/lib/classes/listform_actions.inc.php
+++ b/interface/lib/classes/listform_actions.inc.php
@@ -39,6 +39,7 @@ class listform_actions {
 	private $sortKeys;
 
 	private function _sort($aOne, $aTwo) {
+		$suffixes=array('k' => 1, 'M' => 1024, 'G' => 1048576, 'T' => 1099511627776);
 		if(!is_array($aOne) || !is_array($aTwo)) return 0;
 
 		if(!is_array($this->sortKeys)) $this->sortKeys = array($this->sortKeys);
@@ -49,6 +50,15 @@ class listform_actions {
 			}
 			$a = $aOne[$sKey];
 			$b = $aTwo[$sKey];
+
+			if(preg_match('/(\d+\.?\d*) ([kMGT])B/', $a, $match)) {
+				$a = $match[1] * $suffixes[$match[2]];
+			}
+
+			if(preg_match('/(\d+\.?\d*) ([kMGT])B/', $b, $match)) {
+				$b = $match[1]  * $suffixes[$match[2]];
+			}
+
 			if(is_string($a)) $a = strtolower($a);
 			if(is_string($b)) $b = strtolower($b);
 			if($a < $b) return $sDir == 'DESC' ? 1 : -1;
@@ -129,7 +139,7 @@ class listform_actions {
 
 		// Getting Datasets from DB
 		$records = $app->db->queryAllRecords($this->getQueryString($php_sort));
-		
+
 		$csrf_token = $app->auth->csrf_token_get($app->listform->listDef['name']);
 		$_csrf_id = $csrf_token['csrf_id'];
 		$_csrf_key = $csrf_token['csrf_key'];
-- 
GitLab


From d77fdaa724830384065f1c7dbabf9240b3459b1f Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Fri, 24 Jan 2020 12:29:13 +0100
Subject: [PATCH 215/571] Add conf-custom support for security_settings.ini
 (Fixes #5480)

---
 install/lib/installer_base.lib.php            | 23 +++++--------------
 .../tpl/security_settings.ini.master          |  0
 2 files changed, 6 insertions(+), 17 deletions(-)
 rename security/security_settings.ini => install/tpl/security_settings.ini.master (100%)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 346b62b9ab..e5ac1428d8 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -2478,24 +2478,13 @@ class installer_base {
 		//* copy the ISPConfig security part
 		$command = 'cp -rf ../security '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		//* Apply changed security_settings.ini values to new security_settings.ini file
-		if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) {
-			$security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~'));
-			$security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini'));
-			if(is_array($security_settings_new) && is_array($security_settings_old)) {
-				foreach($security_settings_new as $section => $sval) {
-					if(is_array($sval)) {
-						foreach($sval as $key => $val) {
-							if(isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) {
-								$security_settings_new[$section][$key] = $security_settings_old[$section][$key];
-							}
-						}
-					}
-				}
-				file_put_contents('/usr/local/ispconfig/security/security_settings.ini',array_to_ini($security_settings_new));
-			}
+	
+		$configfile = 'security_settings.ini';
+		if(is_file($install_dir.'/security/'.$configfile)) {
+			copy($install_dir.'/security/'.$configfile, $install_dir.'/security/'.$configfile.'~');
 		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		wf($install_dir.'/security/'.$configfile, $content);	
 
 		//* Create a symlink, so ISPConfig is accessible via web
 		// Replaced by a separate vhost definition for port 8080
diff --git a/security/security_settings.ini b/install/tpl/security_settings.ini.master
similarity index 100%
rename from security/security_settings.ini
rename to install/tpl/security_settings.ini.master
-- 
GitLab


From 8238d0400fd80f57426b875fcfede2731ffddb4d Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Mon, 27 Jan 2020 11:07:13 +0100
Subject: [PATCH 216/571] Workaround to set app_module context to mail, #5448

---
 interface/web/mail/mail_user_edit.php | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 263b98ef31..d291367d11 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -70,6 +70,9 @@ class page_action extends tform_actions {
 	function onShowEnd() {
 		global $app, $conf;
 
+		// Workaround for #5448, accessed via link on quota dashlet.
+		$app->tpl->setVar('app_module', 'mail');
+
 		$email = $this->dataRecord["email"];
 		$email_parts = explode("@", $email);
 		$app->tpl->setVar("email_local_part", $email_parts[0]);
-- 
GitLab


From 080c722a11bded37d6d66d9872a2161d0ec4a25f Mon Sep 17 00:00:00 2001
From: Xaver Maierhofer <xwissen@xwissen.info>
Date: Tue, 28 Jan 2020 10:30:52 +0100
Subject: [PATCH 217/571] Do not index and follow

---
 interface/web/themes/default/templates/main.tpl.htm | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 15aa44e148..0cdd2f89b3 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -8,7 +8,7 @@
   <meta name='viewport' content='width=device-width, user-scalable=yes'>
   <meta name='description' lang='en' content='' />
   <meta name='keywords' lang='en' content='' />
-  <meta name='robots' content='index, follow' />
+  <meta name='robots' content='noindex, nofollow' />
 
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/bootstrap.min.css' />
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/fonts.min.css' />
@@ -123,15 +123,15 @@
   <script>
   <!--
 	//$('.ttip').tipsy({live: true, gravity: 'ne', html: true});
-	
+
 	ISPConfig.tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled">';
 	ISPConfig.tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled">';
 	ISPConfig.tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
 	ISPConfig.tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
-	
+
 	<tmpl_if name="use_loadindicator" value="y">ISPConfig.setOption('useLoadIndicator', true);</tmpl_if>
 	<tmpl_if name="use_combobox" value="y">ISPConfig.setOption('useComboBox', true);</tmpl_if>
-	
+
 	$(document).ready(function() {
 		$('#globalsearch').ispconfigSearch({
 			dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch',
-- 
GitLab


From 34d9a7f9f901c3d0a6ddb59263a77a1a4e46b8db Mon Sep 17 00:00:00 2001
From: Xaver Maierhofer <xwissen@xwissen.info>
Date: Tue, 28 Jan 2020 10:31:36 +0100
Subject: [PATCH 218/571] Search for name in mailbox quota

---
 interface/web/mail/templates/user_quota_stats_list.htm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/mail/templates/user_quota_stats_list.htm b/interface/web/mail/templates/user_quota_stats_list.htm
index 4b4b831aab..99690d6a33 100644
--- a/interface/web/mail/templates/user_quota_stats_list.htm
+++ b/interface/web/mail/templates/user_quota_stats_list.htm
@@ -17,7 +17,7 @@
                     </tr>
                     <tr>
                         <td><input class="form-control" type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
-                        <td><input class="form-control" type="text" name="search_system_user" value="{tmpl_var name='search_name'}" /></td>
+                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
                         <td>&nbsp;</td>
                         <td>&nbsp;</td>
                         <td>&nbsp;</td>
@@ -50,5 +50,5 @@
                 </tfoot>
             </table>
 </div>
-        
+
     </div>
-- 
GitLab


From e6c3be53645de21666a6dd62d04b076fb3252d9d Mon Sep 17 00:00:00 2001
From: Xaver Maierhofer <xwissen@xwissen.info>
Date: Tue, 28 Jan 2020 10:32:41 +0100
Subject: [PATCH 219/571] Fix column sorting foer mailbox quota

---
 interface/web/mail/list/user_quota_stats.list.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/mail/list/user_quota_stats.list.php b/interface/web/mail/list/user_quota_stats.list.php
index e8faae3634..1ba9fc6702 100644
--- a/interface/web/mail/list/user_quota_stats.list.php
+++ b/interface/web/mail/list/user_quota_stats.list.php
@@ -41,7 +41,7 @@ $liste["paging_tpl"]  = "templates/paging.tpl.htm";
 $liste["auth"]    = "yes";
 
 // mark columns for php sorting (no real mySQL columns)
-$liste["phpsort"] = array('used_sort', 'percentage_sort');
+$liste["phpsort"] = array('used', 'percentage');
 
 /*****************************************************
 * Suchfelder
-- 
GitLab


From 25ceb4434f43640bd6ae63427a861f2c5a04e63e Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Fri, 7 Feb 2020 07:09:25 +0100
Subject: [PATCH 220/571] update

---
 interface/lib/classes/listform_actions.inc.php            | 1 +
 .../web/sites/templates/web_vhost_domain_admin_list.htm   | 8 +++++++-
 interface/web/sites/templates/web_vhost_domain_list.htm   | 8 +++++++-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/listform_actions.inc.php b/interface/lib/classes/listform_actions.inc.php
index 097b41fc0d..ccfb91de1f 100644
--- a/interface/lib/classes/listform_actions.inc.php
+++ b/interface/lib/classes/listform_actions.inc.php
@@ -189,6 +189,7 @@ class listform_actions {
 		//* substitute value for select fields
 		if(is_array($app->listform->listDef['item']) && count($app->listform->listDef['item']) > 0) {
 			foreach($app->listform->listDef['item'] as $field) {
+				if($rec['active'] == 'n') $rec['warn_inactive'] = 'y';
 				$key = $field['field'];
 				if(isset($field['formtype']) && $field['formtype'] == 'SELECT') {
 					if(strtolower($rec[$key]) == 'y' or strtolower($rec[$key]) == 'n') {
diff --git a/interface/web/sites/templates/web_vhost_domain_admin_list.htm b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
index 1ab14300d0..ddea17d706 100644
--- a/interface/web/sites/templates/web_vhost_domain_admin_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
@@ -37,8 +37,14 @@
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr>
+						<tr <tmpl_if name="site_error"> class="danger" </tmpl_if> <tmpl_if name="warn_inactive"> class="danger" </tmpl_if> >
                     	<tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain_id"}</a></td></tmpl_if>
+<tmpl_if name="site_error">
+&nbsp;
+<a href="#" data-toggle="tooltip" title="{tmpl_var name="site_error"}">
+<span class="glyphicon glyphicon-warning-sign"></span></a>
+</tmpl_if>
+</a></td></tmpl_if>
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="active"}</a></td>
                         <tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="sys_groupid"}</a></td></tmpl_if>
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="server_id"}</a></td>
diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm
index 105dac9399..8ef06f3151 100644
--- a/interface/web/sites/templates/web_vhost_domain_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_list.htm
@@ -52,8 +52,14 @@
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr>
+					<tr <tmpl_if name="site_error"> class="danger" </tmpl_if> <tmpl_if name="warn_inactive"> class="danger" </tmpl_if> >
                     	<tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain_id"}</a></td></tmpl_if>
+<tmpl_if name="site_error">
+&nbsp;
+<a href="#" data-toggle="tooltip" title="{tmpl_var name="site_error"}">
+<span class="glyphicon glyphicon-warning-sign"></span></a>
+</tmpl_if>
+</a></td></tmpl_if>
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="active"}</a></td>
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
 						<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><a href="#" data-load-content="sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
-- 
GitLab


From ea14e05154352880b0a8b7300f68420bd8570b90 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Fri, 7 Feb 2020 07:11:46 +0100
Subject: [PATCH 221/571] "highlight" inactive web-domains

---
 .../web/sites/templates/web_vhost_domain_admin_list.htm   | 8 +-------
 interface/web/sites/templates/web_vhost_domain_list.htm   | 8 +-------
 2 files changed, 2 insertions(+), 14 deletions(-)

diff --git a/interface/web/sites/templates/web_vhost_domain_admin_list.htm b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
index ddea17d706..9bd98ddada 100644
--- a/interface/web/sites/templates/web_vhost_domain_admin_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
@@ -37,14 +37,8 @@
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-						<tr <tmpl_if name="site_error"> class="danger" </tmpl_if> <tmpl_if name="warn_inactive"> class="danger" </tmpl_if> >
+						<tr <tmpl_if name="warn_inactive"> class="danger" </tmpl_if> >
                     	<tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain_id"}</a></td></tmpl_if>
-<tmpl_if name="site_error">
-&nbsp;
-<a href="#" data-toggle="tooltip" title="{tmpl_var name="site_error"}">
-<span class="glyphicon glyphicon-warning-sign"></span></a>
-</tmpl_if>
-</a></td></tmpl_if>
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="active"}</a></td>
                         <tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="sys_groupid"}</a></td></tmpl_if>
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="server_id"}</a></td>
diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm
index 8ef06f3151..99738858f2 100644
--- a/interface/web/sites/templates/web_vhost_domain_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_list.htm
@@ -52,14 +52,8 @@
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-					<tr <tmpl_if name="site_error"> class="danger" </tmpl_if> <tmpl_if name="warn_inactive"> class="danger" </tmpl_if> >
+					<tr <tmpl_if name="warn_inactive"> class="danger" </tmpl_if> >
                     	<tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain_id"}</a></td></tmpl_if>
-<tmpl_if name="site_error">
-&nbsp;
-<a href="#" data-toggle="tooltip" title="{tmpl_var name="site_error"}">
-<span class="glyphicon glyphicon-warning-sign"></span></a>
-</tmpl_if>
-</a></td></tmpl_if>
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="active"}</a></td>
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
 						<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><a href="#" data-load-content="sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
-- 
GitLab


From e91e34aa3a5f8524e26fdc0988d9020509cff7ea Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Tue, 11 Feb 2020 17:11:52 +0100
Subject: [PATCH 222/571] add check before delete an additional php-version

---
 .../web/admin/lib/lang/de_server_php.lng      |  1 +
 .../web/admin/lib/lang/en_server_php.lng      |  1 +
 interface/web/admin/server_php_del.php        | 36 +++++++++++++++++--
 3 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/lib/lang/de_server_php.lng b/interface/web/admin/lib/lang/de_server_php.lng
index 67dad7064a..4eb9065ba3 100644
--- a/interface/web/admin/lib/lang/de_server_php.lng
+++ b/interface/web/admin/lib/lang/de_server_php.lng
@@ -14,4 +14,5 @@ $wb['php_fpm_init_script_txt'] = 'Pfad zum PHP-FPM Init Script';
 $wb['php_fpm_ini_dir_txt'] = 'Pfad zum php.ini Verzeichnis';
 $wb['php_fpm_pool_dir_txt'] = 'Pfad zum PHP-FPM Pool Verzeichnis';
 $wb['active_txt'] = 'Aktiv';
+$wb['php_in_use_error'] = 'Diese PHP-Version wird noch benutzt.';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_php.lng b/interface/web/admin/lib/lang/en_server_php.lng
index 179a8fc357..6ae160b648 100644
--- a/interface/web/admin/lib/lang/en_server_php.lng
+++ b/interface/web/admin/lib/lang/en_server_php.lng
@@ -14,4 +14,5 @@ $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script';
 $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory';
 $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory';
 $wb['active_txt'] = 'Active';
+$wb['php_in_use_error'] = 'This PHP-Version is in use.';
 ?>
diff --git a/interface/web/admin/server_php_del.php b/interface/web/admin/server_php_del.php
index 6848eea8d4..f160c1b2d9 100644
--- a/interface/web/admin/server_php_del.php
+++ b/interface/web/admin/server_php_del.php
@@ -46,7 +46,39 @@ require_once '../../lib/app.inc.php';
 $app->auth->check_module_permissions('admin');
 $app->auth->check_security_permissions('admin_allow_server_php');
 
-$app->uses("tform_actions");
-$app->tform_actions->onDelete();
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onBeforeDelete() {
+		global $app; $conf;
+
+		$check = array();
+
+		// fastcgi
+		if(!empty(trim($this->dataRecord['php_fastcgi_binary']))) $check[] = trim($this->dataRecord['php_fastcgi_binary']);
+		if(!empty(trim($this->dataRecord['php_fastcgi_ini_dir']))) $check[] = trim($this->dataRecord['php_fastcgi_ini_dir']);
+		if(!empty($check)) $fastcgi_check = implode(':', $check);
+		unset($check);
+
+		// fpm
+		if(!empty(trim($this->dataRecord['php_fpm_init_script']))) $check[] = trim($this->dataRecord['php_fpm_init_script']);
+		if(!empty(trim($this->dataRecord['php_fpm_ini_dir']))) $check[] = trim($this->dataRecord['php_fpm_ini_dir']);
+		if(!empty(trim($this->dataRecord['php_fpm_pool_dir']))) $check[] = trim($this->dataRecord['php_fpm_pool_dir']);
+		if(!empty($check)) $fpm_check = implode(':', $check);
+
+ 		$sql = 'SELECT domain_id FROM web_domain WHERE server_id = ? AND fastcgi_php_version LIKE ?';
+ 		if(isset($fastcgi_check)) $web_domains_fastcgi = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fastcgi_check);
+		if(isset($fpm_check)) $web_domains_fpm = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fpm_check);
+
+		if(!empty($webdomains_fastcgi) || !empty($web_domains_fpm))	$app->error($app->tform->lng('php_in_use_error'));
+
+	}
+
+}
+
+$page = new page_action;
+$page->onDelete();
 
 ?>
-- 
GitLab


From 49499f7cc90f0b82a63c611661af1c818d7bdd94 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Thu, 13 Feb 2020 13:21:04 +0100
Subject: [PATCH 223/571] #4617 dont trigger tab change alert when loading php
 vhost domain config

---
 interface/web/sites/templates/web_vhost_domain_edit.htm | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index 149d430887..8b1bd6e155 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -391,10 +391,6 @@
             }
             if(noFormChange) {
                 ISPConfig.resetFormChanged();
-                jQuery('#php').addClass('no-page-form-change').change();
-                jQuery('#php').removeClass('no-page-form-change');
-            } else {
-                jQuery('#php').change();
             }
         });
     }
-- 
GitLab


From dec8b545a0dadb66fec55eb6945ec940e955f13b Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 18 Feb 2020 20:32:21 +0100
Subject: [PATCH 224/571] Document allow_send_ase and greylisting, #5536

---
 remoting_client/API-docs/mail_alias_add.html    | 2 ++
 remoting_client/API-docs/mail_alias_update.html | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/remoting_client/API-docs/mail_alias_add.html b/remoting_client/API-docs/mail_alias_add.html
index 0e87abd8fc..101d3bfef8 100644
--- a/remoting_client/API-docs/mail_alias_add.html
+++ b/remoting_client/API-docs/mail_alias_add.html
@@ -24,6 +24,8 @@
 <p class="margin"> destination&nbsp;&nbsp;(<span class="paratype">text</span>)</p>
 <p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('alias','aliasdomain','forward','catchall')</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> allow_send_ase&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> greylisting&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="headgrp">Output: </p> 
 <p class="margin"> Returns the ID of the newly added mail alias.</p>
 <!--<b>Output:</b> 
diff --git a/remoting_client/API-docs/mail_alias_update.html b/remoting_client/API-docs/mail_alias_update.html
index 0a2c689074..f4d960a059 100644
--- a/remoting_client/API-docs/mail_alias_update.html
+++ b/remoting_client/API-docs/mail_alias_update.html
@@ -24,6 +24,8 @@
 <p class="margin"> destination&nbsp;&nbsp;(<span class="paratype">text</span>)</p>
 <p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('alias','aliasdomain','forward','catchall')</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> allow_send_ase&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> greylisting&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <b>Output: </b> 
 <p class="margin"> Returns the number of affected rows.</p>
 <!--<b>Output:</b> 
-- 
GitLab


From 7fca6989ca04cb29274e57e5cac811d3ba5c9cc1 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 21 Feb 2020 15:16:01 +0100
Subject: [PATCH 225/571] - fixes #5541

---
 interface/lib/app.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index e341a57943..e817fcbd44 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -356,8 +356,8 @@ class app {
 			$forwarded_host = (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : null );
 			if($forwarded_host !== null && $forwarded_host !== $cookie_domain) {
 				// Just check for complete domain name and not auto subdomains
-				$sql = "SELECT domain_id from web_domain where domain = '$forwarded_host'";
-				$recs = $this->db->queryOneRecord($sql);
+				$sql = "SELECT domain_id from web_domain where domain = ?";
+				$recs = $this->db->queryOneRecord($sql, $forwarded_host);
 				if($recs !== null) {
 					$cookie_domain = $forwarded_host;
 				}
-- 
GitLab


From cf593c7db0254ef82b7a01fee652b8a91720ac08 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Wed, 26 Feb 2020 21:32:11 +0100
Subject: [PATCH 226/571] Show harddisk and database quota dashlet only when
 user has access

---
 interface/lib/classes/auth.inc.php            | 36 ++++++++++++-------
 .../web/dashboard/dashlets/databasequota.php  |  3 ++
 interface/web/dashboard/dashlets/quota.php    |  3 ++
 3 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 2075c7b90d..5daabd50b3 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -141,12 +141,18 @@ class auth {
 		}
 	}
 
-	public function check_module_permissions($module) {
+
+       /**
+        * Check that the user has access to the given module.
+        *
+        * @return boolean
+        */
+       public function verify_module_permissions($module)  {
 		// Check if the current user has the permissions to access this module
 		$module = trim(preg_replace('@\s+@', '', $module));
 		$user_modules = explode(',',$_SESSION["s"]["user"]["modules"]);
+               $can_use_module = false;
 		if(strpos($module, ',') !== false){
-			$can_use_module = false;
 			$tmp_modules = explode(',', $module);
 			if(is_array($tmp_modules) && !empty($tmp_modules)){
 				foreach($tmp_modules as $tmp_module){
@@ -158,17 +164,21 @@ class auth {
 					}
 				}
 			}
-			if(!$can_use_module){
-				// echo "LOGIN_REDIRECT:/index.php";
-				header("Location: /index.php");
-				exit;
-			}
-		} else {
-			if(!in_array($module,$user_modules)) {
-				// echo "LOGIN_REDIRECT:/index.php";
-				header("Location: /index.php");
-				exit;
-			}
+               }
+               elseif(in_array($module,$user_modules)) {
+                       $can_use_module = true;
+               }
+               return $can_use_module;
+       }
+
+       /**
+        * Check that the user has access to the given module, redirect and exit on failure.
+        */
+       public function check_module_permissions($module)  {
+               if(!$this->verify_module_permissions($module)) {
+                       // echo "LOGIN_REDIRECT:/index.php";
+                       header("Location: /index.php");
+                       exit;
 		}
 	}
 	
diff --git a/interface/web/dashboard/dashlets/databasequota.php b/interface/web/dashboard/dashlets/databasequota.php
index 6439cdee12..d8c131702f 100644
--- a/interface/web/dashboard/dashlets/databasequota.php
+++ b/interface/web/dashboard/dashlets/databasequota.php
@@ -7,6 +7,9 @@ class dashlet_databasequota {
 
 		//* Loading Template
 		$app->uses('tpl,quota_lib');
+               if (!$app->auth->verify_module_permissions('sites')) {
+                       return;
+               }
 
 		$tpl = new tpl;
 		$tpl->newTemplate("dashlets/templates/databasequota.htm");
diff --git a/interface/web/dashboard/dashlets/quota.php b/interface/web/dashboard/dashlets/quota.php
index 6ff975b623..dfb82d5c24 100644
--- a/interface/web/dashboard/dashlets/quota.php
+++ b/interface/web/dashboard/dashlets/quota.php
@@ -7,6 +7,9 @@ class dashlet_quota {
 
 		//* Loading Template
 		$app->uses('tpl,quota_lib');
+               if (!$app->auth->verify_module_permissions('sites')) {
+                       return;
+               }
 
 		$tpl = new tpl;
 		$tpl->newTemplate("dashlets/templates/quota.htm");
-- 
GitLab


From 9be213cf0374ef0d5c7aad3a56c80586fc9e71fc Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Wed, 26 Feb 2020 21:55:22 +0100
Subject: [PATCH 227/571] Check permission to the mail instead of the sites
 module

---
 interface/web/mail/backup_stats.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/mail/backup_stats.php b/interface/web/mail/backup_stats.php
index 1317326573..0bf0ceae0b 100644
--- a/interface/web/mail/backup_stats.php
+++ b/interface/web/mail/backup_stats.php
@@ -9,7 +9,7 @@ $list_def_file = 'list/backup_stats.list.php';
 ******************************************/
 
 //* Check permissions for module
-$app->auth->check_module_permissions('sites');
+$app->auth->check_module_permissions('mail');
 
 $app->load('listform_actions','functions');
 
-- 
GitLab


From e82b879172f077f4c36066fa0ac9d98b4ec4d2e1 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Wed, 26 Feb 2020 22:09:45 +0100
Subject: [PATCH 228/571] Check the Backupfunction available setting when
 showing Backup Stats

---
 interface/web/mail/lib/module.conf.php  | 13 +++++++------
 interface/web/sites/lib/module.conf.php | 14 ++++++++------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php
index 6466f614c6..cc100cd7d2 100644
--- a/interface/web/mail/lib/module.conf.php
+++ b/interface/web/mail/lib/module.conf.php
@@ -189,12 +189,13 @@ $items[] = array( 'title'  => 'Mailbox traffic',
 	'target'  => 'content',
 	'link' => 'mail/mail_user_stats.php',
 	'html_id' => 'mail_user_stats');
-$items[] = array (
-    'title'   => 'Backup Stats',
-    'target'  => 'content',
-    'link'    => 'mail/backup_stats.php',
-    'html_id' => 'backup_stats');
-
+if($app->auth->get_client_limit($userid, 'backup') == 'y') {
+        $items[] = array (
+            'title'   => 'Backup Stats',
+            'target'  => 'content',
+            'link'    => 'mail/backup_stats.php',
+            'html_id' => 'backup_stats');
+}
 
 $module['nav'][] = array( 'title' => 'Statistics',
 	'open'  => 1,
diff --git a/interface/web/sites/lib/module.conf.php b/interface/web/sites/lib/module.conf.php
index c37f3b7437..a9aefad967 100644
--- a/interface/web/sites/lib/module.conf.php
+++ b/interface/web/sites/lib/module.conf.php
@@ -209,12 +209,14 @@ $items[] = array(   'title'   => 'Database quota',
 	'link'    => 'sites/database_quota_stats.php',
 	'html_id' => 'databse_quota_stats');
 
-$items[] = array (
-	'title'   => 'Backup Stats',
-	'target'  => 'content',
-	'link'    => 'sites/backup_stats.php',
-	'html_id' => 'backup_stats'
-);
+if($app->auth->get_client_limit($userid, 'backup') == 'y') {
+        $items[] = array (
+                'title'   => 'Backup Stats',
+                'target'  => 'content',
+                'link'    => 'sites/backup_stats.php',
+                'html_id' => 'backup_stats'
+        );
+}
 
 $module['nav'][] = array(   'title' => 'Statistics',
 	'open'  => 1,
-- 
GitLab


From c1dba41d0e20f530742bd851adfb91311fc3ae93 Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Thu, 27 Feb 2020 11:15:35 +0100
Subject: [PATCH 229/571] Relative paths for login-as functionality

---
 interface/web/login/login_as.php                                | 2 +-
 interface/web/login/logout.php                                  | 2 +-
 interface/web/themes/default/assets/javascripts/ispconfig.js    | 2 +-
 .../web/themes/default/assets/javascripts/ispconfig.min.js      | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/interface/web/login/login_as.php b/interface/web/login/login_as.php
index 4c2fb33393..67d5858ff6 100644
--- a/interface/web/login/login_as.php
+++ b/interface/web/login/login_as.php
@@ -96,7 +96,7 @@ echo '
 	<input type="hidden" name="s_pg" value="dashboard" />
 	<input type="hidden" name="login_as" value="1" />
     <div class="wf_actions buttons">
-      <button class="btn btn-default formbutton-success" type="button" value="'.$wb['btn_yes_txt'].'" data-submit-form="pageForm" data-form-action="/login/index.php"><span>'.$wb['btn_yes_txt'].'</span></button>
+      <button class="btn btn-default formbutton-success" type="button" value="'.$wb['btn_yes_txt'].'" data-submit-form="pageForm" data-form-action="login/index.php"><span>'.$wb['btn_yes_txt'].'</span></button>
       <button class="btn btn-default formbutton-default" value="'.$wb['btn_back_txt'].'" data-load-content="'.$backlink.'"><span>'.$wb['btn_back_txt'].'</span></button>
     </div>
 ';
diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php
index dadd871bab..fa60fba632 100644
--- a/interface/web/login/logout.php
+++ b/interface/web/login/logout.php
@@ -54,7 +54,7 @@ if ((isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin'
 		<input type="hidden" name="s_pg" value="index" />
 		<input type="hidden" name="login_as" value="1" />
 	    <div class="wf_actions buttons">
-	      <button class="btn btn-default formbutton-success" type="button" value="Yes, re-login as ' . $utype . '" data-submit-form="pageForm" data-form-action="/login/index.php"><span>Yes, re-login as ' . $utype . '</span></button>
+	      <button class="btn btn-default formbutton-success" type="button" value="Yes, re-login as ' . $utype . '" data-submit-form="pageForm" data-form-action="login/index.php"><span>Yes, re-login as ' . $utype . '</span></button>
 	      <button class="btn btn-default formbutton-default" type="button" value="No, logout" data-load-content="login/logout.php?l=1"><span>No, logout</span></button>
 	    </div>
 	';
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js
index 5f797af328..70e3a903a6 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -172,7 +172,7 @@ var ISPConfig = {
 						ISPConfig.loadContent(parts[1]);
 					} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
 						// Go to the login page
-						document.location.href = '/index.php';
+						document.location.href = './index.php';
 					} else {
 						$('#pageContent').html(jqXHR.responseText);
 						ISPConfig.onAfterContentLoad(target, $('#'+formname).serialize());
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.min.js b/interface/web/themes/default/assets/javascripts/ispconfig.min.js
index 76af49d1dc..e118b994b0 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.min.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.min.js
@@ -1 +1 @@
-var ISPConfig={pageFormChanged:!1,tabChangeWarningTxt:"",tabChangeDiscardTxt:"",tabChangeWarning:!1,tabChangeDiscard:!1,requestsRunning:0,indicatorCompleted:!1,registeredHooks:new Array,new_tpl_add_id:0,dataLogTimer:0,options:{useLoadIndicator:!1,useComboBox:!1},setOption:function(a,b){ISPConfig.options[a]=b},setOptions:function(a){$.extend(ISPConfig.options,a)},reportError:function(){},registerHook:function(a,b){ISPConfig.registeredHooks[a]||(ISPConfig.registeredHooks[a]=new Array);var c=ISPConfig.registeredHooks[a].length;ISPConfig.registeredHooks[a][c]=b},callHook:function(a,b){if(ISPConfig.registeredHooks[a])for(var c=0;c<ISPConfig.registeredHooks[a].length;c++){var d=ISPConfig.registeredHooks[a][c];d(a,b)}},resetFormChanged:function(){ISPConfig.pageFormChanged=!1},showLoadIndicator:function(){if(document.body.style.cursor="wait",1==ISPConfig.options.useLoadIndicator&&(ISPConfig.requestsRunning+=1,ISPConfig.requestsRunning<2)){var a=$("#ajaxloader");a.length<1&&(a=$('<div id="ajaxloader" style="display: none;"></div>'),a.appendTo("body"));var b=$("#content");if(b.length<1)return;ISPConfig.indicatorCompleted=!1;var c=b.offset().left+150,d=b.offset().top+150;a.css({left:c,top:d}).fadeIn("fast",function(){ISPConfig.indicatorCompleted=!0,ISPConfig.requestsRunning<1&&$(this).fadeOut("fast",function(){$(this).hide()})})}},hideLoadIndicator:function(){document.body.style.cursor="",ISPConfig.requestsRunning-=1,ISPConfig.requestsRunning<1&&(ISPConfig.requestsRunning=0,1==ISPConfig.indicatorCompleted&&$("#ajaxloader").fadeOut("fast",function(){$("#ajaxloader").hide()}))},onAfterSideNavLoaded:function(){1==ISPConfig.options.useComboBox&&$("#sidebar").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:!0,allowClear:!0})},onAfterContentLoad:function(a,b){b=b?"&"+b:"",1==ISPConfig.options.useComboBox&&$("#pageContent").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:!0,allowClear:!0,formatResult:function(a){return a.id&&$(a.element).parent().hasClass("flags")?'<span class="flags flag-'+a.id.toLowerCase()+'">'+a.text+"</span>":a.text},formatSelection:function(a){return a.id&&$(a.element).parent().hasClass("flags")?'<span class="flags flag-'+a.id.toLowerCase()+'">'+a.text+"</span>":a.text}}).on("change",function(){$("#pageForm .table #Filter").length>0&&$("#pageForm .table #Filter").trigger("click")}),$('input[data-input-element="date"]').datetimepicker({language:"en",todayHighlight:!0,todayBtn:"linked",bootcssVer:3,fontAwesome:!0,autoclose:!0,minView:"month"}),$('input[data-input-element="datetime"]').datetimepicker({language:"en",todayHighlight:!0,todayBtn:"linked",bootcssVer:3,fontAwesome:!0,autoclose:!0}),$('[data-toggle="tooltip"]').tooltip({}),$('input[type="password"]').each(function(){$(this).prop("readonly",!0).tooltip({title:"Click to set",placement:"left"})}),$('input[type="password"]').on("click focus",function(){$(this).prop("readonly",!1),$(this).tooltip("destroy")}),ISPConfig.callHook("onAfterContentLoad",{url:a,data:b})},submitForm:function(a,b,c){var d=arguments[3];if(c||(c=!1),!c||window.confirm(c)){$.ajax({type:"POST",url:b,data:$("#"+a).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,e,f){if(d&&alert(d),f.responseText.indexOf("HEADER_REDIRECT:")>-1){var g=f.responseText.split(":");ISPConfig.loadContent(g[1])}else f.responseText.indexOf("LOGIN_REDIRECT:")>-1?document.location.href="/index.php":($("#pageContent").html(f.responseText),ISPConfig.onAfterContentLoad(b,$("#"+a).serialize()),ISPConfig.pageFormChanged=!1);clearTimeout(dataLogTimer),ISPConfig.dataLogNotification(),ISPConfig.hideLoadIndicator()},error:function(a){ISPConfig.hideLoadIndicator();a.responseText.split(":");ISPConfig.reportError("Ajax Request was not successful. 111")}})}},submitUploadForm:function(a,b){var c=function(a){var b,c=a.contentWindow.document.body.innerHTML;try{b=JSON.parse(c)}catch(d){b=c}var e=$("<div></div>").html(b),f="",g=e.find("#OKMsg").html();g&&(f='<div id="OKMsg">'+g+"</div>");var h=e.find("#errorMsg").html();h&&(f=f+'<div id="errorMsg">'+h+"</div>");var i=e.find('input[name="_csrf_key"]').val(),j=e.find('input[name="_csrf_id"]').val();return f=f+'<input type="hidden" name="_csrf_id" value="'+j+'" /><input type="hidden" name="_csrf_key" value="'+i+'" />'},d="ajaxUploader-iframe-"+Math.round((new Date).getTime()/1e3);$("body").append('<iframe width="0" height="0" style="display:none;" name="'+d+'" id="'+d+'"/>'),$("#"+d).load(function(){var a=c(this);$("#errorMsg").remove(),$("#OKMsg").remove(),$('input[name="_csrf_key"]').remove(),$('input[name="_csrf_id"]').remove(),$('input[name="id"]').before(a),$(this).remove()}),$('input[type="file"]').closest("form").attr({target:d,action:b}).submit()},capp:function(a,b){$.ajax({type:"GET",url:"capp.php",data:"mod="+a+(void 0!=b?"&redirect="+b:""),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){if(""!=c.responseText)if(c.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=c.responseText.split(":");ISPConfig.loadContent(d[1])}else if(c.responseText.indexOf("URL_REDIRECT:")>-1){var e=c.responseText.substr(c.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=e}ISPConfig.loadMenus(),ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful."+a)}})},loadContent:function(a){{var b=arguments[1];$.ajax({type:"GET",url:a,data:b?b:null,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,d,e){if(e.responseText.indexOf("HEADER_REDIRECT:")>-1){var f=e.responseText.split(":");ISPConfig.loadContent(f[1])}else if(e.responseText.indexOf("URL_REDIRECT:")>-1){var g=e.responseText.substr(e.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=g}else $("#pageContent").html(e.responseText),ISPConfig.onAfterContentLoad(a,b?b:null),ISPConfig.pageFormChanged=!1;clearTimeout(dataLogTimer),ISPConfig.dataLogNotification(),ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 113")}})}},loadContentRefresh:function(a){if($("#refreshinterval").val()>0){{$.ajax({type:"GET",url:a,data:"refresh="+document.getElementById("refreshinterval").value,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(b,c,d){ISPConfig.hideLoadIndicator(),$("#pageContent").html(d.responseText),ISPConfig.onAfterContentLoad(a,"refresh="+document.getElementById("refreshinterval").value),ISPConfig.pageFormChanged=!1},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful."+a)}})}setTimeout("ISPConfig.loadContentRefresh('"+a+"&refresh="+document.getElementById("refreshinterval").value+"')",1e3*document.getElementById("refreshinterval").value*60)}},loadInitContent:function(){var a=$("#pageContent").attr("data-startpage");a||(a="dashboard/dashboard.php");$.ajax({type:"GET",url:a,data:"",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){if(c.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=c.responseText.split(":");ISPConfig.loadContent(d[1])}else $("#pageContent").html(c.responseText),ISPConfig.onAfterContentLoad("dashboard/dashboard.php",""),ISPConfig.pageFormChanged=!1;ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 114")}});ISPConfig.loadMenus(),ISPConfig.keepalive(),ISPConfig.dataLogNotification(),setTimeout(function(){try{$("form#pageForm").find('input[name="username"]').focus()}catch(a){}},1e3)},loadMenus:function(){$.ajax({type:"GET",url:"nav.php",data:"nav=side",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){ISPConfig.hideLoadIndicator(),$("#sidebar").html(c.responseText),ISPConfig.onAfterSideNavLoaded(),ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 115")}}),$.ajax({type:"GET",url:"nav.php",data:"nav=top",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){ISPConfig.hideLoadIndicator(),$("#topnav-container").html(c.responseText),ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 116")}})},changeTab:function(a,b,c){if(ISPConfig.requestsRunning>0)return console.log("tab change interrupted, request still running."),!1;document.pageForm.next_tab.value=a;var d=$("form#pageForm").find('[name="id"]'),e=null;if(d.length>0&&(e=d.val()),"y"!=ISPConfig.tabChangeDiscard||c)if(e&&"y"==ISPConfig.tabChangeWarning&&1==ISPConfig.pageFormChanged)if(window.confirm(ISPConfig.tabChangeWarningTxt))ISPConfig.submitForm("pageForm",b);else{var f=a;e?ISPConfig.loadContent(b,{next_tab:f,id:e}):ISPConfig.loadContent(b,{next_tab:f})}else ISPConfig.submitForm("pageForm",b);else{if(!(d.length<1||e)||0!=ISPConfig.pageFormChanged&&!window.confirm(ISPConfig.tabChangeDiscardTxt))return!1;var f=a;e?ISPConfig.loadContent(b,{next_tab:f,id:e}):ISPConfig.loadContent(b,{next_tab:f})}},confirm_action:function(a,b){window.confirm(b)&&ISPConfig.loadContent(a)},loadContentInto:function(a,b){$.ajax({type:"GET",url:b,dataType:"html",beforeSend:function(){},success:function(b,c,d){$("#"+a).html(d.responseText)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 118")}})},loadOptionInto:function(a,b,c){$.ajax({type:"GET",url:b,dataType:"html",beforeSend:function(){},success:function(d,e,f){var g=f.responseText,h=g.split("#");el=document.getElementById(a),el.innerHTML="";for(var i=0;i<h.length;++i){var j=document.createElement("option");j.appendChild(document.createTextNode(h[i])),j.value=h[i],el.appendChild(j)}"undefined"!=typeof c&&c(a,b)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 119")}})},keepalive:function(){$.ajax({type:"GET",url:"keepalive.php",dataType:"html",success:function(){setTimeout(function(){ISPConfig.keepalive()},1e6)},error:function(){ISPConfig.reportError("Session expired. Please login again.")}})},dataLogNotification:function(){console.log(ISPConfig.options);$.ajax({type:"GET",url:"datalogstatus.php",dataType:"json",success:function(a){var d=[];$.each(a.entries,function(a,b){d.push("<li><strong>"+b.text+":</strong> "+b.count+"</li>")}),a.count>0?($(".modal-body").html(d.join("")),$(".notification_text").text(a.count),$(".notification").css("display",""),dataLogTimer=setTimeout(function(){ISPConfig.dataLogNotification()},2e3)):($(".notification").css("display","none"),$(".modal-body").html(""),$("#datalogModal").modal("hide"),dataLogTimer=setTimeout(function(){ISPConfig.dataLogNotification()},5e3))},error:function(){ISPConfig.reportError("Notification not loading, aborting."),$(".notification").css("display","none")}})},addAdditionalTemplate:function(){var a=$("#template_additional").val(),b=$("#tpl_add_select").val().split("|",2),c=b[0],d=b[1];if(c>0){var e=a.split("/");ISPConfig.new_tpl_add_id+=1;var f=$('<a href="#"><span class="glyphicon glyphicon-remove-circle" aria-hidden="true"></span></a>').attr("class","btn btn-danger btn-xs").click(function(a){a.preventDefault(),ISPConfig.delAdditionalTemplate($(this).parent().attr("rel"))});e[e.length]="n"+ISPConfig.new_tpl_add_id+":"+c,$("<li>"+d+"</li>").attr("rel","n"+ISPConfig.new_tpl_add_id).append(f).appendTo("#template_additional_list ul"),$("#template_additional").val(e.join("/")),alert("additional template "+d+" added to customer")}else alert("no additional template selcted")},delAdditionalTemplate:function(a){var b=$("#template_additional").val();if(a){var c=$("#template_additional_list ul").find('li[rel="'+a+'"]').eq(0),d=c.text();c.remove();for(var e=b.split("/"),f=new Array,g=0;g<e.length;g++){var h=e[g].split(":",2);(2!=h.length||h[0]!=a)&&(f[f.length]=e[g])}$("#template_additional").val(f.join("/")),alert("additional template "+d+" deleted from customer")}else if(""!=b){var i=document.getElementById("tpl_add_select").value.split("|",2),j=i[0],d=i[1];$("#template_additional_list ul").find("li:not([rel])").each(function(){var a=$(this).text();return a==d?($(this).remove(),!1):this});var f=b,k=new RegExp("(^|/)"+j+"(/|$)");f=f.replace(k,""),f=f.replace("//","/"),$("#template_additional").val(f),alert("additional template "+d+" deleted from customer")}else alert("no additional template selcted")}};$(document).on("change",function(a){var b=a.target.localName;$("#pageForm .table #Filter").length>0&&"select"==b&&(a.preventDefault(),$("#pageForm .table #Filter").trigger("click")),("select"==b||"input"==b||"textarea"==b)&&0==$(a.target).hasClass("no-page-form-change")&&(ISPConfig.pageFormChanged=!0)});var $page=$("html, body");$(document).on("click","a[data-load-content],button[data-load-content]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this).attr("data-load-content");return b?void ISPConfig.loadContent(b):this}),$(document).on("click","a[data-capp],button[data-capp]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this).attr("data-capp");return b?void ISPConfig.capp(b):this}),$(document).on("click","a[data-submit-form],button[data-submit-form]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this),c=b.attr("data-form-action"),d=b.attr("data-submit-form");"true"==b.attr("data-form-upload")?ISPConfig.submitUploadForm(d,c):ISPConfig.submitForm(d,c)}),$(document).bind("keypress",function(a){"13"==a.which&&$("#pageForm .table #Filter").length>0&&0==$(a.target).hasClass("ui-autocomplete-input")&&(a.preventDefault(),$("#pageForm .table #Filter").trigger("click")),"13"==a.which&&$(".tab-content button.formbutton-success").length>0&&"textarea"!=a.target.localName&&$(a.target).is(":input")&&(a.preventDefault(),$(".tab-content button.formbutton-success").not("[disabled='disabled']").trigger("click"))}),$(document).on("click","th[data-column]",function(){var b=$(this),c=b.attr("data-column");if(!c)return this;if($("#pageForm .table #Filter").length>0&&"false"!=b.attr("data-sortable")){var d=$("#Filter"),e=d.attr("data-form-action"),f=d.attr("data-submit-form"),g=b.attr("data-ordered"),h="?";e.indexOf("?")>=0&&(h="&"),e=e+h+"orderby="+c,ISPConfig.submitForm(f,e),$(document).ajaxComplete(function(){var a=$('#pageForm .table th[data-column="'+c+'"]');a.parent().children("th[data-column]").removeAttr("data-ordered"),g&&"asc"==g?a.attr("data-ordered","desc"):a.attr("data-ordered","asc")})}}),$(document).on("click",".addPlaceholder",function(){var a=$(this).text(),b=$(this).siblings(":input");b.insertAtCaret(a)}),$(document).on("click",".addPlaceholderContent",function(){var a=$(this).find(".addPlaceholderContent").text(),b=$(this).siblings(":input");b.insertAtCaret(a)}),$(document).on("click","[data-check-fields] > input[type='checkbox']",function(){if($(this).is(":checked"))for(var a=$(this).parent().attr("data-check-fields"),b=a.split(/,/),c=0;c<b.length;c++){var d=b[c];$('input[type="checkbox"][name="'+d+'"]').prop("checked",!0)}}),$(document).on("click","[data-uncheck-fields] > input[type='checkbox']",function(){if(0==$(this).is(":checked"))for(var a=$(this).parent().attr("data-uncheck-fields"),b=a.split(/,/),c=0;c<b.length;c++){var d=b[c];$('input[type="checkbox"][name="'+d+'"]').prop("checked",!1)}}),$(document).on("ready",function(){$.fn.extend({insertAtCaret:function(a){return this.each(function(){if(document.selection)this.focus(),sel=document.selection.createRange(),sel.text=a,this.focus();else if(this.selectionStart||"0"==this.selectionStart){var c=this.selectionStart,d=this.selectionEnd,e=this.scrollTop;this.value=this.value.substring(0,c)+a+this.value.substring(d,this.value.length),this.focus(),this.selectionStart=c+a.length,this.selectionEnd=c+a.length,this.scrollTop=e}else this.value+=a,this.focus()})}}),$(".progress .progress-bar").css("width",function(){return $(this).attr("aria-valuenow")+"%"}),ISPConfig.loadInitContent(),$("#searchform").submit(function(a){a.preventDefault()}),$("#pageForm").submit(function(a){$("#pageForm .table #Filter").length>0&&a.preventDefault()}),$.fn.setCursorPosition=function(a){var b=$(this).get(0);if(b.setSelectionRange)b.setSelectionRange(a,a);else if(b.createTextRange){var c=b.createTextRange();c.collapse(!0),a<0&&(a=$(this).val().length+a),c.moveEnd("character",a),c.moveStart("character",a),c.select()}},$.fn.getCursorPosition=function(){var a=0,b=$(this).get(0);if("number"===typeof b.selectionStart)a="backward"==b.selectionDirection?b.selectionStart:b.selectionEnd;else if(document.selection){this.focus();var c=document.selection.createRange();c.moveStart("character",-b.value.length),a=c.text.length}return a}});
\ No newline at end of file
+var ISPConfig={pageFormChanged:!1,tabChangeWarningTxt:"",tabChangeDiscardTxt:"",tabChangeWarning:!1,tabChangeDiscard:!1,requestsRunning:0,indicatorCompleted:!1,registeredHooks:new Array,new_tpl_add_id:0,dataLogTimer:0,options:{useLoadIndicator:!1,useComboBox:!1},setOption:function(a,b){ISPConfig.options[a]=b},setOptions:function(a){$.extend(ISPConfig.options,a)},reportError:function(){},registerHook:function(a,b){ISPConfig.registeredHooks[a]||(ISPConfig.registeredHooks[a]=new Array);var c=ISPConfig.registeredHooks[a].length;ISPConfig.registeredHooks[a][c]=b},callHook:function(a,b){if(ISPConfig.registeredHooks[a])for(var c=0;c<ISPConfig.registeredHooks[a].length;c++){var d=ISPConfig.registeredHooks[a][c];d(a,b)}},resetFormChanged:function(){ISPConfig.pageFormChanged=!1},showLoadIndicator:function(){if(document.body.style.cursor="wait",1==ISPConfig.options.useLoadIndicator&&(ISPConfig.requestsRunning+=1,ISPConfig.requestsRunning<2)){var a=$("#ajaxloader");a.length<1&&(a=$('<div id="ajaxloader" style="display: none;"></div>'),a.appendTo("body"));var b=$("#content");if(b.length<1)return;ISPConfig.indicatorCompleted=!1;var c=b.offset().left+150,d=b.offset().top+150;a.css({left:c,top:d}).fadeIn("fast",function(){ISPConfig.indicatorCompleted=!0,ISPConfig.requestsRunning<1&&$(this).fadeOut("fast",function(){$(this).hide()})})}},hideLoadIndicator:function(){document.body.style.cursor="",ISPConfig.requestsRunning-=1,ISPConfig.requestsRunning<1&&(ISPConfig.requestsRunning=0,1==ISPConfig.indicatorCompleted&&$("#ajaxloader").fadeOut("fast",function(){$("#ajaxloader").hide()}))},onAfterSideNavLoaded:function(){1==ISPConfig.options.useComboBox&&$("#sidebar").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:!0,allowClear:!0})},onAfterContentLoad:function(a,b){b=b?"&"+b:"",1==ISPConfig.options.useComboBox&&$("#pageContent").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:!0,allowClear:!0,formatResult:function(a){return a.id&&$(a.element).parent().hasClass("flags")?'<span class="flags flag-'+a.id.toLowerCase()+'">'+a.text+"</span>":a.text},formatSelection:function(a){return a.id&&$(a.element).parent().hasClass("flags")?'<span class="flags flag-'+a.id.toLowerCase()+'">'+a.text+"</span>":a.text}}).on("change",function(){$("#pageForm .table #Filter").length>0&&$("#pageForm .table #Filter").trigger("click")}),$('input[data-input-element="date"]').datetimepicker({language:"en",todayHighlight:!0,todayBtn:"linked",bootcssVer:3,fontAwesome:!0,autoclose:!0,minView:"month"}),$('input[data-input-element="datetime"]').datetimepicker({language:"en",todayHighlight:!0,todayBtn:"linked",bootcssVer:3,fontAwesome:!0,autoclose:!0}),$('[data-toggle="tooltip"]').tooltip({}),$('input[type="password"]').each(function(){$(this).prop("readonly",!0).tooltip({title:"Click to set",placement:"left"})}),$('input[type="password"]').on("click focus",function(){$(this).prop("readonly",!1),$(this).tooltip("destroy")}),ISPConfig.callHook("onAfterContentLoad",{url:a,data:b})},submitForm:function(a,b,c){var d=arguments[3];if(c||(c=!1),!c||window.confirm(c)){$.ajax({type:"POST",url:b,data:$("#"+a).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,e,f){if(d&&alert(d),f.responseText.indexOf("HEADER_REDIRECT:")>-1){var g=f.responseText.split(":");ISPConfig.loadContent(g[1])}else f.responseText.indexOf("LOGIN_REDIRECT:")>-1?document.location.href="./index.php":($("#pageContent").html(f.responseText),ISPConfig.onAfterContentLoad(b,$("#"+a).serialize()),ISPConfig.pageFormChanged=!1);clearTimeout(dataLogTimer),ISPConfig.dataLogNotification(),ISPConfig.hideLoadIndicator()},error:function(a){ISPConfig.hideLoadIndicator();a.responseText.split(":");ISPConfig.reportError("Ajax Request was not successful. 111")}})}},submitUploadForm:function(a,b){var c=function(a){var b,c=a.contentWindow.document.body.innerHTML;try{b=JSON.parse(c)}catch(d){b=c}var e=$("<div></div>").html(b),f="",g=e.find("#OKMsg").html();g&&(f='<div id="OKMsg">'+g+"</div>");var h=e.find("#errorMsg").html();h&&(f=f+'<div id="errorMsg">'+h+"</div>");var i=e.find('input[name="_csrf_key"]').val(),j=e.find('input[name="_csrf_id"]').val();return f=f+'<input type="hidden" name="_csrf_id" value="'+j+'" /><input type="hidden" name="_csrf_key" value="'+i+'" />'},d="ajaxUploader-iframe-"+Math.round((new Date).getTime()/1e3);$("body").append('<iframe width="0" height="0" style="display:none;" name="'+d+'" id="'+d+'"/>'),$("#"+d).load(function(){var a=c(this);$("#errorMsg").remove(),$("#OKMsg").remove(),$('input[name="_csrf_key"]').remove(),$('input[name="_csrf_id"]').remove(),$('input[name="id"]').before(a),$(this).remove()}),$('input[type="file"]').closest("form").attr({target:d,action:b}).submit()},capp:function(a,b){$.ajax({type:"GET",url:"capp.php",data:"mod="+a+(void 0!=b?"&redirect="+b:""),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){if(""!=c.responseText)if(c.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=c.responseText.split(":");ISPConfig.loadContent(d[1])}else if(c.responseText.indexOf("URL_REDIRECT:")>-1){var e=c.responseText.substr(c.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=e}ISPConfig.loadMenus(),ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful."+a)}})},loadContent:function(a){{var b=arguments[1];$.ajax({type:"GET",url:a,data:b?b:null,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,d,e){if(e.responseText.indexOf("HEADER_REDIRECT:")>-1){var f=e.responseText.split(":");ISPConfig.loadContent(f[1])}else if(e.responseText.indexOf("URL_REDIRECT:")>-1){var g=e.responseText.substr(e.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=g}else $("#pageContent").html(e.responseText),ISPConfig.onAfterContentLoad(a,b?b:null),ISPConfig.pageFormChanged=!1;clearTimeout(dataLogTimer),ISPConfig.dataLogNotification(),ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 113")}})}},loadContentRefresh:function(a){if($("#refreshinterval").val()>0){{$.ajax({type:"GET",url:a,data:"refresh="+document.getElementById("refreshinterval").value,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(b,c,d){ISPConfig.hideLoadIndicator(),$("#pageContent").html(d.responseText),ISPConfig.onAfterContentLoad(a,"refresh="+document.getElementById("refreshinterval").value),ISPConfig.pageFormChanged=!1},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful."+a)}})}setTimeout("ISPConfig.loadContentRefresh('"+a+"&refresh="+document.getElementById("refreshinterval").value+"')",1e3*document.getElementById("refreshinterval").value*60)}},loadInitContent:function(){var a=$("#pageContent").attr("data-startpage");a||(a="dashboard/dashboard.php");$.ajax({type:"GET",url:a,data:"",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){if(c.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=c.responseText.split(":");ISPConfig.loadContent(d[1])}else $("#pageContent").html(c.responseText),ISPConfig.onAfterContentLoad("dashboard/dashboard.php",""),ISPConfig.pageFormChanged=!1;ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 114")}});ISPConfig.loadMenus(),ISPConfig.keepalive(),ISPConfig.dataLogNotification(),setTimeout(function(){try{$("form#pageForm").find('input[name="username"]').focus()}catch(a){}},1e3)},loadMenus:function(){$.ajax({type:"GET",url:"nav.php",data:"nav=side",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){ISPConfig.hideLoadIndicator(),$("#sidebar").html(c.responseText),ISPConfig.onAfterSideNavLoaded(),ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 115")}}),$.ajax({type:"GET",url:"nav.php",data:"nav=top",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){ISPConfig.hideLoadIndicator(),$("#topnav-container").html(c.responseText),ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 116")}})},changeTab:function(a,b,c){if(ISPConfig.requestsRunning>0)return console.log("tab change interrupted, request still running."),!1;document.pageForm.next_tab.value=a;var d=$("form#pageForm").find('[name="id"]'),e=null;if(d.length>0&&(e=d.val()),"y"!=ISPConfig.tabChangeDiscard||c)if(e&&"y"==ISPConfig.tabChangeWarning&&1==ISPConfig.pageFormChanged)if(window.confirm(ISPConfig.tabChangeWarningTxt))ISPConfig.submitForm("pageForm",b);else{var f=a;e?ISPConfig.loadContent(b,{next_tab:f,id:e}):ISPConfig.loadContent(b,{next_tab:f})}else ISPConfig.submitForm("pageForm",b);else{if(!(d.length<1||e)||0!=ISPConfig.pageFormChanged&&!window.confirm(ISPConfig.tabChangeDiscardTxt))return!1;var f=a;e?ISPConfig.loadContent(b,{next_tab:f,id:e}):ISPConfig.loadContent(b,{next_tab:f})}},confirm_action:function(a,b){window.confirm(b)&&ISPConfig.loadContent(a)},loadContentInto:function(a,b){$.ajax({type:"GET",url:b,dataType:"html",beforeSend:function(){},success:function(b,c,d){$("#"+a).html(d.responseText)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 118")}})},loadOptionInto:function(a,b,c){$.ajax({type:"GET",url:b,dataType:"html",beforeSend:function(){},success:function(d,e,f){var g=f.responseText,h=g.split("#");el=document.getElementById(a),el.innerHTML="";for(var i=0;i<h.length;++i){var j=document.createElement("option");j.appendChild(document.createTextNode(h[i])),j.value=h[i],el.appendChild(j)}"undefined"!=typeof c&&c(a,b)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 119")}})},keepalive:function(){$.ajax({type:"GET",url:"keepalive.php",dataType:"html",success:function(){setTimeout(function(){ISPConfig.keepalive()},1e6)},error:function(){ISPConfig.reportError("Session expired. Please login again.")}})},dataLogNotification:function(){console.log(ISPConfig.options);$.ajax({type:"GET",url:"datalogstatus.php",dataType:"json",success:function(a){var d=[];$.each(a.entries,function(a,b){d.push("<li><strong>"+b.text+":</strong> "+b.count+"</li>")}),a.count>0?($(".modal-body").html(d.join("")),$(".notification_text").text(a.count),$(".notification").css("display",""),dataLogTimer=setTimeout(function(){ISPConfig.dataLogNotification()},2e3)):($(".notification").css("display","none"),$(".modal-body").html(""),$("#datalogModal").modal("hide"),dataLogTimer=setTimeout(function(){ISPConfig.dataLogNotification()},5e3))},error:function(){ISPConfig.reportError("Notification not loading, aborting."),$(".notification").css("display","none")}})},addAdditionalTemplate:function(){var a=$("#template_additional").val(),b=$("#tpl_add_select").val().split("|",2),c=b[0],d=b[1];if(c>0){var e=a.split("/");ISPConfig.new_tpl_add_id+=1;var f=$('<a href="#"><span class="glyphicon glyphicon-remove-circle" aria-hidden="true"></span></a>').attr("class","btn btn-danger btn-xs").click(function(a){a.preventDefault(),ISPConfig.delAdditionalTemplate($(this).parent().attr("rel"))});e[e.length]="n"+ISPConfig.new_tpl_add_id+":"+c,$("<li>"+d+"</li>").attr("rel","n"+ISPConfig.new_tpl_add_id).append(f).appendTo("#template_additional_list ul"),$("#template_additional").val(e.join("/")),alert("additional template "+d+" added to customer")}else alert("no additional template selcted")},delAdditionalTemplate:function(a){var b=$("#template_additional").val();if(a){var c=$("#template_additional_list ul").find('li[rel="'+a+'"]').eq(0),d=c.text();c.remove();for(var e=b.split("/"),f=new Array,g=0;g<e.length;g++){var h=e[g].split(":",2);(2!=h.length||h[0]!=a)&&(f[f.length]=e[g])}$("#template_additional").val(f.join("/")),alert("additional template "+d+" deleted from customer")}else if(""!=b){var i=document.getElementById("tpl_add_select").value.split("|",2),j=i[0],d=i[1];$("#template_additional_list ul").find("li:not([rel])").each(function(){var a=$(this).text();return a==d?($(this).remove(),!1):this});var f=b,k=new RegExp("(^|/)"+j+"(/|$)");f=f.replace(k,""),f=f.replace("//","/"),$("#template_additional").val(f),alert("additional template "+d+" deleted from customer")}else alert("no additional template selcted")}};$(document).on("change",function(a){var b=a.target.localName;$("#pageForm .table #Filter").length>0&&"select"==b&&(a.preventDefault(),$("#pageForm .table #Filter").trigger("click")),("select"==b||"input"==b||"textarea"==b)&&0==$(a.target).hasClass("no-page-form-change")&&(ISPConfig.pageFormChanged=!0)});var $page=$("html, body");$(document).on("click","a[data-load-content],button[data-load-content]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this).attr("data-load-content");return b?void ISPConfig.loadContent(b):this}),$(document).on("click","a[data-capp],button[data-capp]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this).attr("data-capp");return b?void ISPConfig.capp(b):this}),$(document).on("click","a[data-submit-form],button[data-submit-form]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this),c=b.attr("data-form-action"),d=b.attr("data-submit-form");"true"==b.attr("data-form-upload")?ISPConfig.submitUploadForm(d,c):ISPConfig.submitForm(d,c)}),$(document).bind("keypress",function(a){"13"==a.which&&$("#pageForm .table #Filter").length>0&&0==$(a.target).hasClass("ui-autocomplete-input")&&(a.preventDefault(),$("#pageForm .table #Filter").trigger("click")),"13"==a.which&&$(".tab-content button.formbutton-success").length>0&&"textarea"!=a.target.localName&&$(a.target).is(":input")&&(a.preventDefault(),$(".tab-content button.formbutton-success").not("[disabled='disabled']").trigger("click"))}),$(document).on("click","th[data-column]",function(){var b=$(this),c=b.attr("data-column");if(!c)return this;if($("#pageForm .table #Filter").length>0&&"false"!=b.attr("data-sortable")){var d=$("#Filter"),e=d.attr("data-form-action"),f=d.attr("data-submit-form"),g=b.attr("data-ordered"),h="?";e.indexOf("?")>=0&&(h="&"),e=e+h+"orderby="+c,ISPConfig.submitForm(f,e),$(document).ajaxComplete(function(){var a=$('#pageForm .table th[data-column="'+c+'"]');a.parent().children("th[data-column]").removeAttr("data-ordered"),g&&"asc"==g?a.attr("data-ordered","desc"):a.attr("data-ordered","asc")})}}),$(document).on("click",".addPlaceholder",function(){var a=$(this).text(),b=$(this).siblings(":input");b.insertAtCaret(a)}),$(document).on("click",".addPlaceholderContent",function(){var a=$(this).find(".addPlaceholderContent").text(),b=$(this).siblings(":input");b.insertAtCaret(a)}),$(document).on("click","[data-check-fields] > input[type='checkbox']",function(){if($(this).is(":checked"))for(var a=$(this).parent().attr("data-check-fields"),b=a.split(/,/),c=0;c<b.length;c++){var d=b[c];$('input[type="checkbox"][name="'+d+'"]').prop("checked",!0)}}),$(document).on("click","[data-uncheck-fields] > input[type='checkbox']",function(){if(0==$(this).is(":checked"))for(var a=$(this).parent().attr("data-uncheck-fields"),b=a.split(/,/),c=0;c<b.length;c++){var d=b[c];$('input[type="checkbox"][name="'+d+'"]').prop("checked",!1)}}),$(document).on("ready",function(){$.fn.extend({insertAtCaret:function(a){return this.each(function(){if(document.selection)this.focus(),sel=document.selection.createRange(),sel.text=a,this.focus();else if(this.selectionStart||"0"==this.selectionStart){var c=this.selectionStart,d=this.selectionEnd,e=this.scrollTop;this.value=this.value.substring(0,c)+a+this.value.substring(d,this.value.length),this.focus(),this.selectionStart=c+a.length,this.selectionEnd=c+a.length,this.scrollTop=e}else this.value+=a,this.focus()})}}),$(".progress .progress-bar").css("width",function(){return $(this).attr("aria-valuenow")+"%"}),ISPConfig.loadInitContent(),$("#searchform").submit(function(a){a.preventDefault()}),$("#pageForm").submit(function(a){$("#pageForm .table #Filter").length>0&&a.preventDefault()}),$.fn.setCursorPosition=function(a){var b=$(this).get(0);if(b.setSelectionRange)b.setSelectionRange(a,a);else if(b.createTextRange){var c=b.createTextRange();c.collapse(!0),a<0&&(a=$(this).val().length+a),c.moveEnd("character",a),c.moveStart("character",a),c.select()}},$.fn.getCursorPosition=function(){var a=0,b=$(this).get(0);if("number"===typeof b.selectionStart)a="backward"==b.selectionDirection?b.selectionStart:b.selectionEnd;else if(document.selection){this.focus();var c=document.selection.createRange();c.moveStart("character",-b.value.length),a=c.text.length}return a}});
\ No newline at end of file
-- 
GitLab


From 9735af1965c849160b9425ef3507810f8c4b5bbd Mon Sep 17 00:00:00 2001
From: Xaver Maierhofer <xwissen@xwissen.info>
Date: Thu, 27 Feb 2020 11:19:06 +0100
Subject: [PATCH 230/571] Switch to recommanded CI container

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 736fbc3083..2ee654e1f2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,7 +8,7 @@ stages:
 
 syntax:lint:
   stage: syntax
-  image: bobey/docker-gitlab-ci-runner-php7
+  image: edbizarro/gitlab-ci-pipeline-php:7.2
   allow_failure: false
   only:
     - schedules
-- 
GitLab


From 51309b175a675bd5472e49f74e4ee3cc5bfe50d8 Mon Sep 17 00:00:00 2001
From: Xaver Maierhofer <xwissen@xwissen.info>
Date: Thu, 27 Feb 2020 11:20:54 +0100
Subject: [PATCH 231/571] Add favicon, app, color & tile

---
 interface/web/favicon.ico                     | Bin 18478 -> 0 bytes
 .../assets/favicon/android-chrome-192x192.png | Bin 0 -> 729 bytes
 .../assets/favicon/android-chrome-512x512.png | Bin 0 -> 1673 bytes
 .../assets/favicon/apple-touch-icon.png       | Bin 0 -> 619 bytes
 .../default/assets/favicon/browserconfig.xml  |   9 +++++++++
 .../default/assets/favicon/favicon-16x16.png  | Bin 0 -> 259 bytes
 .../default/assets/favicon/favicon-32x32.png  | Bin 0 -> 309 bytes
 .../themes/default/assets/favicon/favicon.ico | Bin 0 -> 15086 bytes
 .../default/assets/favicon/mstile-150x150.png | Bin 0 -> 606 bytes
 .../assets/favicon/safari-pinned-tab.svg      |   1 +
 .../default/assets/favicon/site.webmanifest   |  18 ++++++++++++++++++
 .../web/themes/default/templates/main.tpl.htm |  10 ++++++++++
 .../default/templates/main_login.tpl.htm      |  11 ++++++++++-
 13 files changed, 48 insertions(+), 1 deletion(-)
 delete mode 100644 interface/web/favicon.ico
 create mode 100644 interface/web/themes/default/assets/favicon/android-chrome-192x192.png
 create mode 100644 interface/web/themes/default/assets/favicon/android-chrome-512x512.png
 create mode 100644 interface/web/themes/default/assets/favicon/apple-touch-icon.png
 create mode 100644 interface/web/themes/default/assets/favicon/browserconfig.xml
 create mode 100644 interface/web/themes/default/assets/favicon/favicon-16x16.png
 create mode 100644 interface/web/themes/default/assets/favicon/favicon-32x32.png
 create mode 100644 interface/web/themes/default/assets/favicon/favicon.ico
 create mode 100644 interface/web/themes/default/assets/favicon/mstile-150x150.png
 create mode 100644 interface/web/themes/default/assets/favicon/safari-pinned-tab.svg
 create mode 100644 interface/web/themes/default/assets/favicon/site.webmanifest

diff --git a/interface/web/favicon.ico b/interface/web/favicon.ico
deleted file mode 100644
index dc71b5320c890943e4aba52d80689deb58c6b39e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18478
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

diff --git a/interface/web/themes/default/assets/favicon/android-chrome-192x192.png b/interface/web/themes/default/assets/favicon/android-chrome-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd24a98743b0457c88874bffdc136ed0e99401a5
GIT binary patch
literal 729
zcmeAS@N?(olHy`uVBq!ia0vp^2SAvG8AvYpRA>UE)B}7%TzxVN&+>{w&`}i~IJ<A^
zEC>RM02!~JN2UX{aF+!61v4CYsV^|EV#@ibncJ17g)=ZPg?YL-hE&{oduyZrZ3mI#
zAKMKUzMXdL?WL2w3!25ZFFdo3>CFNL=5EJ{5)qfeP93tpurYi4KW;l0n>+h2*spRf
zm}8OtuzXMW%D3;W*<RXh(tmDzN>H&yz=>m_edLDvTCJNuOEwt&`%s+IYMh>F`tMn1
z=!>sT9Qz`sR;hl7ORvd3#&50>#`NazAGO*IS-mCt2W~ZWyqJ9N$F&rflEoZ1=Dm~M
zv`yjGHJSUfTyh0%ro8lP+^QJ+f~mHvv{CY9Up{xP!g_|!VFuzKN)>LjGM`ZS{v#Ub
zSq$(``@zrtP4BG^Y>rR0X9P<(?3bwcxYmc0gYQ(3?1PhkXFGg3wf<#7<~*yrl^dBq
zoC`T#kg@pR@t7yypLj(ubIqK8r@Hq*&pi(YwQQzePRHfaGMNRuWdEI%YUsRjadNDA
zg3!vt#%hI3-%oeH%j})wF#ky3gu9lFJxBN?o~~q`QD32I!706t^~S`VEhnueoKKH?
zA#|v8K}}OmmyO=9>;t=x8h`L`+OeAX=Z;(IeQ{hieOV4BarYjzT|XYX|B-0IYMcL;
zZEvrByXfj{uJyM?7f8A0RPT>u6#2v~5&nw3M67tmONQvLbGaOh4W6xKwiEamW+b0r
z*L`c-+r66GW7+rpcD!8^$KrHt@u6h)SwH@AU)k5f`XRpa^AuK@S9RXCX_ikI-*_5G
z3O|_lQh$fF;&-{i_X6Lmr>N&Ne7Cbys*{&|{C=67L&43eKN^akgrfYuoRj-0`bK`c
sMXQ{z@FzV9yE?AF4ZwI;YzgSDW8Nh&+dd?@(GV2Up00i_>zopr02^6E1poj5

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/favicon/android-chrome-512x512.png b/interface/web/themes/default/assets/favicon/android-chrome-512x512.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4d9ad1e03c2471a88f883de17c129555e906774
GIT binary patch
literal 1673
zcmdT>Yc$k(82<hLb74nB7;>9Q)O2x4hm_l2+l^c%#$|8};b?P-9mys7BO6I8EmMqb
zvfGe~IcjrDCdwryVKpRXT#7DY-5V1-yB|9HWl#HcpAYZ*ocDd+bKdhjnN*j9iUchJ
z06@{<&^|W+U>Su079(qT&$c#M)22Gn_B(wSEl^Y!D5?n*i84~@>TxlzKt^Ph=~Jj9
zlgY)nxwwPLU<bBYvtFd9zwDmqu+N?r_j2-;z-`1)6CE}-2qnQ!EVkzR>J-^f)CMd!
zvZ9R1w6cf3maHV=y9-k6Iz;k*W$4sYF==_T0W_ZRHRx}r+YUYM9qkO69bVOQ?unrs
z$>V<RkLZe8y7`#i-w<ZHQsRBiMBmMpRDf+eMmZuRO_5elj*Z%pbNmiVCsj2wuMp$3
z3P6s(z@=}8S@I>;pf>;ar%N|FPC?cgMP-dMu(C?qeTbXi+z_PlAoET_p_RB%lmAAI
zX93;k@*8#d619o*^)HlC!_vTO){j`PZ_|L;s>1Z~XsH{02o_d7y4a>pHsjU94{xWW
zA3-~r;-?dYC8ko$or?_5g^y>$Z>KcQ5vSvoUk<{y7Eqlpza@0Us|n;WpABl`DGEJ_
zoQ$#ii^!!+rf&Nvt7BmUxw0}zK7(d)LatmFqc8x1MnP`f^$0Xm6*%pxQZfa6O9YQb
zqy9#SdDhL1z;j0uu5^VfCrj!70thx}uO(=MRjHS-;lDgR0k{6U%yh2kdWWQ{`5%hD
zvILs<<y#+a6;2-L)<fK~=dYd7gC`sd7XZbmXs{oz>~KwHt^Vgf`T^b^{-ACO@mx8&
zd;=<K14lqVq!8xL-vwilDirjAw;W}5C-^BnQC=O9JfQ>sG+fT7x4>h-@Ru-^3$A$Y
z-NJ7)kjl#t{+VG@D;L>@W-^EMFy`(Yb>t(vj#bS?w9(2a<FOzlI7$oYU3uz2_lRDH
zoLE(CQZ8U)r;`m;W{j6s?5wrKpN~s61f!D?JRCx=7Vk=#G=F~7lGJIN8%PV|48$tP
zFFT5vS|rT$IA-2gHrkDxTxz3du$l%pu9!`v@%9kK?M62^LjD{3KAXM9Wm%7!0mJT~
z-@&<*(!`FAw`Z+!o-NRA2I4eYv+kHYwY-8I$#)M3(g>I5#mC9En_58lko($r4NV=0
zm$cbXoJI~?OLg&i;6Uu#@m!u$H5xnPZlKZR3}S7)ol^(pgq@Ez0TUxe$(naM;ea~p
z*I%E$HKz(g31d{m6KDb51P)u+aFkdo^JOMP6qX-IxCiywtspqO08+{p)i8RlK$27E
zL{+W_dIEn1Z)dB!7PsY+cIGjNnm=Qy+;a_K(^aqCh8On}v%#LbMT4)5(^lVfCN<Ti
zcHzH7&cTvz)(0DfgP7xX_r@$ht>U%b_1ISEivXAsOc}|pFKyTK+NI1$f)7FHxCRaa
z;=Le2ueh@wP!euMj^M};-x4i08F<|cy%S02=Gcu>?cJ=yf+;0ha&yJF(ChSPY-It-
zzttKltsySVM|lg<(UNvxKF+CdrwVpYyjP<!*DUS9_3B`*?gECSjQYtG$5{I_iJaW5
zz%#yRt}}U7o^w=nx*Av7hdmt$Z7u)1MrJ1_JI4kl;wavjWG^(88SrsEfAK`c(y~G6
zm=9&vCYcpCh;M&og^EP_A3l*9gj+a)a9k0rwF&Lq!U=-or1QGEs(jIJi1`axJpMh8
zZDk%$$J&%o)@E@S$KYzINtZ{Bdv9+#uG?ySyTXL_Y6wn3Xqoaet9?$VK5KRfZQyE<
zDa%#qJw7u*`CL)$LeJHaVXJYrukFz3AQh<&QROQrs#}GEE{D*IiJ>8XIq$IFWncN;
HfYd($pD1^)

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/favicon/apple-touch-icon.png b/interface/web/themes/default/assets/favicon/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..713b3d50d1aaa8f4421ffb898b8d7310e2ee97c1
GIT binary patch
literal 619
zcmV-x0+juUP)<h;3K|Lk000e1NJLTq006WA006WE0{{R3&*K{b0000aP)t-s|NsBZ
z4He*PZ`3h2k(iy&79R1w!1vtU=7)><@9^oCna|SHDhvw400064Nkl<ZXx{DG&r8B!
z9LMps$X~Z@45X6=VR}l#q|V(s&5>szNa{2QDv!~j=rk<)<;991`v)TW=c2j9AJ5|+
zzk3E&pZBeUFYIyqDt=WIgb+dqA%qY@{E|m|<eC%Z*jagpoLzAEa(r0})uzimjb|-n
z>pZ$;g{6%;=SgR^(AC&<$_h^#>{oJElTe;XXJydL6Ny<eXq|QaC1l8&$+|}7rO;Z3
zK`+RmGYoo84!z2!OH0IxfpmsCj~}C>PeFqQ4H`6P(4aws1`Yae)9p{Mj|k}NEw63R
zph1J4F}mHO-=mw??yq<&$Q=vT?EgPW@9%6NZLf(|+V>x+dXKRJY4I$(>(fEssS>^k
zHtJ%uN?F8=J(BtTHDwE7c1CID9wJ$!?sx|2H1ooIp)5<>5xT;pTN?31)X@_fD^59)
zjbU2n%mvEMr#4LII8%V~wDlpn>hLDa-SoEY4$wxIKfO-MluP7?w$CR`#+xVMjfT~~
zMG_^im4+fG{|@u+zWeW7MTvl(wzxm>BcQK(E9^=X^u%rLjMLROcCS`wnzn+LLQ^hh
zRd_s2T}p^vq|jm`wnDm<g;w^okBEoVwYi+bP7`OFz=`CEb2IqUgYHmAa?nq6%shGA
zKNP7y>k+UgJ#Vw%C?UE%xZri!koRtg5JCtcgb+gip)cAGy>82Ec;o;8002ovPDHLk
FV1i>tFuMQ%

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/favicon/browserconfig.xml b/interface/web/themes/default/assets/favicon/browserconfig.xml
new file mode 100644
index 0000000000..d0076c46ca
--- /dev/null
+++ b/interface/web/themes/default/assets/favicon/browserconfig.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+    <msapplication>
+        <tile>
+            <square150x150logo src="/themes/default/assets/favicon/mstile-150x150.png"/>
+            <TileColor>#cc151c</TileColor>
+        </tile>
+    </msapplication>
+</browserconfig>
diff --git a/interface/web/themes/default/assets/favicon/favicon-16x16.png b/interface/web/themes/default/assets/favicon/favicon-16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..6877b0cf7cb185bcd9031c22eeabcd06a7d75175
GIT binary patch
literal 259
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!S%6Q7>nU-$v%I1}bdFnihqEVy
z?UPvuVF1aQ^{sF=gfXdiQs`QbOrQxuB|(0{LXUc7m{-kbxb}zJf4kH1@{m*BUS7w6
zvRR%kjv*4^rRQ(+wHR=?UUc?$%+mk$-`@H~Mw8k)^D?K5h58S=78pH?XfjOn<~)($
z`E!|8I)@!o^ZdlS*CklwJ}oTLV>8<2ndkOG({u8ZS-HlgKOVXH-r4Z(uwc>8{m})i
gd;gWoweS1G;GDr``Di20M4+t<p00i_>zopr03Whk5C8xG

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/favicon/favicon-32x32.png b/interface/web/themes/default/assets/favicon/favicon-32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..562f38a8669e4e568002f000b5804f9496bde006
GIT binary patch
literal 309
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy#sNMdu4j2gL5N2L$^dhHG7ArD
z89+o%NGSmsQ`>v`rp^MPX|un^w5tNO3zP);1^@HEDe+D>j)7zET)V>TlXI?`IbR3L
zE%bD846!(Uck)4@!wMWO*BP1?Wd8e~UF~^kW#6|8^M0+{R~S&XQ2u~F%j`v~Hatn~
zQg=?(dC>FJas%UoS?WJ3d(Xs8_~&O)U#E2=`Tp&o8~u;D6+2dJ75j21WU5BIw6x~J
zXVT0(^VdYKVQ6Tc<IWJGolw>^tHa|-)Z{xB53~f6!dI;|sNSX7P`**#ZRK2nJN!4r
n)$d(;Z)CPQ|BV0coliLJ^2AsdE3tV39n0Y9>gTe~DWM4fY3qBB

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/favicon/favicon.ico b/interface/web/themes/default/assets/favicon/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..13554cb35355c7a7eee489693006c26041312d25
GIT binary patch
literal 15086
zcmeHOF;5gh6n=;i8if!vArS5gh*pXwiiwG+g&m=>CU%(El914Fg`rUj5=>Msp~T1^
zK&!(Fl^9}&g&~#{#L7?**6-V$IcLXNZ|`n*ImmAE-P@g=dGCAQ%+B6DQKU`UWn@HP
zi}H3@<d%pOi|V>t<OkZiVR`?_S&?~kxPm?yB98&K`^QjV^3Pm>T!CDH+czp5Ngzul
z$#>x5)&#H&tS5xo;lk$SwDVBh$=gc-d+<4tW)AQ_n*wiBi@mhw0lY5(+bQ#BF3V}m
z0d;|I&T&Yuf!?j1rV#c=-|JkbN#_v3pU(p4r6DMv_MC2~!C!IYzEefBYgPG-<j*{8
zM9quRg3sq_hT#5dugR+ZxJN$r9v#|inV;%s`!UyfmglQlWALJuuGr){%YLw253RzT
zJgV;ioJa9zPJUlld;Pic&7#fM)O>bp@Fyp(Et}h3Q~P1P`)Qybb)GP}tF^Hl;^N}^
zZyS9%_d`D8Hlq60({A%N)_;|UzrRqMFkjcYcfS8#FD={wep^`6vC_6m4|}cW{L>a*
z`Oo$D*Z&&Ue+U`L&-WCc<%ZWkd2*kyagz9F#nlxj3H@DuvuexvXQi||&MDR3{_e(W
z=l2J<D%rK3QvG9p|H)2icccjY^Y!DFEAiF{{ZHfiS+##-waT^sTe9}=FV0D;!hT-K
z)Ba9s_i5#8)*o7_{!@=u)ZVXIz_L!q>w3l?U*Dh(QLS@vv-9f{K_09rvxd@&Ah%Hc
zGx3c&cbF@XE08M?QvuIEL}J@RkvR|je~A>7?V{Zk=?GcR^RMBU7Tu+zOQZsOu3e-A
zd!Y><I0geFcVRn7WEXZfrq%sZwu)lalz0aI6<XxO`~>-thDRM@TK=6@5x56b|4yqL
z7x{7G6u5cqV`sfcDoK2=7zfJ0W}PS(`o3IkhKGv14|~)g$hogk4j9Y48;z~UO*ays
z^NrZ=0p?GT3+EyZI8Mhe*NV?roGTmfF$qj5jNA94uF>Dr&5v*QWlZuy-#*n}=b41n
zxzkP?TJl=^Cr8FMwKB&wecs=@^__WJ@lC&`PDkvY6jWa0)L6wY)3?fBbD$RHIoB37
z@$r0q>8S?u(Cu-oo?pi2VT_r?xsGYteZ~lS2b}S5T9r317d(PI^u1;*VlziGu0C(c
z_|$;NI)7@+IW*CX?s{xo{dNDOZ5}_~`cGPS?Jw8Ab@j*GuwFNrGD7b>#4_JOdN0nz
zs`ugaF>zqtQ|jH!cM^5scabc>SmX9P+T82YJlA_cZjWDqpq^lSmfHL>!x2giM}>nq
z&pVhaiEMyr1(k$K0S$v=f5Gb-@Jkr*(FO<Yo^`NJ!LmdVsMaa)f6dZ99^U`ZIW+jG
z#|7T|U;MtFul;y_-T^xiSfSr29~kop_zCb?U$MZpL*Riqp4Y&F0>|jFx=mX>o-t-r
ze~x85`lYRf6_um*rN{d1&*olDEWTL$Ov`>YsNd-IjWdQ$j7uyqCv&`+qw5@Fm}_Xf
zo;${HjWOF?<IVfE&eIrA-f>~Y-@!H4T|Llq$F=aSLClb^>sg7@7H6Jn%|lT8L_HL>
YP@;4mBk+`tqHau#S)jiX>Zp3$ACgKrHvj+t

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/favicon/mstile-150x150.png b/interface/web/themes/default/assets/favicon/mstile-150x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..83fcba69390f17f68b5dde4969858fb3d9d28292
GIT binary patch
literal 606
zcmeAS@N?(olHy`uVBq!ia0y~yVB`Z~7G|JG*Ze2bfRsdlPl&5eX5oKq;GWa7D?l~u
zB|(0{3{N&G7$x#JSSM@+n(@xl#WAGf*4tZq{SP@vG<@`CDf`K>I;mwV+g(Ma;-3Q7
zmUUFmp78toQUwl{h1d7(HT(6)jQ!B$*Gpq+{563_!odUis6BgU&$hZGdAfS8OR2`}
zz;`cF4$Vt(Q_XC<#(R>_zOaoi=3w8G(~7$ko~Cv69nd_K967n#;B$!VR;L{Pwc$y!
zXG3HcMzrgN9ACTftrgoL*~9BrF4wVQ`W(+SpU>*Wf@U<LPek@{Sjwd8<KOnrD22%X
z^E#fkY-0WK&k9Co_A2l5vHGHN?#1!n|4#UBN&D+#mDGEv?75Kr?wt{5K7M`kU?RtP
z&faIs7EX?AzbUh`?vkRp`@8JNtd=h_x=SVQ8E44X9}#`6F_ZUNxV!8^^=pY04;6o<
z{jb=~5h<nX@#Wdw@{W6_1C<xE7V=xEOi$kH+_SF#?%$FSSygGHzOPaCFFE9@y&{%c
zcP!leS|j&g&DRjSZ?a-KX7(Ta-pMXL>sN7NZ}RWht&2)(<|Xe}&Y638%MHW+&vM!>
z?b%Bg$4}^6y<F+w?0M6tJf736v!g0<XWH_|uh<H8OJgbxw9f~*KmGJFXIYMB>@7v!
x^HJ?pKmX3SQ82|-{_(ZSV1Gt<v>-E%?PK5zS<O-^Szrqi_H^}gS?83{1OO7c6D<G$

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/favicon/safari-pinned-tab.svg b/interface/web/themes/default/assets/favicon/safari-pinned-tab.svg
new file mode 100644
index 0000000000..12238ebc5b
--- /dev/null
+++ b/interface/web/themes/default/assets/favicon/safari-pinned-tab.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" width="1422.667" height="1422.667" viewBox="0 0 1067.000000 1067.000000"><path d="M92.9 141.4c-.2.2-2.8.7-5.8 1.1-19.1 2.4-41.8 14.2-57.7 30.1C22 180 13 191.6 13 193.8c0 .5-.8 2-1.9 3.3-1.9 2.5-8.4 19-9.8 25C.9 224 .5 329.7.5 457v231.5l2.7 8.5c9.4 29.1 29.3 51.5 57.2 64.5 8.4 3.9 18.1 7.3 23.1 8 1.1.2 4.5.6 7.5 1.1 3 .4 144.4.8 314.3.8l308.7.1.1 8c0 4.4.2 9.3.3 10.8.1 1.6-.2 3.1-.6 3.3-.5.3-.6 1-.2 1.5.3.5.5 6.2.4 12.7-.1 6.4-.1 12.6-.1 13.7 0 2-.5 2-147.2 1.8-81-.2-163.5-.3-183.4-.3h-36.2l-.3-13.7-.3-13.7-52-.1c-28.6 0-52.4.1-53 .2-2 .6-.8 40.4 1.5 49.3.5 1.9 1.1 4.6 1.4 6 1 5.1 7.9 21.6 9.5 23 .3.3 1.7 2.5 3 5 1.4 2.5 3 5 3.5 5.6.6.6 2.5 2.8 4.1 4.9 2.8 3.6 10.7 11.7 13.7 14 .7.6 3.1 2.5 5.3 4.2 3.8 3 6.7 4.8 16.2 9.8 4.1 2.2 16.2 6.7 21.8 8 3 .8 4.1.9 12.5 2.1 4.9.6 385 1.2 386.3.6.5-.2 3.2-.6 6-.8 6.4-.4 15.5-2.5 22.4-5.2 2.9-1.1 5.4-1.7 5.7-1.4.4.3.6 0 .6-.6 0-.7.3-1.1.8-1 1 .3 10.5-4.6 16.5-8.6 6.7-4.5 14.5-11.2 18.8-16.1 1.9-2.2 4.1-4.7 4.9-5.6 7.4-8.5 16.5-26.4 19.5-38.3 1.8-7.6 2-8.5 3-14.2.6-3.8.7-70 .1-73.9-.1-1.1-.6-4.5-1.1-7.5-.4-3-1.4-7.2-2.1-9.2-.7-2.1-1.3-3.9-1.3-4.1 0-.1-.4-1.5-1-3-.6-1.6-1.1-3-1.1-3.2 0-2.8-11.6-22.7-17-29-10-11.7-26.4-24-39.7-29.5-4.2-1.8-8.3-3.3-9.2-3.5-.9-.3-4.2-1.1-7.3-2-3.2-.8-9.2-1.9-13.5-2.3-4.3-.4-146.1-.7-315-.7H103l-.1-6.5c0-7.6 0-407.7.1-413.2v-3.6h855v8.1c.4 71.1 0 414.1-.4 414.5-.3.3-19.1.5-41.6.5-22.6 0-41.3.4-41.5.8-.4.5-.7 62.4-.5 98.4v5l46.8-.1c38.4 0 55.5-.6 60.2-1.9.3-.1 1.9-.5 3.5-.9 25-6.1 48-22 62.2-43.1 6.1-8.9 10-16.9 13.2-27 2.9-9.1 3.6-11.9 4.8-21 .8-6.5.9-436.1 0-444-1-9.5-1.4-11.5-4.6-21-2.6-8-4.5-12-10.7-23-3.2-5.6-10.1-14-16.5-19.8-8.3-7.6-8.9-8.1-12.4-10.3-1.6-1-3.2-2.1-3.5-2.4-2.8-2.9-22.1-11.5-30.5-13.6-1.6-.4-3.4-.8-4-1-.5-.1-2.3-.6-4-1-2.9-.9-884.8-1.8-885.6-1z"/><path d="M240.3 539.6c.2 1.3.1 2.7-.3 2.9-.4.2-.5 1.7-.3 3.2.8 5.6.8 7.8 0 9-.4.6-.4 1.4.2 1.7.6.4.6 1.8.1 3.6-.5 1.7-.5 3 0 3s.5 1.3 0 2.9c-.4 1.6-.6 3.2-.4 3.4.9.9 1 11.8.2 12.3-.5.3-.5 1-.1 1.7.8 1.3 1.1 5.7.3 5.7-.3 0-.5 1.8-.5 4s.2 4 .5 4 .5 1.1.5 2.5-.4 2.5-.8 2.5-.3.8.2 1.8.6 2.4.1 3.3c-.5.8-.5 2.1 0 2.8.4.8.4 2.6 0 4.2-.5 1.5-.6 3-.4 3.2.9.9 1 11.8.2 12.3-.5.3-.5 1-.1 1.7.9 1.4 1.1 5.7.2 5.7-.3 0-.3 1.7 0 3.7l.6 3.8 53 .1c50.2.1 56.5-.2 55-2.6-.3-.5-.5-3-.5-5.7 0-6.2 0-13.8-.2-16.1 0-.9 0-3.1.1-4.7.2-6.6.2-8.1.2-9.3-.1-.6-.1-1.8-.2-2.5 0-.6.1-3.9.2-7.3.1-3.3 0-6.5-.4-7-.3-.6-.2-2.6.2-4.6.5-2 .5-4.2.1-4.9-.5-.7-.4-2.3 0-3.5.5-1.3.5-2.6.1-2.9-.8-.4-.5-6.3.4-9.1.2-.6-.1-1.7-.5-2.5-.5-.7-.5-1.8.1-2.5s.6-1.5.1-1.8c-.8-.5-.5-8.5.4-9.5.2-.2-.1-1.1-.6-2.1-.6-1-.6-3 0-4.8.7-2.5.5-3.2-.8-3.6-.9-.3-25.5-.5-54.6-.5h-52.8l.5 2.5z"/></svg>
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/favicon/site.webmanifest b/interface/web/themes/default/assets/favicon/site.webmanifest
new file mode 100644
index 0000000000..a94d9f4b4a
--- /dev/null
+++ b/interface/web/themes/default/assets/favicon/site.webmanifest
@@ -0,0 +1,18 @@
+{
+    "name": "ISPConfig",
+    "short_name": "ISPConfig",
+    "icons": [
+        {
+            "src": "/themes/default/assets/favicon/android-chrome-192x192.png",
+            "sizes": "192x192",
+            "type": "image/png"
+        },
+        {
+            "src": "/themes/default/assets/favicon/android-chrome-512x512.png",
+            "sizes": "512x512",
+            "type": "image/png"
+        }
+    ],
+    "theme_color": "#cc151c",
+    "background_color": "#cc151c"
+}
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 0cdd2f89b3..b49e6cd61d 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -10,6 +10,16 @@
   <meta name='keywords' lang='en' content='' />
   <meta name='robots' content='noindex, nofollow' />
 
+  <link rel='apple-touch-icon' sizes='180x180' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/apple-touch-icon.png'>
+  <link rel='icon' type='image/png' sizes='32x32' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon-32x32.png'>
+  <link rel='icon' type='image/png' sizes='16x16' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon-16x16.png'>
+  <link rel='manifest' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/site.webmanifest'>
+  <link rel='mask-icon' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/safari-pinned-tab.svg' color='#cc151c'>
+  <link rel='shortcut icon' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon.ico'>
+  <meta name='msapplication-TileColor' content='#cc151c'>
+  <meta name='msapplication-config' content='/themes/<tmpl_var name='current_theme'>/assets/favicon/browserconfig.xml'>
+  <meta name='theme-color' content='#cc151c'>
+
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/bootstrap.min.css' />
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/fonts.min.css' />
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/ispconfig.css' />
diff --git a/interface/web/themes/default/templates/main_login.tpl.htm b/interface/web/themes/default/templates/main_login.tpl.htm
index 11042f02af..c52e9071f2 100644
--- a/interface/web/themes/default/templates/main_login.tpl.htm
+++ b/interface/web/themes/default/templates/main_login.tpl.htm
@@ -8,7 +8,16 @@
   <meta name='viewport' content='width=device-width, user-scalable=yes'>
   <meta name='description' lang='en' content='' />
   <meta name='keywords' lang='en' content='' />
-  <meta name='robots' content='index, follow' />
+
+ <link rel='apple-touch-icon' sizes='180x180' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/apple-touch-icon.png'>
+ <link rel='icon' type='image/png' sizes='32x32' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon-32x32.png'>
+ <link rel='icon' type='image/png' sizes='16x16' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon-16x16.png'>
+ <link rel='manifest' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/site.webmanifest'>
+ <link rel='mask-icon' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/safari-pinned-tab.svg' color='#cc151c'>
+ <link rel='shortcut icon' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon.ico'>
+ <meta name='msapplication-TileColor' content='#cc151c'>
+ <meta name='msapplication-config' content='/themes/<tmpl_var name='current_theme'>/assets/favicon/browserconfig.xml'>
+ <meta name='theme-color' content='#cc151c'>
 
   <link rel='stylesheet' href='../themes/<tmpl_var name='current_theme'>/assets/stylesheets/bootstrap.min.css' />
   <link rel='stylesheet' href='../themes/<tmpl_var name='current_theme'>/assets/stylesheets/fonts.min.css' />
-- 
GitLab


From 9f38e0599bc56f54cbf9a4159194c8eb82fb2a46 Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Thu, 27 Feb 2020 13:12:06 +0100
Subject: [PATCH 232/571] Allow hostname in SPF wizard

---
 interface/web/dns/dns_spf_edit.php           | 38 ++++++++++++++------
 interface/web/dns/dns_txt_edit.php           | 15 ++++++++
 interface/web/dns/form/dns_spf.tform.php     |  2 +-
 interface/web/dns/lib/lang/ar_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/bg_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/br_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/ca_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/cz_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/de_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/dk_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/el_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/en_dns_spf.lng    |  5 ++-
 interface/web/dns/lib/lang/es_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/fi_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/fr_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/hr_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/hu_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/id_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/it_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/ja_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/nl_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/pl_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/pt_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/ro_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/ru_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/se_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/sk_dns_spf.lng    |  4 +++
 interface/web/dns/lib/lang/tr_dns_spf.lng    |  4 +++
 interface/web/dns/templates/dns_spf_edit.htm |  6 +++-
 29 files changed, 148 insertions(+), 14 deletions(-)

diff --git a/interface/web/dns/dns_spf_edit.php b/interface/web/dns/dns_spf_edit.php
index 94096662a1..70f39e44eb 100644
--- a/interface/web/dns/dns_spf_edit.php
+++ b/interface/web/dns/dns_spf_edit.php
@@ -72,13 +72,16 @@ class page_action extends tform_actions {
 	}
 
 	function onShowEnd() {
-		global $app, $conf;
+		global $app;
+
+		$id = $app->functions->intval($_GET['id']);
 
-		$zone = $app->functions->intval($_GET['zone']);
+		// if there is no existing SPF record, assume we want a new active record
+		$app->tpl->setVar('active', 'CHECKED');
 
 		//* check for an existing spf-record
-		$sql = "SELECT data, active FROM dns_rr WHERE data LIKE 'v=spf1%' AND zone = ? AND " . $app->tform->getAuthSQL('r');
-		$rec = $app->db->queryOneRecord($sql, $zone);
+		$sql = "SELECT data, active FROM dns_rr WHERE id = ? AND " . $app->tform->getAuthSQL('r');
+		$rec = $app->db->queryOneRecord($sql, $id);
 		if ( isset($rec) && !empty($rec) ) {
 			$this->id = 1;
 			$old_data = strtolower($rec['data']);
@@ -132,7 +135,6 @@ class page_action extends tform_actions {
 	function onSubmit() {
 		global $app, $conf;
 
-
 		// Get the parent soa record of the domain
 		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $app->functions->intval($_POST["zone"]));
 
@@ -153,8 +155,27 @@ class page_action extends tform_actions {
 				}
 			}
 		} // end if user is not admin
+		
+		// Check that the record does not yet exist
+		$existing_records = $app->db->queryAllRecords("SELECT id FROM dns_rr WHERE id != ? AND zone = ? AND name = ? AND type = 'TXT'", $this->dataRecord['id'], $_POST['zone'], $_POST['name']);
+		if (!empty($existing_records)) {
+			if (count($existing_records) > 1) {
+				$multiple_existing_records_error_txt = $app->tform->wordbook['spf_record_exists_multiple_txt'];
+				$multiple_existing_records_error_txt = str_replace('{hostname}', $_POST['name'], $multiple_existing_records_error_txt);
+
+				$app->error($multiple_existing_records_error_txt);
+			}
 
-		//create spf-record
+			$existing_record = array_pop($existing_records);
+			
+			$existing_record_error_txt = $app->tform->wordbook['spf_record_exists_txt'];
+			$existing_record_error_txt = str_replace('{hostname}', $_POST['name'], $existing_record_error_txt);
+			$existing_record_error_txt = str_replace('{existing_record_id}', $existing_record['id'], $existing_record_error_txt);
+
+			$app->error($existing_record_error_txt);
+		}
+
+		// Create spf-record
 		if (!empty($this->dataRecord['spf_mx'])) {
 			$spf_record[] = 'mx';
 		}
@@ -217,7 +238,6 @@ class page_action extends tform_actions {
 		else $this->dataRecord['data'] = 'v=spf1 ' . $this->dataRecord['spf_mechanism'] . 'all';
 		unset($temp);
 
-		$this->dataRecord['name'] = $soa['origin'];
 		if (isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'Y';
 		
 		// Set the server ID of the rr record to the same server ID as the parent record.
@@ -228,10 +248,6 @@ class page_action extends tform_actions {
 		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
 		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
 
-		// always update an existing entry
-		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data LIKE 'v=spf1%' AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord['name']);
-		$this->id = $check['id'];
-
 		if (!isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'N';
 
 		parent::onSubmit();
diff --git a/interface/web/dns/dns_txt_edit.php b/interface/web/dns/dns_txt_edit.php
index 8f61d2bfe7..6d518e19d5 100644
--- a/interface/web/dns/dns_txt_edit.php
+++ b/interface/web/dns/dns_txt_edit.php
@@ -44,7 +44,22 @@ require_once './dns_edit_base.php';
 
 // Loading classes
 class page_action extends dns_page_action {
+	function onLoad() {
+		parent::onLoad();
+		
+		// The SPF wizard has a button to edit a record as TXT. We need this to prevent a redirect loop.
+		if (!empty($_GET['edit_raw'])) {
+			return;
+		}
 
+		// Redirect to SPF wizard if we detect a SPF record
+		if (!empty($this->dataRecord['data'])) {
+			if ('v=spf1' === mb_substr($this->dataRecord['data'], 0, 6)) {
+				header(sprintf('Location: dns_spf_edit.php?id=%d', $this->dataRecord['id']));
+				exit;
+			}
+		}
+	}
 }
 
 $page = new page_action;
diff --git a/interface/web/dns/form/dns_spf.tform.php b/interface/web/dns/form/dns_spf.tform.php
index 62b6b5283b..53081b7cca 100644
--- a/interface/web/dns/form/dns_spf.tform.php
+++ b/interface/web/dns/form/dns_spf.tform.php
@@ -86,7 +86,7 @@ $form["tabs"]['dns'] = array (
 					'type' => 'TOLOWER')
 			),
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}$/',
+					'regex' => '/^(\*\.|[a-zA-Z0-9\.\-\_]){0,255}$/',
 					'errmsg'=> 'name_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/dns/lib/lang/ar_dns_spf.lng b/interface/web/dns/lib/lang/ar_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/ar_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ar_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_spf.lng b/interface/web/dns/lib/lang/bg_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/bg_dns_spf.lng
+++ b/interface/web/dns/lib/lang/bg_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_spf.lng b/interface/web/dns/lib/lang/br_dns_spf.lng
index 739e59cf41..bbf571c3b7 100644
--- a/interface/web/dns/lib/lang/br_dns_spf.lng
+++ b/interface/web/dns/lib/lang/br_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'Registro SPF';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'Mecanismo SPF';
 $wb['spf_mechanism_pass_txt'] = 'Pass - permitir e-mails de outros remetentes';
 $wb['spf_mechanism_fail_txt'] = 'Fail - rejeitar e-mails de outros remetentes';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'O domínio é inválido.';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['record_exists_txt'] = 'Registro dns já existe.';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
 $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_spf.lng b/interface/web/dns/lib/lang/ca_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/ca_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ca_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_spf.lng b/interface/web/dns/lib/lang/cz_dns_spf.lng
index 3086454c34..a5691ee340 100644
--- a/interface/web/dns/lib/lang/cz_dns_spf.lng
+++ b/interface/web/dns/lib/lang/cz_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF Záznam';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanismus';
 $wb['spf_mechanism_pass_txt'] = 'Přijmout - přijímat e-mail od ostatních odesílatelů';
 $wb['spf_mechanism_fail_txt'] = 'Odmítat - odmítnout e-mail od ostatních odesílatelů';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Neplatné doménové jméno';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
 $wb['record_exists_txt'] = 'DNS záznam již existuje';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
 $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_spf.lng b/interface/web/dns/lib/lang/de_dns_spf.lng
index aec5595ad3..a4f0f7827f 100644
--- a/interface/web/dns/lib/lang/de_dns_spf.lng
+++ b/interface/web/dns/lib/lang/de_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanismus';
 $wb['spf_mechanism_pass_txt'] = 'Pass - Mails von anderen Sendern zulassen';
 $wb['spf_mechanism_fail_txt'] = 'Fail - Mails von anderen Sendern abweisen';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Ungültiger Domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktiv';
 $wb['record_exists_txt'] = 'DNS-Eintrag existiert bereits';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['ttl_range_error'] = 'Min. TTL time ist 60 Sekunden.';
 $wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
 $wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_spf.lng b/interface/web/dns/lib/lang/dk_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/dk_dns_spf.lng
+++ b/interface/web/dns/lib/lang/dk_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_spf.lng b/interface/web/dns/lib/lang/el_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/el_dns_spf.lng
+++ b/interface/web/dns/lib/lang/el_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_spf.lng b/interface/web/dns/lib/lang/en_dns_spf.lng
index 7ac24dd227..455b5ce0ab 100644
--- a/interface/web/dns/lib/lang/en_dns_spf.lng
+++ b/interface/web/dns/lib/lang/en_dns_spf.lng
@@ -2,6 +2,7 @@
 
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -21,8 +22,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb["ttl_txt"] = 'TTL';
 $wb["active_txt"] = 'Active';
 $wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
 $wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
-
diff --git a/interface/web/dns/lib/lang/es_dns_spf.lng b/interface/web/dns/lib/lang/es_dns_spf.lng
index e4094672bb..353134aded 100755
--- a/interface/web/dns/lib/lang/es_dns_spf.lng
+++ b/interface/web/dns/lib/lang/es_dns_spf.lng
@@ -1,9 +1,12 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
+$wb['name_txt'] = 'Hostname';
 $wb['data_txt'] = 'Registro SPF';
 $wb['limit_dns_record_txt'] = 'Ha alcanzado el número máx. de registros DNS permitidos para su cuenta.';
 $wb['no_zone_perm'] = 'Usted no tiene permisos para agregar un registro a esta zona DNS.';
 $wb['record_exists_txt'] = 'El registro DNS ya existe';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['spf_a_txt'] = 'Permitir a la dirección IP actual del dominio enviar correo electrónico para este dominio';
 $wb['spf_domain_note_txt'] = '(dominios separados por espacios en blanco)';
 $wb['spf_domain_txt'] = 'Cualquier dominio que pueda entregar o retransmitir correo para este dominio';
@@ -22,4 +25,5 @@ $wb['spf_mechanism_txt'] = 'Mecanismo SPF';
 $wb['spf_mx_txt'] = 'Permite a los servidores configurados como MX enviar correos desde este dominio';
 $wb['ttl_range_error'] = 'El tiempo mín. de TTL es 60 segundos.';
 $wb['ttl_txt'] = 'TTL';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_spf.lng b/interface/web/dns/lib/lang/fi_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/fi_dns_spf.lng
+++ b/interface/web/dns/lib/lang/fi_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_spf.lng b/interface/web/dns/lib/lang/fr_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/fr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/fr_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_spf.lng b/interface/web/dns/lib/lang/hr_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/hr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/hr_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_spf.lng b/interface/web/dns/lib/lang/hu_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/hu_dns_spf.lng
+++ b/interface/web/dns/lib/lang/hu_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_spf.lng b/interface/web/dns/lib/lang/id_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/id_dns_spf.lng
+++ b/interface/web/dns/lib/lang/id_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_spf.lng b/interface/web/dns/lib/lang/it_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/it_dns_spf.lng
+++ b/interface/web/dns/lib/lang/it_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_spf.lng b/interface/web/dns/lib/lang/ja_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/ja_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ja_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_spf.lng b/interface/web/dns/lib/lang/nl_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/nl_dns_spf.lng
+++ b/interface/web/dns/lib/lang/nl_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_spf.lng b/interface/web/dns/lib/lang/pl_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/pl_dns_spf.lng
+++ b/interface/web/dns/lib/lang/pl_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_spf.lng b/interface/web/dns/lib/lang/pt_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/pt_dns_spf.lng
+++ b/interface/web/dns/lib/lang/pt_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_spf.lng b/interface/web/dns/lib/lang/ro_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/ro_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ro_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_spf.lng b/interface/web/dns/lib/lang/ru_dns_spf.lng
index cc4b4b087b..a0e77b41b1 100644
--- a/interface/web/dns/lib/lang/ru_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ru_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-запись';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'Механизм SPF';
 $wb['spf_mechanism_pass_txt'] = 'Pass - разрешить почту от других отправителей';
 $wb['spf_mechanism_fail_txt'] = 'Fail - отклонить почту от других отправителей';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Недопустимое доменное им
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Активно';
 $wb['record_exists_txt'] = 'DNS-запись уже существует';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'Макс. количество DNS-записей для вашей учетной записи достигнуто.';
 $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту запись.';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_spf.lng b/interface/web/dns/lib/lang/se_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/se_dns_spf.lng
+++ b/interface/web/dns/lib/lang/se_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_spf.lng b/interface/web/dns/lib/lang/sk_dns_spf.lng
index df8d1fe145..09720321b2 100644
--- a/interface/web/dns/lib/lang/sk_dns_spf.lng
+++ b/interface/web/dns/lib/lang/sk_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_spf.lng b/interface/web/dns/lib/lang/tr_dns_spf.lng
index 40cad402a4..2683560275 100644
--- a/interface/web/dns/lib/lang/tr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/tr_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF Kaydı';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Yöntemi';
 $wb['spf_mechanism_pass_txt'] = 'Kabul - Diğer göndericilerden gelen e-postalar kabul edilsin';
 $wb['spf_mechanism_fail_txt'] = 'Red - Diğer göndericilerden gelen e-postalar reddedilsin';
@@ -19,7 +20,10 @@ $wb['spf_invalid_domain_txt'] = 'Etki alanı adı geçersiz';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['record_exists_txt'] = 'DNS kaydı zaten var';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
 $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/templates/dns_spf_edit.htm b/interface/web/dns/templates/dns_spf_edit.htm
index 3c34b37a41..fc7400d620 100644
--- a/interface/web/dns/templates/dns_spf_edit.htm
+++ b/interface/web/dns/templates/dns_spf_edit.htm
@@ -5,6 +5,10 @@
 
 
         
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div>
+            </div>
             <div class="form-group">
                 <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
 				<div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" readonly class="form-control" /></div></div>
@@ -52,11 +56,11 @@
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}" id="zone">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
-        <input type="hidden" name="name" value="{tmpl_var name='name'}">
             </div>
             
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_spf_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_edit_as_txt_record_txt'}" data-load-content="dns/dns_txt_edit.php?id={tmpl_var name='id'}&zone={tmpl_var name='zone'}&edit_raw=1">{tmpl_var name='btn_edit_as_txt_record_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
 
-- 
GitLab


From 53e799ec7ca60eb2a9b54cc0a82672645fedc094 Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Mon, 2 Mar 2020 10:19:16 +0100
Subject: [PATCH 233/571] Add CSRF key and token to FAQ delete links

---
 interface/web/help/templates/faq_manage_questions_list.htm | 2 +-
 interface/web/help/templates/help_faq_sections_list.htm    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/help/templates/faq_manage_questions_list.htm b/interface/web/help/templates/faq_manage_questions_list.htm
index a29d0f06d0..9b54e7d4ff 100644
--- a/interface/web/help/templates/faq_manage_questions_list.htm
+++ b/interface/web/help/templates/faq_manage_questions_list.htm
@@ -24,7 +24,7 @@
                         <td width="60%">{tmpl_var name='hf_question'}</td>
                         <td width="30%">{tmpl_var name='hf_section'}</td>
                         <td class="text-right" width="5%">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_delete.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                         <td class="text-right" width="5%">
                             <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="help/faq_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
diff --git a/interface/web/help/templates/help_faq_sections_list.htm b/interface/web/help/templates/help_faq_sections_list.htm
index 5a3733aa0b..1d0ef16443 100644
--- a/interface/web/help/templates/help_faq_sections_list.htm
+++ b/interface/web/help/templates/help_faq_sections_list.htm
@@ -26,7 +26,7 @@
                     <tr>
                         <td><b>{tmpl_var name='hfs_name'}</b></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_sections_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_sections_delete.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                         <td class="text-right">
                             <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="help/faq_sections_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-- 
GitLab


From 3d4981e3c275aa9ba24a590b791d8cc69282a3ee Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Mon, 2 Mar 2020 10:21:21 +0100
Subject: [PATCH 234/571] #5545 pw reset is always english

---
 interface/web/login/password_reset.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/login/password_reset.php b/interface/web/login/password_reset.php
index 02c71f2948..1550ae8af2 100644
--- a/interface/web/login/password_reset.php
+++ b/interface/web/login/password_reset.php
@@ -43,7 +43,7 @@ $app->tpl->setInclude('content_tpl', 'templates/password_reset.htm');
 
 $app->tpl_defaults();
 
-include ISPC_ROOT_PATH.'/web/login/lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'.lng';
+include ISPC_ROOT_PATH.'/web/login/lib/lang/'.$app->functions->check_language($conf['language']).'.lng';
 $app->tpl->setVar($wb);
 $continue = true;
 
-- 
GitLab


From 8cb829063dd053d70c93b03be32070a496eff1db Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Mon, 2 Mar 2020 10:21:57 +0100
Subject: [PATCH 235/571] Fix php warning when adding empty spf

---
 interface/web/dns/dns_spf_edit.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/dns/dns_spf_edit.php b/interface/web/dns/dns_spf_edit.php
index 70f39e44eb..ee043d284f 100644
--- a/interface/web/dns/dns_spf_edit.php
+++ b/interface/web/dns/dns_spf_edit.php
@@ -176,6 +176,8 @@ class page_action extends tform_actions {
 		}
 
 		// Create spf-record
+		$spf_record = [];
+
 		if (!empty($this->dataRecord['spf_mx'])) {
 			$spf_record[] = 'mx';
 		}
-- 
GitLab


From ebdc1c772416eb89177a855bf939fb56e78b3e69 Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Mon, 2 Mar 2020 15:34:50 +0100
Subject: [PATCH 236/571] Fix SPF multiple records validation

---
 interface/web/dns/dns_spf_edit.php | 17 +++++++++++------
 interface/web/dns/dns_txt_edit.php |  2 +-
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/interface/web/dns/dns_spf_edit.php b/interface/web/dns/dns_spf_edit.php
index ee043d284f..1c632d2d12 100644
--- a/interface/web/dns/dns_spf_edit.php
+++ b/interface/web/dns/dns_spf_edit.php
@@ -157,7 +157,7 @@ class page_action extends tform_actions {
 		} // end if user is not admin
 		
 		// Check that the record does not yet exist
-		$existing_records = $app->db->queryAllRecords("SELECT id FROM dns_rr WHERE id != ? AND zone = ? AND name = ? AND type = 'TXT'", $this->dataRecord['id'], $_POST['zone'], $_POST['name']);
+		$existing_records = $app->db->queryAllRecords("SELECT id FROM dns_rr WHERE zone = ? AND name = ? AND type = 'TXT' AND data LIKE 'v=spf1%'", $_POST['zone'], $_POST['name']);
 		if (!empty($existing_records)) {
 			if (count($existing_records) > 1) {
 				$multiple_existing_records_error_txt = $app->tform->wordbook['spf_record_exists_multiple_txt'];
@@ -166,13 +166,18 @@ class page_action extends tform_actions {
 				$app->error($multiple_existing_records_error_txt);
 			}
 
+			// If there is just one existing record, three things can be going on:
+			// - if we are adding a new record, show a warning that it already exists and offer to edit it
+			// - if we are editing an existing record and changing its 'name' field to one that is already existing, also show the warning
+			// - otherwise we are just editing the existing the record, so there is no need for a warning
 			$existing_record = array_pop($existing_records);
-			
-			$existing_record_error_txt = $app->tform->wordbook['spf_record_exists_txt'];
-			$existing_record_error_txt = str_replace('{hostname}', $_POST['name'], $existing_record_error_txt);
-			$existing_record_error_txt = str_replace('{existing_record_id}', $existing_record['id'], $existing_record_error_txt);
+			if (empty($this->dataRecord['id']) || ($this->dataRecord['id'] !== $existing_record['id'])) {
+				$existing_record_error_txt = $app->tform->wordbook['spf_record_exists_txt'];
+				$existing_record_error_txt = str_replace('{hostname}', $_POST['name'], $existing_record_error_txt);
+				$existing_record_error_txt = str_replace('{existing_record_id}', $existing_record['id'], $existing_record_error_txt);
 
-			$app->error($existing_record_error_txt);
+				$app->error($existing_record_error_txt);
+			}
 		}
 
 		// Create spf-record
diff --git a/interface/web/dns/dns_txt_edit.php b/interface/web/dns/dns_txt_edit.php
index 6d518e19d5..7caa27d040 100644
--- a/interface/web/dns/dns_txt_edit.php
+++ b/interface/web/dns/dns_txt_edit.php
@@ -53,7 +53,7 @@ class page_action extends dns_page_action {
 		}
 
 		// Redirect to SPF wizard if we detect a SPF record
-		if (!empty($this->dataRecord['data'])) {
+		if ('GET' === $_SERVER['REQUEST_METHOD'] && !empty($this->dataRecord['data'])) {
 			if ('v=spf1' === mb_substr($this->dataRecord['data'], 0, 6)) {
 				header(sprintf('Location: dns_spf_edit.php?id=%d', $this->dataRecord['id']));
 				exit;
-- 
GitLab


From 37534873db85372e4ec0c5415964bce58c49279f Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Mon, 2 Mar 2020 15:38:50 +0100
Subject: [PATCH 237/571] Hide default php version

---
 install/tpl/server.ini.master                 |  1 +
 .../web/admin/form/server_config.tform.php    |  6 ++
 .../web/admin/lib/lang/ar_server_config.lng   |  1 +
 .../web/admin/lib/lang/bg_server_config.lng   |  1 +
 .../web/admin/lib/lang/br_server_config.lng   |  1 +
 .../web/admin/lib/lang/ca_server_config.lng   |  1 +
 .../web/admin/lib/lang/cz_server_config.lng   |  1 +
 .../web/admin/lib/lang/de_server_config.lng   |  1 +
 .../web/admin/lib/lang/dk_server_config.lng   |  1 +
 .../web/admin/lib/lang/el_server_config.lng   |  1 +
 .../web/admin/lib/lang/en_server_config.lng   |  1 +
 .../web/admin/lib/lang/es_server_config.lng   |  1 +
 .../web/admin/lib/lang/fi_server_config.lng   |  1 +
 .../web/admin/lib/lang/fr_server_config.lng   |  1 +
 .../web/admin/lib/lang/hr_server_config.lng   |  1 +
 .../web/admin/lib/lang/hu_server_config.lng   |  1 +
 .../web/admin/lib/lang/id_server_config.lng   |  1 +
 .../web/admin/lib/lang/it_server_config.lng   |  1 +
 .../web/admin/lib/lang/ja_server_config.lng   |  1 +
 .../web/admin/lib/lang/nl_server_config.lng   |  1 +
 .../web/admin/lib/lang/pl_server_config.lng   |  1 +
 .../web/admin/lib/lang/pt_server_config.lng   |  1 +
 .../web/admin/lib/lang/ro_server_config.lng   |  1 +
 .../web/admin/lib/lang/ru_server_config.lng   |  1 +
 .../web/admin/lib/lang/se_server_config.lng   |  1 +
 .../web/admin/lib/lang/sk_server_config.lng   |  1 +
 .../web/admin/lib/lang/tr_server_config.lng   |  1 +
 .../templates/server_config_web_edit.htm      |  8 ++-
 interface/web/sites/ajax_get_json.php         |  4 +-
 .../sites/lib/lang/ar_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/bg_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/br_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/ca_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/cz_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/de_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/dk_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/el_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/en_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/es_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/fi_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/fr_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/hr_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/hu_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/id_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/it_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/ja_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/nl_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/pl_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/pt_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/ro_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/ru_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/se_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/sk_web_vhost_domain.lng    |  2 +
 .../sites/lib/lang/tr_web_vhost_domain.lng    |  2 +
 .../sites/templates/web_vhost_domain_edit.htm |  3 +
 interface/web/sites/web_vhost_domain_edit.php | 55 ++++++++++++++++++-
 56 files changed, 147 insertions(+), 5 deletions(-)

diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 3786fc2ca3..45a5644392 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -105,6 +105,7 @@ php_fpm_ini_path=/etc/php5/fpm/php.ini
 php_fpm_pool_dir=/etc/php5/fpm/pool.d
 php_fpm_start_port=9010
 php_fpm_socket_dir=/var/lib/php5-fpm
+php_default_hide=n
 php_default_name=Default
 set_folder_permissions_on_update=n
 add_web_users_to_sshusers_group=y
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index c6022e6bc2..30dc11601c 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -1129,6 +1129,12 @@ $form["tabs"]['web'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'php_default_hide' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
 		'php_default_name' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 24a1a41933..a855abaddf 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index aa4385b8ae..fd2c842654 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index c12a1a7dad..5be35952e4 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -296,6 +296,7 @@ $wb['logging_txt'] = 'Gravar logs de acesso e erros de sites';
 $wb['logging_desc_txt'] = 'Usar Ferramentas > Sicronizar para aplicar mudanças em sites existentes. Para o Apache, os logs de acesso e erros podem ser anonimizados. Para o nginx, apenas o log de acesso é anonimizado, o log de erros conterá endereços IP.';
 $wb['log_retention_txt'] = 'Tempo de retenção do log (dias)';
 $wb['log_retention_error_ispositive'] = 'O tempo de retenção do log deve ser um número > 0.';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Descrição da versão padrão do php';
 $wb['php_default_name_error_empty'] = 'A descrição da versão padrão do php está em branco.';
 $wb['error_mailbox_message_size_txt'] = 'O tamanho da cota da conta de e-mail deve ser maior ou igual o tamanho da cota de mensagens.';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 40f02fb637..c7bf8fb6e6 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 2b42cf6691..4b363ce3f5 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 9e0ce6f48f..2bd71ed3b9 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
 $wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
 $wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index e6d5eaa289..52da85b76e 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 394ba2bde9..7a8f97097f 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index b8c9166d43..1d3eac33cb 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -296,6 +296,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 08c80ec80e..90b1f50ac0 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 85b994a72e..2a4eac40ee 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 705c376a29..e9091f4bce 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index 609d9ab889..379f3f317a 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 52533a2c78..9e5fa5e278 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index e4c1e47ce5..b201d79269 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 2d7d9e9ddb..a4e3a64a4c 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 6cd157154a..e0484786c2 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 542add696b..a514926d53 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 61509f30cf..d825718726 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index fabd1d61cc..1b4772908c 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index b5a1a18759..a0371719e0 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index db17e9ac5a..0e96ff297e 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 92b55336f0..c9aba33e2f 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 801a4fece1..f2799dcabe 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 7d664b6947..f343964750 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Web Sitesi Erişim ve Hata Günlükleri Kaydedilsin';
 $wb['logging_desc_txt'] = 'Değişiklikleri var olan sitelere uygulamak için Araçlar > Yeniden Eşitle komutunu kullanın. Apache için, erişim ve hata günlükleri anonimleştirilebilir. nginx için, only erişim günlüğü anonimleştirilebilir, hata günlüğüne IP adresleri kaydedilir.';
 $wb['log_retention_txt'] = 'Günlük Tutma Süresi (Gün)';
 $wb['log_retention_error_ispositive'] = 'Günlük tutma süresi 0 değerinden büyük bir sayı olmalıdır';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Varsayılan PHP Sürümü Açıklaması';
 $wb['php_default_name_error_empty'] = 'Varsayılan PHP sürümü açıklaması boş olamaz';
 ?>
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 05042bac85..48c3b8bcbc 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -258,7 +258,13 @@
     </div>
     <div id="collapsePHP" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPHP">
       <div class="panel-body">
-	  <!-- Begin content -->
+      <!-- Begin content -->
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='php_default_hide_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='php_default_hide'}
+                    </div>
+                </div>
 				<div class="form-group">
                     <label for="php_default_name" class="col-sm-3 control-label">{tmpl_var name='php_default_name_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="php_default_name" id="php_default_name" value="{tmpl_var name='php_default_name'}" class="form-control" /></div></div>
diff --git a/interface/web/sites/ajax_get_json.php b/interface/web/sites/ajax_get_json.php
index 494f274f10..298fbdb019 100644
--- a/interface/web/sites/ajax_get_json.php
+++ b/interface/web/sites/ajax_get_json.php
@@ -97,7 +97,9 @@ if($type == 'getphpfastcgi'){
 	} elseif($php_type == 'fast-cgi'){
 		$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND active = 'y'".$sql_where, $server_id);
 	}
-	$php_records[]=array('name' => $app->functions->htmlentities($web_config['php_default_name']));
+	if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
+		$php_records[]=array('name' => $app->functions->htmlentities($web_config['php_default_name']));
+	}
 	uasort($php_records, 'sort_php');
 	$php_select = "";
 	if(is_array($php_records) && !empty($php_records)) {
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index f208ab3f36..35c1d80928 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index a84d915230..a3742c7b8b 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -94,6 +94,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be
 $wb['hd_quota_error_regex'] = 'квотата за дисковото пространство е грешна.';
 $wb['traffic_quota_error_regex'] = 'Трафик квота е грешна.';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index 01a7414a98..8a89cb5b20 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
 $wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index aae2f46339..5dcb4216ff 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index deaa3269c4..1bf4e87453 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -100,6 +100,8 @@ $wb['traffic_quota_error_regex'] = 'Traffik kvóta je neplatná.';
 $wb['ssl_key_txt'] = 'SSL klíč';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'Výběr PHP verze';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index d95b6d47e4..037535b9a5 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -99,6 +99,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muß ein
 $wb['hd_quota_error_regex'] = 'Speicherplatzbeschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Transfervolumenbeschränkung ist ungültig.';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM FastCGI Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index aae2f46339..5dcb4216ff 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index 0ea2c2a796..61f90bb828 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index ae546e1c4d..3ebccaa78e 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index f98c02db15..659f50fd65 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $wb['perl_txt'] = 'Perl';
 $wb['hd_quota_error_regex'] = 'Cuota de disco no es válida.';
 $wb['traffic_quota_error_regex'] = 'Cuota de tráfico no es válida.';
 $wb['fastcgi_php_version_txt'] = 'Versión de PHP';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Gestor de Procesos';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index c7c4a14432..6a3fe8c197 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 931c00a533..73502d2916 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
 $wb['ssl_key_txt'] = 'Clé SSL';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index 7842d770b4..1595a2cecb 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index a40a4b62a5..04ff11f952 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 617e7fe769..4ea200465b 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index 9fbca551a3..43ff80b44b 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index 0efd971187..7c8736dc6b 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index dd007d549f..bc4139d44c 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is niet correct.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Versie';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index 8a426b0a1a..1b0afea1a3 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['web_folder_error_regex'] = 'Wprowadzono nieprawidłowy katalog. Proszę nie
 $wb['domain_error_autosub'] = 'Istnieje już subdomena z tymi ustawieniami.';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index 170f2feb04..0f4c1c0080 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index 046c2c71a6..6badcdfb67 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index e87af3b654..f2b8dadad5 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Некорректная квота траф
 $wb['ssl_key_txt'] = 'SSL-ключ';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index 1a2572b950..f612e60ccf 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index 17e60da6e6..0c6bc30d96 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 4cfe808bfb..a190375c37 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deÄŸeri
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
 $wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
+$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index 149d430887..46235e09c2 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -230,6 +230,9 @@
                 <div class="col-sm-9"><select name="fastcgi_php_version" id="fastcgi_php_version" class="form-control">
                     {tmpl_var name='fastcgi_php_version'}
                 </select></div>
+                <tmpl_if name="fastcgi_php_version_default_hidden_warning_confirmed">
+                    <input type="hidden" id="fastcgi_php_version_default_hidden_warning_confirmed" name="fastcgi_php_version_default_hidden_warning_confirmed" value="{tmpl_var name='fastcgi_php_version_default_hidden_warning_confirmed'}" />
+                </tmpl_if>
             </div>
             <tmpl_if name="limit_directive_snippets" op="==" value="y"><div class="form-group">
 				<label for="directive_snippets_id" class="col-sm-3 control-label">{tmpl_var name='directive_snippets_id_txt'}</label>
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 459af39670..7f0cd697e9 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -257,7 +257,9 @@ class page_action extends tform_actions {
 					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?) AND active = 'y'", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
 				}
 			}
-			$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
+				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
 					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
@@ -403,7 +405,9 @@ class page_action extends tform_actions {
 					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?) AND active = 'y'", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
 				}
 			}
-			$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
+				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
 					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
@@ -623,7 +627,9 @@ class page_action extends tform_actions {
 					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND active = 'y'", $parent_domain['server_id']);
 				}
 			}
-			$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
+				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
 					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
@@ -1375,6 +1381,8 @@ class page_action extends tform_actions {
 			}
 		}
 		
+		$this->validateDefaultFastcgiPhpVersion();
+		
 		parent::onSubmit();
 	}
 	
@@ -1539,6 +1547,47 @@ class page_action extends tform_actions {
 
 		if(isset($this->dataRecord['folder_directive_snippets'])) $app->db->query("UPDATE web_domain SET folder_directive_snippets = ? WHERE domain_id = ?", $this->dataRecord['folder_directive_snippets'], $this->id);
 	}
+	
+	function validateDefaultFastcgiPhpVersion() {
+		global $app;
+
+		// If PHP is not enabled, we don't need to validate the default PHP version
+		if (empty($this->dataRecord['php']) || 'no' === $this->dataRecord['php']) {
+			return;
+		}
+
+		// If the default PHP version is not hidden, we don't need to do any additional validation
+		$app->uses('getconf');
+		$web_config = $app->getconf->get_server_config($this->dataRecord['server_id'], 'web');
+		if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
+			return;
+		}
+
+		// The default PHP version is indicated by an empty string, so if the default PHP version is hidden
+		// then an empty string is not a valid PHP version.
+		if (empty($this->dataRecord['fastcgi_php_version'])) {
+			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('fastcgi_php_version_invalid_txt'));
+			return;
+		}
+		
+		// If the default PHP version is now hidden but this vhost was using it, we don't want to implicitly
+		// switch the user to some random Additional PHP version. So we show a warning instead.
+		$old_fastcgi_php_version = null;
+		if ($this->id > 0) {
+			$existing = $app->db->queryOneRecord('SELECT fastcgi_php_version FROM web_domain WHERE domain_id = ?', $this->id);
+			$old_fastcgi_php_version = $existing['fastcgi_php_version'];
+		}
+
+		if ('' === $old_fastcgi_php_version) {
+			// Warning was already shown, user confirmed the new PHP version
+			if (!empty($_POST['fastcgi_php_version_default_hidden_warning_confirmed'])) {
+				return;
+			}
+
+			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('fastcgi_php_version_default_hidden_warning_txt'));
+			$app->tpl->setVar('fastcgi_php_version_default_hidden_warning_confirmed', 1);
+		}
+	}
 }
 
 $page = new page_action;
-- 
GitLab


From df09183d8914e3298dc3fea988dd068a0ddf74c6 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 3 Mar 2020 13:55:42 +0100
Subject: [PATCH 238/571] Do not add redirection when the command already does
 that itself.

---
 server/plugins-available/cron_plugin.inc.php | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index af4e24d974..4c1e07c65f 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -259,7 +259,13 @@ class cron_plugin {
 
 					$command .= "\t";
 					//if($job['type'] != 'chrooted' && substr($job['command'], 0, 1) != "/") $command .= $this->parent_domain['document_root'].'/';
-					$command .= $job['command'] . " " . $log_target;
+
+					$command .= $job['command'];
+
+					// Add a default log target when no redirection is included in the command.
+					if (!preg_match('/>/', $job['command'])) {
+						$command .= " " . $log_target;
+					}
 				}
 
 				if($job['type'] == 'chrooted') {
-- 
GitLab


From b450032f620376b80379659c0fef0523bcb9d0a2 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Tue, 3 Mar 2020 15:09:33 +0100
Subject: [PATCH 239/571] disable change the name of an additional-version
 which is still in use

---
 .../web/admin/lib/lang/de_server_php.lng      |  1 +
 .../web/admin/lib/lang/en_server_php.lng      |  1 +
 interface/web/admin/server_php_edit.php       | 28 +++++++++++++++++++
 3 files changed, 30 insertions(+)

diff --git a/interface/web/admin/lib/lang/de_server_php.lng b/interface/web/admin/lib/lang/de_server_php.lng
index 4eb9065ba3..f43e79b4af 100644
--- a/interface/web/admin/lib/lang/de_server_php.lng
+++ b/interface/web/admin/lib/lang/de_server_php.lng
@@ -15,4 +15,5 @@ $wb['php_fpm_ini_dir_txt'] = 'Pfad zum php.ini Verzeichnis';
 $wb['php_fpm_pool_dir_txt'] = 'Pfad zum PHP-FPM Pool Verzeichnis';
 $wb['active_txt'] = 'Aktiv';
 $wb['php_in_use_error'] = 'Diese PHP-Version wird noch benutzt.';
+$wb['php_name_in_use_error'] = 'Der Name kann nicht geändert werden.';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_php.lng b/interface/web/admin/lib/lang/en_server_php.lng
index 6ae160b648..9d322804bb 100644
--- a/interface/web/admin/lib/lang/en_server_php.lng
+++ b/interface/web/admin/lib/lang/en_server_php.lng
@@ -15,4 +15,5 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory';
 $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory';
 $wb['active_txt'] = 'Active';
 $wb['php_in_use_error'] = 'This PHP-Version is in use.';
+$wb['php_name_in_use_error'] = 'The name can not be changed.';
 ?>
diff --git a/interface/web/admin/server_php_edit.php b/interface/web/admin/server_php_edit.php
index 12aacf60b9..c200b25bae 100644
--- a/interface/web/admin/server_php_edit.php
+++ b/interface/web/admin/server_php_edit.php
@@ -50,7 +50,35 @@ $app->uses('tpl,tform,tform_actions');
 $app->load('tform_actions');
 
 class page_action extends tform_actions {
+	function onSubmit() {
+		global $app;
+
+		if(isset($this->id) && $this->id > 0 && $app->tform->getCurrentTab() == 'php_name') {
+			$rec = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $this->id);
+			if($rec['name'] != $this->dataRecord['name']) {
+				$check = array();
+				// fastcgi
+				if($rec['php_fastcgi_binary'] != '') $check[] = $rec['php_fastcgi_binary'];
+				if($rec['php_fastcgi_ini_dir'] != '') $check[] = $rec['php_fastcgi_ini_dir'];
+				if(!empty($check)) $fastcgi_check = implode(':', $check);
+				unset($check);
+				// fpm
+				if($rec['php_fpm_init_script'] != '') $check[] = $rec['php_fpm_init_script'];
+				if($rec['php_fpm_ini_dir'] != '') $check[] = $rec['php_fpm_ini_dir'];
+				if($rec['php_fpm_pool_dir'] != '') $check[] = $rec['php_fpm_pool_dir'];
+				if(!empty($check)) $fpm_check = implode(':', $check);
+
+ 				$sql = 'SELECT domain_id FROM web_domain WHERE server_id = ? AND fastcgi_php_version LIKE ?';
+		 		if(isset($fastcgi_check)) $web_domains_fastcgi = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fastcgi_check);
+				if(isset($fpm_check)) $web_domains_fpm = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fpm_check);
+
+				if(!empty($webdomains_fastcgi) || !empty($web_domains_fpm))	$app->error($app->tform->lng('php_in_use_error').' '.$app->tform->lng('php_name_in_use_error'));
+			}
+		}
 
+		parent::onSubmit();
+
+	}
 	function onBeforeUpdate() {
 		global $app, $conf;
 
-- 
GitLab


From 814cfb8183935e412dd9988ccda2971ac236fb37 Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Wed, 4 Mar 2020 08:25:18 +0100
Subject: [PATCH 240/571] Fix spf name error regex translation

---
 interface/web/dns/lib/lang/ar_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/bg_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/br_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/ca_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/cz_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/de_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/dk_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/el_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/en_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/es_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/fi_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/fr_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/hr_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/hu_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/id_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/it_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/ja_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/nl_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/pl_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/pt_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/ro_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/ru_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/se_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/sk_dns_spf.lng | 1 +
 interface/web/dns/lib/lang/tr_dns_spf.lng | 1 +
 25 files changed, 25 insertions(+)

diff --git a/interface/web/dns/lib/lang/ar_dns_spf.lng b/interface/web/dns/lib/lang/ar_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/ar_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ar_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_spf.lng b/interface/web/dns/lib/lang/bg_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/bg_dns_spf.lng
+++ b/interface/web/dns/lib/lang/bg_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_spf.lng b/interface/web/dns/lib/lang/br_dns_spf.lng
index bbf571c3b7..13722f6696 100644
--- a/interface/web/dns/lib/lang/br_dns_spf.lng
+++ b/interface/web/dns/lib/lang/br_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
 $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_spf.lng b/interface/web/dns/lib/lang/ca_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/ca_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ca_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_spf.lng b/interface/web/dns/lib/lang/cz_dns_spf.lng
index a5691ee340..637d0ca767 100644
--- a/interface/web/dns/lib/lang/cz_dns_spf.lng
+++ b/interface/web/dns/lib/lang/cz_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
 $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_spf.lng b/interface/web/dns/lib/lang/de_dns_spf.lng
index a4f0f7827f..9bf5e676ec 100644
--- a/interface/web/dns/lib/lang/de_dns_spf.lng
+++ b/interface/web/dns/lib/lang/de_dns_spf.lng
@@ -23,6 +23,7 @@ $wb['record_exists_txt'] = 'DNS-Eintrag existiert bereits';
 $wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
 $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['ttl_range_error'] = 'Min. TTL time ist 60 Sekunden.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
 $wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
diff --git a/interface/web/dns/lib/lang/dk_dns_spf.lng b/interface/web/dns/lib/lang/dk_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/dk_dns_spf.lng
+++ b/interface/web/dns/lib/lang/dk_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_spf.lng b/interface/web/dns/lib/lang/el_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/el_dns_spf.lng
+++ b/interface/web/dns/lib/lang/el_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_spf.lng b/interface/web/dns/lib/lang/en_dns_spf.lng
index 455b5ce0ab..2518d4f51f 100644
--- a/interface/web/dns/lib/lang/en_dns_spf.lng
+++ b/interface/web/dns/lib/lang/en_dns_spf.lng
@@ -27,5 +27,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
 $wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/es_dns_spf.lng b/interface/web/dns/lib/lang/es_dns_spf.lng
index 353134aded..62c60654f0 100755
--- a/interface/web/dns/lib/lang/es_dns_spf.lng
+++ b/interface/web/dns/lib/lang/es_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_mechanism_txt'] = 'Mecanismo SPF';
 $wb['spf_mx_txt'] = 'Permite a los servidores configurados como MX enviar correos desde este dominio';
 $wb['ttl_range_error'] = 'El tiempo mín. de TTL es 60 segundos.';
 $wb['ttl_txt'] = 'TTL';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_spf.lng b/interface/web/dns/lib/lang/fi_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/fi_dns_spf.lng
+++ b/interface/web/dns/lib/lang/fi_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_spf.lng b/interface/web/dns/lib/lang/fr_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/fr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/fr_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_spf.lng b/interface/web/dns/lib/lang/hr_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/hr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/hr_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_spf.lng b/interface/web/dns/lib/lang/hu_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/hu_dns_spf.lng
+++ b/interface/web/dns/lib/lang/hu_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_spf.lng b/interface/web/dns/lib/lang/id_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/id_dns_spf.lng
+++ b/interface/web/dns/lib/lang/id_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_spf.lng b/interface/web/dns/lib/lang/it_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/it_dns_spf.lng
+++ b/interface/web/dns/lib/lang/it_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_spf.lng b/interface/web/dns/lib/lang/ja_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/ja_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ja_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_spf.lng b/interface/web/dns/lib/lang/nl_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/nl_dns_spf.lng
+++ b/interface/web/dns/lib/lang/nl_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_spf.lng b/interface/web/dns/lib/lang/pl_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/pl_dns_spf.lng
+++ b/interface/web/dns/lib/lang/pl_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_spf.lng b/interface/web/dns/lib/lang/pt_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/pt_dns_spf.lng
+++ b/interface/web/dns/lib/lang/pt_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_spf.lng b/interface/web/dns/lib/lang/ro_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/ro_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ro_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_spf.lng b/interface/web/dns/lib/lang/ru_dns_spf.lng
index a0e77b41b1..2d69c49a32 100644
--- a/interface/web/dns/lib/lang/ru_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ru_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'Макс. количество DNS-записей для вашей учетной записи достигнуто.';
 $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту запись.';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_spf.lng b/interface/web/dns/lib/lang/se_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/se_dns_spf.lng
+++ b/interface/web/dns/lib/lang/se_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_spf.lng b/interface/web/dns/lib/lang/sk_dns_spf.lng
index 09720321b2..0cbf77862f 100644
--- a/interface/web/dns/lib/lang/sk_dns_spf.lng
+++ b/interface/web/dns/lib/lang/sk_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_spf.lng b/interface/web/dns/lib/lang/tr_dns_spf.lng
index 2683560275..5ca1e470e3 100644
--- a/interface/web/dns/lib/lang/tr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/tr_dns_spf.lng
@@ -25,5 +25,6 @@ $wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
 $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
-- 
GitLab


From fa5f136581e3b5d25f01c9d662632095c865be72 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 4 Mar 2020 09:42:16 +0100
Subject: [PATCH 241/571] Update nginx_plugin.inc.php (add port check for
 proxy)

---
 server/plugins-available/nginx_plugin.inc.php | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index ef9300e5dc..ca14daf791 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1522,9 +1522,13 @@ class nginx_plugin {
 
 		//proxy protocol settings
 		if($web_config['vhost_proxy_protocol_enabled'] == "y"){
-			$vhost_data['use_proxy_protocol'] = $data['new']['proxy_protocol'];
-			$vhost_data['proxy_protocol_http'] = (int)$web_config['vhost_proxy_protocol_http_port'];
-			$vhost_data['proxy_protocol_https'] = (int)$web_config['vhost_proxy_protocol_https_port'];
+		    if((int)$web_config['vhost_proxy_protocol_https_port'] > 0) {
+			    $vhost_data['use_proxy_protocol'] = $data['new']['proxy_protocol'];
+			    $vhost_data['proxy_protocol_http'] = (int)$web_config['vhost_proxy_protocol_http_port'];
+			    $vhost_data['proxy_protocol_https'] = (int)$web_config['vhost_proxy_protocol_https_port'];
+		    } else {
+		        $vhost_data['use_proxy_protocol'] = "n";
+		    }
 		}else{
 			$vhost_data['use_proxy_protocol'] = "n";
 		}
-- 
GitLab


From bc713be21b3d12ec93fb9c2f93f9558431dd930d Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 4 Mar 2020 09:53:01 +0100
Subject: [PATCH 242/571] Update upd_0089.sql - we do not allow merges into
 upd_xxx files.

---
 install/sql/incremental/upd_0089.sql | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/install/sql/incremental/upd_0089.sql b/install/sql/incremental/upd_0089.sql
index 5c676788d6..e69de29bb2 100644
--- a/install/sql/incremental/upd_0089.sql
+++ b/install/sql/incremental/upd_0089.sql
@@ -1,6 +0,0 @@
--- add new proxy_protocol column
-ALTER TABLE `web_domain`
-    ADD COLUMN `proxy_protocol` ENUM('n','y') NOT NULL DEFAULT 'y' AFTER `log_retention`;
-
--- Update old entrys
-UPDATE `web_domain` SET `proxy_protocol` = 'y';
-- 
GitLab


From 54302cf5cbcc6e401f12b4953c6d48d5a8cd30ea Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 4 Mar 2020 09:55:07 +0100
Subject: [PATCH 243/571] Delete upd_0089.sql

---
 install/sql/incremental/upd_0089.sql | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 install/sql/incremental/upd_0089.sql

diff --git a/install/sql/incremental/upd_0089.sql b/install/sql/incremental/upd_0089.sql
deleted file mode 100644
index e69de29bb2..0000000000
-- 
GitLab


From c97f8313d37c412cf122fa2a9515c59f65fbb170 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 4 Mar 2020 09:55:23 +0100
Subject: [PATCH 244/571] Update upd_dev_collection.sql

---
 install/sql/incremental/upd_dev_collection.sql | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index e69de29bb2..872fe77073 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -0,0 +1,3 @@
+-- add new proxy_protocol column
+ALTER TABLE `web_domain`
+    ADD COLUMN `proxy_protocol` ENUM('n','y') NOT NULL DEFAULT 'y' AFTER `log_retention`;
-- 
GitLab


From c100d85de43979252ec9b3e1474f9f53dcba468b Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 4 Mar 2020 09:55:33 +0100
Subject: [PATCH 245/571] Update upd_dev_collection.sql

---
 install/sql/incremental/upd_dev_collection.sql | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 872fe77073..29ba602bf8 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -1,3 +1,3 @@
 -- add new proxy_protocol column
 ALTER TABLE `web_domain`
-    ADD COLUMN `proxy_protocol` ENUM('n','y') NOT NULL DEFAULT 'y' AFTER `log_retention`;
+    ADD COLUMN `proxy_protocol` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `log_retention`;
-- 
GitLab


From 2597d721df00ef5ce2de5da5a51e508077cf73d8 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 4 Mar 2020 09:56:57 +0100
Subject: [PATCH 246/571] Update ispconfig3.sql

---
 install/sql/ispconfig3.sql | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 6998257046..bfef9733e5 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2071,7 +2071,7 @@ CREATE TABLE `web_domain` (
   `https_port` int(11) unsigned NOT NULL DEFAULT '443',
   `folder_directive_snippets` text,
   `log_retention` int(11) NOT NULL DEFAULT '10',
-  `proxy_protocol` enum('n','y') NOT NULL default 'y',
+  `proxy_protocol` enum('n','y') NOT NULL default 'n',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- 
GitLab


From 03ed8666876866851cb662e52b19903ef1da13ad Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Wed, 4 Mar 2020 17:13:04 +0100
Subject: [PATCH 247/571] Revert earlier, just default log_target to empty
 string, cron discards the output anyway.

---
 server/plugins-available/cron_plugin.inc.php | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index 4c1e07c65f..dac261832f 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -224,7 +224,7 @@ class cron_plugin {
 					$command = str_replace(" ", "", $job['run_min']) . "\t" . str_replace(" ", "", $job['run_hour']) . "\t" . str_replace(" ", "", $job['run_mday']) . "\t" . str_replace(" ", "", $job['run_month']) . "\t" . str_replace(" ", "", $job['run_wday']);
 				}
 				
-				$log_target = ">/dev/null 2>&1";
+				$log_target = "";
 				$log_wget_target = '/dev/null';
 				$log_root = '';
 				if($job['log'] == 'y') {
@@ -259,13 +259,7 @@ class cron_plugin {
 
 					$command .= "\t";
 					//if($job['type'] != 'chrooted' && substr($job['command'], 0, 1) != "/") $command .= $this->parent_domain['document_root'].'/';
-
-					$command .= $job['command'];
-
-					// Add a default log target when no redirection is included in the command.
-					if (!preg_match('/>/', $job['command'])) {
-						$command .= " " . $log_target;
-					}
+					$command .= $job['command'] . " " . $log_target;
 				}
 
 				if($job['type'] == 'chrooted') {
-- 
GitLab


From b88ffe44c55616b721e465fc21cb0e12b8b69de8 Mon Sep 17 00:00:00 2001
From: Xaver Maierhofer <xaver.maierhofer@xwissen.info>
Date: Sat, 7 Mar 2020 22:25:50 +0100
Subject: [PATCH 248/571] Disable stats button if stats are none

---
 .../sites/templates/web_vhost_domain_admin_list.htm    | 10 +++++-----
 .../web/sites/templates/web_vhost_domain_list.htm      | 10 +++++-----
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/interface/web/sites/templates/web_vhost_domain_admin_list.htm b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
index 1ab14300d0..20be5a359f 100644
--- a/interface/web/sites/templates/web_vhost_domain_admin_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
@@ -4,12 +4,12 @@
 
 
         <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
-            
+
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/web_vhost_domain_edit.php?type={tmpl_var name='vhostdomain_type'}"><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="add_new_record_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="add_new_subdomain_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="add_new_aliasdomain_txt"}</tmpl_if></button>
-            
-        
 
-    
+
+
+
         <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
             <div class="table-wrapper marginTop15">
 <table class="table">
@@ -46,7 +46,7 @@
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='domain'}">{tmpl_var name="domain"}</a></td>
                         <td class="text-right">
 							<a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></a>
-							<a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="glyphicon glyphicon-signal"></span></a>
+							<a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"<tmpl_if name='stats_type' op='==' value=''> disabled</tmpl_if>><span class="glyphicon glyphicon-signal"></span></a>
                             <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm
index 105dac9399..4cdde852a3 100644
--- a/interface/web/sites/templates/web_vhost_domain_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_list.htm
@@ -21,12 +21,12 @@
         </div>
         </tmpl_if>
         <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
-            
+
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/web_vhost_domain_edit.php?type={tmpl_var name='vhostdomain_type'}"><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="add_new_record_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="add_new_subdomain_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="add_new_aliasdomain_txt"}</tmpl_if></button>
-            
-        
 
-    
+
+
+
         <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
             <div class="table-wrapper marginTop15">
 <table class="table">
@@ -60,7 +60,7 @@
                         <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='domain'}">{tmpl_var name="domain"}</a></td>
                         <td class="text-right">
 							<a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></button>
-                            <a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="glyphicon glyphicon-signal"></span></a>
+                            <a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"<tmpl_if name='stats_type' op='==' value=''> disabled</tmpl_if>><span class="glyphicon glyphicon-signal"></span></a>
 							<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                         </td>
                     </tr>
-- 
GitLab


From 8400a46c2a61124a77dcf434207d9160c7c0d8fc Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 20 Mar 2020 18:57:25 +0100
Subject: [PATCH 249/571] - escape database name on GRANT

---
 .../mysql_clientdb_plugin.inc.php             | 24 ++++++++++---------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index a26129eed9..72f602f9da 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -108,9 +108,9 @@ class mysql_clientdb_plugin {
 						$result->free();
 				}
 		}
-		
+
 		$app->log("Calling $action for $database_name with access $user_access_mode and hosts " . implode(', ', $host_list), LOGLEVEL_DEBUG);
-		
+
 		// loop through hostlist
 		foreach($host_list as $db_host) {
 			$db_host = trim($db_host);
@@ -137,22 +137,24 @@ class mysql_clientdb_plugin {
 				$app->log("Invalid host " . $db_host . " for GRANT to " . $database_name, LOGLEVEL_DEBUG);
 				continue;
 			}
-			
+
 			$grants = 'ALL PRIVILEGES';
 			if($user_access_mode == 'r') $grants = 'SELECT';
 			elseif($user_access_mode == 'rd') $grants = 'SELECT, DELETE, ALTER, DROP';
-			
+
+			$database_name = str_replace('_', '\\_', $link->escape_string($database_name));
+
 			if($action == 'GRANT') {
 				if($user_access_mode == 'r' || $user_access_mode == 'rd') {
-					if(!$link->query("REVOKE ALL PRIVILEGES ON `".$link->escape_string($database_name)."`.* FROM '".$link->escape_string($database_user)."'@'$db_host'")) $success = false;
-					$app->log("REVOKE ALL PRIVILEGES ON `".$link->escape_string($database_name)."`.* FROM '".$link->escape_string($database_user)."'@'$db_host' success? " . ($success ? 'yes' : 'no'), LOGLEVEL_DEBUG);
+					if(!$link->query("REVOKE ALL PRIVILEGES ON `".$database_name."`.* FROM '".$link->escape_string($database_user)."'@'$db_host'")) $success = false;
+					$app->log("REVOKE ALL PRIVILEGES ON `".$database_name."`.* FROM '".$link->escape_string($database_user)."'@'$db_host' success? " . ($success ? 'yes' : 'no'), LOGLEVEL_DEBUG);
 					$success = true;
 				}
-				
-				if(!$link->query("GRANT " . $grants . " ON `".$link->escape_string($database_name)."`.* TO '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."'")) $success = false;
-				$app->log("GRANT " . $grants . " ON `".$link->escape_string($database_name)."`.* TO '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."' success? " . ($success ? 'yes' : 'no'), LOGLEVEL_DEBUG);
+
+				if(!$link->query("GRANT " . $grants . " ON `".$database_name."`.* TO '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."'")) $success = false;
+				$app->log("GRANT " . $grants . " ON `".$database_name."`.* TO '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."' success? " . ($success ? 'yes' : 'no'), LOGLEVEL_DEBUG);
 			} elseif($action == 'REVOKE') {
-				if(!$link->query("REVOKE ALL PRIVILEGES ON `".$link->escape_string($database_name)."`.* FROM '".$link->escape_string($database_user)."'@'$db_host'")) $success = false;
+				if(!$link->query("REVOKE ALL PRIVILEGES ON `".$database_name."`.* FROM '".$link->escape_string($database_user)."'@'$db_host'")) $success = false;
 			} elseif($action == 'DROP') {
 				if(!$link->query("DROP USER '".$link->escape_string($database_user)."'@'$db_host'")) $success = false;
 			} elseif($action == 'RENAME') {
@@ -293,7 +295,7 @@ class mysql_clientdb_plugin {
 				$app->log('Unable to connect to the database: '.$link->connect_error, LOGLEVEL_ERROR);
 				return;
 			}
-			
+
 			// check if the database exists
 			if($data['new']['database_name'] == $data['old']['database_name']) {
 				$result = $link->query("SHOW DATABASES LIKE '".$link->escape_string($data['new']['database_name'])."'");
-- 
GitLab


From df33e63a635034bd2925ef3ca73a94f8593529eb Mon Sep 17 00:00:00 2001
From: Ramil Valitov <ramilvalitov@gmail.com>
Date: Tue, 24 Mar 2020 02:45:09 +0300
Subject: [PATCH 250/571] [add] make zip file in a single command

---
 server/lib/classes/cron.d/500-backup.inc.php | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index f261daf468..a499918d69 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -127,9 +127,7 @@ class cronjob_backup extends cronjob {
 							if($backup_mode == 'userzip') {
 								//* Create a .zip backup as web user and include also files owned by apache / nginx user
 								$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.zip';
-								$app->system->exec_safe('cd ? && sudo -u ? find . -group ? -print 2> /dev/null | zip -b ? --exclude=./backup\*'.$backup_excludes.' --symlinks ? -@', $web_path, $web_user, $web_group, $backup_tmp, $web_backup_dir.'/'.$web_backup_file);
-								$retval = $app->system->last_exec_retcode();
-								if($retval == 0 || $retval == 12) $app->system->exec_safe('cd ? && sudo -u ? find . -user ? -print 2> /dev/null | zip -b ? --exclude=./backup\*'.$backup_excludes.' --update --symlinks ? -@', $web_path, $web_user, $http_server_user, $backup_tmp, $web_backup_dir.'/'.$web_backup_file);
+								$app->system->exec_safe('cd ? && sudo -u ? find . -group ? -or -user ? -print 2> /dev/null | zip -b ? --exclude=./backup\*'.$backup_excludes.' --symlinks ? -@', $web_path, $web_user, $web_group, $http_server_user, $backup_tmp, $web_backup_dir.'/'.$web_backup_file);
 								$retval = $app->system->last_exec_retcode();
 							} else {
 								//* Create a tar.gz backup as root user
-- 
GitLab


From b72e5ec3563e73bfac4ea8e61603096517310128 Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Thu, 26 Mar 2020 17:46:59 +0100
Subject: [PATCH 251/571] Feature/add api example system config get

---
 interface/lib/classes/remote.d/admin.inc.php  |  7 ++-
 remoting_client/API-docs/navigation.html      |  1 +
 .../API-docs/system_config_get.html           | 29 +++++++++++
 .../examples/system_config_get.php            | 48 +++++++++++++++++++
 4 files changed, 81 insertions(+), 4 deletions(-)
 create mode 100644 remoting_client/API-docs/system_config_get.html
 create mode 100644 remoting_client/examples/system_config_get.php

diff --git a/interface/lib/classes/remote.d/admin.inc.php b/interface/lib/classes/remote.d/admin.inc.php
index 793f9ed339..479b991b7b 100644
--- a/interface/lib/classes/remote.d/admin.inc.php
+++ b/interface/lib/classes/remote.d/admin.inc.php
@@ -131,11 +131,10 @@ class remoting_admin extends remoting {
 	/**
 	 Get the values of the system configuration
 	 @param int session id
-	 @param string  section of the config field in the table. Could be 'web', 'dns', 'mail', 'dns', 'cron', etc
-	 @param string key of the option that you want to set
-	 @param string option value that you want to set
+	 @param string section of the config field in the table. Could be 'web', 'dns', 'mail', 'dns', 'cron', etc
+	 @param string|null key of the option that you want to get 
 	 */
-	public function system_config_get($session_id, $section, $key) {
+	public function system_config_get($session_id, $section, $key = null) {
 		global $app;
 		if(!$this->checkPerm($session_id, 'system_config_get')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
diff --git a/remoting_client/API-docs/navigation.html b/remoting_client/API-docs/navigation.html
index 5168122f28..d8c296801b 100644
--- a/remoting_client/API-docs/navigation.html
+++ b/remoting_client/API-docs/navigation.html
@@ -245,6 +245,7 @@
 <p><a href="sites_web_subdomain_delete.html" target="content">sites_web_subdomain_delete</a></p>
 <p><a href="sites_web_subdomain_get.html" target="content">sites_web_subdomain_get</a></p>
 <p><a href="sites_web_subdomain_update.html" target="content">sites_web_subdomain_update</a></p>
+<p><a href="system_config_get.html" target="content">system_config_get</a></p>
 
 <p><a href=""></a></p>
 <p></p>
diff --git a/remoting_client/API-docs/system_config_get.html b/remoting_client/API-docs/system_config_get.html
new file mode 100644
index 0000000000..7d73c974a3
--- /dev/null
+++ b/remoting_client/API-docs/system_config_get.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+
+
+
+
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>system_config_get(<span class="var">$session_id</span>, <span class="var">$section</span>, <span class="var">$key</span> ='');</h1>
+<br>
+<b>Description: </b>
+<p class="margin"> Returns system config by section and optional key</p><br>
+<b>Input Variables: </b>
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$section</span>, <span class="var">$key</span> =''</p>
+<b>Parameters (in <span class="var">$params</span>): </b>
+<p class="margin"> None.</p>
+<b>Output: </b>
+<p class="margin"> Returns an array with the system config's section values, or a string with the value if a specific config key was requested.</p>
+<!--<b>Output:</b>
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/examples/system_config_get.php b/remoting_client/examples/system_config_get.php
new file mode 100644
index 0000000000..f5d3d47f7b
--- /dev/null
+++ b/remoting_client/examples/system_config_get.php
@@ -0,0 +1,48 @@
+<?php
+
+require 'soap_config.php';
+
+$context = stream_context_create([
+    'ssl' => [
+        // set some SSL/TLS specific options
+        'verify_peer' => false,
+        'verify_peer_name' => false,
+        'allow_self_signed' => true
+    ]
+]);
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Set the function parameters.
+	$server_id = 1;
+
+	$result = $client->system_config_get($session_id, 'misc');
+	print_r($result);
+	echo "<br>";
+
+	$result = $client->system_config_get($session_id, 'misc', 'maintenance_mode');
+	print_r($result);
+	echo "<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
-- 
GitLab


From 3336bba7ac3ad67fbe0643d4858eb01e20163f9e Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Sat, 28 Mar 2020 16:09:23 +0100
Subject: [PATCH 252/571] Load remoting classes from modules

---
 interface/lib/classes/json_handler.inc.php    | 40 +---------
 .../lib/classes/remoting_handler_base.inc.php | 75 +++++++++++++++++++
 interface/lib/classes/rest_handler.inc.php    | 40 +---------
 interface/lib/classes/soap_handler.inc.php    | 40 +---------
 interface/web/remote/index.php                |  2 +-
 interface/web/remote/json.php                 |  2 +-
 interface/web/remote/rest.php                 |  2 +-
 7 files changed, 81 insertions(+), 120 deletions(-)
 create mode 100644 interface/lib/classes/remoting_handler_base.inc.php

diff --git a/interface/lib/classes/json_handler.inc.php b/interface/lib/classes/json_handler.inc.php
index de8dd5ba0d..fb0811d314 100644
--- a/interface/lib/classes/json_handler.inc.php
+++ b/interface/lib/classes/json_handler.inc.php
@@ -30,45 +30,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 
-class ISPConfigJSONHandler {
-	private $methods = array();
-	private $classes = array();
-
-	public function __construct() {
-		global $app;
-
-		// load main remoting file
-		$app->load('remoting');
-
-		// load all remote classes and get their methods
-		$dir = dirname(realpath(__FILE__)) . '/remote.d';
-		$d = opendir($dir);
-		while($f = readdir($d)) {
-			if($f == '.' || $f == '..') continue;
-			if(!is_file($dir . '/' . $f) || substr($f, strrpos($f, '.')) != '.php') continue;
-
-			$name = substr($f, 0, strpos($f, '.'));
-
-			include $dir . '/' . $f;
-			$class_name = 'remoting_' . $name;
-			if(class_exists($class_name, false)) {
-				$this->classes[$class_name] = new $class_name();
-				foreach(get_class_methods($this->classes[$class_name]) as $method) {
-					$this->methods[$method] = $class_name;
-				}
-			}
-		}
-		closedir($d);
-
-		// add main methods
-		$this->methods['login'] = 'remoting';
-		$this->methods['logout'] = 'remoting';
-		$this->methods['get_function_list'] = 'remoting';
-
-		// create main class
-		$this->classes['remoting'] = new remoting(array_keys($this->methods));
-	}
-
+class ISPConfigJSONHandler extends ISPConfigRemotingHandlerBase {
 	private function _return_json($code, $message, $data = false) {
 		$ret = new stdClass;
 		$ret->code = $code;
diff --git a/interface/lib/classes/remoting_handler_base.inc.php b/interface/lib/classes/remoting_handler_base.inc.php
new file mode 100644
index 0000000000..6393959df8
--- /dev/null
+++ b/interface/lib/classes/remoting_handler_base.inc.php
@@ -0,0 +1,75 @@
+<?php
+
+/*
+Copyright (c) 2020, ISPConfig
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class ISPConfigRemotingHandlerBase
+{
+	protected $methods = array();
+	protected $classes = array();
+
+	public function __construct()
+	{
+		global $app;
+
+		// load main remoting file
+		$app->load('remoting');
+
+		// load all remoting classes and get their methods
+		$this->load_remoting_classes(realpath(__DIR__) . '/remote.d/*.inc.php');
+
+		// load all remoting classes from modules
+		$this->load_remoting_classes(realpath(__DIR__) . '/../../web/*/lib/classes/remote.d/*.inc.php');
+
+		// add main methods
+		$this->methods['login'] = 'remoting';
+		$this->methods['logout'] = 'remoting';
+		$this->methods['get_function_list'] = 'remoting';
+
+		// create main class
+		$this->classes['remoting'] = new remoting(array_keys($this->methods));
+	}
+
+	private function load_remoting_classes($glob_pattern)
+	{
+		$files = glob($glob_pattern);
+
+		foreach ($files as $file) {
+			$name = str_replace('.inc.php', '', basename($file));
+			$class_name = 'remoting_' . $name;
+
+			include_once $file;
+			if(class_exists($class_name, false)) {
+				$this->classes[$class_name] = new $class_name();
+				foreach(get_class_methods($this->classes[$class_name]) as $method) {
+					$this->methods[$method] = $class_name;
+				}
+			}
+		}
+	}
+}
diff --git a/interface/lib/classes/rest_handler.inc.php b/interface/lib/classes/rest_handler.inc.php
index ceaa7c63be..ae3e443d48 100644
--- a/interface/lib/classes/rest_handler.inc.php
+++ b/interface/lib/classes/rest_handler.inc.php
@@ -30,46 +30,8 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 
-class ISPConfigRESTHandler {
-	private $methods = array();
-	private $classes = array();
-	
+class ISPConfigRESTHandler extends ISPConfigRemotingHandlerBase {
 	private $api_version = 1;
-	
-	public function __construct() {
-		global $app;
-
-		// load main remoting file
-		$app->load('remoting');
-
-		// load all remote classes and get their methods
-		$dir = dirname(realpath(__FILE__)) . '/remote.d';
-		$d = opendir($dir);
-		while($f = readdir($d)) {
-			if($f == '.' || $f == '..') continue;
-			if(!is_file($dir . '/' . $f) || substr($f, strrpos($f, '.')) != '.php') continue;
-
-			$name = substr($f, 0, strpos($f, '.'));
-
-			include $dir . '/' . $f;
-			$class_name = 'remoting_' . $name;
-			if(class_exists($class_name, false)) {
-				$this->classes[$class_name] = new $class_name();
-				foreach(get_class_methods($this->classes[$class_name]) as $method) {
-					$this->methods[$method] = $class_name;
-				}
-			}
-		}
-		closedir($d);
-
-		// add main methods
-		$this->methods['login'] = 'remoting';
-		$this->methods['logout'] = 'remoting';
-		$this->methods['get_function_list'] = 'remoting';
-
-		// create main class
-		$this->classes['remoting'] = new remoting(array_keys($this->methods));
-	}
 
 	private function _return_error($code, $codename, $message) {
 		header('HTTP/1.1 ' . $code . ' ' . $codename);
diff --git a/interface/lib/classes/soap_handler.inc.php b/interface/lib/classes/soap_handler.inc.php
index 704e21b20b..16693e12c9 100644
--- a/interface/lib/classes/soap_handler.inc.php
+++ b/interface/lib/classes/soap_handler.inc.php
@@ -30,45 +30,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 
-class ISPConfigSoapHandler {
-	private $methods = array();
-	private $classes = array();
-
-	public function __construct() {
-		global $app;
-
-		// load main remoting file
-		$app->load('remoting');
-
-		// load all remote classes and get their methods
-		$dir = dirname(realpath(__FILE__)) . '/remote.d';
-		$d = opendir($dir);
-		while($f = readdir($d)) {
-			if($f == '.' || $f == '..') continue;
-			if(!is_file($dir . '/' . $f) || substr($f, strrpos($f, '.')) != '.php') continue;
-
-			$name = substr($f, 0, strpos($f, '.'));
-
-			include_once $dir . '/' . $f;
-			$class_name = 'remoting_' . $name;
-			if(class_exists($class_name, false)) {
-				$this->classes[$class_name] = new $class_name();
-				foreach(get_class_methods($this->classes[$class_name]) as $method) {
-					$this->methods[$method] = $class_name;
-				}
-			}
-		}
-		closedir($d);
-
-		// add main methods
-		$this->methods['login'] = 'remoting';
-		$this->methods['logout'] = 'remoting';
-		$this->methods['get_function_list'] = 'remoting';
-
-		// create main class
-		$this->classes['remoting'] = new remoting(array_keys($this->methods));
-	}
-
+class ISPConfigSoapHandler extends ISPConfigRemotingHandlerBase {
 	public function __call($method, $params) {
 		if(array_key_exists($method, $this->methods) == false) {
 			throw new SoapFault('invalid_method', 'Method ' . $method . ' does not exist');
diff --git a/interface/web/remote/index.php b/interface/web/remote/index.php
index 670a9db13b..6352dfe504 100644
--- a/interface/web/remote/index.php
+++ b/interface/web/remote/index.php
@@ -8,7 +8,7 @@ require_once '../../lib/app.inc.php';
 
 if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
 
-$app->load('soap_handler,getconf');
+$app->load('remoting_handler_base,soap_handler,getconf');
 
 $security_config = $app->getconf->get_security_config('permissions');
 if($security_config['remote_api_allowed'] != 'yes') die('Remote API is disabled in security settings.');
diff --git a/interface/web/remote/json.php b/interface/web/remote/json.php
index 926a995395..d6eb8dcbc1 100644
--- a/interface/web/remote/json.php
+++ b/interface/web/remote/json.php
@@ -8,7 +8,7 @@ require_once '../../lib/app.inc.php';
 
 if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
 
-$app->load('json_handler,getconf');
+$app->load('remoting_handler_base,json_handler,getconf');
 
 $security_config = $app->getconf->get_security_config('permissions');
 if($security_config['remote_api_allowed'] != 'yes') die('Remote API is disabled in security settings.');
diff --git a/interface/web/remote/rest.php b/interface/web/remote/rest.php
index 4f202c6eee..381fd42655 100644
--- a/interface/web/remote/rest.php
+++ b/interface/web/remote/rest.php
@@ -6,7 +6,7 @@ require_once '../../lib/config.inc.php';
 $conf['start_session'] = false;
 require_once '../../lib/app.inc.php';
 
-$app->load('rest_handler,getconf');
+$app->load('remoting_handler_base,rest_handler,getconf');
 
 $security_config = $app->getconf->get_security_config('permissions');
 if($security_config['remote_api_allowed'] != 'yes') die('Remote API is disabled in security settings.');
-- 
GitLab


From aa1eed46b3d03746640a73db6df7d163ba036df3 Mon Sep 17 00:00:00 2001
From: Ramil Valitov <ramilvalitov@gmail.com>
Date: Mon, 30 Mar 2020 12:41:39 +0200
Subject: [PATCH 253/571] Feature/backup copies

---
 interface/web/mail/form/mail_user.tform.php         | 2 +-
 interface/web/sites/form/web_vhost_domain.tform.php | 2 +-
 server/lib/classes/cron.d/500-backup.inc.php        | 9 +++++++--
 server/lib/classes/cron.d/500-backup_mail.inc.php   | 7 ++++++-
 4 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index da386f5844..0efc7f3d6b 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -469,7 +469,7 @@ if ($backup_available) {
 				'datatype'      => 'INTEGER',
 				'formtype'      => 'SELECT',
 				'default'       => '',
-				'value'         => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')
+				'value'			=> array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10', '15' => '15', '20' => '20', '30' => '30')
 			),
 		##################################
 		# END Datatable fields
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 8b5a36441a..5c3057f685 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -668,7 +668,7 @@ if ($backup_available) {
 				'datatype' => 'INTEGER',
 				'formtype' => 'SELECT',
 				'default' => '',
-				'value'  => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')
+				'value'  => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10', '15' => '15', '20' => '20', '30' => '30')
 			),
 			'backup_excludes' => array (
 				'datatype' => 'VARCHAR',
diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index f261daf468..b68dd3b8e1 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -33,6 +33,11 @@ class cronjob_backup extends cronjob {
 	// job schedule
 	protected $_schedule = '0 0 * * *';
 
+	/**
+	 * The maximum number of backups that ISPConfig can store.
+	 */
+	const max_backups = 30;
+
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
 		global $app;
@@ -177,7 +182,7 @@ class cronjob_backup extends cronjob {
 
 							rsort($files);
 
-							for ($n = $backup_copies; $n <= 10; $n++) {
+							for ($n = $backup_copies; $n <= self::max_backups; $n++) {
 								if(isset($files[$n]) && is_file($web_backup_dir.'/'.$files[$n])) {
 									$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
 									$app->db->query($sql, $conf['server_id'], $web_id, $files[$n]);
@@ -306,7 +311,7 @@ class cronjob_backup extends cronjob {
 							reset($files);
 							foreach($files as $db_name => $filelist) {
 								rsort($filelist);
-								for ($n = $backup_copies; $n <= 10; $n++) {
+								for ($n = $backup_copies; $n <= self::max_backups; $n++) {
 									if(isset($filelist[$n]) && is_file($db_backup_dir.'/'.$filelist[$n])) {
 										$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
 										$app->db->query($sql, $conf['server_id'], $web_id, $filelist[$n]);
diff --git a/server/lib/classes/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php
index 234f02771d..2b1fd58177 100644
--- a/server/lib/classes/cron.d/500-backup_mail.inc.php
+++ b/server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -33,6 +33,11 @@ class cronjob_backup_mail extends cronjob {
 	protected $_schedule = '0 0 * * *';
 	private $tmp_backup_dir = '';
 
+	/**
+	 * The maximum number of backups that ISPConfig can store.
+	 */
+	const max_backups = 30;
+
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
 		global $app;
@@ -204,7 +209,7 @@ class cronjob_backup_mail extends cronjob {
 						}
 						$dir_handle->close();
 						rsort($files);
-						for ($n = $backup_copies; $n <= 10; $n++) {
+						for ($n = $backup_copies; $n <= self::max_backups; $n++) {
 							if(isset($files[$n]) && is_file($mail_backup_dir.'/'.$files[$n])) {
 								unlink($mail_backup_dir.'/'.$files[$n]);
 								$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-- 
GitLab


From f4393490ffb793c91b0d060ff591848fe5f245cc Mon Sep 17 00:00:00 2001
From: Webslice <4052-webslice@users.noreply.git.ispconfig.org>
Date: Mon, 30 Mar 2020 12:43:40 +0200
Subject: [PATCH 254/571] Exclude IP's from maintenance

---
 CONTRIBUTING.md                                  |  2 +-
 install/tpl/system.ini.master                    |  1 +
 interface/lib/app.inc.php                        | 16 ++++++++++++++++
 interface/lib/classes/remoting.inc.php           |  4 +---
 interface/web/admin/form/system_config.tform.php | 14 ++++++++++++++
 .../web/admin/lib/lang/ar_system_config.lng      |  2 ++
 .../web/admin/lib/lang/bg_system_config.lng      |  2 ++
 .../web/admin/lib/lang/br_system_config.lng      |  2 ++
 .../web/admin/lib/lang/ca_system_config.lng      |  2 ++
 .../web/admin/lib/lang/cz_system_config.lng      |  2 ++
 .../web/admin/lib/lang/de_system_config.lng      |  2 ++
 .../web/admin/lib/lang/dk_system_config.lng      |  2 ++
 .../web/admin/lib/lang/el_system_config.lng      |  2 ++
 .../web/admin/lib/lang/en_system_config.lng      |  2 ++
 .../web/admin/lib/lang/es_system_config.lng      |  2 ++
 .../web/admin/lib/lang/fi_system_config.lng      |  2 ++
 .../web/admin/lib/lang/fr_system_config.lng      |  2 ++
 .../web/admin/lib/lang/hr_system_config.lng      |  2 ++
 .../web/admin/lib/lang/hu_system_config.lng      |  2 ++
 .../web/admin/lib/lang/id_system_config.lng      |  2 ++
 .../web/admin/lib/lang/it_system_config.lng      |  2 ++
 .../web/admin/lib/lang/ja_system_config.lng      |  2 ++
 .../web/admin/lib/lang/nl_system_config.lng      |  2 ++
 .../web/admin/lib/lang/pl_system_config.lng      |  2 ++
 .../web/admin/lib/lang/pt_system_config.lng      |  2 ++
 .../web/admin/lib/lang/ro_system_config.lng      |  2 ++
 .../web/admin/lib/lang/ru_system_config.lng      |  2 ++
 .../web/admin/lib/lang/se_system_config.lng      |  2 ++
 .../web/admin/lib/lang/sk_system_config.lng      |  2 ++
 .../web/admin/lib/lang/tr_system_config.lng      |  2 ++
 .../admin/templates/system_config_misc_edit.htm  |  6 ++++++
 interface/web/login/index.php                    |  5 ++---
 32 files changed, 91 insertions(+), 7 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f6c528479a..d8eac80ebd 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -123,4 +123,4 @@ $web_config = $app->getconf->get_server_config($server_id,'web');
 
 # Learn about the form validators
 There are form validators in interface/lib/classes/tform.inc.php to make validating forms easier.
-Read about: REGEX,UNIQUE,NOTEMPTY,ISEMAIL,ISINT,ISPOSITIVE,ISIPV4,CUSTOM
+Read about: REGEX,UNIQUE,NOTEMPTY,ISEMAIL,ISINT,ISPOSITIVE,ISIPV4,ISIPV6,ISIP,CUSTOM
diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index c916a62547..4df1a877dc 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -55,6 +55,7 @@ tab_change_warning=n
 use_loadindicator=y
 use_combobox=y
 maintenance_mode=n
+maintenance_mode_exclude_ips=
 admin_dashlets_left=
 admin_dashlets_right=
 reseller_dashlets_left=
diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index e817fcbd44..be6c15666c 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -333,6 +333,22 @@ class app {
 		$this->tpl->setVar('globalsearch_noresults_limit_txt', $this->lng('globalsearch_noresults_limit_txt'));
 		$this->tpl->setVar('globalsearch_searchfield_watermark_txt', $this->lng('globalsearch_searchfield_watermark_txt'));
 	}
+
+	public function is_under_maintenance() {
+		$system_config_misc = $this->getconf->get_global_config('misc');
+		$maintenance_mode = 'n';
+		$maintenance_mode_exclude_ips = [];
+
+		if (!empty($system_config_misc['maintenance_mode'])) {
+			$maintenance_mode = $system_config_misc['maintenance_mode'];
+		}
+
+		if (!empty($system_config_misc['maintenance_mode_exclude_ips'])) {
+			$maintenance_mode_exclude_ips = array_map('trim', explode(',', $system_config_misc['maintenance_mode_exclude_ips']));
+		}
+
+		return 'y' === $maintenance_mode && !in_array($_SERVER['REMOTE_ADDR'], $maintenance_mode_exclude_ips);
+	}
 	
 	private function get_cookie_domain() {
 		$sec_config = $this->getconf->get_security_config('permissions');
diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php
index e1fc1ada86..47aa517de8 100644
--- a/interface/lib/classes/remoting.inc.php
+++ b/interface/lib/classes/remoting.inc.php
@@ -72,9 +72,7 @@ class remoting {
 		global $app, $conf;
 
 		// Maintenance mode
-		$app->uses('ini_parser,getconf');
-		$server_config_array = $app->getconf->get_global_config('misc');
-		if($server_config_array['maintenance_mode'] == 'y'){
+		if($app->is_under_maintenance()){
 			throw new SoapFault('maintenance_mode', 'This ISPConfig installation is currently under maintenance. We should be back shortly. Thank you for your patience.');
 			return false;
 		}
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index cb37cbefdd..d1b0a793e7 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -606,6 +606,20 @@ $form["tabs"]['misc'] = array (
 			'default' => 'n',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'maintenance_mode_exclude_ips' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array(
+				 0 => array (
+					'type' => 'ISIP',
+					'allowempty' => true,
+					'separator' => ',',
+					'errmsg'=> 'maintenance_mode_exclude_ips_error_isip'
+				),
+			),
+			'default' => '',
+			'value'  => ''
+		),
 		'admin_dashlets_left' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index 0a830014d8..4ea9a68919 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index 130cb596aa..1ea00be94f 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Администраторски емаил';
 $wb['admin_name_txt'] = 'Администраторски имена';
 $wb['system_config_desc_txt'] = '';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index 98bd4c9614..f1feae4768 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -40,6 +40,8 @@ $wb['admin_mail_txt'] = 'Administrador(es) de e-mails';
 $wb['monitor_key_txt'] = 'Palavras reservadas a monitorar';
 $wb['admin_name_txt'] = 'Nome do administrador';
 $wb['maintenance_mode_txt'] = 'Modo manutenção';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Usar SMTP para enviar e-mails do sistema';
 $wb['smtp_host_txt'] = 'Host SMTP';
 $wb['smtp_port_txt'] = 'Porta SMTP';
diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index cc3c11c6c5..d9dfcfaa66 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -40,6 +40,8 @@ $wb['admin_mail_txt'] = 'Administrator\'s e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrator\'s name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index 3660e1b689..e85b8ab9a5 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -29,6 +29,8 @@ $wb['mailmailinglist_link_txt'] = 'Ikonový odkaz na aplikaci E-mailových konfe
 $wb['mailmailinglist_url_txt'] = 'E-mailové konference URL';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['maintenance_mode_txt'] = 'Režim údržby';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Použít (zvolit) SMTP server pro zasílání systémových mailů';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 76910e1db3..21169ddf08 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -37,6 +37,8 @@ $wb['admin_mail_txt'] = 'Administrator E-Mail';
 $wb['monitor_key_txt'] = 'ISPConfig Monitor App Passwort';
 $wb['admin_name_txt'] = 'Name des Administrators';
 $wb['maintenance_mode_txt'] = 'Wartungsmodus';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'SMTP zum System E-Mailversand nutzen';
 $wb['smtp_host_txt'] = 'SMTP Server';
 $wb['smtp_port_txt'] = 'SMTP Port';
diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index 26b0fe7e78..eb725ac519 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -35,6 +35,8 @@ $wb['admin_mail_txt'] = 'Administratorer e-mail';
 $wb['monitor_key_txt'] = 'Monitor nøgleord';
 $wb['admin_name_txt'] = 'Administratorer navn';
 $wb['maintenance_mode_txt'] = 'Vedligeholdelsestilstand';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Brug SMTP for at sende system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 640d6f00a9..583bef7d39 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'e-mail Διαχειριστών';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Όνομα Administrator';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP θύρα';
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index ef34493c9d..f43603f6b6 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -40,6 +40,8 @@ $wb['admin_mail_txt'] = 'Administrator\'s e-mail';
 $wb["monitor_key_txt"] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrator\'s name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index 043c52cfdd..f788117fd4 100755
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -40,6 +40,8 @@ $wb['mailboxlist_webmail_link_txt'] = 'Vinculo a correo web en la lista de buzon
 $wb['mailmailinglist_link_txt'] = 'Vínculo a la lista de correos en la lista de la Lista de correos';
 $wb['mailmailinglist_url_txt'] = 'URL a la lista de correos';
 $wb['maintenance_mode_txt'] = 'Modo de mantenimiento';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['min_password_length_txt'] = 'Longitud mínima de la contraseña';
 $wb['min_password_strength_txt'] = 'Fortaleza mínima de la contraseña';
 $wb['monitor_key_txt'] = 'Palabra clave del Monitor';
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index c0972c49d8..9def05e14a 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 18f0dbbed4..7150804aaf 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'E-mail de l’administrateur';
 $wb['monitor_key_txt'] = 'Mot-clé du moniteur';
 $wb['admin_name_txt'] = 'Nom des administrateurs';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index a7735647b1..21b7953035 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -29,6 +29,8 @@ $wb['mailmailinglist_url_txt'] = 'URL mailing liste';
 $wb['admin_mail_txt'] = 'e-mail administratora';
 $wb['admin_name_txt'] = 'Ime administratora';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index cee497fe19..8ef0acdeae 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_name_txt'] = 'Administrators name';
 $wb['enable_custom_login_txt'] = 'Allow custom login name';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index 344185b84d..5e76d45bf7 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index 311b7c957c..85464c3739 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -29,6 +29,8 @@ $wb['mailmailinglist_url_txt'] = 'Mailing list URL';
 $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index aa5cc6a7a3..744db787b8 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index 44a58b7646..f4b778d337 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -32,6 +32,8 @@ $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index a809251ec1..95bf2f6ffc 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -37,6 +37,8 @@ $wb['vhost_subdomains_note_txt'] = 'Nie możesz wyłączyć tego tak długo jak
 $wb['vhost_aliasdomains_txt'] = 'Twórz aliasdomeny jako strony web';
 $wb['vhost_aliasdomains_note_txt'] = 'Nie możesz wyłączyć tego tak długo jak istnieją w systemie vhosty aliasdomen.';
 $wb['maintenance_mode_txt'] = 'Tryb serwisowy';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Używaj SMTP do wysyłania powiadomień systemowych';
 $wb['smtp_host_txt'] = 'Host SMTP';
 $wb['smtp_port_txt'] = 'Port SMTP';
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index 6fc26344c0..faaebeca2a 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index 2a39a454e8..e6ed186de7 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index baed497b0e..792628d492 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -29,6 +29,8 @@ $wb['mailmailinglist_url_txt'] = 'URL почтовой рассылки';
 $wb['admin_mail_txt'] = 'E-mail администратора';
 $wb['admin_name_txt'] = 'Имя администратора';
 $wb['maintenance_mode_txt'] = 'Режим технического бслуживания';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Использовать SMTP для отправки системных сообщений';
 $wb['smtp_host_txt'] = 'Хост SMTP';
 $wb['smtp_port_txt'] = 'Порт SMTP';
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 74ae16734f..8f6c9a63f0 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Administratörens epostadress';
 $wb['monitor_key_txt'] = 'Bevakning nyckelord';
 $wb['admin_name_txt'] = 'Administratörens namn';
 $wb['maintenance_mode_txt'] = 'Underhållsläge';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Använd SMTP för att skicka systemmail';
 $wb['smtp_host_txt'] = 'SMTP-värd';
 $wb['smtp_port_txt'] = 'SMTP-port';
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index 90418e87d5..2ea9666db5 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -29,6 +29,8 @@ $wb['admin_mail_txt'] = 'Administrators e-mail';
 $wb['monitor_key_txt'] = 'Monitor keyword';
 $wb['admin_name_txt'] = 'Administrators name';
 $wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
 $wb['smtp_host_txt'] = 'SMTP host';
 $wb['smtp_port_txt'] = 'SMTP port';
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index 3ef8e26875..0ccf846c1c 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -40,6 +40,8 @@ $wb['admin_mail_txt'] = 'Yönetici E-posta Adresi';
 $wb['monitor_key_txt'] = 'Ä°zlenecek Kelime';
 $wb['admin_name_txt'] = 'Yönetici Adı';
 $wb['maintenance_mode_txt'] = 'Bakım Kipi';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
 $wb['smtp_enabled_txt'] = 'Sistem e-postaları SMTP ile gönderilsin';
 $wb['smtp_host_txt'] = 'SMTP Sunucusu';
 $wb['smtp_port_txt'] = 'SMTP Kapısı';
diff --git a/interface/web/admin/templates/system_config_misc_edit.htm b/interface/web/admin/templates/system_config_misc_edit.htm
index 45bdfcd275..00debd66dc 100644
--- a/interface/web/admin/templates/system_config_misc_edit.htm
+++ b/interface/web/admin/templates/system_config_misc_edit.htm
@@ -113,6 +113,12 @@
                     {tmpl_var name='maintenance_mode'}
                 </div>
             </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='maintenance_mode_exclude_ips_txt'}</label>
+                <div class="col-sm-9">
+                    <input type="text" name="maintenance_mode_exclude_ips" id="maintenance_mode_exclude_ips" value="{tmpl_var name='maintenance_mode_exclude_ips'}" class="form-control" />
+                </div>
+            </div>
 			
 			<tmpl_if name="msg">
                 <div id="OKMsg"><p><tmpl_var name="msg"></p></div>
diff --git a/interface/web/login/index.php b/interface/web/login/index.php
index 47030e438d..b5d5abc27b 100644
--- a/interface/web/login/index.php
+++ b/interface/web/login/index.php
@@ -48,9 +48,8 @@ $app->load_language_file('web/login/lib/lang/'.$conf["language"].'.lng');
 // Maintenance mode
 $maintenance_mode = false;
 $maintenance_mode_error = '';
-$app->uses('ini_parser,getconf');
 $server_config_array = $app->getconf->get_global_config('misc');
-if($server_config_array['maintenance_mode'] == 'y'){
+if($app->is_under_maintenance()) {
 	$maintenance_mode = true;
 	$maintenance_mode_error = $app->lng('error_maintenance_mode');
 }
@@ -208,7 +207,7 @@ if(count($_POST) > 0) {
 			if($user) {
 				if($user['active'] == 1) {
 					// Maintenance mode - allow logins only when maintenance mode is off or if the user is admin
-					if(!$maintenance_mode || $user['typ'] == 'admin'){
+					if(!$app->is_under_maintenance() || $user['typ'] == 'admin'){
 						
 						// User login right, so attempts can be deleted
 						$sql = "DELETE FROM `attempts_login` WHERE `ip`=?";
-- 
GitLab


From 5f969095a6e47b63f26a24de18878d65b7783a01 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 30 Mar 2020 13:12:03 +0200
Subject: [PATCH 255/571] - manually ported merge request !963

---
 .../plugins-available/apache2_plugin.inc.php  | 103 ++++++++++--------
 server/plugins-available/nginx_plugin.inc.php |  95 ++++++++--------
 2 files changed, 108 insertions(+), 90 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index a40e902e2d..06b2afce9a 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -73,7 +73,7 @@ class apache2_plugin {
 		$app->plugins->registerEvent('server_ip_insert', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_ip_update', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_ip_delete', $this->plugin_name, 'server_ip');
-		
+
 		$app->plugins->registerEvent('server_insert', $this->plugin_name, 'server_ip');
 		$app->plugins->registerEvent('server_update', $this->plugin_name, 'server_ip');
 
@@ -97,14 +97,14 @@ class apache2_plugin {
 
 	private function get_master_php_ini_content($web_data) {
 		global $app, $conf;
-		
+
 		$app->uses('getconf');
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 		$fastcgi_config = $app->getconf->get_server_config($conf['server_id'], 'fastcgi');
-		
+
 		$php_ini_content = '';
 		$master_php_ini_path = '';
-		
+
 		if($web_data['php'] == 'mod') {
 			$master_php_ini_path = $web_config['php_ini_path_apache'];
 		} else {
@@ -135,7 +135,7 @@ class apache2_plugin {
 				}
 			}
 		}
-		
+
 		// Resolve inconsistant path settings
 		if($master_php_ini_path != '' && is_dir($master_php_ini_path) && is_file($master_php_ini_path.'/php.ini')) {
 			$master_php_ini_path .= '/php.ini';
@@ -145,7 +145,7 @@ class apache2_plugin {
 		if($master_php_ini_path != '' && substr($master_php_ini_path, -7) == 'php.ini' && is_file($master_php_ini_path)) {
 			$php_ini_content .= $app->system->file_get_contents($master_php_ini_path)."\n";
 		}
-		
+
 		return $php_ini_content;
 	}
 
@@ -200,11 +200,11 @@ class apache2_plugin {
 				$custom_php_ini_dir .= '_' . $web_folder;
 			}
 			if(!is_dir($web_config['website_basedir'].'/conf')) $app->system->mkdir($web_config['website_basedir'].'/conf');
-			
+
 			if(!is_dir($custom_php_ini_dir)) $app->system->mkdir($custom_php_ini_dir);
-			
+
 			$php_ini_content = $this->get_master_php_ini_content($web_data);
-			
+
 			if(intval($web_data['directive_snippets_id']) > 0){
 				$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'apache' AND active = 'y' AND customer_viewable = 'y'", intval($web_data['directive_snippets_id']));
 				if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
@@ -223,7 +223,7 @@ class apache2_plugin {
 					}
 				}
 			}
-		
+
 			$php_ini_content .= str_replace("\r", '', trim($web_data['custom_php_ini']));
 			$app->system->file_put_contents($custom_php_ini_dir.'/php.ini', $php_ini_content);
 			$app->log('Info: rewrote custom php.ini for web ' . $web_data['domain_id'] . ' (' . $web_data['domain'] . ').', LOGLEVEL_DEBUG);
@@ -329,8 +329,16 @@ class apache2_plugin {
         [ req_attributes ]
         ";//challengePassword              = A challenge password";
 
+			$ext_cnf = "
+        subjectAltName         = @alt_names
+
+        [alt_names]
+        DNS.1                  = .$domain";
+
 			$ssl_cnf_file = $ssl_dir.'/openssl.conf';
 			$app->system->file_put_contents($ssl_cnf_file, $ssl_cnf);
+			$ssl_ext_file = $ssl_dir.'/v3.ext';
+			$app->system->file_put_contents($ssl_ext_file, $ext_cnf);
 
 			$rand_file = $rand_file;
 			$key_file2 = $key_file2;
@@ -356,10 +364,10 @@ class apache2_plugin {
 
 				if(file_exists($web_config['CA_path'].'/openssl.cnf'))
 				{
-					$app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file);
+					$app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ? -extfile ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file, $ssl_ext_file);
 					$app->log("Creating CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 					if(filesize($crt_file) == 0 || !file_exists($crt_file)) {
-						$app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config " . $web_config['CA_path'] . "/openssl.cnf -passin pass:" . $web_config['CA_pass'] . " -in $openssl_cmd_csr_file", LOGLEVEL_ERROR);
+						$app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config " . $web_config['CA_path'] . "/openssl.cnf -passin pass:" . $web_config['CA_pass'] . " -in $openssl_cmd_csr_file -extfile $ssl_ext_file", LOGLEVEL_ERROR);
 					}
 				};
 				if (@filesize($crt_file)==0 || !file_exists($crt_file)){
@@ -373,6 +381,7 @@ class apache2_plugin {
 			$app->system->chmod($key_file, 0400);
 			@$app->system->unlink($config_file);
 			@$app->system->unlink($rand_file);
+			@$app->system->unlink($ssl_ext_file);
 			$ssl_request = $app->system->file_get_contents($csr_file);
 			$ssl_cert = $app->system->file_get_contents($crt_file);
 			$ssl_key = $app->system->file_get_contents($key_file);
@@ -383,15 +392,15 @@ class apache2_plugin {
 			$app->dbmaster->query("UPDATE web_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key, $data['new']['domain']);
 			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 		}
-		
+
 		//* Check that the SSL key is not password protected
 		if($data["new"]["ssl_action"] == 'save') {
 			if(stristr($data["new"]["ssl_key"],'Proc-Type: 4,ENCRYPTED')) {
 				$data["new"]["ssl_action"] = '';
-			
+
 				$app->log('SSL Certificate not saved. The SSL key is encrypted.', LOGLEVEL_WARN);
 				$app->dbmaster->datalogError('SSL Certificate not saved. The SSL key is encrypted.');
-			
+
 				/* Update the DB of the (local) Server */
 				$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 
@@ -399,7 +408,7 @@ class apache2_plugin {
 				$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			}
 		}
-		
+
 		//* and check that SSL cert does not contain subdomain of domain acme.invalid
 		if($data["new"]["ssl_action"] == 'save') {
 			$tmp = array();
@@ -409,10 +418,10 @@ class apache2_plugin {
 			$crt_data = implode("\n",$tmp);
 			if(stristr($crt_data,'.acme.invalid')) {
 				$data["new"]["ssl_action"] = '';
-			
+
 				$app->log('SSL Certificate not saved. The SSL cert contains domain acme.invalid.', LOGLEVEL_WARN);
 				$app->dbmaster->datalogError('SSL Certificate not saved. The SSL cert contains domain acme.invalid.');
-			
+
 				/* Update the DB of the (local) Server */
 				$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 
@@ -570,7 +579,7 @@ class apache2_plugin {
 			$web_folder = $data['new']['web_folder'];
 			$log_folder .= '/' . $subdomain_host;
 			unset($tmp);
-			
+
 			if(isset($data['old']['parent_domain_id'])) {
 				// old one
 				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
@@ -666,7 +675,7 @@ class apache2_plugin {
 					$app->system->rename($data['new']['document_root'], $data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'));
 					$app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'), LOGLEVEL_DEBUG);
 				}
-				
+
 				//* Unmount the old log directory bfore we move the log dir
 				$app->system->exec_safe('umount ?', $data['old']['document_root'].'/log');
 
@@ -702,9 +711,9 @@ class apache2_plugin {
 			$fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.'    none    bind,nobootwait';
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 			*/
-			
+
 			$fstab_line_old = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.'    none    bind';
-			
+
 			if($web_config['network_filesystem'] == 'y') {
 				$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nofail,_netdev    0 0';
 				$app->system->replaceLine('/etc/fstab', $fstab_line_old, $fstab_line, 0, 1);
@@ -712,9 +721,9 @@ class apache2_plugin {
 				$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nofail    0 0';
 				$app->system->replaceLine('/etc/fstab', $fstab_line_old, $fstab_line, 0, 1);
 			}
-			
+
 			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
-			
+
 		}
 
 		//print_r($data);
@@ -729,7 +738,7 @@ class apache2_plugin {
 		if(!is_dir($data['new']['document_root'].'/cgi-bin')) $app->system->mkdirpath($data['new']['document_root'].'/cgi-bin');
 		if(!is_dir($data['new']['document_root'].'/tmp')) $app->system->mkdirpath($data['new']['document_root'].'/tmp');
 		if(!is_dir($data['new']['document_root'].'/webdav')) $app->system->mkdirpath($data['new']['document_root'].'/webdav');
-		
+
 		if(!is_dir($data['new']['document_root'].'/.ssh')) {
 			$app->system->mkdirpath($data['new']['document_root'].'/.ssh');
 			$app->system->chmod($data['new']['document_root'].'/.ssh', 0700);
@@ -1115,10 +1124,10 @@ class apache2_plugin {
 		if(trim($data['new']['custom_php_ini']) != '') {
 			$has_custom_php_ini = true;
 			if(!is_dir($custom_php_ini_dir)) $app->system->mkdirpath($custom_php_ini_dir);
-			
+
 			$php_ini_content = $this->get_master_php_ini_content($data['new']);
 			$php_ini_content .= str_replace("\r", '', trim($data['new']['custom_php_ini']));
-			
+
 			if(intval($data['new']['directive_snippets_id']) > 0){
 				$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'apache' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
 				if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
@@ -1137,7 +1146,7 @@ class apache2_plugin {
 					}
 				}
 			}
-		
+
 			$app->system->file_put_contents($custom_php_ini_dir.'/php.ini', $php_ini_content);
 		} else {
 			$has_custom_php_ini = false;
@@ -1179,7 +1188,7 @@ class apache2_plugin {
 			'{DOCROOT_CLIENT}' => $vhost_data['web_document_root']
 		);
 		$vhost_data['apache_directives'] = strtr($vhost_data['apache_directives'], $trans);
-		
+
 		$app->uses('letsencrypt');
 		// Check if a SSL cert exists
 		$tmp = $app->letsencrypt->get_website_certificate_paths($data);
@@ -1190,7 +1199,7 @@ class apache2_plugin {
 		$crt_file = $tmp['crt'];
 		$bundle_file = $tmp['bundle'];
 		unset($tmp);
-		
+
 		$data['new']['ssl_domain'] = $domain;
 		$vhost_data['ssl_domain'] = $domain;
 		$vhost_data['ssl_crt_file'] = $crt_file;
@@ -1222,7 +1231,7 @@ class apache2_plugin {
 				$app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ? AND `server_id` = ?", $data['new']['ssl'], 'n', $data['new']['domain'], $conf['server_id']);
  			}
 		}
-		
+
 		// Use separate bundle file only for apache versions < 2.4.8
 		if(@is_file($bundle_file) && version_compare($app->system->getapacheversion(true), '2.4.8', '<')) $vhost_data['has_bundle_cert'] = 1;
 
@@ -1425,7 +1434,7 @@ class apache2_plugin {
 		} else {
 			$tpl->setVar('alias', '');
 		}
-		
+
 		if (count($rewrite_wildcard_rules) > 0) $rewrite_rules = array_merge($rewrite_rules, $rewrite_wildcard_rules); // Append wildcard rules to the end of rules
 
 		if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0 || $data['new']['rewrite_to_https'] == 'y') {
@@ -1568,7 +1577,7 @@ class apache2_plugin {
 		$pool_name = 'web'.$data['new']['domain_id'];
 		$socket_dir = $web_config['php_fpm_socket_dir'];
 		if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
-		
+
 		if($data['new']['php_fpm_use_socket'] == 'y'){
 			$use_tcp = 0;
 			$use_socket = 1;
@@ -2051,9 +2060,9 @@ class apache2_plugin {
 			} else {
 				$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 			}
-			
+
 			// remove letsencrypt if it exists (renew will always fail otherwise)
-			
+
 			$old_domain = $data['old']['domain'];
 			if(substr($old_domain, 0, 2) === '*.') {
 				// wildcard domain not yet supported by letsencrypt!
@@ -2588,7 +2597,7 @@ class apache2_plugin {
 			$app->system->chown($new_folder_path.'.htaccess', $website['system_user']);
 			$app->system->chgrp($new_folder_path.'.htaccess', $website['system_group']);
 			$app->log('Created/modified file '.$new_folder_path.'.htaccess', LOGLEVEL_DEBUG);
-			
+
 			//* Create empty .htpasswd file, if it does not exist
 			if(!is_file($folder_path.'.htpasswd')) {
 				$app->system->touch($new_folder_path.'.htpasswd');
@@ -2964,7 +2973,7 @@ class apache2_plugin {
 
 	private function hhvm_update($data, $web_config) {
 		global $app, $conf;
-		
+
 		if(file_exists($conf['rootpath'] . '/conf-custom/hhvm_starter.master')) {
 			$content = file_get_contents($conf['rootpath'] . '/conf-custom/hhvm_starter.master');
 		} else {
@@ -2975,7 +2984,7 @@ class apache2_plugin {
 		} else {
 			$monit_content = file_get_contents($conf['rootpath'] . '/conf/hhvm_monit.master');
 		}
-		
+
 		if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm' || ($data['new']['php'] == 'hhvm' && isset($data['old']['custom_php_ini']) && $data['new']['custom_php_ini'] != $data['old']['custom_php_ini'])) {
 
 			// Custom php.ini settings
@@ -3012,14 +3021,14 @@ class apache2_plugin {
 			$app->system->exec_safe('chmod +x ? >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
 			$app->system->exec_safe('/usr/sbin/update-rc.d ? defaults >/dev/null 2>&1', 'hhvm_' . $data['new']['system_user']);
 			$app->system->exec_safe('? restart >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
-			
+
 			if(is_dir('/etc/monit/conf.d')){
 				$monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
 				file_put_contents('/etc/monit/conf.d/00-hhvm_' . $data['new']['system_user'], $monit_content);
 				if(is_file('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'])) unlink('/etc/monit/conf.d/hhvm_' . $data['new']['system_user']);
 				exec('/etc/init.d/monit restart >/dev/null 2>&1');
 			}
-			
+
  		} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
 			if($data['old']['system_user'] != ''){
 				$app->system->exec_safe('? stop >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['old']['system_user']);
@@ -3027,7 +3036,7 @@ class apache2_plugin {
 				unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
 				if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
 			}
-			
+
 			if(is_file('/etc/monit/conf.d/hhvm_' . $data['old']['system_user']) || is_file('/etc/monit/conf.d/00-hhvm_' . $data['old']['system_user'])){
 				if(is_file('/etc/monit/conf.d/hhvm_' . $data['old']['system_user'])){
 					unlink('/etc/monit/conf.d/hhvm_' . $data['old']['system_user']);
@@ -3066,7 +3075,7 @@ class apache2_plugin {
 
 		$app->uses("getconf");
 		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
-		
+
 		$php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart';
 
 		if($data['new']['php'] != 'php-fpm'){
@@ -3089,7 +3098,7 @@ class apache2_plugin {
 		$tpl = new tpl();
 		$tpl->newTemplate('php_fpm_pool.conf.master');
 		$tpl->setVar('apache_version', $app->system->getapacheversion());
-		
+
 		if($data['new']['php_fpm_use_socket'] == 'y'){
 			$use_tcp = 0;
 			$use_socket = 1;
@@ -3142,7 +3151,7 @@ class apache2_plugin {
 		// Custom php.ini settings
 		$final_php_ini_settings = array();
 		$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
-		
+
 		if(intval($data['new']['directive_snippets_id']) > 0){
 			$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'apache' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
 			if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
@@ -3161,7 +3170,7 @@ class apache2_plugin {
 				}
 			}
 		}
-		
+
 		$custom_session_save_path = false;
 		if($custom_php_ini_settings != ''){
 			// Make sure we only have Unix linebreaks
@@ -3249,10 +3258,10 @@ class apache2_plugin {
 	//* Delete the PHP-FPM pool configuration file
 	private function php_fpm_pool_delete ($data, $web_config) {
 		global $app, $conf;
-		
+
 		$app->uses("getconf");
 		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
-		
+
 		$php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart';
 
 		if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index cd4b736fa4..c1262f69eb 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -166,8 +166,16 @@ class nginx_plugin {
         [ req_attributes ]
         ";//challengePassword              = A challenge password";
 
+			$ext_cnf = "
+        subjectAltName         = @alt_names
+
+        [alt_names]
+        DNS.1                  = .$domain";
+
 			$ssl_cnf_file = $ssl_dir.'/openssl.conf';
 			$app->system->file_put_contents($ssl_cnf_file, $ssl_cnf);
+			$ssl_ext_file = $ssl_dir.'/v3.ext';
+			$app->system->file_put_contents($ssl_ext_file, $ext_cnf);
 
 			$rand_file = $rand_file;
 			$key_file2 = $key_file2;
@@ -193,9 +201,9 @@ class nginx_plugin {
 
 				if(file_exists($web_config['CA_path'].'/openssl.cnf'))
 				{
-					$app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file);
+					$app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ? -extfile ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file, $ssl_ext_file);
 					$app->log("Creating CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
-					if (filesize($crt_file)==0 || !file_exists($crt_file)) $app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file", LOGLEVEL_ERROR);
+					if (filesize($crt_file)==0 || !file_exists($crt_file)) $app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file -extfile $ssl_ext_file", LOGLEVEL_ERROR);
 				};
 				if (@filesize($crt_file)==0 || !file_exists($crt_file)){
 					$app->system->exec_safe("openssl req -x509 -passin pass:? -passout pass:? -key ? -in ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $openssl_cmd_crt_file, $ssl_days, $config_file);
@@ -208,6 +216,7 @@ class nginx_plugin {
 			$app->system->chmod($key_file, 0400);
 			@$app->system->unlink($config_file);
 			@$app->system->unlink($rand_file);
+			@$app->system->unlink($ssl_ext_file);
 			$ssl_request = $app->system->file_get_contents($csr_file);
 			$ssl_cert = $app->system->file_get_contents($crt_file);
 			$ssl_key = $app->system->file_get_contents($key_file);
@@ -218,15 +227,15 @@ class nginx_plugin {
 			$app->dbmaster->query("UPDATE web_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key, $data['new']['domain']);
 			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 		}
-		
+
 		//* Check that the SSL key is not password protected
 		if($data["new"]["ssl_action"] == 'save') {
 			if(stristr($data["new"]["ssl_key"],'Proc-Type: 4,ENCRYPTED')) {
 				$data["new"]["ssl_action"] = '';
-			
+
 				$app->log('SSL Certificate not saved. The SSL key is encrypted.', LOGLEVEL_WARN);
 				$app->dbmaster->datalogError('SSL Certificate not saved. The SSL key is encrypted.');
-			
+
 				/* Update the DB of the (local) Server */
 				$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 
@@ -234,7 +243,7 @@ class nginx_plugin {
 				$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			}
 		}
-		
+
 		//* and check that SSL cert does not contain subdomain of domain acme.invalid
 		if($data["new"]["ssl_action"] == 'save') {
 			$tmp = array();
@@ -244,10 +253,10 @@ class nginx_plugin {
 			$crt_data = implode("\n",$tmp);
 			if(stristr($crt_data,'.acme.invalid')) {
 				$data["new"]["ssl_action"] = '';
-			
+
 				$app->log('SSL Certificate not saved. The SSL cert contains domain acme.invalid.', LOGLEVEL_WARN);
 				$app->dbmaster->datalogError('SSL Certificate not saved. The SSL cert contains domain acme.invalid.');
-			
+
 				/* Update the DB of the (local) Server */
 				$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 
@@ -400,7 +409,7 @@ class nginx_plugin {
 				if(substr($data['new']['web_folder'],-1) == '/') $data['new']['web_folder'] = substr($data['new']['web_folder'],0,-1);
 			}
 			$web_folder .= '/'.$data['new']['web_folder'];
-			
+
 			if($data['old']['web_folder'] != ''){
 				if(substr($data['old']['web_folder'],0,1) == '/') $data['old']['web_folder'] = substr($data['old']['web_folder'],1);
 				if(substr($data['old']['web_folder'],-1) == '/') $data['old']['web_folder'] = substr($data['old']['web_folder'],0,-1);
@@ -415,7 +424,7 @@ class nginx_plugin {
 			$web_folder = $data['new']['web_folder'];
 			$log_folder .= '/' . $subdomain_host;
 			unset($tmp);
-			
+
 			if(isset($data['old']['parent_domain_id'])) {
 				// old one
 				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
@@ -508,7 +517,7 @@ class nginx_plugin {
 					$app->system->rename($data['new']['document_root'], $data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'));
 					$app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'), LOGLEVEL_DEBUG);
 				}
-				
+
 				//* Unmount the old log directory bfore we move the log dir
 				$app->system->exec_safe('umount ?', $old_dir.'/log');
 
@@ -544,9 +553,9 @@ class nginx_plugin {
 			$fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.'    none    bind,nobootwait';
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 			*/
-			
+
 			$fstab_line_old = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.'    none    bind';
-			
+
 			if($web_config['network_filesystem'] == 'y') {
 				$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nofail,_netdev    0 0';
 				$app->system->replaceLine('/etc/fstab', $fstab_line_old, $fstab_line, 0, 1);
@@ -554,7 +563,7 @@ class nginx_plugin {
 				$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nofail    0 0';
 				$app->system->replaceLine('/etc/fstab', $fstab_line_old, $fstab_line, 0, 1);
 			}
-			
+
 			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 
 		}
@@ -570,14 +579,14 @@ class nginx_plugin {
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
 		if(!is_dir($data['new']['document_root'].'/cgi-bin')) $app->system->mkdirpath($data['new']['document_root'].'/cgi-bin');
 		if(!is_dir($data['new']['document_root'].'/tmp')) $app->system->mkdirpath($data['new']['document_root'].'/tmp');
-		
+
 		if(!is_dir($data['new']['document_root'].'/.ssh')) {
 			$app->system->mkdirpath($data['new']['document_root'].'/.ssh');
 			$app->system->chmod($data['new']['document_root'].'/.ssh', 0700);
 			$app->system->chown($data['new']['document_root'].'/.ssh', $username);
 			$app->system->chgrp($data['new']['document_root'].'/.ssh', $groupname);
 		}
-		
+
 		//* Create the new private directory
 		if(!is_dir($data['new']['document_root'].'/private')) {
 			$app->system->mkdirpath($data['new']['document_root'].'/private');
@@ -691,7 +700,7 @@ class nginx_plugin {
 				}
 				$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
 			}
-			
+
 			//* Copy the web skeleton files only when there is no index.ph or index.html file yet
 			if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php')) {
 				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2))) {
@@ -853,7 +862,7 @@ class nginx_plugin {
 				//$app->system->chgrp($data['new']['document_root'].'/webdav',$groupname);
 				$app->system->chown($data['new']['document_root'].'/private', $username);
 				$app->system->chgrp($data['new']['document_root'].'/private', $groupname);
-				
+
 				if($web_folder != 'web'){
 					$app->system->chown($data['new']['document_root'].'/'.$web_folder, $username);
 					$app->system->chgrp($data['new']['document_root'].'/'.$web_folder, $groupname);
@@ -900,7 +909,7 @@ class nginx_plugin {
 				}
 				//$app->system->chown($data['new']['document_root'].'/webdav',$username);
 				//$app->system->chgrp($data['new']['document_root'].'/webdav',$groupname);
-				
+
 				if($web_folder != 'web'){
 					$app->system->chown($data['new']['document_root'].'/'.$web_folder, $username);
 					$app->system->chgrp($data['new']['document_root'].'/'.$web_folder, $groupname);
@@ -941,7 +950,7 @@ class nginx_plugin {
 			$app->system->chown('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 			$app->system->chgrp('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 		}
-		
+
 
 		//* Create the vhost config file
 		$app->load('tpl');
@@ -1185,31 +1194,31 @@ class nginx_plugin {
 			$nginx_directives = $data['new']['nginx_directives'];
 //			$vhost_data['enable_pagespeed'] = false;
 		}
-		
+
 		// folder_directive_snippets
 		if(trim($data['new']['folder_directive_snippets']) != ''){
 			$data['new']['folder_directive_snippets'] = trim($data['new']['folder_directive_snippets']);
 			$data['new']['folder_directive_snippets'] = str_replace("\r\n", "\n", $data['new']['folder_directive_snippets']);
 			$data['new']['folder_directive_snippets'] = str_replace("\r", "\n", $data['new']['folder_directive_snippets']);
 			$folder_directive_snippets_lines = explode("\n", $data['new']['folder_directive_snippets']);
-			
+
 			if(is_array($folder_directive_snippets_lines) && !empty($folder_directive_snippets_lines)){
 				foreach($folder_directive_snippets_lines as $folder_directive_snippets_line){
 					list($folder_directive_snippets_folder, $folder_directive_snippets_snippets_id) = explode(':', $folder_directive_snippets_line);
-					
+
 					$folder_directive_snippets_folder = trim($folder_directive_snippets_folder);
 					$folder_directive_snippets_snippets_id = trim($folder_directive_snippets_snippets_id);
-					
+
 					if($folder_directive_snippets_folder  != '' && intval($folder_directive_snippets_snippets_id) > 0 && preg_match('@^((?!(.*\.\.)|(.*\./)|(.*//))[^/][\w/_\.\-]{1,100})?$@', $folder_directive_snippets_folder)){
 						if(substr($folder_directive_snippets_folder, -1) != '/') $folder_directive_snippets_folder .= '/';
 						if(substr($folder_directive_snippets_folder, 0, 1) == '/') $folder_directive_snippets_folder = substr($folder_directive_snippets_folder, 1);
-						
+
 						$master_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($folder_directive_snippets_snippets_id));
 						if(isset($master_snippet['snippet'])){
 							$folder_directive_snippets_trans = array('{FOLDER}' => $folder_directive_snippets_folder, '{FOLDERMD5}' => md5($folder_directive_snippets_folder));
 							$master_snippet['snippet'] = strtr($master_snippet['snippet'], $folder_directive_snippets_trans);
 							$nginx_directives .= "\n\n".$master_snippet['snippet'];
-							
+
 							// create folder it it does not exist
 							if(!is_dir($data['new']['document_root'].'/' . $web_folder.$folder_directive_snippets_folder)){
 								$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder.$folder_directive_snippets_folder);
@@ -1221,7 +1230,7 @@ class nginx_plugin {
 				}
 			}
 		}
-		
+
 		// use vLib for template logic
 		if(trim($nginx_directives) != '') {
 			$nginx_directives_new = '';
@@ -1238,7 +1247,7 @@ class nginx_plugin {
 			if($nginx_directives_new != '') $nginx_directives = $nginx_directives_new;
 			unset($nginx_directives_new);
 		}
-		
+
 		// Make sure we only have Unix linebreaks
 		$nginx_directives = str_replace("\r\n", "\n", $nginx_directives);
 		$nginx_directives = str_replace("\r", "\n", $nginx_directives);
@@ -1507,7 +1516,7 @@ class nginx_plugin {
 					'use_proxy' => ($data['new']['redirect_type'] == 'proxy' ? true:false));
 			}
 		}
-		
+
 		// http2 or spdy?
 		$vhost_data['enable_http2']  = 'n';
 		if($vhost_data['enable_spdy'] == 'y'){
@@ -1532,7 +1541,7 @@ class nginx_plugin {
 		}else{
 			$vhost_data['use_proxy_protocol'] = "n";
 		}
-		
+
 		// set logging variable
 		$vhost_data['logging'] = $web_config['logging'];
 
@@ -1811,7 +1820,7 @@ class nginx_plugin {
 		} elseif($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') {
 			$stats_web_folder = $data['new']['web_folder'];
 		}
-		
+
 		//* Create basic http auth for website statistics
 		$tpl->setVar('stats_auth_passwd_file', $data['new']['document_root']."/" . $stats_web_folder . "/stats/.htpasswd_stats");
 
@@ -2072,9 +2081,9 @@ class nginx_plugin {
 			} else {
 				$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 			}
-			
+
 			// remove letsencrypt if it exists (renew will always fail otherwise)
-			
+
 			$old_domain = $data['old']['domain'];
 			if(substr($old_domain, 0, 2) === '*.') {
 				// wildcard domain not yet supported by letsencrypt!
@@ -2572,7 +2581,7 @@ class nginx_plugin {
 
 	private function hhvm_update($data, $web_config) {
 		global $app, $conf;
-		
+
 		if(file_exists($conf['rootpath'] . '/conf-custom/hhvm_starter.master')) {
 			$content = file_get_contents($conf['rootpath'] . '/conf-custom/hhvm_starter.master');
 		} else {
@@ -2583,7 +2592,7 @@ class nginx_plugin {
 		} else {
 			$monit_content = file_get_contents($conf['rootpath'] . '/conf/hhvm_monit.master');
 		}
-		
+
 		if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm' || ($data['new']['php'] == 'hhvm' && isset($data['old']['custom_php_ini']) && isset($data['new']['custom_php_ini']) && $data['new']['custom_php_ini'] != $data['old']['custom_php_ini'])) {
 
 			// Custom php.ini settings
@@ -2620,14 +2629,14 @@ class nginx_plugin {
 			$app->system->exec_safe('chmod +x ? >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
 			$app->system->exec_safe('/usr/sbin/update-rc.d ? defaults >/dev/null 2>&1', 'hhvm_' . $data['new']['system_user']);
 			$app->system->exec_safe('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
-			
+
 			if(is_dir('/etc/monit/conf.d')){
 				$monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
 				file_put_contents('/etc/monit/conf.d/00-hhvm_' . $data['new']['system_user'], $monit_content);
 				if(is_file('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'])) unlink('/etc/monit/conf.d/hhvm_' . $data['new']['system_user']);
 				exec('/etc/init.d/monit restart >/dev/null 2>&1');
 			}
-			
+
  		} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
 			if($data['old']['system_user'] != ''){
 				exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
@@ -2635,7 +2644,7 @@ class nginx_plugin {
 				unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
 				if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
 			}
-			
+
 			if(is_file('/etc/monit/conf.d/hhvm_' . $data['old']['system_user']) || is_file('/etc/monit/conf.d/00-hhvm_' . $data['old']['system_user'])){
 				if(is_file('/etc/monit/conf.d/hhvm_' . $data['old']['system_user'])){
 					unlink('/etc/monit/conf.d/hhvm_' . $data['old']['system_user']);
@@ -2653,7 +2662,7 @@ class nginx_plugin {
 		global $app, $conf;
 		$pool_dir = trim($pool_dir);
 		$rh_releasefiles = array('/etc/centos-release', '/etc/redhat-release');
-		
+
 		// HHVM => PHP-FPM-Fallback
 		if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){
 			if(trim($data['new']['fastcgi_php_version']) != ''){
@@ -2714,7 +2723,7 @@ class nginx_plugin {
 		$tpl->setVar('fpm_pool', $pool_name);
 		$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1);
 		$tpl->setVar('fpm_user', $data['new']['system_user']);
-		
+
 		//Red Hat workaround for group ownership of socket files
 		foreach($rh_releasefiles as $rh_file) {
 			if(file_exists($rh_file) && (filesize($rh_file) > 0)) {
@@ -2731,7 +2740,7 @@ class nginx_plugin {
 			}
 			break;
 		}
-		
+
 		$tpl->setVar('fpm_listen_user', $data['new']['system_user']);
 		$tpl->setVar('fpm_domain', $data['new']['domain']);
 		$tpl->setVar('pm', $data['new']['pm']);
@@ -2764,7 +2773,7 @@ class nginx_plugin {
 		// Custom php.ini settings
 		$final_php_ini_settings = array();
 		$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
-		
+
 		if(intval($data['new']['directive_snippets_id']) > 0){
 			$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
 			if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
@@ -2783,7 +2792,7 @@ class nginx_plugin {
 				}
 			}
 		}
-		
+
 		$custom_session_save_path = false;
 		if($custom_php_ini_settings != ''){
 			// Make sure we only have Unix linebreaks
-- 
GitLab


From c7053681c50cbd636e26fe6d7148f0eeceffeca4 Mon Sep 17 00:00:00 2001
From: Brian <brano@mxhosting.eu>
Date: Thu, 2 Apr 2020 13:05:42 +0200
Subject: [PATCH 256/571] Update php_fpm_pool.conf.master - removed
 php_admin_value[cgi.fix_pathinfo] = 0 which cause in fpm chroot errors:
 Access to the script has been denied (see security.limit_extensions). This
 settings is obsolete for newer PHP version. More info:
 https://www.howtoforge.com/community/threads/php-fpm-chroot-with-cgi-fix_pathinfo-0-causes-access-to-the-script-has-been-denied.84071/

---
 server/conf/php_fpm_pool.conf.master | 1 -
 1 file changed, 1 deletion(-)

diff --git a/server/conf/php_fpm_pool.conf.master b/server/conf/php_fpm_pool.conf.master
index fb5c4b44d9..88b9e2b639 100644
--- a/server/conf/php_fpm_pool.conf.master
+++ b/server/conf/php_fpm_pool.conf.master
@@ -30,7 +30,6 @@ chdir = /
 <tmpl_if name='php_fpm_chroot'>
 chroot = <tmpl_var name='php_fpm_chroot_dir'>
 php_admin_value[doc_root] = <tmpl_var name='php_fpm_chroot_web_folder'>
-php_admin_value[cgi.fix_pathinfo] = 0
 </tmpl_if>
 
 env[HOSTNAME] = $HOSTNAME
-- 
GitLab


From d617e5cc75661c645a123b5415dbdc4ba1052874 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Tue, 7 Apr 2020 07:29:17 +0200
Subject: [PATCH 257/571] Don't use short array syntax

---
 interface/web/dns/dns_spf_edit.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/dns/dns_spf_edit.php b/interface/web/dns/dns_spf_edit.php
index 1c632d2d12..20626ba159 100644
--- a/interface/web/dns/dns_spf_edit.php
+++ b/interface/web/dns/dns_spf_edit.php
@@ -181,7 +181,7 @@ class page_action extends tform_actions {
 		}
 
 		// Create spf-record
-		$spf_record = [];
+		$spf_record = array();
 
 		if (!empty($this->dataRecord['spf_mx'])) {
 			$spf_record[] = 'mx';
-- 
GitLab


From c9145d36689d4d79203819835d8630bd89560c00 Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Tue, 7 Apr 2020 13:06:23 +0200
Subject: [PATCH 258/571] Reconfigure incron if the PHP version changes

---
 .../z_php_fpm_incron_reload_plugin.inc.php         | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
index f88cbe9c0b..5a643a660a 100644
--- a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
+++ b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
@@ -45,8 +45,8 @@ class z_php_fpm_incron_reload_plugin {
 	function incronUpdate($eventName, $data) {
 		global $app;
 
-		if ($data['new']['document_root'] === $data['old']['document_root']) {
-			$app->log('Document root unchanged. Not updating incron configuration.', LOGLEVEL_DEBUG);
+		if ($this->documentRootUnchanged($data) && $this->phpVersionUnchanged($data)) {
+			$app->log('Document root and PHP version unchanged. Not updating incron configuration.', LOGLEVEL_DEBUG);
 
 			return;
 		}
@@ -59,6 +59,16 @@ class z_php_fpm_incron_reload_plugin {
 		$this->teardown($data['old']);
 	}
 
+	private function documentRootUnchanged($data)
+	{
+		return $data['new']['document_root'] === $data['old']['document_root'];
+	}
+
+	private function phpVersionUnchanged($data)
+	{
+		return $data['new']['fastcgi_php_version'] === $data['old']['fastcgi_php_version'];
+	}
+
 	private function setup($data)
 	{
 		$triggerFile = $this->getTriggerFilePath($data['document_root']);
-- 
GitLab


From b9cd2f66469144c7581a79e400c6c07d3d5c900c Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Thu, 9 Apr 2020 20:00:37 +0200
Subject: [PATCH 259/571] Allow updating sys_user.modules through remoting

---
 interface/lib/classes/remoting_lib.inc.php | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/interface/lib/classes/remoting_lib.inc.php b/interface/lib/classes/remoting_lib.inc.php
index 62ccd506c8..6f310284dc 100644
--- a/interface/lib/classes/remoting_lib.inc.php
+++ b/interface/lib/classes/remoting_lib.inc.php
@@ -309,6 +309,7 @@ class remoting_lib extends tform_base {
 		$username = $params["username"];
 		$clear_password = $params["password"];
 		$language = $params['language'];
+		$modules = $params['modules'];
 		$client_id = $app->functions->intval($client_id);
 
 		if(!isset($params['_ispconfig_pw_crypted']) || $params['_ispconfig_pw_crypted'] != 1) $password = $app->auth->crypt_password(stripslashes($clear_password));
@@ -327,8 +328,14 @@ class remoting_lib extends tform_base {
 			$params[] = $language;
 		}
 
+		$modulesstring = '';
+		if (!empty($modules)) {
+			$modulesstring = ', modules = ?';
+			$params[] = $modules;
+		}
+
 		$params[] = $client_id;
-		$sql = "UPDATE sys_user set username = ? $pwstring $langstring WHERE client_id = ?";
+		$sql = "UPDATE sys_user set username = ? $pwstring $langstring $modulesstring WHERE client_id = ?";
 		$app->db->query($sql, true, $params);
 	}
 
-- 
GitLab


From 4e7be391c8db3b1489565163e6c38d2c3b0dc01d Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Wed, 5 Feb 2020 10:58:16 +0100
Subject: [PATCH 260/571] Remove duplicate example, see
 remoting_client/examples/sites_database_add.php

---
 .../examples/soap-database-add.php            | 47 -------------------
 1 file changed, 47 deletions(-)
 delete mode 100644 remoting_client/examples/soap-database-add.php

diff --git a/remoting_client/examples/soap-database-add.php b/remoting_client/examples/soap-database-add.php
deleted file mode 100644
index 5ff7e4b79d..0000000000
--- a/remoting_client/examples/soap-database-add.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-$username = 'admin';
-$password = 'admin';
-
-$soap_location = 'http://localhost:8080/remote/index.php';
-$soap_uri = 'http://localhost:8080/remote/';
-
-$client = new SoapClient(null, array('location' => $soap_location,
-		'uri'      => $soap_uri));
-try {
-	if($session_id = $client->login($username, $password)) {
-		echo "Logged:".$session_id."<br />\n";
-	}
-
-	$database_type = 'mysql'; //Only mysql type avaliable more types coming soon.
-	$database_name = 'yourdbname';
-	$database_username = 'yourusername';
-	$database_password = 'yourpassword';
-	$database_charset = ''; // blank = db default, latin1 or utf8
-	$database_remoteips = ''; //remote ip´s separated by commas
-
-	$params = array(
-		'server_id' => 1,
-		'type' => $database_type,
-		'database_name' => $database_name,
-		'database_user' => $database_username,
-		'database_password' => $database_password,
-		'database_charset' =>  $database_charset,
-		'remote_access' => 'n', // n disabled - y enabled
-		'active' => 'y', // n disabled - y enabled
-		'remote_ips' => $database_remoteips
-	);
-
-	$client_id = 1;
-	$database_id = $client->sites_database_add($session_id, $client_id, $params);
-
-	if($client->logout($session_id)) {
-		echo "Logout.<br />\n";
-	}
-
-
-} catch (SoapFault $e) {
-	die('Error: '.$e->getMessage());
-}
-
-?>
-- 
GitLab


From 3639beb862626007b23faf58f83ae4ad82979eb4 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 7 Feb 2020 21:31:51 +0100
Subject: [PATCH 261/571] Add a space for log readablilty

In the example belog failed and PHP were joined without a space ...

"Database connection failedPHP Warning:  mysqli_real_connect()"
---
 server/lib/classes/db_mysql.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 9c7269e568..4bbc84e3f9 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -559,7 +559,7 @@ class db
 		} elseif(is_object($app) && method_exists($app, 'log') && $bNoLog == false) {
 			$app->log($sErrormsg . $sAddMsg . ' -> ' . $mysql_errno . ' (' . $mysql_error . ')', LOGLEVEL_WARN, false);
 		} elseif(php_sapi_name() == 'cli') {
-			echo $sErrormsg . $sAddMsg;
+			echo $sErrormsg . ' ' . $sAddMsg;
 		}
 	}
 
-- 
GitLab


From f36aaf2b8e715efccb621e7dd2bc05b5f03b914a Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 28 Feb 2020 22:46:06 +0100
Subject: [PATCH 262/571] typo

---
 CONTRIBUTING.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d8eac80ebd..b515c5348d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -12,7 +12,7 @@ The master branch is used for code (mostly new features) that shall go into the
 * Magic quotes is gone, get used to it now. config = magic_quotes_gpc() Everything must be quoted
 * Don't use ereg, split and other old function -> gone in PHP 5.4
 * Don't use features that are not supported in PHP 5.3, for compatibility with LTS OS releases, ISPConfig must support PHP 5.3+
-* Don't use shorttags. A Shorttag is <? and that is confusing with <?xml -> always usw <?php
+* Don't use shorttags. A Shorttag is <? and that is confusing with <?xml -> always use <?php
 * Don't use namespaces
 * Column names in database tables and database table names are in lowercase
 * Classes for the interface are located in interface/lib/classes/ and loaded with $app->uses() or $app->load() functions.
-- 
GitLab


From dc97fec3865f8a4b70ff2d38420e77dbd12e2c4e Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 12 Mar 2020 16:26:55 +0100
Subject: [PATCH 263/571] Rename command to cron_line, as it's not a command

---
 server/plugins-available/cron_plugin.inc.php | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index af4e24d974..e6c197ea20 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -219,9 +219,9 @@ class cron_plugin {
 		if($cron_jobs && count($cron_jobs) > 0) {
 			foreach($cron_jobs as $job) {
 				if($job['run_month'] == '@reboot') {
-					$command = "@reboot";
+					$cron_line = "@reboot";
 				} else {
-					$command = str_replace(" ", "", $job['run_min']) . "\t" . str_replace(" ", "", $job['run_hour']) . "\t" . str_replace(" ", "", $job['run_mday']) . "\t" . str_replace(" ", "", $job['run_month']) . "\t" . str_replace(" ", "", $job['run_wday']);
+					$cron_line = str_replace(" ", "", $job['run_min']) . "\t" . str_replace(" ", "", $job['run_hour']) . "\t" . str_replace(" ", "", $job['run_mday']) . "\t" . str_replace(" ", "", $job['run_month']) . "\t" . str_replace(" ", "", $job['run_wday']);
 				}
 				
 				$log_target = ">/dev/null 2>&1";
@@ -235,9 +235,9 @@ class cron_plugin {
 					$log_wget_target = $log_root . '/cron_wget.log';
 				}
 				
-				$command .= "\t{$this->parent_domain['system_user']}"; //* running as user
+				$cron_line .= "\t{$this->parent_domain['system_user']}"; //* running as user
 				if($job['type'] == 'url') {
-					$command .= "\t{$cron_config['wget']} --no-check-certificate --user-agent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' -q -t 1 -T 7200 -O " . $log_wget_target . " " . escapeshellarg($job['command']) . " " . $log_target;
+					$cron_line .= "\t{$cron_config['wget']} --no-check-certificate --user-agent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' -q -t 1 -T 7200 -O " . $log_wget_target . " " . escapeshellarg($job['command']) . " " . $log_target;
 				} else {
 					if(strpos($job['command'], "\n") !== false || strpos($job['command'], "\r") !== false || strpos($job['command'], chr(0)) !== false) {
 						$app->log("Insecure Cron job SKIPPED: " . $job['command'], LOGLEVEL_WARN);
@@ -257,16 +257,16 @@ class cron_plugin {
 					$web_root .= '/web';
 					$job['command'] = str_replace('[web_root]', $web_root, $job['command']);
 
-					$command .= "\t";
-					//if($job['type'] != 'chrooted' && substr($job['command'], 0, 1) != "/") $command .= $this->parent_domain['document_root'].'/';
-					$command .= $job['command'] . " " . $log_target;
+					$cron_line .= "\t";
+					//if($job['type'] != 'chrooted' && substr($job['command'], 0, 1) != "/") $cron_line .= $this->parent_domain['document_root'].'/';
+					$cron_line .= $job['command'] . " " . $log_target;
 				}
 
 				if($job['type'] == 'chrooted') {
-					$chr_cron_content .= $command . " #{$job['domain']}\n";
+					$chr_cron_content .= $cron_line . " #{$job['domain']}\n";
 					$chr_cmd_count++;
 				} else {
-					$cron_content .= $command . " #{$job['domain']}\n";
+					$cron_content .= $cron_line . " #{$job['domain']}\n";
 					$cmd_count++;
 				}
 			}
-- 
GitLab


From 5d8daf272fea34554a9cac40dfa69b7d6aadd690 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Sun, 26 Apr 2020 16:29:25 +0200
Subject: [PATCH 264/571] Document _ispconfig_pw_crypted parameter

---
 remoting_client/API-docs/client_update.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/remoting_client/API-docs/client_update.html b/remoting_client/API-docs/client_update.html
index 80a689b596..9cbdcd2f33 100644
--- a/remoting_client/API-docs/client_update.html
+++ b/remoting_client/API-docs/client_update.html
@@ -74,6 +74,7 @@
 <p class="margin"> parent_client_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> username&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
 <p class="margin"> password&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
+<p class="margin"> _ispconfig_pw_crypted&nbsp;&nbsp;(<span class="paratype">int(11)</span>) Set to 1 to indicate that the password is already crypted.</p>
 <p class="margin"> language&nbsp;&nbsp;(<span class="paratype">char(2)</span>)</p>
 <p class="margin"> usertheme&nbsp;&nbsp;(<span class="paratype">varchar(32)</span>)</p>
 <p class="margin"> template_master&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
-- 
GitLab


From 211b496acbba8bf3e7d2113c9dc5ce23eb9de5e1 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 28 Apr 2020 09:10:30 +0200
Subject: [PATCH 265/571] Add API docs for mail_relay_recipient functions,
 #3200

---
 .../API-docs/mail_relay_recipient_add.html    | 31 +++++++++++++++++++
 .../API-docs/mail_relay_recipient_delete.html | 29 +++++++++++++++++
 .../API-docs/mail_relay_recipient_get.html    | 29 +++++++++++++++++
 .../API-docs/mail_relay_recipient_update.html | 31 +++++++++++++++++++
 remoting_client/API-docs/navigation.html      |  4 +++
 5 files changed, 124 insertions(+)
 create mode 100644 remoting_client/API-docs/mail_relay_recipient_add.html
 create mode 100644 remoting_client/API-docs/mail_relay_recipient_delete.html
 create mode 100644 remoting_client/API-docs/mail_relay_recipient_get.html
 create mode 100644 remoting_client/API-docs/mail_relay_recipient_update.html

diff --git a/remoting_client/API-docs/mail_relay_recipient_add.html b/remoting_client/API-docs/mail_relay_recipient_add.html
new file mode 100644
index 0000000000..5e4c2cdfd5
--- /dev/null
+++ b/remoting_client/API-docs/mail_relay_recipient_add.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>mail_relay_recipient_add(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Adds a new relay recipient.</p><br>
+<p class="headgrp">Input Variables: </p>
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$params</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> source&nbsp;&nbsp;Recipient address (<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="headgrp">Output: </p>
+<p class="margin"> Returns the ID of the newly added recordd</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/mail_relay_recipient_delete.html b/remoting_client/API-docs/mail_relay_recipient_delete.html
new file mode 100644
index 0000000000..ea765a9e12
--- /dev/null
+++ b/remoting_client/API-docs/mail_relay_recipient_delete.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>mail_relay_recipient_delete(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Deletes a relay recipient.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin">None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns the number of deleted records.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/mail_relay_recipient_get.html b/remoting_client/API-docs/mail_relay_recipient_get.html
new file mode 100644
index 0000000000..a1540e24d9
--- /dev/null
+++ b/remoting_client/API-docs/mail_relay_recipient_get.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>mail_relay_recipient_get(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Retrieves information about a relay recipient.</p><br>
+<p class="headgrp">Input Variables: </p>
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p>
+<p class="margin"> Returns all fields and values of the chosen relay recipient.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/mail_relay_recipient_update.html b/remoting_client/API-docs/mail_relay_recipient_update.html
new file mode 100644
index 0000000000..417ef40eeb
--- /dev/null
+++ b/remoting_client/API-docs/mail_relay_recipient_update.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>mail_relay_recipient_update(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<b>Description: </b>
+<p class="margin"> Updates a relay recipient.</p><br>
+<b>Input Variables: </b>
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
+<b>Parameters (in <span class="var">$params</span>): </b>
+<p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> source&nbsp;&nbsp;Recipient address (<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<b>Output: </b> 
+<p class="margin"> Returns the number of affected rows.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/navigation.html b/remoting_client/API-docs/navigation.html
index d8c296801b..02b5876b3d 100644
--- a/remoting_client/API-docs/navigation.html
+++ b/remoting_client/API-docs/navigation.html
@@ -161,6 +161,10 @@
 <p><a href="mail_transport_delete.html" target="content">mail_transport_delete</a></p>
 <p><a href="mail_transport_get.html" target="content">mail_transport_get</a></p>
 <p><a href="mail_transport_update.html" target="content">mail_transport_update</a></p>
+<p><a href="mail_relay_recipient_add.html" target="content">mail_relay_recipient_add</a></p>
+<p><a href="mail_relay_recipient_delete.html" target="content">mail_relay_recipient_delete</a></p>
+<p><a href="mail_relay_recipient_get.html" target="content">mail_relay_recipient_get</a></p>
+<p><a href="mail_relay_recipient_update.html" target="content">mail_relay_recipient_update</a></p>
 <p><a href="mail_user_add.html" target="content">mail_user_add</a></p>
 <p><a href="mail_user_delete.html" target="content">mail_user_delete</a></p>
 <p><a href="mail_user_get.html" target="content">mail_user_get</a></p>
-- 
GitLab


From 39710604eeede260eba7862727c60ceca183a3d8 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 14 Aug 2019 23:22:00 +0200
Subject: [PATCH 266/571] Example csv import email script.

---
 .../examples/ispc-import-csv-email.php        | 305 ++++++++++++++++++
 1 file changed, 305 insertions(+)
 create mode 100644 remoting_client/examples/ispc-import-csv-email.php

diff --git a/remoting_client/examples/ispc-import-csv-email.php b/remoting_client/examples/ispc-import-csv-email.php
new file mode 100644
index 0000000000..407ba1635c
--- /dev/null
+++ b/remoting_client/examples/ispc-import-csv-email.php
@@ -0,0 +1,305 @@
+#!/usr/bin/php
+<?php
+#
+# ispc-import-csv-email.php: import email accounts from csv into ispconfig
+#
+
+# ISPConfig remote api params
+$remote_user = 'importer';
+$remote_pass = 'apipassword';
+$remote_url = 'https://yourserver.com:8080/remote/json.php';
+
+# CSV file
+$csv_file="/home/migrations/test.csv";
+
+
+# csv file format (first line is header names, column order does not matter):
+#
+# "email","password","quota","name","cc","bcc","move_junk","autoresponder","autoresponder_text","virus_lover","spam_lover"
+# "api_standard@apitest.com","insecure","150","API User Insert: Standard Mailbox","","","yes","no","this is vacation text, although vacation is not enabled","N","N"
+# "api_no_spambox@apitest.com","insecure","150","API User Insert: Mailbox with move_junk off","","","no","no","this is vacation text, although vacation is not enabled","N","N"
+# "api_vacation@apitest.com","insecure","150","API User Insert: Mailbox with vacation","","","yes","yes","this is vacation text, with vacation enabled","N","N"
+# "api_forward@apitest.com","insecure","150","API User Insert: Mail Forward","your-test-addr@test.com","","no","no","this is vacation text, although vacation is not enabled","N","N"
+# "api_both1@apitest.com","insecure","150","API User Insert: Mailbox with forward via cc","your-test-addr@test.com","","yes","no","this is vacation text, although vacation is not enabled","N","N"
+# "api_both2@apitest.com","insecure","150","API User Insert: Mailbox with forward via bcc","","your-test-addr@test.com","yes","no","this is vacation text, although vacation is not enabled","N","N"
+# "api_virus_lover@apitest.com","insecure","150","API User Insert: Mailbox with virus_lover","","","yes","no","","Y","N"
+# "api_spam_lover@apitest.com","insecure","150","API User Insert: Mailbox with spam_lover","","","yes","no","","N","Y"
+# "api_both_lover@apitest.com","insecure","150","API User Insert: Mailbox with virus_lover and spam_lover","","","yes","no","","Y","Y"
+
+
+/**
+ * Call REST endpoint.
+ */
+function restCall( $method, $data ) {
+	global $remote_url;
+	
+	if(!is_array($data)) return false;
+	$json = json_encode($data);
+	
+	$curl = curl_init();
+	curl_setopt($curl, CURLOPT_POST, 1);
+
+	if($data) curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
+
+	// needed for self-signed cert
+	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
+	//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
+	// end of needed for self-signed cert
+	
+	curl_setopt($curl, CURLOPT_URL, $remote_url . '?' . $method);
+	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+	
+	$result = curl_exec($curl);
+	curl_close($curl);
+
+	return $result;
+}
+
+$session_id = '';
+
+/**
+ * Logout of active session and die with message.
+ */
+function session_die( $msg ) {
+	global $session_id;
+
+	if ( isset( $session_id ) && $session_id ) {
+		$result = restCall( 'logout', [ 'session_id' => $session_id ] );
+		$result || die( "$msg\nAdditionally, could not get logout result, session id $session_id may now be abandoned.\n" );
+	}
+
+	die( "$msg\n" );
+}
+
+/**
+ * Make api call, checking for errors and return 'response' from the decoded data.  Opens session if required.
+ */
+function apiCall( ...$args ) {
+	global $remote_user, $remote_pass, $session_id;
+
+	// login to remote api and obtain session id if needed
+	if ( ! ( isset( $session_id ) && $session_id ) ) {
+		$result = restCall( 'login', [ 'username' => $remote_user, 'password' => $remote_pass, 'client_login' => false, ] );
+
+		if ( $result ) {
+			$result = json_decode( $result, true );
+			if ( ! $result ) {
+				die( "Error: unable to login to remote api (json_decode failed)\n" );
+			}
+
+			if ( isset( $result['response'] ) ) {
+				$session_id = $result['response'];
+			} else {
+				die( "Error: failed to obtain session id from remote api login\n" );
+			}
+		}
+	}
+
+	$rest_args = func_get_args();
+	$method = array_shift( $rest_args );
+
+	$result = restCall( $method, array_merge( [ 'session_id' => $session_id, ], ...$rest_args ) );
+
+	if ( $result ) $data = json_decode( $result, true );
+	else session_die( "Could not get $method result" );
+
+	if ( isset( $data['code'] ) && 'ok' != $data['code'] ) {
+		$msg = "$method returned " . $data['code']
+		     . ( isset( $data['message'] ) ? ": " . $data['message'] . "\n" : "\n" );
+		session_die( $msg );
+	}
+
+	return ( isset( $data['response'] ) ? $data['response'] : $data );
+}
+
+if ( ! file_exists( "$csv_file" ) ) {
+	die( "CSV file ($csv_file) not found.\n" );
+}
+
+// get all mail policies
+$mail_policies = apiCall( 'mail_policy_get', [ 'primary_id' => [] ] );
+if ( ! $mail_policies ) {
+	session_die( "Error: could not look up mail policies\n" );
+}
+
+// get all spamfilter_user settings
+$mail_spamfilter_users = apiCall( 'mail_spamfilter_user_get', [ 'primary_id' => [] ] );
+if ( ! $mail_spamfilter_users ) {
+	session_die( "Error: could not look up mail spamfilter users\n" );
+}
+
+$mail_domains = [];
+
+// Read csv file, map rows and loop through them
+$rows   = array_map( 'str_getcsv', file( $csv_file ) );
+$header = array_shift( $rows );
+$email_idx = array_search( 'email', $header );
+if ( $email_idx === FALSE ) {
+	session_die( "Error in csv file: 'email' field not found.\n" );
+}
+$csv    = [];
+foreach( $rows as $row ) {
+	$email = $row[$email_idx];
+	$domain = substr( $email, strpos( $email, '@' ) + 1 );
+
+	if ( is_array( $row ) && count( $header ) == count( $row ) ) {
+		$csv[$email] = array_combine( $header, $row );
+	} else {
+		print "Error in csv file: problem parsing email '$email'\n";
+		continue;
+	}
+
+	// look up mail_domain record for this domain
+	if ( ! isset( $mail_domains[$domain] ) ) {
+		$data = apiCall( 'mail_domain_get_by_domain', [ 'domain' => $domain ] );
+
+		if ( is_array( $data ) && isset( $data[0] ) ) {
+
+			// unset these (large and don't need them)
+			unset( $data[0]['dkim'] );
+			unset( $data[0]['dkim_selector'] );
+			unset( $data[0]['dkim_public'] );
+			unset( $data[0]['dkim_private'] );
+
+			$mail_domains[$domain] = $data[0];
+
+			foreach ( $mail_spamfilter_users as $msu ) {
+				if ( $msu['email'] == "@$domain" && $msu['server_id'] == $mail_domains[$domain]['server_id'] ) {
+					$mail_domains[$domain]['spamfilter_policy_id'] = $msu['policy_id'];
+				}
+			}
+		} else {
+			$mail_domains[$domain] = [ 'domain_id' => -1, 'domain' => $domain, ];
+			print( "Error: mail_domain $domain does not exist, you must create it first.\n" );
+		}
+	}
+}
+
+// dump manually created account to compare values
+//$data = apiCall( 'mail_user_get', [ 'primary_id' => [ 'email' => 'manual@apitest.com' ] ] );
+//var_dump( $data, true );
+
+foreach ( $csv as $record ) {
+	$email = $record['email'];
+	$addr = substr( $email, 0, strpos( $email, '@' ) );
+	$domain = substr( $email, strpos( $email, '@' ) + 1 );
+
+	// ensure we have mail_domain info
+	if ( ! isset( $mail_domains[$domain] ) || -1 == $mail_domains[$domain]['domain_id'] ) {
+		print "Config for domain $domain not available, cannot add email $email.\n";
+		continue;
+	}
+
+	// skip if email already exists
+	$data = apiCall( 'mail_user_get', [ 'primary_id' => [ 'email' => $email ] ] );
+	if ( is_array( $data ) && isset( $data[0] ) && isset( $data[0]['mailuser_id'] ) ) {
+		print "Email $email already exists, skipping.\n";
+		continue;
+	}
+
+	// get client_id for this sys_userid
+	if ( isset( $mail_domains[$domain]['client_id'] ) ) {
+		$client_id = $mail_domains[$domain]['client_id'];
+	} else {
+		$client_id = apiCall( 'client_get_id', [ 'sys_userid' => $mail_domains[$domain]['sys_userid'] ] );
+		if ( ! $client_id ) {
+			print "Error: unable to determine client_id for $domain (sys_userid is " . $mail_domains[$domain]['sys_userid'] . "),\n";
+			print "cannot create mailbox for Email $email\n";
+			continue;
+		}
+		$mail_domains[$domain]['client_id'] = $client_id;
+	}
+
+	// mail_user_add parameters for this email
+	$params = [ 'params' => [
+			'server_id' => $mail_domains[$domain]['server_id'],
+			'email' => $email,
+			'login' => $email,
+			'password' => $record['password'],
+			'name' => $record['name'],
+			'uid' => 5000,
+			'gid' => 5000,
+			'maildir' => "/var/vmail/$domain/$addr",
+			'quota' => $record['quota'] * 1024 * 1024,
+			'cc' => implode( ',', array_filter( [ $record['cc'], $record['bcc'] ] ) ),
+			'homedir' => "/var/vmail/",
+			'autoresponder' => ( preg_match( '/^y/i', $record['autoresponder'] ) ? 'y' : 'n' ),
+			'autoresponder_start_date' => date( 'Y-m-d H:i:s' ),
+			'autoresponder_end_date' => date( '2024-m-d H:i:s' ),
+			'autoresponder_text' => $record['autoresponder_text'],
+			'move_junk' => ( preg_match( '/^y/i', $record['move_junk'] ) ? 'y' : 'n' ),
+			'custom_mailfilter' => "",
+			'postfix' => 'y',
+			'access' => 'y',
+		//	'disableimap' => 'n',
+		//	'disablepop3' => 'n',
+		//	'disabledeliver' => 'n',
+		//	'disablesmtp' => 'n',
+			],
+		];
+
+	// add mail user
+	$data = apiCall( 'mail_user_add', [ 'client_id' => $client_id ], $params );
+
+	if ( ! $data ) {
+		print "mail_user_add may have a problem inserting $email\n";
+		continue;
+	}
+
+	//$data = apiCall( 'mail_user_get', [ 'primary_id' => [ 'email' => $email ] ] );
+	//var_dump( $data, true );
+
+	// determine mail policy
+	$spam_lover = ( preg_match( '/^y/i', $record['move_junk'] ) ? $record['spam_lover'] : 'N' );
+	$virus_lover = $record['virus_lover'];
+	$spamfilter_policy_id = null;
+
+	// check domain's policy settings for bypass_spam_checks == 'N' and matching spam_lover/virus_lover,
+	// if a match, we're done
+	if ( isset( $mail_domains[$domain]['spamfilter_policy_id'] ) ) {
+		foreach ( $mail_policies as $policy ) {
+			if ( $policy['id'] == $mail_domains[$domain]['spamfilter_policy_id'] ) {
+				if ( 'N' == $policy['bypass_spam_checks'] && $policy['spam_lover'] == $spam_lover && $policy['virus_lover'] == $virus_lover ) {
+					$spamfilter_policy_id = $policy['id'];
+				}
+			}
+		}
+	}
+	// if domain's policy doesn't match, loop through all policies to find a match and insert it
+	if ( null === $spamfilter_policy_id ) {
+		foreach ( $mail_policies as $policy ) {
+			if ( 'Y' == $policy['bypass_spam_checks'] ) {
+				continue;
+			}
+			if ( $policy['spam_lover'] == $spam_lover && $policy['virus_lover'] == $virus_lover ) {
+				$spamfilter_policy_id = $policy['id'];
+
+				// mail_spamfilter_user entry for this user / policy_id
+				$params = [ 'params' => [
+						'server_id' => $mail_domains[$domain]['server_id'],
+						'priority' => "10",
+						'policy_id' => $policy['id'],
+						'email' => $email,
+						'fullname' => $email,
+						'local' => "Y",
+						],
+					];
+
+				$data = apiCall( 'mail_spamfilter_user_add', [ 'client_id' => $client_id ], $params );
+
+				// either we inserted a spamfilter_user or it failed,
+				// either way, on to the next email
+				continue 2;
+			}
+		}
+	}
+}
+
+
+// logout so session id is cleaned up
+if ( isset( $session_id ) && $session_id ) {
+	$result = restCall( 'logout', [ 'session_id' => $session_id ] );
+	$result || die( "Could not get logout result, session id $session_id may now be abandoned.\n" );
+}
+
+exit();
-- 
GitLab


From 6c638517508cf2e0ee1f4245e85c4c7633dd3782 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Mon, 4 May 2020 17:30:42 +0200
Subject: [PATCH 267/571] - fix wrong certbot command, fixes #5610

---
 server/lib/classes/letsencrypt.inc.php | 137 +++++++++++++------------
 1 file changed, 72 insertions(+), 65 deletions(-)

diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index f60ad040e7..4e9bb74e13 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -42,7 +42,7 @@ class letsencrypt {
 	public function __construct(){
 
 	}
-	
+
 	public function get_acme_script() {
 		$acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh'));
 		$acme = reset($acme);
@@ -52,18 +52,18 @@ class letsencrypt {
 			return false;
 		}
 	}
-	
+
 	public function get_acme_command($domains, $key_file, $bundle_file, $cert_file, $server_type = 'apache') {
 		global $app;
-		
+
 		$letsencrypt = $this->get_acme_script();
-		
+
 		$cmd = '';
 		// generate cli format
 		foreach($domains as $domain) {
 			$cmd .= (string) " -d " . $domain;
 		}
-		
+
 		if($cmd == '') {
 			return false;
 		}
@@ -73,12 +73,12 @@ class letsencrypt {
 		} else {
 			$cert_arg = '--fullchain-file ' . escapeshellarg($bundle_file) . ' --cert-file ' . escapeshellarg($cert_file);
 		}
-		
+
 		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme ; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' ' . $cert_arg . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
-		
+
 		return $cmd;
 	}
-	
+
 	public function get_certbot_script() {
 		$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
 		$letsencrypt = reset($letsencrypt);
@@ -94,13 +94,13 @@ class letsencrypt {
 		$ret = null;
 		$val = 0;
 		exec($install_cmd . ' 2>&1', $ret, $val);
-		
+
 		return ($val == 0 ? true : false);
 	}
-	
+
 	private function get_reload_command() {
 		global $app, $conf;
-		
+
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 
 		$daemon = '';
@@ -121,26 +121,26 @@ class letsencrypt {
 		$cmd = $app->system->getinitcommand($daemon, 'force-reload');
 		return $cmd;
 	}
-	
+
 	public function get_certbot_command($domains) {
 		global $app;
-		
+
 		$letsencrypt = $this->get_certbot_script();
-		
+
 		$cmd = '';
 		// generate cli format
 		foreach($domains as $domain) {
 			$cmd .= (string) " --domains " . $domain;
 		}
-		
+
 		if($cmd == '') {
 			return false;
 		}
-		
+
 		$matches = array();
 		$ret = null;
 		$val = 0;
-		
+
 		$letsencrypt_version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
 		if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $letsencrypt_version, $matches)) {
 			$letsencrypt_version = $matches[2];
@@ -161,39 +161,39 @@ class letsencrypt {
 		} else {
 			$webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme";
 		}
-		
+
 		$cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $cmd --webroot-path /usr/local/ispconfig/interface/acme";
-		
+
 		return $cmd;
 	}
-	
+
 	public function get_letsencrypt_certificate_paths($domains = array()) {
 		global $app;
-		
+
 		if($this->get_acme_script()) {
 			return false;
 		}
-		
+
 		if(empty($domains)) return false;
 		if(!is_dir($this->renew_config_path)) return false;
-		
+
 		$dir = opendir($this->renew_config_path);
 		if(!$dir) return false;
-		
+
 		$path_scores = array();
-		
+
 		$main_domain = reset($domains);
 		sort($domains);
 		$min_diff = false;
-		
+
 		while($file = readdir($dir)) {
 			if($file === '.' || $file === '..' || substr($file, -5) !== '.conf')  continue;
 			$file_path = $this->renew_config_path . '/' . $file;
 			if(!is_file($file_path) || !is_readable($file_path)) continue;
-			
+
 			$fp = fopen($file_path, 'r');
 			if(!$fp) continue;
-			
+
 			$path_scores[$file_path] = array(
 				'domains' => array(),
 				'diff' => 0,
@@ -211,26 +211,26 @@ class letsencrypt {
 				if($line === '') continue;
 				elseif(!$in_list) {
 					if($line == '[[webroot_map]]') $in_list = true;
-					
+
 					$tmp = explode('=', $line, 2);
 					if(count($tmp) != 2) continue;
 					$key = trim($tmp[0]);
 					if($key == 'cert' || $key == 'privkey' || $key == 'chain' || $key == 'fullchain') {
 						$path_scores[$file_path]['cert_paths'][$key] = trim($tmp[1]);
 					}
-					
+
 					continue;
 				}
-				
+
 				$tmp = explode('=', $line, 2);
 				if(count($tmp) != 2) continue;
-				
+
 				$domain = trim($tmp[0]);
 				if($domain == $main_domain) $path_scores[$file_path]['has_main_domain'] = true;
 				$path_scores[$file_path]['domains'][] = $domain;
 			}
 			fclose($fp);
-			
+
 			sort($path_scores[$file_path]['domains']);
 			if(count(array_intersect($domains, $path_scores[$file_path]['domains'])) < 1) {
 				$path_scores[$file_path]['diff'] = false;
@@ -238,13 +238,13 @@ class letsencrypt {
 				// give higher diff value to missing domains than to those that are too much in there
 				$path_scores[$file_path]['diff'] = (count(array_diff($domains, $path_scores[$file_path]['domains'])) * 1.5) + count(array_diff($path_scores[$file_path]['domains'], $domains));
 			}
-			 
+
 			if($min_diff === false || $path_scores[$file_path]['diff'] < $min_diff) $min_diff = $path_scores[$file_path]['diff'];
 		}
 		closedir($dir);
 
 		if($min_diff === false) return false;
-		
+
 		$cert_paths = false;
 		$used_path = false;
 		foreach($path_scores as $path => $data) {
@@ -254,15 +254,15 @@ class letsencrypt {
 				if($data['has_main_domain'] == true) break;
 			}
 		}
-		
+
 		$app->log("Let's Encrypt Cert config path is: " . ($used_path ? $used_path : "not found") . ".", LOGLEVEL_DEBUG);
-		
+
 		return $cert_paths;
 	}
-	
+
 	private function get_ssl_domain($data) {
 		global $app;
-		
+
 		$domain = $data['new']['ssl_domain'];
 		if(!$domain) {
 			$domain = $data['new']['domain'];
@@ -276,14 +276,14 @@ class letsencrypt {
 				$domain = substr($domain, 2);
 			}
 		}
-		
+
 		return $domain;
 	}
-	
+
 	public function get_website_certificate_paths($data) {
 		$ssl_dir = $data['new']['document_root'].'/ssl';
 		$domain = $this->get_ssl_domain($data);
-		
+
 		$cert_paths = array(
 			'domain' => $domain,
 			'key' => $ssl_dir.'/'.$domain.'.key',
@@ -292,7 +292,7 @@ class letsencrypt {
 			'crt' => $ssl_dir.'/'.$domain.'.crt',
 			'bundle' => $ssl_dir.'/'.$domain.'.bundle'
 		);
-		
+
 		if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') {
 			$cert_paths = array(
 				'domain' => $domain,
@@ -302,17 +302,17 @@ class letsencrypt {
 				'bundle' => $ssl_dir.'/'.$domain.'-le.bundle'
 			);
 		}
-		
+
 		return $cert_paths;
 	}
-	
+
 	public function request_certificates($data, $server_type = 'apache') {
 		global $app, $conf;
-		
+
 		$app->uses('getconf');
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-		
+
 		$use_acme = false;
 		if($this->get_acme_script()) {
 			$use_acme = true;
@@ -320,13 +320,13 @@ class letsencrypt {
 			// acme and le missing
 			$this->install_acme();
 		}
-		
+
 		$tmp = $app->letsencrypt->get_website_certificate_paths($data);
 		$domain = $tmp['domain'];
 		$key_file = $tmp['key'];
 		$crt_file = $tmp['crt'];
 		$bundle_file = $tmp['bundle'];
-		
+
 		// default values
 		$temp_domains = array($domain);
 		$cli_domain_arg = '';
@@ -345,7 +345,7 @@ class letsencrypt {
 				$temp_domains[] = $subdomain['domain'];
 			}
 		}
-		
+
 		//* then, add alias domain if we have
 		$aliasdomains = $app->db->queryAllRecords('SELECT domain,subdomain FROM web_domain WHERE parent_domain_id = '.intval($data['new']['domain_id'])." AND active = 'y' AND type = 'alias' AND ssl_letsencrypt_exclude != 'y'");
 		if(is_array($aliasdomains)) {
@@ -395,7 +395,7 @@ class letsencrypt {
 		// unset useless data
 		unset($subdomains);
 		unset($aliasdomains);
-		
+
 		$this->certbot_use_certcommand = false;
 		$letsencrypt_cmd = '';
 		$allow_return_codes = null;
@@ -405,7 +405,7 @@ class letsencrypt {
 		} else {
 			$letsencrypt_cmd = $this->get_certbot_command($temp_domains);
 		}
-		
+
 		$success = false;
 		if($letsencrypt_cmd) {
 			if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {
@@ -428,10 +428,17 @@ class letsencrypt {
 				return true;
 			}
 		}
-		
+
 		$le_files = array();
 		if($this->certbot_use_certcommand === true && $letsencrypt_cmd) {
-			$letsencrypt_cmd = $letsencrypt_cmd . " certificates " . $cli_domain_arg;
+			$cli_domain_arg = '';
+			// generate cli format
+			foreach($temp_domains as $temp_domain) {
+				$cli_domain_arg .= (string) " --domains " . $temp_domain;
+			}
+
+
+			$letsencrypt_cmd = $this->get_certbot_script() . " certificates " . $cli_domain_arg;
 			$output = explode("\n", shell_exec($letsencrypt_cmd . " 2>/dev/null | grep -v '^\$'"));
 			$le_path = '';
 			$skip_to_next = true;
@@ -439,18 +446,18 @@ class letsencrypt {
 			foreach($output as $outline) {
 				$outline = trim($outline);
 				$app->log("LE CERT OUTPUT: " . $outline, LOGLEVEL_DEBUG);
-				
+
 				if($skip_to_next === true && !preg_match('/^\s*Certificate Name/', $outline)) {
 					continue;
 				}
 				$skip_to_next = false;
-				
+
 				if(preg_match('/^\s*Expiry.*?VALID:\s+\D/', $outline)) {
 					$app->log("Found LE path is expired or invalid: " . $matches[1], LOGLEVEL_DEBUG);
 					$skip_to_next = true;
 					continue;
 				}
-				
+
 				if(preg_match('/^\s*Certificate Path:\s*(\/.*?)\s*$/', $outline, $matches)) {
 					$app->log("Found LE path: " . $matches[1], LOGLEVEL_DEBUG);
 					$le_path = dirname($matches[1]);
@@ -461,7 +468,7 @@ class letsencrypt {
 					}
 				}
 			}
-			
+
 			if($le_path) {
 				$le_files = array(
 					'privkey' => $le_path . '/privkey.pem',
@@ -475,32 +482,32 @@ class letsencrypt {
 			$le_files = $this->get_letsencrypt_certificate_paths($temp_domains);
 		}
 		unset($temp_domains);
-		
+
 		if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) {
 			$crt_tmp_file = $le_files['fullchain'];
 		} else {
 			$crt_tmp_file = $le_files['cert'];
 		}
-		
+
 		$key_tmp_file = $le_files['privkey'];
 		$bundle_tmp_file = $le_files['chain'];
-		
+
 		if(!$success) {
 			// error issuing cert
 			$app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN);
 			$app->log($letsencrypt_cmd, LOGLEVEL_WARN);
-			
+
 			// if cert already exists, dont remove it. Ex. expired/misstyped/noDnsYet alias domain, api down...
 			if(!file_exists($crt_tmp_file)) {
 				return false;
 			}
 		}
-			
+
 		//* check is been correctly created
 		if(file_exists($crt_tmp_file)) {
 			$app->log("Let's Encrypt Cert file: $crt_tmp_file exists.", LOGLEVEL_DEBUG);
 			$date = date("YmdHis");
-			
+
 			//* TODO: check if is a symlink, if target same keep it, either remove it
 			if(is_file($key_file)) {
 				$app->system->copy($key_file, $key_file.'.old.'.$date);
@@ -528,7 +535,7 @@ class letsencrypt {
 
 			if(@is_link($bundle_file)) $app->system->unlink($bundle_file);
 			if(@file_exists($bundle_tmp_file)) $app->system->exec_safe("ln -s ? ?", $bundle_tmp_file, $bundle_file);
-			
+
 			return true;
 		} else {
 			$app->log("Let's Encrypt Cert file: $crt_tmp_file does not exist.", LOGLEVEL_DEBUG);
-- 
GitLab


From 5c33920813b14afc30efd0a1ff26302e036097cc Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 5 May 2020 21:29:07 +0200
Subject: [PATCH 268/571] typo

---
 interface/lib/classes/listform_actions.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/classes/listform_actions.inc.php b/interface/lib/classes/listform_actions.inc.php
index 097b41fc0d..e0ffb628ee 100644
--- a/interface/lib/classes/listform_actions.inc.php
+++ b/interface/lib/classes/listform_actions.inc.php
@@ -192,7 +192,7 @@ class listform_actions {
 				$key = $field['field'];
 				if(isset($field['formtype']) && $field['formtype'] == 'SELECT') {
 					if(strtolower($rec[$key]) == 'y' or strtolower($rec[$key]) == 'n') {
-						// Set a additional image variable for bolean fields
+						// Set a additional image variable for boolean fields
 						$rec['_'.$key.'_'] = (strtolower($rec[$key]) == 'y')?'x16/tick_circle.png':'x16/cross_circle.png';
 					}
 					//* substitute value for select field
-- 
GitLab


From 955a242135ef8b896bd1ec2df63062114f19b56d Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Mon, 11 May 2020 08:46:46 +0200
Subject: [PATCH 269/571] Include CA certs in jailkit chroot, fixes #4878

---
 install/dist/tpl/gentoo/jk_init.ini.master | 2 ++
 install/tpl/jk_init.ini.master             | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/install/dist/tpl/gentoo/jk_init.ini.master b/install/dist/tpl/gentoo/jk_init.ini.master
index a2ff3a1951..6e11d05fd5 100644
--- a/install/dist/tpl/gentoo/jk_init.ini.master
+++ b/install/dist/tpl/gentoo/jk_init.ini.master
@@ -99,6 +99,8 @@ directories = /etc/joe, /etc/terminfo, /usr/share/vim, /usr/share/terminfo, /usr
 comment = several internet utilities like wget, ftp, rsync, scp, ssh
 executables = /usr/bin/wget, /usr/bin/lynx, /usr/bin/ftp, /usr/bin/host, /usr/bin/rsync, /usr/bin/smbclient
 includesections = netbasics, ssh, sftp, scp
+directories = /etc/ssl/certs/
+regularfiles = /usr/lib/ssl/certs
 
 [apacheutils]
 comment = htpasswd utility
diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master
index d34332b72e..469e655a31 100644
--- a/install/tpl/jk_init.ini.master
+++ b/install/tpl/jk_init.ini.master
@@ -96,6 +96,8 @@ directories = /etc/joe, /etc/terminfo, /usr/share/vim, /usr/share/terminfo, /lib
 comment = several internet utilities like wget, ftp, rsync, scp, ssh
 executables = /usr/bin/wget, /usr/bin/lynx, /usr/bin/ftp, /usr/bin/host, /usr/bin/rsync, /usr/bin/smbclient
 includesections = netbasics, ssh, sftp, scp
+directories = /etc/ssl/certs/
+regularfiles = /usr/lib/ssl/certs
 
 [apacheutils]
 comment = htpasswd utility
-- 
GitLab


From 1811e6496b1253332959dfd9d52624aed11f1e31 Mon Sep 17 00:00:00 2001
From: Branislav Viest <info@branoviest.com>
Date: Fri, 15 May 2020 17:32:02 +0200
Subject: [PATCH 270/571] Fixed error 404 when PHP-FPM is used and PHP script
 is not exists.

---
 server/conf/vhost.conf.master | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index bec2cedef2..f6ad4b830f 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -372,12 +372,16 @@
 			    </Directory>
 				<Directory {tmpl_var name='web_document_root_www'}>
 					<FilesMatch "\.php[345]?$">
-						SetHandler php-fcgi
+						<If "-f '%{REQUEST_FILENAME}'">
+							SetHandler php-fcgi
+						</If>
 					</FilesMatch>
 				</Directory>
 				<Directory {tmpl_var name='web_document_root'}>
 					<FilesMatch "\.php[345]?$">
-						SetHandler php-fcgi
+						<If "-f '%{REQUEST_FILENAME}'">
+							SetHandler php-fcgi
+						</If>
 					</FilesMatch>
 				</Directory>
                 Action php-fcgi /php-fcgi virtual
@@ -402,7 +406,9 @@
 			#ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:<tmpl_var name='fpm_port'><tmpl_var name='web_document_root'>/$1
 			<Directory {tmpl_var name='web_document_root'}>
 				<FilesMatch "\.php[345]?$">
+					<If "-f '%{REQUEST_FILENAME}'">
 						SetHandler "proxy:fcgi://127.0.0.1:<tmpl_var name='fpm_port'>"
+					</If>
 				</FilesMatch>
 			</Directory>
 </tmpl_if>
@@ -410,7 +416,9 @@
 			#ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ unix://<tmpl_var name='fpm_socket'>|fcgi://localhost/<tmpl_var name='web_document_root'>/$1
 			<Directory {tmpl_var name='web_document_root'}>
 				<FilesMatch "\.php[345]?$">
+					<If "-f '%{REQUEST_FILENAME}'">
 						SetHandler "proxy:unix:<tmpl_var name='fpm_socket'>|fcgi://localhost"
+					</If>
 				</FilesMatch>
 			</Directory>
 </tmpl_if>
-- 
GitLab


From 57acfd0d27d2e3399c7c377cd1221e2ece13d5bb Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 15 May 2020 20:29:09 +0200
Subject: [PATCH 271/571] Translation files should not have exec permission

---
 interface/lib/lang/fi.lng                                         | 0
 interface/web/admin/lib/lang/es.lng                               | 0
 interface/web/admin/lib/lang/es_directive_snippets.lng            | 0
 interface/web/admin/lib/lang/es_directive_snippets_list.lng       | 0
 interface/web/admin/lib/lang/es_firewall.lng                      | 0
 interface/web/admin/lib/lang/es_firewall_list.lng                 | 0
 interface/web/admin/lib/lang/es_groups.lng                        | 0
 interface/web/admin/lib/lang/es_groups_list.lng                   | 0
 interface/web/admin/lib/lang/es_iptables.lng                      | 0
 interface/web/admin/lib/lang/es_iptables_list.lng                 | 0
 interface/web/admin/lib/lang/es_language_add.lng                  | 0
 interface/web/admin/lib/lang/es_language_complete.lng             | 0
 interface/web/admin/lib/lang/es_language_edit.lng                 | 0
 interface/web/admin/lib/lang/es_language_export.lng               | 0
 interface/web/admin/lib/lang/es_language_import.lng               | 0
 interface/web/admin/lib/lang/es_language_list.lng                 | 0
 interface/web/admin/lib/lang/es_package_install.lng               | 0
 interface/web/admin/lib/lang/es_remote_action.lng                 | 0
 interface/web/admin/lib/lang/es_remote_user.lng                   | 0
 interface/web/admin/lib/lang/es_remote_user_list.lng              | 0
 interface/web/admin/lib/lang/es_server.lng                        | 0
 interface/web/admin/lib/lang/es_server_config.lng                 | 0
 interface/web/admin/lib/lang/es_server_config_list.lng            | 0
 interface/web/admin/lib/lang/es_server_ip.lng                     | 0
 interface/web/admin/lib/lang/es_server_ip_list.lng                | 0
 interface/web/admin/lib/lang/es_server_ip_map.lng                 | 0
 interface/web/admin/lib/lang/es_server_ip_map_list.lng            | 0
 interface/web/admin/lib/lang/es_server_list.lng                   | 0
 interface/web/admin/lib/lang/es_server_php.lng                    | 0
 interface/web/admin/lib/lang/es_server_php_list.lng               | 0
 interface/web/admin/lib/lang/es_software_package.lng              | 0
 interface/web/admin/lib/lang/es_software_package_install.lng      | 0
 interface/web/admin/lib/lang/es_software_package_list.lng         | 0
 interface/web/admin/lib/lang/es_software_repo.lng                 | 0
 interface/web/admin/lib/lang/es_software_repo_list.lng            | 0
 interface/web/admin/lib/lang/es_software_update_list.lng          | 0
 interface/web/admin/lib/lang/es_system_config.lng                 | 0
 interface/web/admin/lib/lang/es_tpl_default_admin.lng             | 0
 interface/web/admin/lib/lang/es_users.lng                         | 0
 interface/web/admin/lib/lang/es_users_list.lng                    | 0
 interface/web/admin/lib/lang/fi.lng                               | 0
 interface/web/admin/lib/lang/fi_firewall.lng                      | 0
 interface/web/admin/lib/lang/fi_firewall_list.lng                 | 0
 interface/web/admin/lib/lang/fi_groups.lng                        | 0
 interface/web/admin/lib/lang/fi_groups_list.lng                   | 0
 interface/web/admin/lib/lang/fi_language_add.lng                  | 0
 interface/web/admin/lib/lang/fi_language_complete.lng             | 0
 interface/web/admin/lib/lang/fi_language_edit.lng                 | 0
 interface/web/admin/lib/lang/fi_language_export.lng               | 0
 interface/web/admin/lib/lang/fi_language_import.lng               | 0
 interface/web/admin/lib/lang/fi_language_list.lng                 | 0
 interface/web/admin/lib/lang/fi_server.lng                        | 0
 interface/web/admin/lib/lang/fi_server_config.lng                 | 0
 interface/web/admin/lib/lang/fi_server_config_list.lng            | 0
 interface/web/admin/lib/lang/fi_server_ip.lng                     | 0
 interface/web/admin/lib/lang/fi_server_ip_list.lng                | 0
 interface/web/admin/lib/lang/fi_server_list.lng                   | 0
 interface/web/admin/lib/lang/fi_software_package_list.lng         | 0
 interface/web/admin/lib/lang/fi_software_repo.lng                 | 0
 interface/web/admin/lib/lang/fi_software_repo_list.lng            | 0
 interface/web/admin/lib/lang/fi_software_update_list.lng          | 0
 interface/web/admin/lib/lang/fi_users.lng                         | 0
 interface/web/admin/lib/lang/fi_users_list.lng                    | 0
 interface/web/client/lib/lang/en_resellers_list.lng               | 0
 interface/web/client/lib/lang/es.lng                              | 0
 interface/web/client/lib/lang/es_client.lng                       | 0
 interface/web/client/lib/lang/es_client_circle.lng                | 0
 interface/web/client/lib/lang/es_client_circle_list.lng           | 0
 interface/web/client/lib/lang/es_client_del.lng                   | 0
 interface/web/client/lib/lang/es_client_message.lng               | 0
 interface/web/client/lib/lang/es_client_message_template.lng      | 0
 interface/web/client/lib/lang/es_client_message_template_list.lng | 0
 interface/web/client/lib/lang/es_client_template.lng              | 0
 interface/web/client/lib/lang/es_client_template_list.lng         | 0
 interface/web/client/lib/lang/es_clients_list.lng                 | 0
 interface/web/client/lib/lang/es_domain.lng                       | 0
 interface/web/client/lib/lang/es_domain_list.lng                  | 0
 interface/web/client/lib/lang/es_reseller.lng                     | 0
 interface/web/client/lib/lang/fi.lng                              | 0
 interface/web/client/lib/lang/fi_client.lng                       | 0
 interface/web/client/lib/lang/fi_client_template.lng              | 0
 interface/web/client/lib/lang/fi_client_template_list.lng         | 0
 interface/web/client/lib/lang/fi_clients_list.lng                 | 0
 interface/web/dashboard/lib/lang/es.lng                           | 0
 interface/web/dashboard/lib/lang/es_dashlet_customer.lng          | 0
 .../web/dashboard/lib/lang/es_dashlet_invoice_client_settings.lng | 0
 interface/web/dashboard/lib/lang/es_dashlet_invoices.lng          | 0
 interface/web/dashboard/lib/lang/es_dashlet_limits.lng            | 0
 interface/web/dashboard/lib/lang/es_dashlet_mailquota.lng         | 0
 interface/web/dashboard/lib/lang/es_dashlet_modules.lng           | 0
 interface/web/dashboard/lib/lang/es_dashlet_products.lng          | 0
 interface/web/dashboard/lib/lang/es_dashlet_quota.lng             | 0
 interface/web/dashboard/lib/lang/es_dashlet_shop.lng              | 0
 interface/web/dns/lib/lang/es.lng                                 | 0
 interface/web/dns/lib/lang/es_dns_a.lng                           | 0
 interface/web/dns/lib/lang/es_dns_a_list.lng                      | 0
 interface/web/dns/lib/lang/es_dns_aaaa.lng                        | 0
 interface/web/dns/lib/lang/es_dns_alias.lng                       | 0
 interface/web/dns/lib/lang/es_dns_cname.lng                       | 0
 interface/web/dns/lib/lang/es_dns_dkim.lng                        | 0
 interface/web/dns/lib/lang/es_dns_dmarc.lng                       | 0
 interface/web/dns/lib/lang/es_dns_ds.lng                          | 0
 interface/web/dns/lib/lang/es_dns_hinfo.lng                       | 0
 interface/web/dns/lib/lang/es_dns_import.lng                      | 0
 interface/web/dns/lib/lang/es_dns_loc.lng                         | 0
 interface/web/dns/lib/lang/es_dns_mx.lng                          | 0
 interface/web/dns/lib/lang/es_dns_ns.lng                          | 0
 interface/web/dns/lib/lang/es_dns_ptr.lng                         | 0
 interface/web/dns/lib/lang/es_dns_rp.lng                          | 0
 interface/web/dns/lib/lang/es_dns_slave_admin_list.lng            | 0
 interface/web/dns/lib/lang/es_dns_slave_list.lng                  | 0
 interface/web/dns/lib/lang/es_dns_soa.lng                         | 0
 interface/web/dns/lib/lang/es_dns_soa_admin_list.lng              | 0
 interface/web/dns/lib/lang/es_dns_soa_list.lng                    | 0
 interface/web/dns/lib/lang/es_dns_spf.lng                         | 0
 interface/web/dns/lib/lang/es_dns_srv.lng                         | 0
 interface/web/dns/lib/lang/es_dns_template.lng                    | 0
 interface/web/dns/lib/lang/es_dns_template_list.lng               | 0
 interface/web/dns/lib/lang/es_dns_tlsa.lng                        | 0
 interface/web/dns/lib/lang/es_dns_txt.lng                         | 0
 interface/web/dns/lib/lang/es_dns_wizard.lng                      | 0
 interface/web/dns/lib/lang/fi.lng                                 | 0
 interface/web/dns/lib/lang/fi_dns_a.lng                           | 0
 interface/web/dns/lib/lang/fi_dns_a_list.lng                      | 0
 interface/web/dns/lib/lang/fi_dns_alias.lng                       | 0
 interface/web/dns/lib/lang/fi_dns_cname.lng                       | 0
 interface/web/dns/lib/lang/fi_dns_hinfo.lng                       | 0
 interface/web/dns/lib/lang/fi_dns_mx.lng                          | 0
 interface/web/dns/lib/lang/fi_dns_ns.lng                          | 0
 interface/web/dns/lib/lang/fi_dns_ptr.lng                         | 0
 interface/web/dns/lib/lang/fi_dns_rp.lng                          | 0
 interface/web/dns/lib/lang/fi_dns_soa.lng                         | 0
 interface/web/dns/lib/lang/fi_dns_soa_list.lng                    | 0
 interface/web/dns/lib/lang/fi_dns_srv.lng                         | 0
 interface/web/dns/lib/lang/fi_dns_template.lng                    | 0
 interface/web/dns/lib/lang/fi_dns_template_list.lng               | 0
 interface/web/dns/lib/lang/fi_dns_txt.lng                         | 0
 interface/web/dns/lib/lang/fi_dns_wizard.lng                      | 0
 interface/web/help/lib/lang/es.lng                                | 0
 interface/web/help/lib/lang/es_faq_form.lng                       | 0
 interface/web/help/lib/lang/es_faq_manage_questions_list.lng      | 0
 interface/web/help/lib/lang/es_faq_sections_form.lng              | 0
 interface/web/help/lib/lang/es_help_faq_list.lng                  | 0
 interface/web/help/lib/lang/es_help_faq_sections_list.lng         | 0
 interface/web/help/lib/lang/es_support_message.lng                | 0
 interface/web/help/lib/lang/es_support_message_list.lng           | 0
 interface/web/help/lib/lang/fi.lng                                | 0
 interface/web/help/lib/lang/fi_support_message.lng                | 0
 interface/web/help/lib/lang/fi_support_message_list.lng           | 0
 interface/web/login/lib/lang/es.lng                               | 0
 interface/web/login/lib/lang/es_login_as.lng                      | 0
 interface/web/login/lib/lang/fi.lng                               | 0
 interface/web/mail/lib/lang/ar_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/bg_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/br_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/cz_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/de_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/el_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/en_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/es.lng                                | 0
 interface/web/mail/lib/lang/es_backup_stats_list.lng              | 0
 interface/web/mail/lib/lang/es_mail_alias.lng                     | 0
 interface/web/mail/lib/lang/es_mail_alias_list.lng                | 0
 interface/web/mail/lib/lang/es_mail_aliasdomain.lng               | 0
 interface/web/mail/lib/lang/es_mail_aliasdomain_list.lng          | 0
 interface/web/mail/lib/lang/es_mail_backup_list.lng               | 0
 interface/web/mail/lib/lang/es_mail_blacklist.lng                 | 0
 interface/web/mail/lib/lang/es_mail_blacklist_list.lng            | 0
 interface/web/mail/lib/lang/es_mail_content_filter.lng            | 0
 interface/web/mail/lib/lang/es_mail_content_filter_list.lng       | 0
 interface/web/mail/lib/lang/es_mail_domain.lng                    | 0
 interface/web/mail/lib/lang/es_mail_domain_admin_list.lng         | 0
 interface/web/mail/lib/lang/es_mail_domain_catchall.lng           | 0
 interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng      | 0
 interface/web/mail/lib/lang/es_mail_domain_list.lng               | 0
 interface/web/mail/lib/lang/es_mail_forward.lng                   | 0
 interface/web/mail/lib/lang/es_mail_forward_list.lng              | 0
 interface/web/mail/lib/lang/es_mail_get.lng                       | 0
 interface/web/mail/lib/lang/es_mail_get_list.lng                  | 0
 interface/web/mail/lib/lang/es_mail_mailinglist.lng               | 0
 interface/web/mail/lib/lang/es_mail_mailinglist_list.lng          | 0
 interface/web/mail/lib/lang/es_mail_relay_recipient.lng           | 0
 interface/web/mail/lib/lang/es_mail_relay_recipient_list.lng      | 0
 interface/web/mail/lib/lang/es_mail_spamfilter.lng                | 0
 interface/web/mail/lib/lang/es_mail_spamfilter_list.lng           | 0
 interface/web/mail/lib/lang/es_mail_transport.lng                 | 0
 interface/web/mail/lib/lang/es_mail_transport_list.lng            | 0
 interface/web/mail/lib/lang/es_mail_user.lng                      | 0
 interface/web/mail/lib/lang/es_mail_user_filter.lng               | 0
 interface/web/mail/lib/lang/es_mail_user_filter_list.lng          | 0
 interface/web/mail/lib/lang/es_mail_user_list.lng                 | 0
 interface/web/mail/lib/lang/es_mail_user_stats_list.lng           | 0
 interface/web/mail/lib/lang/es_mail_whitelist_list.lng            | 0
 interface/web/mail/lib/lang/es_spamfilter_blacklist.lng           | 0
 interface/web/mail/lib/lang/es_spamfilter_blacklist_list.lng      | 0
 interface/web/mail/lib/lang/es_spamfilter_config.lng              | 0
 interface/web/mail/lib/lang/es_spamfilter_config_list.lng         | 0
 interface/web/mail/lib/lang/es_spamfilter_policy.lng              | 0
 interface/web/mail/lib/lang/es_spamfilter_policy_list.lng         | 0
 interface/web/mail/lib/lang/es_spamfilter_users.lng               | 0
 interface/web/mail/lib/lang/es_spamfilter_users_list.lng          | 0
 interface/web/mail/lib/lang/es_spamfilter_whitelist.lng           | 0
 interface/web/mail/lib/lang/es_spamfilter_whitelist_list.lng      | 0
 interface/web/mail/lib/lang/es_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/es_xmpp_domain.lng                    | 0
 interface/web/mail/lib/lang/es_xmpp_domain_admin_list.lng         | 0
 interface/web/mail/lib/lang/es_xmpp_domain_list.lng               | 0
 interface/web/mail/lib/lang/es_xmpp_user.lng                      | 0
 interface/web/mail/lib/lang/es_xmpp_user_list.lng                 | 0
 interface/web/mail/lib/lang/fi.lng                                | 0
 interface/web/mail/lib/lang/fi_mail_alias.lng                     | 0
 interface/web/mail/lib/lang/fi_mail_alias_list.lng                | 0
 interface/web/mail/lib/lang/fi_mail_blacklist.lng                 | 0
 interface/web/mail/lib/lang/fi_mail_blacklist_list.lng            | 0
 interface/web/mail/lib/lang/fi_mail_content_filter.lng            | 0
 interface/web/mail/lib/lang/fi_mail_content_filter_list.lng       | 0
 interface/web/mail/lib/lang/fi_mail_domain.lng                    | 0
 interface/web/mail/lib/lang/fi_mail_domain_catchall.lng           | 0
 interface/web/mail/lib/lang/fi_mail_domain_catchall_list.lng      | 0
 interface/web/mail/lib/lang/fi_mail_domain_list.lng               | 0
 interface/web/mail/lib/lang/fi_mail_forward.lng                   | 0
 interface/web/mail/lib/lang/fi_mail_forward_list.lng              | 0
 interface/web/mail/lib/lang/fi_mail_get.lng                       | 0
 interface/web/mail/lib/lang/fi_mail_get_list.lng                  | 0
 interface/web/mail/lib/lang/fi_mail_spamfilter.lng                | 0
 interface/web/mail/lib/lang/fi_mail_spamfilter_list.lng           | 0
 interface/web/mail/lib/lang/fi_mail_transport.lng                 | 0
 interface/web/mail/lib/lang/fi_mail_transport_list.lng            | 0
 interface/web/mail/lib/lang/fi_mail_user.lng                      | 0
 interface/web/mail/lib/lang/fi_mail_user_filter.lng               | 0
 interface/web/mail/lib/lang/fi_mail_user_filter_list.lng          | 0
 interface/web/mail/lib/lang/fi_mail_user_list.lng                 | 0
 interface/web/mail/lib/lang/fi_mail_user_stats_list.lng           | 0
 interface/web/mail/lib/lang/fi_mail_whitelist.lng                 | 0
 interface/web/mail/lib/lang/fi_mail_whitelist_list.lng            | 0
 interface/web/mail/lib/lang/fi_spamfilter_blacklist.lng           | 0
 interface/web/mail/lib/lang/fi_spamfilter_blacklist_list.lng      | 0
 interface/web/mail/lib/lang/fi_spamfilter_config.lng              | 0
 interface/web/mail/lib/lang/fi_spamfilter_config_list.lng         | 0
 interface/web/mail/lib/lang/fi_spamfilter_policy.lng              | 0
 interface/web/mail/lib/lang/fi_spamfilter_policy_list.lng         | 0
 interface/web/mail/lib/lang/fi_spamfilter_users.lng               | 0
 interface/web/mail/lib/lang/fi_spamfilter_users_list.lng          | 0
 interface/web/mail/lib/lang/fi_spamfilter_whitelist.lng           | 0
 interface/web/mail/lib/lang/fi_spamfilter_whitelist_list.lng      | 0
 interface/web/mail/lib/lang/fi_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/fr_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/hu_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/id_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/it_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/ja_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/nl_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/pl_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/pt_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/ro_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/ru_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/se_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/sk_user_quota_stats_list.lng          | 0
 interface/web/mail/lib/lang/tr_user_quota_stats_list.lng          | 0
 interface/web/mailuser/lib/lang/es.lng                            | 0
 interface/web/mailuser/lib/lang/es_index.lng                      | 0
 interface/web/mailuser/lib/lang/es_mail_user_autoresponder.lng    | 0
 interface/web/mailuser/lib/lang/es_mail_user_cc.lng               | 0
 interface/web/mailuser/lib/lang/es_mail_user_filter.lng           | 0
 interface/web/mailuser/lib/lang/es_mail_user_filter_list.lng      | 0
 interface/web/mailuser/lib/lang/es_mail_user_password.lng         | 0
 interface/web/mailuser/lib/lang/es_mail_user_spamfilter.lng       | 0
 interface/web/monitor/lib/lang/es.lng                             | 0
 interface/web/monitor/lib/lang/es_datalog_list.lng                | 0
 interface/web/monitor/lib/lang/es_syslog_list.lng                 | 0
 interface/web/monitor/lib/lang/fi.lng                             | 0
 interface/web/monitor/lib/lang/fi_datalog_list.lng                | 0
 interface/web/monitor/lib/lang/fi_syslog_list.lng                 | 0
 interface/web/sites/lib/lang/es.lng                               | 0
 interface/web/sites/lib/lang/es_aps.lng                           | 0
 interface/web/sites/lib/lang/es_aps_instances_list.lng            | 0
 interface/web/sites/lib/lang/es_aps_packages_list.lng             | 0
 interface/web/sites/lib/lang/es_aps_update_packagelist.lng        | 0
 interface/web/sites/lib/lang/es_backup_stats_list.lng             | 0
 interface/web/sites/lib/lang/es_cron.lng                          | 0
 interface/web/sites/lib/lang/es_cron_list.lng                     | 0
 interface/web/sites/lib/lang/es_database.lng                      | 0
 interface/web/sites/lib/lang/fi.lng                               | 0
 interface/web/sites/lib/lang/fi_database.lng                      | 0
 interface/web/sites/lib/lang/fi_database_list.lng                 | 0
 interface/web/sites/lib/lang/fi_ftp_user.lng                      | 0
 interface/web/sites/lib/lang/fi_ftp_user_list.lng                 | 0
 interface/web/sites/lib/lang/fi_shell_user.lng                    | 0
 interface/web/sites/lib/lang/fi_shell_user_list.lng               | 0
 interface/web/sites/lib/lang/fi_web_childdomain.lng               | 0
 interface/web/sites/lib/lang/fi_web_childdomain_list.lng          | 0
 interface/web/sites/lib/lang/fi_web_sites_stats_list.lng          | 0
 interface/web/sites/lib/lang/fi_web_vhost_domain_list.lng         | 0
 interface/web/strengthmeter/lib/lang/bg_strengthmeter.lng         | 0
 interface/web/strengthmeter/lib/lang/fi_strengthmeter.lng         | 0
 interface/web/tools/lib/lang/fi.lng                               | 0
 interface/web/tools/lib/lang/fi_usersettings.lng                  | 0
 297 files changed, 0 insertions(+), 0 deletions(-)
 mode change 100755 => 100644 interface/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_directive_snippets.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_directive_snippets_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_firewall.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_firewall_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_groups.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_groups_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_iptables.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_iptables_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_language_add.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_language_complete.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_language_edit.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_language_export.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_language_import.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_language_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_package_install.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_remote_action.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_remote_user.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_remote_user_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_config.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_config_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_ip.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_ip_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_ip_map.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_ip_map_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_php.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_server_php_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_software_package.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_software_package_install.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_software_package_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_software_repo.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_software_repo_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_software_update_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_system_config.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_tpl_default_admin.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_users.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/es_users_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_firewall.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_firewall_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_groups.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_groups_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_language_add.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_language_complete.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_language_edit.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_language_export.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_language_import.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_language_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_server.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_server_config.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_server_config_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_server_ip.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_server_ip_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_server_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_software_package_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_software_repo.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_software_repo_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_software_update_list.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_users.lng
 mode change 100755 => 100644 interface/web/admin/lib/lang/fi_users_list.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/en_resellers_list.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client_circle.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client_circle_list.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client_del.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client_message.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client_message_template.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client_message_template_list.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client_template.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_client_template_list.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_clients_list.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_domain.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_domain_list.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/es_reseller.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/fi_client.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/fi_client_template.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/fi_client_template_list.lng
 mode change 100755 => 100644 interface/web/client/lib/lang/fi_clients_list.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_customer.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_invoice_client_settings.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_invoices.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_limits.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_mailquota.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_modules.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_products.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_quota.lng
 mode change 100755 => 100644 interface/web/dashboard/lib/lang/es_dashlet_shop.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_a.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_a_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_aaaa.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_alias.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_cname.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_dkim.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_dmarc.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_ds.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_hinfo.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_import.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_loc.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_mx.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_ns.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_ptr.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_rp.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_slave_admin_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_slave_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_soa.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_soa_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_spf.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_srv.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_template.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_template_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_tlsa.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_txt.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/es_dns_wizard.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_a.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_a_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_alias.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_cname.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_hinfo.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_mx.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_ns.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_ptr.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_rp.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_soa.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_soa_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_srv.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_template.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_template_list.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_txt.lng
 mode change 100755 => 100644 interface/web/dns/lib/lang/fi_dns_wizard.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/es_faq_form.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/es_faq_manage_questions_list.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/es_faq_sections_form.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/es_help_faq_list.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/es_help_faq_sections_list.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/es_support_message.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/es_support_message_list.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/fi_support_message.lng
 mode change 100755 => 100644 interface/web/help/lib/lang/fi_support_message_list.lng
 mode change 100755 => 100644 interface/web/login/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/login/lib/lang/es_login_as.lng
 mode change 100755 => 100644 interface/web/login/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/ar_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/bg_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/br_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/cz_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/de_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/el_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/en_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_backup_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_alias.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_alias_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_aliasdomain.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_aliasdomain_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_backup_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_blacklist.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_blacklist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_content_filter.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_content_filter_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_domain.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_domain_admin_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_domain_catchall.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_domain_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_forward.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_forward_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_get.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_get_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_mailinglist.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_mailinglist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_relay_recipient.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_relay_recipient_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_spamfilter.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_spamfilter_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_transport.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_transport_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_user.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_user_filter.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_user_filter_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_user_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_user_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_mail_whitelist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_blacklist.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_blacklist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_config.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_config_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_policy.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_policy_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_users.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_users_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_whitelist.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_spamfilter_whitelist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_xmpp_domain.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_xmpp_domain_admin_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_xmpp_domain_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_xmpp_user.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/es_xmpp_user_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_alias.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_alias_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_blacklist.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_blacklist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_content_filter.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_content_filter_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_domain.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_domain_catchall.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_domain_catchall_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_domain_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_forward.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_forward_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_get.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_get_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_spamfilter.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_spamfilter_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_transport.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_transport_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_user.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_user_filter.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_user_filter_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_user_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_user_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_whitelist.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_mail_whitelist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_blacklist.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_blacklist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_config.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_config_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_policy.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_policy_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_users.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_users_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_whitelist.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_spamfilter_whitelist_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fi_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/fr_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/hu_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/id_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/it_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/ja_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/nl_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/pl_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/pt_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/ro_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/ru_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/se_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/sk_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mail/lib/lang/tr_user_quota_stats_list.lng
 mode change 100755 => 100644 interface/web/mailuser/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/mailuser/lib/lang/es_index.lng
 mode change 100755 => 100644 interface/web/mailuser/lib/lang/es_mail_user_autoresponder.lng
 mode change 100755 => 100644 interface/web/mailuser/lib/lang/es_mail_user_cc.lng
 mode change 100755 => 100644 interface/web/mailuser/lib/lang/es_mail_user_filter.lng
 mode change 100755 => 100644 interface/web/mailuser/lib/lang/es_mail_user_filter_list.lng
 mode change 100755 => 100644 interface/web/mailuser/lib/lang/es_mail_user_password.lng
 mode change 100755 => 100644 interface/web/mailuser/lib/lang/es_mail_user_spamfilter.lng
 mode change 100755 => 100644 interface/web/monitor/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/monitor/lib/lang/es_datalog_list.lng
 mode change 100755 => 100644 interface/web/monitor/lib/lang/es_syslog_list.lng
 mode change 100755 => 100644 interface/web/monitor/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/monitor/lib/lang/fi_datalog_list.lng
 mode change 100755 => 100644 interface/web/monitor/lib/lang/fi_syslog_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es_aps.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es_aps_instances_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es_aps_packages_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es_aps_update_packagelist.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es_backup_stats_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es_cron.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es_cron_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/es_database.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_database.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_database_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_ftp_user.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_ftp_user_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_shell_user.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_shell_user_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_web_childdomain.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_web_childdomain_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_web_sites_stats_list.lng
 mode change 100755 => 100644 interface/web/sites/lib/lang/fi_web_vhost_domain_list.lng
 mode change 100755 => 100644 interface/web/strengthmeter/lib/lang/bg_strengthmeter.lng
 mode change 100755 => 100644 interface/web/strengthmeter/lib/lang/fi_strengthmeter.lng
 mode change 100755 => 100644 interface/web/tools/lib/lang/fi.lng
 mode change 100755 => 100644 interface/web/tools/lib/lang/fi_usersettings.lng

diff --git a/interface/lib/lang/fi.lng b/interface/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es.lng b/interface/web/admin/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_directive_snippets.lng b/interface/web/admin/lib/lang/es_directive_snippets.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_directive_snippets_list.lng b/interface/web/admin/lib/lang/es_directive_snippets_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_firewall.lng b/interface/web/admin/lib/lang/es_firewall.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_firewall_list.lng b/interface/web/admin/lib/lang/es_firewall_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_groups.lng b/interface/web/admin/lib/lang/es_groups.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_groups_list.lng b/interface/web/admin/lib/lang/es_groups_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_iptables.lng b/interface/web/admin/lib/lang/es_iptables.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_iptables_list.lng b/interface/web/admin/lib/lang/es_iptables_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_language_add.lng b/interface/web/admin/lib/lang/es_language_add.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_language_complete.lng b/interface/web/admin/lib/lang/es_language_complete.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_language_edit.lng b/interface/web/admin/lib/lang/es_language_edit.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_language_export.lng b/interface/web/admin/lib/lang/es_language_export.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_language_import.lng b/interface/web/admin/lib/lang/es_language_import.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_language_list.lng b/interface/web/admin/lib/lang/es_language_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_package_install.lng b/interface/web/admin/lib/lang/es_package_install.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_remote_action.lng b/interface/web/admin/lib/lang/es_remote_action.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_remote_user.lng b/interface/web/admin/lib/lang/es_remote_user.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_remote_user_list.lng b/interface/web/admin/lib/lang/es_remote_user_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server.lng b/interface/web/admin/lib/lang/es_server.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_config_list.lng b/interface/web/admin/lib/lang/es_server_config_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_ip.lng b/interface/web/admin/lib/lang/es_server_ip.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_ip_list.lng b/interface/web/admin/lib/lang/es_server_ip_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_ip_map.lng b/interface/web/admin/lib/lang/es_server_ip_map.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_ip_map_list.lng b/interface/web/admin/lib/lang/es_server_ip_map_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_list.lng b/interface/web/admin/lib/lang/es_server_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_php.lng b/interface/web/admin/lib/lang/es_server_php.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_server_php_list.lng b/interface/web/admin/lib/lang/es_server_php_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_software_package.lng b/interface/web/admin/lib/lang/es_software_package.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_software_package_install.lng b/interface/web/admin/lib/lang/es_software_package_install.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_software_package_list.lng b/interface/web/admin/lib/lang/es_software_package_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_software_repo.lng b/interface/web/admin/lib/lang/es_software_repo.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_software_repo_list.lng b/interface/web/admin/lib/lang/es_software_repo_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_software_update_list.lng b/interface/web/admin/lib/lang/es_software_update_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_tpl_default_admin.lng b/interface/web/admin/lib/lang/es_tpl_default_admin.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_users.lng b/interface/web/admin/lib/lang/es_users.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/es_users_list.lng b/interface/web/admin/lib/lang/es_users_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi.lng b/interface/web/admin/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_firewall.lng b/interface/web/admin/lib/lang/fi_firewall.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_firewall_list.lng b/interface/web/admin/lib/lang/fi_firewall_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_groups.lng b/interface/web/admin/lib/lang/fi_groups.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_groups_list.lng b/interface/web/admin/lib/lang/fi_groups_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_language_add.lng b/interface/web/admin/lib/lang/fi_language_add.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_language_complete.lng b/interface/web/admin/lib/lang/fi_language_complete.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_language_edit.lng b/interface/web/admin/lib/lang/fi_language_edit.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_language_export.lng b/interface/web/admin/lib/lang/fi_language_export.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_language_import.lng b/interface/web/admin/lib/lang/fi_language_import.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_language_list.lng b/interface/web/admin/lib/lang/fi_language_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_server.lng b/interface/web/admin/lib/lang/fi_server.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_server_config_list.lng b/interface/web/admin/lib/lang/fi_server_config_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_server_ip.lng b/interface/web/admin/lib/lang/fi_server_ip.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_server_ip_list.lng b/interface/web/admin/lib/lang/fi_server_ip_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_server_list.lng b/interface/web/admin/lib/lang/fi_server_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_software_package_list.lng b/interface/web/admin/lib/lang/fi_software_package_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_software_repo.lng b/interface/web/admin/lib/lang/fi_software_repo.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_software_repo_list.lng b/interface/web/admin/lib/lang/fi_software_repo_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_software_update_list.lng b/interface/web/admin/lib/lang/fi_software_update_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_users.lng b/interface/web/admin/lib/lang/fi_users.lng
old mode 100755
new mode 100644
diff --git a/interface/web/admin/lib/lang/fi_users_list.lng b/interface/web/admin/lib/lang/fi_users_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/en_resellers_list.lng b/interface/web/client/lib/lang/en_resellers_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es.lng b/interface/web/client/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client_circle.lng b/interface/web/client/lib/lang/es_client_circle.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client_circle_list.lng b/interface/web/client/lib/lang/es_client_circle_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client_del.lng b/interface/web/client/lib/lang/es_client_del.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client_message.lng b/interface/web/client/lib/lang/es_client_message.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client_message_template.lng b/interface/web/client/lib/lang/es_client_message_template.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client_message_template_list.lng b/interface/web/client/lib/lang/es_client_message_template_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client_template.lng b/interface/web/client/lib/lang/es_client_template.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_client_template_list.lng b/interface/web/client/lib/lang/es_client_template_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_clients_list.lng b/interface/web/client/lib/lang/es_clients_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_domain.lng b/interface/web/client/lib/lang/es_domain.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_domain_list.lng b/interface/web/client/lib/lang/es_domain_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/es_reseller.lng b/interface/web/client/lib/lang/es_reseller.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/fi.lng b/interface/web/client/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/fi_client_template.lng b/interface/web/client/lib/lang/fi_client_template.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/fi_client_template_list.lng b/interface/web/client/lib/lang/fi_client_template_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/client/lib/lang/fi_clients_list.lng b/interface/web/client/lib/lang/fi_clients_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es.lng b/interface/web/dashboard/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_customer.lng b/interface/web/dashboard/lib/lang/es_dashlet_customer.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_invoice_client_settings.lng b/interface/web/dashboard/lib/lang/es_dashlet_invoice_client_settings.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/es_dashlet_invoices.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/es_dashlet_mailquota.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_modules.lng b/interface/web/dashboard/lib/lang/es_dashlet_modules.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_products.lng b/interface/web/dashboard/lib/lang/es_dashlet_products.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_quota.lng b/interface/web/dashboard/lib/lang/es_dashlet_quota.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_shop.lng b/interface/web/dashboard/lib/lang/es_dashlet_shop.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es.lng b/interface/web/dns/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_a.lng b/interface/web/dns/lib/lang/es_dns_a.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_a_list.lng b/interface/web/dns/lib/lang/es_dns_a_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_aaaa.lng b/interface/web/dns/lib/lang/es_dns_aaaa.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_alias.lng b/interface/web/dns/lib/lang/es_dns_alias.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_cname.lng b/interface/web/dns/lib/lang/es_dns_cname.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_dkim.lng b/interface/web/dns/lib/lang/es_dns_dkim.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_dmarc.lng b/interface/web/dns/lib/lang/es_dns_dmarc.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_ds.lng b/interface/web/dns/lib/lang/es_dns_ds.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_hinfo.lng b/interface/web/dns/lib/lang/es_dns_hinfo.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_import.lng b/interface/web/dns/lib/lang/es_dns_import.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_loc.lng b/interface/web/dns/lib/lang/es_dns_loc.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_mx.lng b/interface/web/dns/lib/lang/es_dns_mx.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_ns.lng b/interface/web/dns/lib/lang/es_dns_ns.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_ptr.lng b/interface/web/dns/lib/lang/es_dns_ptr.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_rp.lng b/interface/web/dns/lib/lang/es_dns_rp.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/es_dns_slave_admin_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_slave_list.lng b/interface/web/dns/lib/lang/es_dns_slave_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_soa.lng b/interface/web/dns/lib/lang/es_dns_soa.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_soa_list.lng b/interface/web/dns/lib/lang/es_dns_soa_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_spf.lng b/interface/web/dns/lib/lang/es_dns_spf.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_srv.lng b/interface/web/dns/lib/lang/es_dns_srv.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_template.lng b/interface/web/dns/lib/lang/es_dns_template.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_template_list.lng b/interface/web/dns/lib/lang/es_dns_template_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_tlsa.lng b/interface/web/dns/lib/lang/es_dns_tlsa.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_txt.lng b/interface/web/dns/lib/lang/es_dns_txt.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/es_dns_wizard.lng b/interface/web/dns/lib/lang/es_dns_wizard.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi.lng b/interface/web/dns/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_a.lng b/interface/web/dns/lib/lang/fi_dns_a.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_a_list.lng b/interface/web/dns/lib/lang/fi_dns_a_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_alias.lng b/interface/web/dns/lib/lang/fi_dns_alias.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_cname.lng b/interface/web/dns/lib/lang/fi_dns_cname.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_hinfo.lng b/interface/web/dns/lib/lang/fi_dns_hinfo.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_mx.lng b/interface/web/dns/lib/lang/fi_dns_mx.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_ns.lng b/interface/web/dns/lib/lang/fi_dns_ns.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_ptr.lng b/interface/web/dns/lib/lang/fi_dns_ptr.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_rp.lng b/interface/web/dns/lib/lang/fi_dns_rp.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_soa.lng b/interface/web/dns/lib/lang/fi_dns_soa.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_soa_list.lng b/interface/web/dns/lib/lang/fi_dns_soa_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_srv.lng b/interface/web/dns/lib/lang/fi_dns_srv.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_template.lng b/interface/web/dns/lib/lang/fi_dns_template.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_template_list.lng b/interface/web/dns/lib/lang/fi_dns_template_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_txt.lng b/interface/web/dns/lib/lang/fi_dns_txt.lng
old mode 100755
new mode 100644
diff --git a/interface/web/dns/lib/lang/fi_dns_wizard.lng b/interface/web/dns/lib/lang/fi_dns_wizard.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/es.lng b/interface/web/help/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/es_faq_form.lng b/interface/web/help/lib/lang/es_faq_form.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/es_faq_manage_questions_list.lng b/interface/web/help/lib/lang/es_faq_manage_questions_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/es_faq_sections_form.lng b/interface/web/help/lib/lang/es_faq_sections_form.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/es_help_faq_list.lng b/interface/web/help/lib/lang/es_help_faq_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/es_help_faq_sections_list.lng b/interface/web/help/lib/lang/es_help_faq_sections_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/es_support_message.lng b/interface/web/help/lib/lang/es_support_message.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/es_support_message_list.lng b/interface/web/help/lib/lang/es_support_message_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/fi.lng b/interface/web/help/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/fi_support_message.lng b/interface/web/help/lib/lang/fi_support_message.lng
old mode 100755
new mode 100644
diff --git a/interface/web/help/lib/lang/fi_support_message_list.lng b/interface/web/help/lib/lang/fi_support_message_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/login/lib/lang/es.lng b/interface/web/login/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/login/lib/lang/es_login_as.lng b/interface/web/login/lib/lang/es_login_as.lng
old mode 100755
new mode 100644
diff --git a/interface/web/login/lib/lang/fi.lng b/interface/web/login/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/ar_user_quota_stats_list.lng b/interface/web/mail/lib/lang/ar_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/bg_user_quota_stats_list.lng b/interface/web/mail/lib/lang/bg_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/br_user_quota_stats_list.lng b/interface/web/mail/lib/lang/br_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/cz_user_quota_stats_list.lng b/interface/web/mail/lib/lang/cz_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/de_user_quota_stats_list.lng b/interface/web/mail/lib/lang/de_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/el_user_quota_stats_list.lng b/interface/web/mail/lib/lang/el_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/en_user_quota_stats_list.lng b/interface/web/mail/lib/lang/en_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es.lng b/interface/web/mail/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_backup_stats_list.lng b/interface/web/mail/lib/lang/es_backup_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_alias.lng b/interface/web/mail/lib/lang/es_mail_alias.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_alias_list.lng b/interface/web/mail/lib/lang/es_mail_alias_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_aliasdomain.lng b/interface/web/mail/lib/lang/es_mail_aliasdomain.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/es_mail_aliasdomain_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_backup_list.lng b/interface/web/mail/lib/lang/es_mail_backup_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_blacklist.lng b/interface/web/mail/lib/lang/es_mail_blacklist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_blacklist_list.lng b/interface/web/mail/lib/lang/es_mail_blacklist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_content_filter.lng b/interface/web/mail/lib/lang/es_mail_content_filter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_content_filter_list.lng b/interface/web/mail/lib/lang/es_mail_content_filter_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_domain.lng b/interface/web/mail/lib/lang/es_mail_domain.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_domain_admin_list.lng b/interface/web/mail/lib/lang/es_mail_domain_admin_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/es_mail_domain_catchall_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_domain_list.lng b/interface/web/mail/lib/lang/es_mail_domain_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_forward.lng b/interface/web/mail/lib/lang/es_mail_forward.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_forward_list.lng b/interface/web/mail/lib/lang/es_mail_forward_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_get.lng b/interface/web/mail/lib/lang/es_mail_get.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_get_list.lng b/interface/web/mail/lib/lang/es_mail_get_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_mailinglist.lng b/interface/web/mail/lib/lang/es_mail_mailinglist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/es_mail_mailinglist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_relay_recipient.lng b/interface/web/mail/lib/lang/es_mail_relay_recipient.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_relay_recipient_list.lng b/interface/web/mail/lib/lang/es_mail_relay_recipient_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_spamfilter.lng b/interface/web/mail/lib/lang/es_mail_spamfilter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/es_mail_spamfilter_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_transport.lng b/interface/web/mail/lib/lang/es_mail_transport.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_transport_list.lng b/interface/web/mail/lib/lang/es_mail_transport_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_user_filter.lng b/interface/web/mail/lib/lang/es_mail_user_filter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_user_filter_list.lng b/interface/web/mail/lib/lang/es_mail_user_filter_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_user_list.lng b/interface/web/mail/lib/lang/es_mail_user_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_user_stats_list.lng b/interface/web/mail/lib/lang/es_mail_user_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_mail_whitelist_list.lng b/interface/web/mail/lib/lang/es_mail_whitelist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/es_spamfilter_blacklist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/es_spamfilter_blacklist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_config.lng b/interface/web/mail/lib/lang/es_spamfilter_config.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_config_list.lng b/interface/web/mail/lib/lang/es_spamfilter_config_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_policy.lng b/interface/web/mail/lib/lang/es_spamfilter_policy.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/es_spamfilter_policy_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_users.lng b/interface/web/mail/lib/lang/es_spamfilter_users.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_users_list.lng b/interface/web/mail/lib/lang/es_spamfilter_users_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/es_spamfilter_whitelist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/es_spamfilter_whitelist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_user_quota_stats_list.lng b/interface/web/mail/lib/lang/es_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_xmpp_domain.lng b/interface/web/mail/lib/lang/es_xmpp_domain.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_xmpp_domain_admin_list.lng b/interface/web/mail/lib/lang/es_xmpp_domain_admin_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_xmpp_domain_list.lng b/interface/web/mail/lib/lang/es_xmpp_domain_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_xmpp_user.lng b/interface/web/mail/lib/lang/es_xmpp_user.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/es_xmpp_user_list.lng b/interface/web/mail/lib/lang/es_xmpp_user_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi.lng b/interface/web/mail/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_alias.lng b/interface/web/mail/lib/lang/fi_mail_alias.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_alias_list.lng b/interface/web/mail/lib/lang/fi_mail_alias_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_blacklist.lng b/interface/web/mail/lib/lang/fi_mail_blacklist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_blacklist_list.lng b/interface/web/mail/lib/lang/fi_mail_blacklist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_content_filter.lng b/interface/web/mail/lib/lang/fi_mail_content_filter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_content_filter_list.lng b/interface/web/mail/lib/lang/fi_mail_content_filter_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_domain.lng b/interface/web/mail/lib/lang/fi_mail_domain.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng b/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/fi_mail_domain_catchall_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_domain_list.lng b/interface/web/mail/lib/lang/fi_mail_domain_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_forward.lng b/interface/web/mail/lib/lang/fi_mail_forward.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_forward_list.lng b/interface/web/mail/lib/lang/fi_mail_forward_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_get.lng b/interface/web/mail/lib/lang/fi_mail_get.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_get_list.lng b/interface/web/mail/lib/lang/fi_mail_get_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_spamfilter.lng b/interface/web/mail/lib/lang/fi_mail_spamfilter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/fi_mail_spamfilter_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_transport.lng b/interface/web/mail/lib/lang/fi_mail_transport.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_transport_list.lng b/interface/web/mail/lib/lang/fi_mail_transport_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_user_filter.lng b/interface/web/mail/lib/lang/fi_mail_user_filter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_user_filter_list.lng b/interface/web/mail/lib/lang/fi_mail_user_filter_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_user_list.lng b/interface/web/mail/lib/lang/fi_mail_user_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_user_stats_list.lng b/interface/web/mail/lib/lang/fi_mail_user_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_whitelist.lng b/interface/web/mail/lib/lang/fi_mail_whitelist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_mail_whitelist_list.lng b/interface/web/mail/lib/lang/fi_mail_whitelist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/fi_spamfilter_blacklist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/fi_spamfilter_blacklist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_config.lng b/interface/web/mail/lib/lang/fi_spamfilter_config.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_config_list.lng b/interface/web/mail/lib/lang/fi_spamfilter_config_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_policy.lng b/interface/web/mail/lib/lang/fi_spamfilter_policy.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/fi_spamfilter_policy_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_users.lng b/interface/web/mail/lib/lang/fi_spamfilter_users.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_users_list.lng b/interface/web/mail/lib/lang/fi_spamfilter_users_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/fi_spamfilter_whitelist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/fi_spamfilter_whitelist_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fi_user_quota_stats_list.lng b/interface/web/mail/lib/lang/fi_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/fr_user_quota_stats_list.lng b/interface/web/mail/lib/lang/fr_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/hu_user_quota_stats_list.lng b/interface/web/mail/lib/lang/hu_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/id_user_quota_stats_list.lng b/interface/web/mail/lib/lang/id_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/it_user_quota_stats_list.lng b/interface/web/mail/lib/lang/it_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/ja_user_quota_stats_list.lng b/interface/web/mail/lib/lang/ja_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/nl_user_quota_stats_list.lng b/interface/web/mail/lib/lang/nl_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/pl_user_quota_stats_list.lng b/interface/web/mail/lib/lang/pl_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/pt_user_quota_stats_list.lng b/interface/web/mail/lib/lang/pt_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/ro_user_quota_stats_list.lng b/interface/web/mail/lib/lang/ro_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/ru_user_quota_stats_list.lng b/interface/web/mail/lib/lang/ru_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/se_user_quota_stats_list.lng b/interface/web/mail/lib/lang/se_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/sk_user_quota_stats_list.lng b/interface/web/mail/lib/lang/sk_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng b/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mailuser/lib/lang/es.lng b/interface/web/mailuser/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mailuser/lib/lang/es_index.lng b/interface/web/mailuser/lib/lang/es_index.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/es_mail_user_autoresponder.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_cc.lng b/interface/web/mailuser/lib/lang/es_mail_user_cc.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_filter.lng b/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/es_mail_user_filter_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_password.lng b/interface/web/mailuser/lib/lang/es_mail_user_password.lng
old mode 100755
new mode 100644
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/es_mail_user_spamfilter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/monitor/lib/lang/es.lng b/interface/web/monitor/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/monitor/lib/lang/es_datalog_list.lng b/interface/web/monitor/lib/lang/es_datalog_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/monitor/lib/lang/es_syslog_list.lng b/interface/web/monitor/lib/lang/es_syslog_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/monitor/lib/lang/fi.lng b/interface/web/monitor/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/monitor/lib/lang/fi_datalog_list.lng b/interface/web/monitor/lib/lang/fi_datalog_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/monitor/lib/lang/fi_syslog_list.lng b/interface/web/monitor/lib/lang/fi_syslog_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es.lng b/interface/web/sites/lib/lang/es.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es_aps.lng b/interface/web/sites/lib/lang/es_aps.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es_aps_instances_list.lng b/interface/web/sites/lib/lang/es_aps_instances_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es_aps_packages_list.lng b/interface/web/sites/lib/lang/es_aps_packages_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es_aps_update_packagelist.lng b/interface/web/sites/lib/lang/es_aps_update_packagelist.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es_backup_stats_list.lng b/interface/web/sites/lib/lang/es_backup_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es_cron.lng b/interface/web/sites/lib/lang/es_cron.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es_cron_list.lng b/interface/web/sites/lib/lang/es_cron_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/es_database.lng b/interface/web/sites/lib/lang/es_database.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi.lng b/interface/web/sites/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_database.lng b/interface/web/sites/lib/lang/fi_database.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_database_list.lng b/interface/web/sites/lib/lang/fi_database_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_ftp_user.lng b/interface/web/sites/lib/lang/fi_ftp_user.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_ftp_user_list.lng b/interface/web/sites/lib/lang/fi_ftp_user_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_shell_user.lng b/interface/web/sites/lib/lang/fi_shell_user.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_shell_user_list.lng b/interface/web/sites/lib/lang/fi_shell_user_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_web_childdomain.lng b/interface/web/sites/lib/lang/fi_web_childdomain.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_web_childdomain_list.lng b/interface/web/sites/lib/lang/fi_web_childdomain_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_web_sites_stats_list.lng b/interface/web/sites/lib/lang/fi_web_sites_stats_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain_list.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain_list.lng
old mode 100755
new mode 100644
diff --git a/interface/web/strengthmeter/lib/lang/bg_strengthmeter.lng b/interface/web/strengthmeter/lib/lang/bg_strengthmeter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/strengthmeter/lib/lang/fi_strengthmeter.lng b/interface/web/strengthmeter/lib/lang/fi_strengthmeter.lng
old mode 100755
new mode 100644
diff --git a/interface/web/tools/lib/lang/fi.lng b/interface/web/tools/lib/lang/fi.lng
old mode 100755
new mode 100644
diff --git a/interface/web/tools/lib/lang/fi_usersettings.lng b/interface/web/tools/lib/lang/fi_usersettings.lng
old mode 100755
new mode 100644
-- 
GitLab


From 1bf3595a847922576904a255341943819735ff6f Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 5 May 2020 16:10:42 +0200
Subject: [PATCH 272/571] Show how many sites use an additional php version

---
 interface/web/admin/lib/lang/ar_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/bg_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/br_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/ca_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/cz_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/de_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/dk_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/el_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/en_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/es_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/fi_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/fr_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/hr_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/hu_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/id_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/it_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/ja_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/nl_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/pl_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/pt_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/ro_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/ru_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/se_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/sk_server_php_list.lng |  1 +
 interface/web/admin/lib/lang/tr_server_php_list.lng |  1 +
 interface/web/admin/server_php_list.php             | 10 ++++++++++
 interface/web/admin/templates/server_php_list.htm   |  3 +++
 27 files changed, 38 insertions(+)

diff --git a/interface/web/admin/lib/lang/ar_server_php_list.lng b/interface/web/admin/lib/lang/ar_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/ar_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ar_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_php_list.lng b/interface/web/admin/lib/lang/bg_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/bg_server_php_list.lng
+++ b/interface/web/admin/lib/lang/bg_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_php_list.lng b/interface/web/admin/lib/lang/br_server_php_list.lng
index 38ebdd3568..ce558e9054 100644
--- a/interface/web/admin/lib/lang/br_server_php_list.lng
+++ b/interface/web/admin/lib/lang/br_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Adicionar nova versão do php';
 $wb['client_id_txt'] = 'Cliente';
 $wb['name_txt'] = 'Nome da versão';
 $wb['active_txt'] = 'Ativo';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_server_php_list.lng b/interface/web/admin/lib/lang/ca_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/ca_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ca_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_php_list.lng b/interface/web/admin/lib/lang/cz_server_php_list.lng
index abe4f750ff..70bb2af8aa 100644
--- a/interface/web/admin/lib/lang/cz_server_php_list.lng
+++ b/interface/web/admin/lib/lang/cz_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Přidat verzi PHP';
 $wb['client_id_txt'] = 'Klient';
 $wb['name_txt'] = 'Verze PHP';
 $wb['active_txt'] = 'Aktivní';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/de_server_php_list.lng b/interface/web/admin/lib/lang/de_server_php_list.lng
index fe9a72ea15..f9da54d84c 100644
--- a/interface/web/admin/lib/lang/de_server_php_list.lng
+++ b/interface/web/admin/lib/lang/de_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Neue PHP Version hinzufügen';
 $wb['client_id_txt'] = 'Kunde';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Aktiv';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_php_list.lng b/interface/web/admin/lib/lang/dk_server_php_list.lng
index 43fb5fe211..65869ce2ed 100644
--- a/interface/web/admin/lib/lang/dk_server_php_list.lng
+++ b/interface/web/admin/lib/lang/dk_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Tilføj ny PHP version';
 $wb['client_id_txt'] = 'Kunde';
 $wb['name_txt'] = 'PHP Navn';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_php_list.lng b/interface/web/admin/lib/lang/el_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/el_server_php_list.lng
+++ b/interface/web/admin/lib/lang/el_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_php_list.lng b/interface/web/admin/lib/lang/en_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/en_server_php_list.lng
+++ b/interface/web/admin/lib/lang/en_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_php_list.lng b/interface/web/admin/lib/lang/es_server_php_list.lng
index 111628b720..8d62ee8919 100755
--- a/interface/web/admin/lib/lang/es_server_php_list.lng
+++ b/interface/web/admin/lib/lang/es_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['list_head_txt'] = 'Versiones adicionales de PHP';
 $wb['name_txt'] = 'Versión de PHP';
 $wb['server_id_txt'] = 'Servidor';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_php_list.lng b/interface/web/admin/lib/lang/fi_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/fi_server_php_list.lng
+++ b/interface/web/admin/lib/lang/fi_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_php_list.lng b/interface/web/admin/lib/lang/fr_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/fr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/fr_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_php_list.lng b/interface/web/admin/lib/lang/hr_server_php_list.lng
index 9e9c0de986..1851ac8395 100644
--- a/interface/web/admin/lib/lang/hr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/hr_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Klijent';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_php_list.lng b/interface/web/admin/lib/lang/hu_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/hu_server_php_list.lng
+++ b/interface/web/admin/lib/lang/hu_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_php_list.lng b/interface/web/admin/lib/lang/id_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/id_server_php_list.lng
+++ b/interface/web/admin/lib/lang/id_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_php_list.lng b/interface/web/admin/lib/lang/it_server_php_list.lng
index 296de9d0a5..5ff1ebe314 100644
--- a/interface/web/admin/lib/lang/it_server_php_list.lng
+++ b/interface/web/admin/lib/lang/it_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Aggiungi una nuova versione PHP';
 $wb['client_id_txt'] = 'Cliente';
 $wb['name_txt'] = 'Nome PHP';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_php_list.lng b/interface/web/admin/lib/lang/ja_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/ja_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ja_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_php_list.lng b/interface/web/admin/lib/lang/nl_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/nl_server_php_list.lng
+++ b/interface/web/admin/lib/lang/nl_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_php_list.lng b/interface/web/admin/lib/lang/pl_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/pl_server_php_list.lng
+++ b/interface/web/admin/lib/lang/pl_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_php_list.lng b/interface/web/admin/lib/lang/pt_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/pt_server_php_list.lng
+++ b/interface/web/admin/lib/lang/pt_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_php_list.lng b/interface/web/admin/lib/lang/ro_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/ro_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ro_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_php_list.lng b/interface/web/admin/lib/lang/ru_server_php_list.lng
index 5c84917f15..5be582f23d 100644
--- a/interface/web/admin/lib/lang/ru_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ru_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Добавить новую версию PHP';
 $wb['client_id_txt'] = 'ID Клиента';
 $wb['name_txt'] = 'Имя PHP';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/se_server_php_list.lng b/interface/web/admin/lib/lang/se_server_php_list.lng
index 451236d1ca..b2f8b55112 100644
--- a/interface/web/admin/lib/lang/se_server_php_list.lng
+++ b/interface/web/admin/lib/lang/se_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Lägg till ny PHP-version';
 $wb['client_id_txt'] = 'Kund';
 $wb['name_txt'] = 'PHP-namn';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_php_list.lng b/interface/web/admin/lib/lang/sk_server_php_list.lng
index 62cbe61687..291302cbb7 100644
--- a/interface/web/admin/lib/lang/sk_server_php_list.lng
+++ b/interface/web/admin/lib/lang/sk_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
 $wb['active_txt'] = 'Active';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_php_list.lng b/interface/web/admin/lib/lang/tr_server_php_list.lng
index 06319e9855..4468e7ead9 100644
--- a/interface/web/admin/lib/lang/tr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_php_list.lng
@@ -5,4 +5,5 @@ $wb['add_new_record_txt'] = 'PHP Sürümü Ekle';
 $wb['client_id_txt'] = 'Müşteri';
 $wb['name_txt'] = 'PHP Adı';
 $wb['active_txt'] = 'Etkin';
+$wb['usage_txt'] = 'Usage count';
 ?>
diff --git a/interface/web/admin/server_php_list.php b/interface/web/admin/server_php_list.php
index 7d69ab7d25..a3c4d6354f 100644
--- a/interface/web/admin/server_php_list.php
+++ b/interface/web/admin/server_php_list.php
@@ -48,6 +48,16 @@ $app->uses('listform_actions');
 
 $app->listform_actions->SQLOrderBy = "ORDER BY server_php.server_id, server_php.name";
 
+$app->listform_actions->SQLExtSelect = "(SELECT
+    COUNT(w.server_id)
+    FROM
+    server_php s LEFT JOIN web_domain w ON (w.fastcgi_php_version LIKE CONCAT(s.name, '%') AND s.server_id=w.server_id)
+    WHERE
+    server_php.server_php_id=s.server_php_id
+    GROUP BY
+    server_php.server_php_id
+) AS 'usage'";
+
 $app->listform_actions->onLoad();
 
 
diff --git a/interface/web/admin/templates/server_php_list.htm b/interface/web/admin/templates/server_php_list.htm
index 9833eb1e7e..dd6547ba56 100644
--- a/interface/web/admin/templates/server_php_list.htm
+++ b/interface/web/admin/templates/server_php_list.htm
@@ -19,6 +19,7 @@
                         <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
                         <th class="small-col" data-column="client_id"><tmpl_var name="client_id_txt"></th>
                         <th data-column="name"><tmpl_var name="name_txt"></th>
+                        <th data-column="usage"><tmpl_var name="usage_txt"></th>
                         <th class="text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
                     <tr>
@@ -26,6 +27,7 @@
                         <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
                         <td><select class="form-control" name="search_client_id">{tmpl_var name='search_client_id'}</select></td>
                         <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td></td>
                         <td class="text-right">
                             <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/server_php_list.php"><span class="icon icon-filter"></span></button>
                         </td>
@@ -38,6 +40,7 @@
                             <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
                             <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
+                            <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="usage"}</a></td>
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_php_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
-- 
GitLab


From f15676b55ed4d769aa105e555511e2bcd32dc2df Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Tue, 19 May 2020 10:58:41 +0200
Subject: [PATCH 273/571] UseFtpUsers is deprecated

---
 install/tpl/fedora_pureftpd_conf.master | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/install/tpl/fedora_pureftpd_conf.master b/install/tpl/fedora_pureftpd_conf.master
index 5b9d6a2deb..c22646322f 100644
--- a/install/tpl/fedora_pureftpd_conf.master
+++ b/install/tpl/fedora_pureftpd_conf.master
@@ -241,13 +241,6 @@ MinUID                      500
 
 
 
-# Do not use the /etc/ftpusers file to disable accounts. We're already
-# using MinUID to block users with uid < 500
-
-UseFtpUsers no
-
-
-
 # Allow FXP transfers for authenticated users.
 
 AllowUserFXP                no
-- 
GitLab


From f518b8520d49c2ef08b46067b9108d77fa4236c2 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Tue, 19 May 2020 13:43:39 +0200
Subject: [PATCH 274/571] include EL8 also in the fpm workaround in the nginx
 module

---
 server/plugins-available/nginx_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index c1262f69eb..68e295a97a 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2728,7 +2728,7 @@ class nginx_plugin {
 		foreach($rh_releasefiles as $rh_file) {
 			if(file_exists($rh_file) && (filesize($rh_file) > 0)) {
 				$tmp = file_get_contents($rh_file);
-				if(preg_match('/[67]+\.[0-9]+/m', $tmp)) {
+				if(preg_match('/[678]+\.[0-9]+/m', $tmp)) {
 					$tpl->setVar('fpm_group', $data['new']['system_group']);
 					$tpl->setVar('fpm_listen_group', $data['new']['system_group']);
 				}
-- 
GitLab


From fe4fd73f314dda7d0581b06ef4a00b1c99cf9d24 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Tue, 19 May 2020 17:00:48 +0200
Subject: [PATCH 275/571] fixed package manager detection in
 monitor_system_update.inc.php

---
 .../lib/classes/cron.d/100-monitor_system_update.inc.php | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_system_update.inc.php b/server/lib/classes/cron.d/100-monitor_system_update.inc.php
index 34f944fa67..cab5f68edb 100644
--- a/server/lib/classes/cron.d/100-monitor_system_update.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_system_update.inc.php
@@ -159,6 +159,7 @@ class cronjob_monitor_system_update extends cronjob {
 			 * Fetch the output
 			 */
 			$data['output'] = shell_exec('zypper lu');
+
 		} elseif(file_exists('/etc/redhat-release')) {
                         /*
                          * update and find the upgrade.
@@ -168,13 +169,14 @@ class cronjob_monitor_system_update extends cronjob {
 			/* try to figure out the default package manager first */
                         if(file_exists('/usr/bin/dnf') && (is_link('/usr/bin/yum'))) {
                                 $rhPkgMgr = 'dnf';
-                        } elseif(file_exists('/usr/bin/dnf') && (!file_exists('/usr/bin/yum')) || (!is_link('/usr/bin/yum'))) {
+                        } elseif(file_exists('/usr/bin/dnf') && (!file_exists('/usr/bin/yum'))) {
                                 $rhPkgMgr = 'dnf';
                         } else {
                                 $rhPkgMgr = 'yum';
                         }
 
-                        $aptData = shell_exec($rhPkgMgr. ' -q list updates');
+			$aptData = shell_exec($rhPkgMgr. ' -q list updates');
+
                         if ($aptData == '') {
                                 /* There is nothing to update! */
                                 $state = 'ok';
@@ -188,7 +190,8 @@ class cronjob_monitor_system_update extends cronjob {
 
                         /*
                          * Fetch the output
-                         */
+			 */
+
                         $data['output'] = shell_exec($rhPkgMgr. ' -q list updates');
             
 	        } else {
-- 
GitLab


From dbfab6b6cd0cfb67c5dfdd84b164bb5466292d78 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 21 May 2020 16:07:12 -0600
Subject: [PATCH 276/571] fix various ispcmail issues.  fixes #5620

---
 interface/lib/classes/ispcmail.inc.php |  9 ++++++---
 interface/web/login/lib/lang/ar.lng    |  1 +
 interface/web/login/lib/lang/bg.lng    |  1 +
 interface/web/login/lib/lang/br.lng    |  1 +
 interface/web/login/lib/lang/ca.lng    |  1 +
 interface/web/login/lib/lang/cz.lng    |  1 +
 interface/web/login/lib/lang/de.lng    |  1 +
 interface/web/login/lib/lang/dk.lng    |  1 +
 interface/web/login/lib/lang/el.lng    |  1 +
 interface/web/login/lib/lang/en.lng    | 13 +++++++------
 interface/web/login/lib/lang/es.lng    |  1 +
 interface/web/login/lib/lang/fi.lng    |  1 +
 interface/web/login/lib/lang/fr.lng    |  1 +
 interface/web/login/lib/lang/hr.lng    |  1 +
 interface/web/login/lib/lang/hu.lng    |  1 +
 interface/web/login/lib/lang/id.lng    |  1 +
 interface/web/login/lib/lang/it.lng    |  1 +
 interface/web/login/lib/lang/ja.lng    |  1 +
 interface/web/login/lib/lang/nl.lng    |  1 +
 interface/web/login/lib/lang/pl.lng    |  1 +
 interface/web/login/lib/lang/pt.lng    |  1 +
 interface/web/login/lib/lang/ro.lng    |  1 +
 interface/web/login/lib/lang/ru.lng    |  1 +
 interface/web/login/lib/lang/se.lng    |  1 +
 interface/web/login/lib/lang/sk.lng    |  1 +
 interface/web/login/lib/lang/tr.lng    |  1 +
 interface/web/login/password_reset.php | 26 +++++++++++++++++---------
 27 files changed, 54 insertions(+), 18 deletions(-)

diff --git a/interface/lib/classes/ispcmail.inc.php b/interface/lib/classes/ispcmail.inc.php
index 522fd1a71b..fbf5f84dca 100644
--- a/interface/lib/classes/ispcmail.inc.php
+++ b/interface/lib/classes/ispcmail.inc.php
@@ -169,7 +169,7 @@ class ispcmail {
 			$this->smtp_host = $value;
 			break;
 		case 'smtp_port':
-			$this->smtp_port = $value;
+			if(intval($value) > 0) $this->smtp_port = $value;
 			break;
 		case 'smtp_user':
 			$this->smtp_user = $value;
@@ -586,8 +586,8 @@ class ispcmail {
 	 */
 	private function _smtp_login() {
 		$this->_smtp_conn = fsockopen(($this->smtp_crypt == 'ssl' ? 'tls://' : '') . $this->smtp_host, $this->smtp_port, $errno, $errstr, 30);
-		$response = fgets($this->_smtp_conn, 515);
 		if(empty($this->_smtp_conn)) return false;
+		$response = fgets($this->_smtp_conn, 515);
 
 		//Say Hello to SMTP
 		if($this->smtp_helo == '') $this->detectHelo();
@@ -607,8 +607,11 @@ class ispcmail {
 			}
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_host', false);
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_peer', false);
+			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_peer_name', false);
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'allow_self_signed', true);
-			stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method);
+			if (stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method) != true) {
+				return false;
+			}
 		}
 
 		//AUTH LOGIN
diff --git a/interface/web/login/lib/lang/ar.lng b/interface/web/login/lib/lang/ar.lng
index 6d2e8b3b31..a50df19db4 100644
--- a/interface/web/login/lib/lang/ar.lng
+++ b/interface/web/login/lib/lang/ar.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'A new password will be generated and send to your email
 $wb['pw_reset'] = 'The password has been reset and send to your email address.';
 $wb['pw_error'] = 'Username or email address does not match.';
 $wb['pw_error_noinput'] = 'Please enter email address and username.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'The password to your ISPConfig 3 control panel account has been reset. The new password is: ';
 $wb['pw_reset_mail_title'] = 'ISPConfig 3 Control panel password has been reset.';
 $wb['user_regex_error'] = 'Username contains unallowed characters or is longer then 64 characters.';
diff --git a/interface/web/login/lib/lang/bg.lng b/interface/web/login/lib/lang/bg.lng
index 3d1aaae5e8..8081ec8097 100644
--- a/interface/web/login/lib/lang/bg.lng
+++ b/interface/web/login/lib/lang/bg.lng
@@ -3,6 +3,7 @@ $wb['pass_reset_txt'] = 'Нова парола ще бъде генериран
 $wb['pw_reset'] = 'Новата ви парола беше изпратена на електронната ви поща.';
 $wb['pw_error'] = 'Греяно потребителското име или електронна поща.';
 $wb['pw_error_noinput'] = 'Моля въведете потребителско име и електронна поща.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Новата парола за вашия ISPConfig 3 контролен панел е:';
 $wb['pw_reset_mail_title'] = 'Нова парола за вашия ISPConfig 3 контролен панел';
 $wb['user_regex_error'] = 'Потребителско име contains unallowed characters or is longer then 64 characters.';
diff --git a/interface/web/login/lib/lang/br.lng b/interface/web/login/lib/lang/br.lng
index 9baaf55212..33cddc8fb3 100644
--- a/interface/web/login/lib/lang/br.lng
+++ b/interface/web/login/lib/lang/br.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Uma nova senha foi gerada e será enviada para você no
 $wb['pw_reset'] = 'Senha redefinida! Ela será enviada para você no e-mail cadastrado no sistema.';
 $wb['pw_error'] = 'Nome do usuário ou e-mail não coincidem.';
 $wb['pw_error_noinput'] = 'Favor informar nome do usuário e e-mail válidos.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'A senha para esta conta no ISPConfig foi redefinida. A nova senha é: ';
 $wb['pw_reset_mail_title'] = 'A senha para esta conta no ISPConfig foi redefinida.';
 $wb['user_regex_error'] = 'O nome do usuário contém menos de 1 ou mais de 64 caracteres ou contém caracteres inválidos.';
diff --git a/interface/web/login/lib/lang/ca.lng b/interface/web/login/lib/lang/ca.lng
index 17c427714b..8c672b59c5 100644
--- a/interface/web/login/lib/lang/ca.lng
+++ b/interface/web/login/lib/lang/ca.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Un nouveau mot de passe vous sera envoyé à votre adre
 $wb['pw_reset'] = 'Le mot de passe a été réinitialisé, et vous a été envoyé à votre adresse e-mail.';
 $wb['pw_error'] = 'Le nom d\'utilisateur et/ou L\'adresse e-mail ne correspondent pas.';
 $wb['pw_error_noinput'] = 'Entrez votre nom d\'utilisateur et votre adresse e-mail.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Le mot de passe d\'accès à votre panel a été réinitialisé. Le nouveau mot de passe est : ';
 $wb['pw_reset_mail_title'] = 'Le mot de passe d\'accès à votre panel a été réinitialisé.';
 $wb['user_regex_error'] = 'Le nom d\'utilisateur contient des caractères incorrects ou contient plus de 64 caractères.';
diff --git a/interface/web/login/lib/lang/cz.lng b/interface/web/login/lib/lang/cz.lng
index 065f6fc865..9b22d7d3c7 100644
--- a/interface/web/login/lib/lang/cz.lng
+++ b/interface/web/login/lib/lang/cz.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Bude Vám vygenerováno a zasláno nové heslo na e-mai
 $wb['pw_reset'] = 'Heslo bylo resetováno a zasláno na Váš e-mail.';
 $wb['pw_error'] = 'Uživatelské jméno nebo e-mail nesouhlasí.';
 $wb['pw_error_noinput'] = 'Prosím zadejte uživatelské jméno a e-mail.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Vaše heslo do ISPConfigu bylo resetováno. Nové heslo je: ';
 $wb['pw_reset_mail_title'] = 'Heslo do ISPConfigu bylo resetováno.';
 $wb['user_regex_error'] = 'Uživatelské jméno obsahuje nepovolené znaky nebo je delší než 64 znaků.';
diff --git a/interface/web/login/lib/lang/de.lng b/interface/web/login/lib/lang/de.lng
index 217e5c51b0..446f04edc8 100644
--- a/interface/web/login/lib/lang/de.lng
+++ b/interface/web/login/lib/lang/de.lng
@@ -8,6 +8,7 @@ $wb['pw_reset'] = 'Das Passwort wurde zurückgesetzt und wird per E-Mail an Sie
 $wb['pw_reset_act'] = 'Ein Aktivierungslink wurde per E-Mail an Sie geschickt. Bitte bestätigen Sie die Anforderung eines neuen Passwortes.';
 $wb['pw_error'] = 'Benutzername oder E-Mail Adresse stimmen nicht überein.';
 $wb['pw_error_noinput'] = 'Bitte geben Sie Ihre E-Mail Adresse und Ihren Benutzernamen ein.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Das Passwort wurde zurückgesetzt. Das neue Passwort lautet: ';
 $wb['pw_reset_mail_title'] = 'Ihr Passwort wurde zurückgesetzt';
 $wb['pw_reset_act_mail_msg'] = 'Bitte bestätigen Sie die Anforderung eines neuen Passworts, indem Sie folgenden Link besuchen: ';
diff --git a/interface/web/login/lib/lang/dk.lng b/interface/web/login/lib/lang/dk.lng
index 48e7885ec5..8a104c45be 100644
--- a/interface/web/login/lib/lang/dk.lng
+++ b/interface/web/login/lib/lang/dk.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'En ny adgangskode vil blive genereret og sendt til din
 $wb['pw_reset'] = 'Adgangskoden er blevet nulstillet og sendt til din e-mail adresse.';
 $wb['pw_error'] = 'Brugernavn eller e-mail adresse matcher ikke.';
 $wb['pw_error_noinput'] = 'Indtast e-mail adresse og brugernavn.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Adgangskoden til din ISPConfig 3 kontrol panel konto er blevet nulstillet. Den nye adgangskode er: ';
 $wb['pw_reset_mail_title'] = 'ISPConfig 3 Kontrol panel adgangskode er blevet nulstillet.';
 $wb['user_regex_error'] = 'Brugernavn indeholder Ikke-tilladte karakterer eller er længer end 64 karaktere.';
diff --git a/interface/web/login/lib/lang/el.lng b/interface/web/login/lib/lang/el.lng
index c4e7518904..8a6ed3387f 100644
--- a/interface/web/login/lib/lang/el.lng
+++ b/interface/web/login/lib/lang/el.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Ένα νέο συνθηματικό θα δημιου
 $wb['pw_reset'] = 'Το νέο συνθηματικό δημιουργηθήκε και στάλθηκε στο e-mail που δηλώσατε';
 $wb['pw_error'] = 'Το όνομα χρήστη ή το email δεν ταιριάζουν';
 $wb['pw_error_noinput'] = 'Παρακαλούμε εισάγετε διεύθυνση email και όνομα χρήστη';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Ο κωδικός σας για το εργαλείο διαχείρισης ISPConfig 3 έχει αρχικοποιηθεί. Το νέο συνθηματικό είναι: ';
 $wb['pw_reset_mail_title'] = 'το συνθηματικό σας για το εργαλείο διαχείρισης ISPConfig 3 έχει αρχικοποιηθεί.';
 $wb['user_regex_error'] = 'Το όνομα χρήστη περιέχει μη επιτρεπόμενους χαρακτήρες ή το μέγεθος του ξεπερνά του 64 χαρακτήρες.';
diff --git a/interface/web/login/lib/lang/en.lng b/interface/web/login/lib/lang/en.lng
index 2db2d49f94..44844f089b 100644
--- a/interface/web/login/lib/lang/en.lng
+++ b/interface/web/login/lib/lang/en.lng
@@ -2,19 +2,20 @@
 $wb['error_user_password_empty']	= "Username or Password empty.";
 $wb['error_user_password_incorrect']	= "Username or Password wrong.";
 $wb['error_user_blocked']               = "User is blocked.";
-$wb['error_user_too_many_logins']	= "To many wrong login's, Please retry it after 15 minutes";
-$wb['pass_reset_txt']       = 'A new password will be generated and send to your email address if the email address entered below matches the email address in your client settings.';
-$wb['pw_reset']             = 'The password has been reset and send to your email address.';
-$wb['pw_reset_act'] = 'You have been sent an activation link. Please visit the link to confirm your password request.';
+$wb['error_user_too_many_logins']	= "Too many failed login attempts. Please retry after 15 minutes";
+$wb['pass_reset_txt']       = 'A new password will be generated and sent to your email address if the email address entered below matches the email address in your client settings.';
+$wb['pw_reset']             = 'The password has been reset and sent to your email address.';
+$wb['pw_reset_act'] = 'You have been sent a password reset link. Please visit the link to confirm your password reset request.';
 $wb['pw_error']             = 'Username or email address does not match.';
 $wb['pw_error_noinput']     = 'Please enter email address and username.';
+$wb['pw_reset_error_smtp_connection']   = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg']    = 'The password to your ISPConfig 3 control panel account has been reset. The new password is: ';
 $wb['pw_reset_mail_title']  = 'ISPConfig 3 Control panel password has been reset';
 $wb['pw_reset_act_mail_title']  = 'Confirm ISPConfig 3 Control panel password reset';
 $wb['pw_reset_act_mail_msg']    = 'Please confirm that your want to reset your ISPConfig 3 control panel account password by visiting the following activation link: ';
 $wb['user_regex_error'] = 'Username contains unallowed characters or is longer than 64 characters.';
 $wb['pw_error_length']  = 'The password length is < 1 or > 256 characters.';
-$wb['email_error'] = 'Email contains unallowed characters or has a invalid format.';
+$wb['email_error'] = 'Email contains unallowed characters or has an invalid format.';
 $wb['login_txt']	= "Login";
 $wb['username_txt']	= "Username";
 $wb['password_txt']	= "Password";
@@ -28,7 +29,7 @@ $wb['error_maintenance_mode'] = 'This ISPConfig installation is currently under
 $wb['theme_not_compatible'] = 'The chosen theme is not compatible with the current ISPConfig version. Please check for a new version of the theme.<br />The default theme as been activated automatically.';
 $wb['stay_logged_in_txt'] = 'Keep me logged in';
 $wb['lost_password_function_disabled_txt'] = 'The lost password function is not available for this user.';
-$wb['lost_password_function_wait_txt'] = 'You cannot request a new password, yet. Please wait a few minutes.';
+$wb['lost_password_function_wait_txt'] = 'You cannot request a new password yet. Please wait a few minutes.';
 $wb['lost_password_function_expired_txt'] = 'This activation link has expired. Please request a new one.';
 $wb['lost_password_function_denied_txt'] = 'This activation link is not valid.';
 ?>
diff --git a/interface/web/login/lib/lang/es.lng b/interface/web/login/lib/lang/es.lng
index c7576d509d..98c94443c5 100755
--- a/interface/web/login/lib/lang/es.lng
+++ b/interface/web/login/lib/lang/es.lng
@@ -16,6 +16,7 @@ $wb['pw_button_txt'] = 'Reenviar contraseña';
 $wb['pw_error'] = 'El usuario o la cuenta de correo no coinciden.';
 $wb['pw_error_length'] = 'La longitud de la contraseña es superior a 64 caracteres.';
 $wb['pw_error_noinput'] = 'Por favor, introduzca la dirección de correo y el nombre de usuario.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_lost_txt'] = 'Olvidé la contraseña';
 $wb['pw_reset'] = 'La nueva contraseña ha sido generada y enviada a su cuenta de correo.';
 $wb['pw_reset_mail_msg'] = 'La contraseña de su cuenta de panel de control ISPConfig 3 ha sido regenerada. La nueva contraseña es: ';
diff --git a/interface/web/login/lib/lang/fi.lng b/interface/web/login/lib/lang/fi.lng
index e2cc04da8a..8198dd4822 100755
--- a/interface/web/login/lib/lang/fi.lng
+++ b/interface/web/login/lib/lang/fi.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Uusi salasana luodaan ja lähetetään asiakastiedoissa
 $wb['pw_reset'] = 'Salasana on vaihdettu ja lähetetty sähköpostiisi.';
 $wb['pw_error'] = 'Käyttäjätunnusta tai sähköpostiosoitetta ei löydy.';
 $wb['pw_error_noinput'] = 'Anna sähköpostiosoite ja käyttäjätunnus.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Käyttäjätunnuksesi salasana ISPConfi3 Hallintapaneeliin on vaihdettu. Uusi salasanasi: ';
 $wb['pw_reset_mail_title'] = 'ISPConfi3 Hallintapaneelin salasana on vaihdettu.';
 $wb['user_regex_error'] = 'Käyttäjänimi sisältää kiellettyjä merkkejä tai on yli 64 merkkiä pitkä.';
diff --git a/interface/web/login/lib/lang/fr.lng b/interface/web/login/lib/lang/fr.lng
index ac4f3c2d78..f067751aa9 100644
--- a/interface/web/login/lib/lang/fr.lng
+++ b/interface/web/login/lib/lang/fr.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Un nouveau mot de passe vous sera envoyé à votre adre
 $wb['pw_reset'] = 'Le mot de passe a été réinitialisé, et vous a été envoyé à votre adresse e-mail.';
 $wb['pw_error'] = 'Le nom d’utilisateur ou l’adresse e-mail ne correspondent pas.';
 $wb['pw_error_noinput'] = 'Saisissez votre nom d’utilisateur et votre adresse e-mail.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Le mot de passe d’accès à votre Panel a été réinitialisé. Le nouveau mot de passe est : ';
 $wb['pw_reset_mail_title'] = 'Le mot de passe d’accès à votre Panel a été réinitialisé.';
 $wb['user_regex_error'] = 'Le nom d’utilisateur contient des caractères incorrects ou contient plus de 64 caractères.';
diff --git a/interface/web/login/lib/lang/hr.lng b/interface/web/login/lib/lang/hr.lng
index a2920e6178..193123557a 100644
--- a/interface/web/login/lib/lang/hr.lng
+++ b/interface/web/login/lib/lang/hr.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Nova šifra će biti generirana i poslana na email ako
 $wb['pw_reset'] = 'Šifra je resetirana i poslana na vašu email adresu.';
 $wb['pw_error'] = 'Korisničko ime ili šifra nisu ispravni.';
 $wb['pw_error_noinput'] = 'Unesite email adresu i korisničko ime.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Šifra za ISPConfig 3 control panel račun je resetirana. Vaša nova šifra je: ';
 $wb['pw_reset_mail_title'] = 'Resetirana ISPConfig 3 control panel Å¡ifra.';
 $wb['user_regex_error'] = 'Korisničko ime sadrži nedozvoljene znakove ili je dulje od 64 znaka.';
diff --git a/interface/web/login/lib/lang/hu.lng b/interface/web/login/lib/lang/hu.lng
index 7548c01de3..b6adb6b19d 100644
--- a/interface/web/login/lib/lang/hu.lng
+++ b/interface/web/login/lib/lang/hu.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Új jelszót generáltunk és email címére elküldjü
 $wb['pw_reset'] = 'Jelszavát reseteltük és elküldtük email címére.';
 $wb['pw_error'] = 'Felhasználónév vagy email cím nem egyezik.';
 $wb['pw_error_noinput'] = 'Kérem üsse be email címét és felahsználónevét.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'The password to your ISPConfig 3 control panel hozzáfárás módosítva. Az új jelszó: ';
 $wb['pw_reset_mail_title'] = 'ISPConfig 3 Control panel jelszó módosítva.';
 $wb['user_regex_error'] = 'Felhasználónév érvénytelen karaktereket tartalmaz, vagy több mint 64 karakter';
diff --git a/interface/web/login/lib/lang/id.lng b/interface/web/login/lib/lang/id.lng
index accdcbc3c4..35e3675a9d 100644
--- a/interface/web/login/lib/lang/id.lng
+++ b/interface/web/login/lib/lang/id.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Kata sandi baru telah dibuat dan dikirim ke alamat emai
 $wb['pw_reset'] = 'Kata sandi telah direset dan telah dikirim ke alamat email Anda.';
 $wb['pw_error'] = 'Nama pengguna atau alamat email tidak cocok.';
 $wb['pw_error_noinput'] = 'Masukkan alamat email dan nama pengguna.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Kata sandi untuk control panel ISPConfig 3 Anda telah direset. Kata sandi yang baru adalah: ';
 $wb['pw_reset_mail_title'] = 'Kata sandi Control Panel ISPConfig 3 telah direset.';
 $wb['user_regex_error'] = 'Nama Pengguna mengandung karakter yang tidak diperbolehkan atau lebih dari 64 karakter.';
diff --git a/interface/web/login/lib/lang/it.lng b/interface/web/login/lib/lang/it.lng
index 6d23aa0ccb..0d3ec93c9b 100644
--- a/interface/web/login/lib/lang/it.lng
+++ b/interface/web/login/lib/lang/it.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Una nuova password sarà  generata e spedita alla tua e
 $wb['pw_reset'] = 'La password è stata reimpostata e spedita al tuo indirizzo mail.';
 $wb['pw_error'] = 'Nome utente o e-mail non corrispondenti.';
 $wb['pw_error_noinput'] = 'Inserisci nome utente e indirizzo e-mail.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'La password nel tuo pannello di controllo è stata reimpostata. La nuova password è: ';
 $wb['pw_reset_mail_title'] = 'Password del pannello di controllo reimpostata.';
 $wb['user_regex_error'] = 'Nome utente contenente caratteri non permessi oppure più lungo di 64 caratteri.';
diff --git a/interface/web/login/lib/lang/ja.lng b/interface/web/login/lib/lang/ja.lng
index 8318ef9263..4b9e2c6236 100644
--- a/interface/web/login/lib/lang/ja.lng
+++ b/interface/web/login/lib/lang/ja.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = '新しいパスワードをメールで送りました
 $wb['pw_reset'] = 'パスワードをリセットしました。新しいパスワードをメールで送信したのでメールボックスを確認してください。';
 $wb['pw_error'] = 'ユーザー名またはメールアドレスが一致しません。';
 $wb['pw_error_noinput'] = 'メールアドレスとユーザー名を入力してください。';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'ISPConfig 3 のコントロールパネルのパスワードをリセットしました。新しいパスワードは次の通りです:';
 $wb['pw_reset_mail_title'] = 'ISPConfig3 のコントロールパネルのパスワードをリセットしました。';
 $wb['user_regex_error'] = 'ユーザー名に不正な文字が含まれているか、または64文字を超えています。';
diff --git a/interface/web/login/lib/lang/nl.lng b/interface/web/login/lib/lang/nl.lng
index ca641e3b02..2c98275fd4 100644
--- a/interface/web/login/lib/lang/nl.lng
+++ b/interface/web/login/lib/lang/nl.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Een nieuw wachtwoord zal worden gegenereerd en per e-ma
 $wb['pw_reset'] = 'Het wachtwoord is gereset en is verzonden naar uw e-mailadres.';
 $wb['pw_error'] = 'Gebruikersnaam of e-mailadres komt niet overeen.';
 $wb['pw_error_noinput'] = 'Voer a.u.b. een e-mailadres en gebruikersnaam in.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Het wachtwoord  dat toegang biedt tot uw ISPConfig 3 control panel account is gereset. Het nieuwe wachtwoord is: ';
 $wb['pw_reset_mail_title'] = 'ISPConfig 3 Control panel wachtwoord is gereset.';
 $wb['user_regex_error'] = 'Gebruikersnaam bevat karakters die niet zijn toegestaan of is langer dan 64 karakters.';
diff --git a/interface/web/login/lib/lang/pl.lng b/interface/web/login/lib/lang/pl.lng
index 702b50117f..2367ede54d 100644
--- a/interface/web/login/lib/lang/pl.lng
+++ b/interface/web/login/lib/lang/pl.lng
@@ -3,6 +3,7 @@ $wb['pass_reset_txt'] = 'Nowe hasło zostanie wygenerowane i wysłane na Twój a
 $wb['pw_reset'] = 'Nowe hasło zostało wygenerowane i wysłane na Twój adres e-mail.';
 $wb['pw_error'] = 'Nazwa użytkownika lub e-mail nie pasują do siebie.';
 $wb['pw_error_noinput'] = 'Podaj nazwę użytkownika i adres e-mail.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Hasło do Twojego panelu w ISPConfig 3 zostało zresetowane. Twoje nowe hasło to: ';
 $wb['pw_reset_mail_title'] = 'Hasło do panelu w ISPConfig 3 zostało zresetowane.';
 $wb['user_regex_error'] = 'Nazwa użytkownika zawiera niedozwolone znaki lub jest dłuższa niż 64 znaki.';
diff --git a/interface/web/login/lib/lang/pt.lng b/interface/web/login/lib/lang/pt.lng
index 576d7ca44c..4be018a50c 100644
--- a/interface/web/login/lib/lang/pt.lng
+++ b/interface/web/login/lib/lang/pt.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Uma nova senha foi gerada e ser-lhe-á enviada para o c
 $wb['pw_reset'] = 'Senha restabelecida! Ser-lhe-á enviada para o correio eletrônico registado no sistema.';
 $wb['pw_error'] = 'Nome de utilizador ou correio eletrônico não coincidem.';
 $wb['pw_error_noinput'] = 'Favor informar nome de utilizador e endereço de correio válidos.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'A senha do painel de controle foi restabelecida. A nova senha é: ';
 $wb['pw_reset_mail_title'] = 'A senha do painel de controle foi restabelecida.';
 $wb['user_regex_error'] = 'O nome de utilizador contém mais de 64 caracteres ou contém caracteres inválidos.';
diff --git a/interface/web/login/lib/lang/ro.lng b/interface/web/login/lib/lang/ro.lng
index 3eb550194a..7676d928d5 100644
--- a/interface/web/login/lib/lang/ro.lng
+++ b/interface/web/login/lib/lang/ro.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'O noua parola va fi generata si trimisa catre mail-ul t
 $wb['pw_reset'] = 'Parola a fost schimbata si trimisa la mail-ul tau.';
 $wb['pw_error'] = 'Username sau  email nu s epotrivesc';
 $wb['pw_error_noinput'] = 'introduceti email address si username.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Parola la panoul de control a fost resetata . Noua parola este : ';
 $wb['pw_reset_mail_title'] = 'parola panoului de control a fost schimbata';
 $wb['user_regex_error'] = 'Username contine caractere nepermise sau are mai mult de 64 caractere';
diff --git a/interface/web/login/lib/lang/ru.lng b/interface/web/login/lib/lang/ru.lng
index ab19c92b13..4f1b4e86fc 100644
--- a/interface/web/login/lib/lang/ru.lng
+++ b/interface/web/login/lib/lang/ru.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Новый пароль будет сгенериров
 $wb['pw_reset'] = 'Пароль был сброшен и и отправлен вам на почту.';
 $wb['pw_error'] = 'Логин или E-mail адрес не совпадают.';
 $wb['pw_error_noinput'] = 'Введите E-mail адрес и логин.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Пароль в панель управления ISPConfig 3Был сброшен. Новый пароль: ';
 $wb['pw_reset_mail_title'] = 'Пароль для контрольной панели ISPConfig 3 был сброшен.';
 $wb['user_regex_error'] = 'Логин содержит неправильные символы, или длиннее 64 символов.';
diff --git a/interface/web/login/lib/lang/se.lng b/interface/web/login/lib/lang/se.lng
index 280332789b..4f8a8a4443 100644
--- a/interface/web/login/lib/lang/se.lng
+++ b/interface/web/login/lib/lang/se.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'A new password will be generated and send to your email
 $wb['pw_reset'] = 'Lösenordet har återställts och skickats till din epostadress.';
 $wb['pw_error'] = 'Användarenmn eller lösenord matchar inte.';
 $wb['pw_error_noinput'] = 'Vänligen fyll i epostadress och användarnamn.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'The password to your ISPConfig 3 control panel account has been reset. The new password is: ';
 $wb['pw_reset_mail_title'] = 'ISPConfig 3 Control panel password has been reset.';
 $wb['user_regex_error'] = 'Username contains unallowed characters or is longer then 64 characters.';
diff --git a/interface/web/login/lib/lang/sk.lng b/interface/web/login/lib/lang/sk.lng
index b03a645564..8c211b19be 100644
--- a/interface/web/login/lib/lang/sk.lng
+++ b/interface/web/login/lib/lang/sk.lng
@@ -7,6 +7,7 @@ $wb['pass_reset_txt'] = 'Nové heslo bude vytvorené a poslané na e-mailovú ad
 $wb['pw_reset'] = 'Heslo bolo resetnuté a posielané na e-mailovú adresu.';
 $wb['pw_error'] = 'Užívateľské meno alebo e-mailová adresa nezodpovedá.';
 $wb['pw_error_noinput'] = 'Prosím, zadajte e-mailovú adresu a Užívateľské meno.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'Heslo k svojmu účtu na ovládacom paneli bol resetnuté. Nové heslo je:';
 $wb['pw_reset_mail_title'] = 'Heslo ovládacieho panelu bolo resetnuté.';
 $wb['user_regex_error'] = 'Užívateľské meno obsahuje neplatné znaky, alebo je dlhšia ako 64 znakov.';
diff --git a/interface/web/login/lib/lang/tr.lng b/interface/web/login/lib/lang/tr.lng
index 863a6310d5..7bcc75f694 100644
--- a/interface/web/login/lib/lang/tr.lng
+++ b/interface/web/login/lib/lang/tr.lng
@@ -8,6 +8,7 @@ $wb['pw_reset'] = 'Parolanız sıfırlandı ve e-posta adresinize gönderildi.';
 $wb['pw_reset_act'] = 'Size bir etkinleştirme bağlantısı gönderildi. Parola isteğinizi onaylamak için bağlantıya tıklayın.';
 $wb['pw_error'] = 'Kullanıcı adı ya da e-posta adresiniz doğru değil.';
 $wb['pw_error_noinput'] = 'Lütfen e-posta adresinizi ya da kullanıcı adınızı yazın.';
+$wb['pw_reset_error_smtp_connection'] = 'There was a connection problem when trying to send an email pertaining to your password reset request.';
 $wb['pw_reset_mail_msg'] = 'ISPConfig 3 Kontrol Paneli parolanız sıfırlandı. Yeni parolanız: ';
 $wb['pw_reset_mail_title'] = 'ISPConfig 3 Kontrol Paneli parolanız sıfırlandı';
 $wb['pw_reset_act_mail_title'] = 'ISPConfig 3 Control Panel parola sıfırlama isteğini onaylayın';
diff --git a/interface/web/login/password_reset.php b/interface/web/login/password_reset.php
index 1550ae8af2..0a15b0c52b 100644
--- a/interface/web/login/password_reset.php
+++ b/interface/web/login/password_reset.php
@@ -71,8 +71,7 @@ if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != '
 			$username = $client['username'];
 			$password_hash = sha1(uniqid('ispc_pw'));
 			$app->db->query("UPDATE sys_user SET lost_password_reqtime = NOW(), lost_password_hash = ? WHERE username = ?", $password_hash, $username);
-			$app->tpl->setVar("message", $wb['pw_reset_act']);
-			
+
 			$server_domain = (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']);
 			if($server_domain == '_') {
 				$tmp = explode(':',$_SERVER["HTTP_HOST"]);
@@ -81,9 +80,9 @@ if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != '
 			}
 			if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on') $server_domain = 'http://' . $server_domain;
 			else $server_domain = 'https://' . $server_domain;
-			
+
 			if(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != '443') $server_domain .= ':' . $_SERVER['SERVER_PORT'];
-			
+
 			$app->uses('getconf,ispcmail');
 			$server_config_array = $app->getconf->get_global_config();
 			$mail_config = $server_config_array['mail'];
@@ -94,10 +93,14 @@ if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != '
 			$app->ispcmail->setSender($mail_config['admin_mail'], $mail_config['admin_name']);
 			$app->ispcmail->setSubject($wb['pw_reset_act_mail_title']);
 			$app->ispcmail->setMailText($wb['pw_reset_act_mail_msg'].$server_domain . '/login/password_reset.php?username=' . urlencode($username) . '&hash=' . urlencode($password_hash));
-			$app->ispcmail->send(array($client['contact_name'] => $client['email']));
+			$send_result = $app->ispcmail->send(array($client['contact_name'] => $client['email']));
 			$app->ispcmail->finish();
 
-			$app->tpl->setVar("msg", $wb['pw_reset_act']);
+			if($send_result !== false) {
+				$app->tpl->setVar("msg", $wb['pw_reset_act']);
+			} else {
+				$app->tpl->setVar("error", $wb['pw_reset_error_smtp_connection']);
+			}
 		} else {
 			$app->tpl->setVar("error", $wb['pw_error']);
 		}
@@ -132,7 +135,6 @@ if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != '
 			$username = $client['username'];
 			$app->db->query("UPDATE sys_user SET passwort = ?, lost_password_hash = '', lost_password_reqtime = NULL WHERE username = ?", $new_password_encrypted, $username);
 			$app->db->query("UPDATE client SET password = ? WHERE username = ?", $new_password_encrypted, $username);
-			$app->tpl->setVar("message", $wb['pw_reset']);
 
 			$app->uses('getconf,ispcmail');
 			$mail_config = $server_config_array['mail'];
@@ -143,11 +145,17 @@ if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != '
 			$app->ispcmail->setSender($mail_config['admin_mail'], $mail_config['admin_name']);
 			$app->ispcmail->setSubject($wb['pw_reset_mail_title']);
 			$app->ispcmail->setMailText($wb['pw_reset_mail_msg'].$new_password);
-			$app->ispcmail->send(array($client['contact_name'] => $client['email']));
+			$send_result = $app->ispcmail->send(array($client['contact_name'] => $client['email']));
 			$app->ispcmail->finish();
 
 			$app->plugin->raiseEvent('password_reset', true);
-			$app->tpl->setVar("msg", $wb['pw_reset']);
+
+			if($send_result !== false) {
+				$app->tpl->setVar("msg", $wb['pw_reset']);
+			} else {
+				$app->tpl->setVar("error", $wb['pw_reset_error_smtp_connection']);
+			}
+
 		} else {
 			$app->tpl->setVar("error", $wb['pw_error']);
 		}
-- 
GitLab


From f6ec140f871e5a4f5c2d2162129b0d11274783c4 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Wed, 29 Apr 2020 15:38:02 +0200
Subject: [PATCH 277/571] Refactor multiple TODOs into two.

This removes duplication of the zone_file_prefix var. It might be nice to make it configurable in a follow up.
---
 server/plugins-available/bind_plugin.inc.php | 97 +++++---------------
 1 file changed, 23 insertions(+), 74 deletions(-)

diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index e8b72b5dbc..f2dc603ec5 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -86,11 +86,8 @@ class bind_plugin {
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
 		
-		//TODO : change this when distribution information has been integrated into server record
-		$filespre = (file_exists('/etc/gentoo-release')) ? 'pri/' : 'pri.';
-		
 		$domain = substr($data['new']['origin'], 0, strlen($data['new']['origin'])-1);
-		if (!file_exists($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain)) return false;
+		if (!file_exists($dns_config['bind_zonefiles_dir'].'/'.$this->zone_file_prefix().$domain)) return false;
 		
 		//* Check Entropy
 		if (file_get_contents('/proc/sys/kernel/random/entropy_avail') < 400) {
@@ -129,9 +126,7 @@ class bind_plugin {
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
 		
-		//TODO : change this when distribution information has been integrated into server record
-		$filespre = (file_exists('/etc/gentoo-release')) ? 'pri/' : 'pri.';
-		
+		$filespre = $this->zone_file_prefix();
 		$domain = substr($data['new']['origin'], 0, strlen($data['new']['origin'])-1);
 		if (!file_exists($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain)) return false;
 		
@@ -168,9 +163,7 @@ class bind_plugin {
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
 		
-		//TODO : change this when distribution information has been integrated into server record
-		$filespre = (file_exists('/etc/gentoo-release')) ? 'pri/' : 'pri.';
-		
+		$filespre = $this->zone_file_prefix();
 		$domain = substr($data['new']['origin'], 0, strlen($data['new']['origin'])-1);
 		if (!file_exists($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain)) return false;
 		
@@ -203,13 +196,10 @@ class bind_plugin {
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
 		
-		//TODO : change this when distribution information has been integrated into server record
-		$filespre = (file_exists('/etc/gentoo-release')) ? 'pri/' : 'pri.';
-		
 		$domain = substr($data['new']['origin'], 0, strlen($data['new']['origin'])-1);
 		
 		unlink($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+*');
-		unlink($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain.'.signed');
+		unlink($dns_config['bind_zonefiles_dir'].'/'.$this->zone_file_prefix().$domain.'.signed');
 		unlink($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.');
 		
 		if ($app->dbmaster !== $app->db) $app->dbmaster->query('UPDATE dns_soa SET dnssec_info=\'\', dnssec_initialized=\'N\' WHERE id=?', intval($data['new']['id']));
@@ -278,13 +268,7 @@ class bind_plugin {
 			}
 			$tpl->setLoop('zones', $records);
 
-			//TODO : change this when distribution information has been integrated into server record
-			if (file_exists('/etc/gentoo-release')) {
-				$filename = $dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($zone['origin'], 0, -1));
-			}
-			else {
-				$filename = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1));
-			}
+			$filename = $dns_config['bind_zonefiles_dir'].'/' . $this->zone_file_prefix() . str_replace("/", "_", substr($zone['origin'], 0, -1));
 
 			$old_zonefile = @file_get_contents($filename);
 			file_put_contents($filename, $tpl->grab());
@@ -327,13 +311,7 @@ class bind_plugin {
 		}
 		else if ($data['new']['dnssec_wanted'] == 'Y' && $data['old']['dnssec_initialized'] == 'N') $this->soa_dnssec_create($data);
 		else if ($data['new']['dnssec_wanted'] == 'N' && $data['old']['dnssec_initialized'] == 'Y') {	//delete old signed file if dnssec is no longer wanted
-			//TODO : change this when distribution information has been integrated into server record
-			if (file_exists('/etc/gentoo-release')) {
-				$filename = $dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-			}
-			else {
-				$filename = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-			}
+			$filename = $dns_config['bind_zonefiles_dir'].'/' . $this->zone_file_prefix() . str_replace("/", "_", substr($data['old']['origin'], 0, -1));
 			if(is_file($filename.'.signed')) unlink($filename.'.signed');
  		} else if ($data['new']['dnssec_wanted'] == 'Y') $this->soa_dnssec_update($data);
 		// END DNSSEC
@@ -345,13 +323,7 @@ class bind_plugin {
 
 		//* Delete old domain file, if domain name has been changed
 		if($data['old']['origin'] != $data['new']['origin']) {
-			//TODO : change this when distribution information has been integrated into server record
-			if (file_exists('/etc/gentoo-release')) {
-				$filename = $dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-			}
-			else {
-				$filename = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-			}
+			$filename = $dns_config['bind_zonefiles_dir'].'/' . $this->zone_file_prefix() . str_replace("/", "_", substr($data['old']['origin'], 0, -1));
 
 			if(is_file($filename)) unlink($filename);
 			if(is_file($filename.'.err')) unlink($filename.'.err');
@@ -378,14 +350,7 @@ class bind_plugin {
 		$this->write_named_conf($data, $dns_config);
 
 		//* Delete the domain file
-		//TODO : change this when distribution information has been integrated into server record
-		if (file_exists('/etc/gentoo-release')) {
-			$zone_file_name = $dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-		}
-		else {
-			$zone_file_name = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-		}
-
+		$zone_file_name = $dns_config['bind_zonefiles_dir'].'/' . $this->zone_file_prefix() . str_replace("/", "_", substr($data['old']['origin'], 0, -1));
 		if(is_file($zone_file_name)) unlink($zone_file_name);
 		if(is_file($zone_file_name.'.err')) unlink($zone_file_name.'.err');
 		$app->log("Deleting BIND domain file: ".$zone_file_name, LOGLEVEL_DEBUG);
@@ -425,23 +390,12 @@ class bind_plugin {
 
 		//* Delete old domain file, if domain name has been changed
 		if($data['old']['origin'] != $data['new']['origin']) {
-			//TODO : change this when distribution information has been integrated into server record
-			if (file_exists('/etc/gentoo-release')) {
-				$filename = $dns_config['bind_zonefiles_dir'].'/sec/'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-			}
-			else {
-				$filename = $dns_config['bind_zonefiles_dir'].'/slave/sec.'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-			}
-
+			$filename = $dns_config['bind_zonefiles_dir'].'/' . $this->zone_file_prefix() . str_replace("/", "_", substr($data['old']['origin'], 0, -1));
 			if(is_file($filename)) unset($filename);
 		}
 
 		//* Ensure that the named slave directory is writable by the named user
-		if (file_exists('/etc/gentoo-release')) {
-			$slave_record_dir = $dns_config['bind_zonefiles_dir'].'/sec';
-		} else {
-			$slave_record_dir = $dns_config['bind_zonefiles_dir'].'/slave';
-		}
+		$slave_record_dir = $dns_config['bind_zonefiles_dir'].'/'.$this->slave_zone_file_prefix();
 		if(!@is_dir($slave_record_dir)) mkdir($slave_record_dir, 0770);
 		chown($slave_record_dir, $dns_config['bind_user']);
 		chgrp($slave_record_dir, $dns_config['bind_group']);
@@ -463,14 +417,7 @@ class bind_plugin {
 		$this->write_named_conf($data, $dns_config);
 
 		//* Delete the domain file
-		//TODO : change this when distribution information has been integrated into server record
-		if (file_exists('/etc/gentoo-release')) {
-			$zone_file_name = $dns_config['bind_zonefiles_dir'].'/sec/'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-		}
-		else {
-			$zone_file_name = $dns_config['bind_zonefiles_dir'].'/slave/sec.'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
-		}
-
+		$zone_file_name = $dns_config['bind_zonefiles_dir'].'/' . $this->slave_zone_file_prefix() . str_replace("/", "_", substr($data['old']['origin'], 0, -1));
 		if(is_file($zone_file_name)) unlink($zone_file_name);
 		$app->log("Deleting BIND domain file for secondary zone: ".$zone_file_name, LOGLEVEL_DEBUG);
 
@@ -527,16 +474,8 @@ class bind_plugin {
 
 		//* Check if the current zone that triggered this function has at least one NS record
 
-		//TODO : change this when distribution information has been integrated into server record
-		if (file_exists('/etc/gentoo-release')) {
-			$pri_zonefiles_path = $dns_config['bind_zonefiles_dir'].'/pri/';
-			$sec_zonefiles_path = $dns_config['bind_zonefiles_dir'].'/sec/';
-
-		}
-		else {
-			$pri_zonefiles_path = $dns_config['bind_zonefiles_dir'].'/pri.';
-			$sec_zonefiles_path = $dns_config['bind_zonefiles_dir'].'/slave/sec.';
-		}
+		$pri_zonefiles_path = $dns_config['bind_zonefiles_dir'].'/'.$this->zone_file_prefix();
+		$sec_zonefiles_path = $dns_config['bind_zonefiles_dir'].'/'.$this->slave_zone_file_prefix();
 
 		//* Loop trough zones
 		foreach($tmps as $tmp) {
@@ -603,6 +542,16 @@ class bind_plugin {
 	}
 
 
+	function zone_file_prefix() {
+		//TODO : change this when distribution information has been integrated into server record
+		return	(file_exists('/etc/gentoo-release')) ? 'pri/' : 'pri.';
+	}
+	function slave_zone_file_prefix() {
+		//TODO : change this when distribution information has been integrated into server record
+		return	(file_exists('/etc/gentoo-release')) ? 'sec/' : 'slave/sec.';
+	}
+
+
 
 
 } // end class
-- 
GitLab


From 2548cc13b35e87138f49ab0475c7e807666d75a2 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 19:48:18 +0200
Subject: [PATCH 278/571] Added translation option for form title

---
 ar_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 bg_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 br_system_config.lng | 95 ++++++++++++++++++++++++++++++++++++++++++
 ca_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 cz_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 de_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 dk_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 el_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 en_system_config.lng | 99 ++++++++++++++++++++++++++++++++++++++++++++
 es_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 fi_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 fr_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 hr_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 hu_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 id_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 it_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 ja_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 nl_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 pl_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 pt_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 ro_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 ru_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 se_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 sk_system_config.lng | 96 ++++++++++++++++++++++++++++++++++++++++++
 tr_system_config.lng | 90 ++++++++++++++++++++++++++++++++++++++++
 25 files changed, 2396 insertions(+)
 create mode 100644 ar_system_config.lng
 create mode 100644 bg_system_config.lng
 create mode 100644 br_system_config.lng
 create mode 100644 ca_system_config.lng
 create mode 100644 cz_system_config.lng
 create mode 100644 de_system_config.lng
 create mode 100644 dk_system_config.lng
 create mode 100644 el_system_config.lng
 create mode 100644 en_system_config.lng
 create mode 100644 es_system_config.lng
 create mode 100644 fi_system_config.lng
 create mode 100644 fr_system_config.lng
 create mode 100644 hr_system_config.lng
 create mode 100644 hu_system_config.lng
 create mode 100644 id_system_config.lng
 create mode 100644 it_system_config.lng
 create mode 100644 ja_system_config.lng
 create mode 100644 nl_system_config.lng
 create mode 100644 pl_system_config.lng
 create mode 100644 pt_system_config.lng
 create mode 100644 ro_system_config.lng
 create mode 100644 ru_system_config.lng
 create mode 100644 se_system_config.lng
 create mode 100644 sk_system_config.lng
 create mode 100644 tr_system_config.lng

diff --git a/ar_system_config.lng b/ar_system_config.lng
new file mode 100644
index 0000000000..3a7ef0796c
--- /dev/null
+++ b/ar_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
+$wb['dbname_prefix_txt'] = 'Database name prefix';
+$wb['dbuser_prefix_txt'] = 'Database user prefix';
+$wb['shelluser_prefix_txt'] = 'Shell user prefix';
+$wb['ftpuser_prefix_txt'] = 'FTP user prefix';
+$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
+$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
+$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
+$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
+$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They cannot free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/bg_system_config.lng b/bg_system_config.lng
new file mode 100644
index 0000000000..4e6add8a6d
--- /dev/null
+++ b/bg_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['warning'] = 'Редактирай тези променливи внимателно! Не премахвай префиксите на системата.';
+$wb['dbname_prefix_txt'] = 'Име на префикса в базата данни';
+$wb['dbuser_prefix_txt'] = 'Потребителски префикс в базата данни';
+$wb['shelluser_prefix_txt'] = 'Shell user prefix';
+$wb['ftpuser_prefix_txt'] = 'Потребителски префикс на FTP';
+$wb['dbname_prefix_error_regex'] = 'Неразрешени символи в името на префикса.';
+$wb['dbuser_prefix_error_regex'] = 'Неразрешени символи в името на префикса.';
+$wb['ftpuser_prefix_error_regex'] = 'Неразрешени символи в името на ftp префикса.';
+$wb['shelluser_prefix_error_regex'] = 'Неразрешени символи в името на shell префикса.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
+$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'Ако използвате този модул, вашите клиенти могат да изберет само един от домейните, които администратора създава за тях. Те не могат да освободят и редактират домейн - полето. Вие , трябва отново да влезете след промяна на тази стойност, за да направите промените видими.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Неразрешени символи в името на webdav префикса.';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['enable_custom_login_txt'] = 'Разреши различни имена за вход';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Мейлинг лист адрес URL';
+$wb['admin_mail_txt'] = 'Администраторски емаил';
+$wb['admin_name_txt'] = 'Администраторски имена';
+$wb['system_config_desc_txt'] = '';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create Subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/br_system_config.lng b/br_system_config.lng
new file mode 100644
index 0000000000..f5ed36e9ea
--- /dev/null
+++ b/br_system_config.lng
@@ -0,0 +1,95 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = 'Configurações do Sistema';
+$wb['smtp_missing_admin_mail_txt'] = 'Por favor, insira um nome e e-mail do administrador se você usar smtp para envio dos e-mails do sistema.';
+$wb['dashboard_atom_url_admin_txt'] = 'URL do Dashboard atom (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'URL do Dashboard atom (revendas)';
+$wb['dashboard_atom_url_client_txt'] = 'URL do Dashboard atom  (clientes)';
+$wb['warning'] = 'Edite estes valores com cuidado! Não remova os prefixos em um sistema com mais de um cliente!';
+$wb['tab_change_discard_txt'] = 'Descartar alterações nesta aba';
+$wb['tab_change_warning_txt'] = 'Alerta de alterações';
+$wb['tab_change_warning_note_txt'] = 'Exibir alertas de alterações nesta aba se qualquer dado for alterado pelo usuário.';
+$wb['dbname_prefix_txt'] = 'Prefixo de banco de dados';
+$wb['dbuser_prefix_txt'] = 'Prefixo de usuário de banco de dados';
+$wb['shelluser_prefix_txt'] = 'Prefixo de usuário do shell';
+$wb['webdavuser_prefix_txt'] = 'Prefixo de usuário webdav';
+$wb['ftpuser_prefix_txt'] = 'Prefixo de usuário ftp';
+$wb['vhost_subdomains_txt'] = 'Adicionar subdomínios como um site';
+$wb['vhost_subdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem subdomínios vhost no sistema!';
+$wb['vhost_aliasdomains_txt'] = 'Adicionar alias de domínio como um site';
+$wb['vhost_aliasdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem alias de domínios vhost no sistema!';
+$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo de banco de dados.';
+$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário de banco de dados.';
+$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário ftp.';
+$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário do shell.';
+$wb['webdavuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuários webdav.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link para o phpmyadmin';
+$wb['enable_custom_login_txt'] = 'Permitir nome de usuário personalizado';
+$wb['mailboxlist_webmail_link_txt'] = 'Link para o webmail';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Exibir aba de auto-resposta nos detalhes da conta de e-mail';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Exibir aba de filtro de e-mails nos detalhes da conta de e-mail';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Exibir aba de filtros personalizados de e-mail nos detalhes da conta de e-mail';
+$wb['webmail_url_txt'] = 'URL do webmail';
+$wb['mailmailinglist_link_txt'] = 'Link para lista de e-mails na lista de e-mails';
+$wb['mailmailinglist_url_txt'] = 'URL da lista de e-mails';
+$wb['phpmyadmin_url_txt'] = 'URL do phpMyAdmin';
+$wb['use_domain_module_txt'] = 'Use o módulo de cliente para adicionar novos domínios';
+$wb['use_domain_module_hint'] = 'Se você usar este módulo, os clientes podem selecionar apenas um dos domínios que o administrador adicionar para eles. Eles não podem editar o campo domínio livremente. Você deve sair e acessar novamente após alterar este valor para que as mudanças sejam aplicadas.';
+$wb['new_domain_txt'] = 'Código HTML para criar um novo domínio';
+$wb['webftp_url_txt'] = 'URL do FTPweb';
+$wb['admin_mail_txt'] = 'Administrador(es) de e-mails';
+$wb['monitor_key_txt'] = 'Palavras reservadas a monitorar';
+$wb['admin_name_txt'] = 'Nome do administrador';
+$wb['maintenance_mode_txt'] = 'Modo manutenção';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Usar SMTP para enviar e-mails do sistema';
+$wb['smtp_host_txt'] = 'Host SMTP';
+$wb['smtp_port_txt'] = 'Porta SMTP';
+$wb['smtp_user_txt'] = 'Usuário SMTP';
+$wb['smtp_pass_txt'] = 'Senha do SMTP';
+$wb['smtp_crypt_txt'] = 'Usar conexão criptografada SSL/TLS para o SMTP';
+$wb['phpmyadmin_url_error_regex'] = 'URL do phpmyadmin é inválida.';
+$wb['use_combobox_txt'] = 'Usar combobox jQuery UI';
+$wb['use_loadindicator_txt'] = 'Usar indicador de carga';
+$wb['f5_to_reload_js_txt'] = 'Se você modificar esta configuração, talvez será necessário pressionar F5 no seu navegador para recarregar as bibliotecas do JavaScript ou esvaziar o cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Desabilitar verificação da palavra reservada "web" para o nome de usuário (não recomendado!).';
+$wb['backups_include_into_web_quota_txt'] = 'Incluir arquivos de backup na cota do site.';
+$wb['webmail_url_error_regex'] = 'URL do webmail é inválida.';
+$wb['phpmyadmin_url_note_txt'] = 'Área reservada:';
+$wb['webmail_url_note_txt'] = 'Área reservada:';
+$wb['available_dashlets_note_txt'] = 'Dashlets disponíveis:';
+$wb['admin_dashlets_left_txt'] = 'Restrições de dashlets para administradores';
+$wb['admin_dashlets_right_txt'] = 'Permissões de dashlets para administradores';
+$wb['reseller_dashlets_left_txt'] = 'Restrições de dashlets para revendas';
+$wb['reseller_dashlets_right_txt'] = 'Permissões de dashlets para revendas';
+$wb['client_dashlets_left_txt'] = 'Restrições de dashlets para clientes';
+$wb['client_dashlets_right_txt'] = 'Permissões de dashlets para clientes';
+$wb['customer_no_template_txt'] = 'No. do gabarito do cliente';
+$wb['customer_no_template_error_regex_txt'] = 'O número do gabarito do cliente contém caracteres inválidos.';
+$wb['customer_no_start_txt'] = 'Valor inicial do código de cliente';
+$wb['customer_no_counter_txt'] = 'Contador do código de cliente';
+$wb['session_timeout_txt'] = 'Duração da sessão (minutos)';
+$wb['session_allow_endless_txt'] = 'Habilitar "Manter-me conectado"';
+$wb['No'] = 'Não';
+$wb['min_password_length_txt'] = 'Comprimento mínimo da senha';
+$wb['min_password_strength_txt'] = 'Dificuldade mínima da senha';
+$wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
+$wb['default_webserver_txt'] = 'Servidor web padrão';
+$wb['default_dnsserver_txt'] = 'Servidor dns padrão';
+$wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
+$wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
+$wb['company_name_txt'] = 'Nome da empresa para título da página';
+$wb['reseller_can_use_options_txt'] = 'Revendas podem utilizar o menu sites';
+$wb['custom_login_text_txt'] = 'Texto personalizado para a página de acesso';
+$wb['custom_login_link_txt'] = 'Link personalizado para página de acesso';
+$wb['login_link_error_regex'] = 'Link personalizado para acesso inválido';
+$wb['ca_name_txt'] = 'Nome';
+$wb['ca_issue_txt'] = 'Questão';
+$wb['ca_wildcard_txt'] = 'Usar curingas';
+$wb['ca_iodef_txt'] = 'Definições de E/S';
+$wb['active_txt'] = 'Ativo';
+$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+$wb['web_php_options_txt'] = 'Manipulador do php (Somente apache)';
+?>
diff --git a/ca_system_config.lng b/ca_system_config.lng
new file mode 100644
index 0000000000..f721f688c5
--- /dev/null
+++ b/ca_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['dbname_prefix_txt'] = 'Database name prefix';
+$wb['dbuser_prefix_txt'] = 'Database user prefix';
+$wb['shelluser_prefix_txt'] = 'Shell user prefix';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['ftpuser_prefix_txt'] = 'FTP user prefix';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
+$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
+$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
+$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Use the domain limits in client module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use the domain limits, your customers can only select one of the domains the admin creates for them. They cannot freely edit the domain-field. You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['admin_mail_txt'] = 'Administrator\'s e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrator\'s name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/cz_system_config.lng b/cz_system_config.lng
new file mode 100644
index 0000000000..4ee62ece32
--- /dev/null
+++ b/cz_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Upravujte tyto údaje opatrne! Neodstraňujte prefixy na systémech s více, než jedním klientem.';
+$wb['dbname_prefix_txt'] = 'Prefix názvu databáze';
+$wb['dbuser_prefix_txt'] = 'Prefix uživatele databáze';
+$wb['shelluser_prefix_txt'] = 'Prefix shell uživatele';
+$wb['ftpuser_prefix_txt'] = 'Prefix FTP uživatele';
+$wb['dbname_prefix_error_regex'] = 'Znak není povolen v prefixu databázovém názvu.';
+$wb['dbuser_prefix_error_regex'] = 'Znak není povolen v prefixu databázového uživatele.';
+$wb['ftpuser_prefix_error_regex'] = 'Znak není povolen v prefixu FTP uživatele.';
+$wb['shelluser_prefix_error_regex'] = 'Znak není povolen v prefixu shell uživatele.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Ikonový odkaz na aplikaci PHPMyAdmin v seznamu databází';
+$wb['mailboxlist_webmail_link_txt'] = 'Ikonový odkaz na aplikaci Webmail v seznamu e-mailových schránek';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['dashboard_atom_url_admin_txt'] = 'Nástěnka - novinky načítat z URL pro: (admina)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Nástěnka - novinky načítat z URL pro: (prodejce)';
+$wb['dashboard_atom_url_client_txt'] = 'Nástěnka - novinky načítat z URL pro: (klienty)';
+$wb['webdavuser_prefix_txt'] = 'Prefix webdav uživatele';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['use_domain_module_txt'] = 'Použijte modul-domény pro přidání nových domén';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML vytvořit novou doménu';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['admin_mail_txt'] = 'E-mail Administrátora';
+$wb['admin_name_txt'] = 'Jméno Administrátora';
+$wb['enable_custom_login_txt'] = 'Povolit vlastní přihlašovací jméno u e-mailové schránky';
+$wb['mailmailinglist_link_txt'] = 'Ikonový odkaz na aplikaci E-mailových konferencí seznamu e-mailových konferencí';
+$wb['mailmailinglist_url_txt'] = 'E-mailové konference URL';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['maintenance_mode_txt'] = 'Režim údržby';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Použít (zvolit) SMTP server pro zasílání systémových mailů';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP uživatel';
+$wb['smtp_pass_txt'] = 'SMTP heslo';
+$wb['smtp_crypt_txt'] = 'Použít SSL/TLS šifrované spojení pro SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Zadejte prosím jméno Administrátora a e-mailovou adresu Administrátora, pokud chcete používat zvolený SMTP server pro zasílání systémových mailů.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Záložka změna varování';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Vytvořit subdomény jako webové stránky';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'phpmyadmin neplatné URL';
+$wb['use_combobox_txt'] = 'Použití jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Použití indikátoru zatížení';
+$wb['f5_to_reload_js_txt'] = 'Pokud vypnete tuto volbu, zřejmě budete muset používat klávesu F5, aby internetový prohlížeč znovu načetl JavaScript knihovny nebo budete muset ručně vyprázdňovat mezipaměť (cache) vašeho internetového prohlížeče.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Ukázat kartu automatická odpověď v podrobnostech u e-mailové schránky';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Ukázat kartu e-mailové filtry v podrobnostech u e-mailové schránky';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Ukázat kartu vlastní pravidla v podrobnostech u e-mailové schránky';
+$wb['webmail_url_error_regex'] = 'Neplatný webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Zástupný symbol';
+$wb['webmail_url_note_txt'] = 'Zástupný symbol';
+$wb['available_dashlets_note_txt'] = 'Dostupné moduly pro nástěnku:';
+$wb['admin_dashlets_left_txt'] = 'Nástěnka - zobrazení modulů v lévé části pro: (admina)';
+$wb['admin_dashlets_right_txt'] = 'Nástěnka - zobrazení modulů v pravé části pro: (admina)';
+$wb['reseller_dashlets_left_txt'] = 'Nástěnka - zobrazení modulů v lévé části pro: (prodejce)';
+$wb['reseller_dashlets_right_txt'] = 'Nástěnka - zobrazení modulů v pravé části pro: (prodejce)';
+$wb['client_dashlets_left_txt'] = 'Nástěnka - zobrazení modulů v lévé části pro: (klienty)';
+$wb['client_dashlets_right_txt'] = 'Nástěnka - zobrazení modulů v pravé části pro: (klienty)';
+$wb['customer_no_template_txt'] = 'Zákaznické číslo - šablona';
+$wb['customer_no_template_error_regex_txt'] = 'Zákaznické číslo šablony obsahuje neplatné znaky';
+$wb['customer_no_start_txt'] = 'Zákaznické číslo - počáteční hodnota';
+$wb['customer_no_counter_txt'] = 'Zákaznické číslo -  čítač';
+$wb['session_timeout_txt'] = 'Časový limit relace (minuty)';
+$wb['session_allow_endless_txt'] = 'Povolit - zůstat přihlášen';
+$wb['No'] = 'Ne';
+$wb['min_password_length_txt'] = 'Minimální délka hesla';
+$wb['min_password_strength_txt'] = 'Minimální síla hesla';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['default_mailserver_txt'] = 'Výchozí E-mailový server';
+$wb['default_webserver_txt'] = 'Výchozí webový server';
+$wb['default_dnsserver_txt'] = 'Výchozí DNS server';
+$wb['default_slave_dnsserver_txt'] = 'Výchozí sekundární DNS server';
+$wb['default_dbserver_txt'] = 'Výchozí databázový server';
+$wb['company_name_txt'] = 'Název společnosti v panelu (listu) webového prohlížeče';
+$wb['reseller_can_use_options_txt'] = 'Distributor (prodejce) může použít kartu možností pro weby.';
+$wb['custom_login_text_txt'] = 'Vlastní text na přihlašovací stránce';
+$wb['custom_login_link_txt'] = 'Vlastní odkaz (URL) na přihlašovací stránce (vlastní text)';
+$wb['login_link_error_regex'] = 'Neplatný formát URL pro vlastní odkaz na přihlašovací stránce';
+$wb['ca_name_txt'] = 'Název vydavatele';
+$wb['ca_issue_txt'] = 'Doména vydavatele';
+$wb['ca_wildcard_txt'] = 'Použít Wildcard (*)';
+$wb['ca_critical_txt'] = 'Přísná kontrola';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktivní';
+$wb['btn_save_txt'] = 'Uložit';
+$wb['btn_cancel_txt'] = 'Zrušit';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/de_system_config.lng b/de_system_config.lng
new file mode 100644
index 0000000000..f981cce832
--- /dev/null
+++ b/de_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = 'Systemkonfiguration';
+$wb['smtp_missing_admin_mail_txt'] = 'Bitte geben Sie die Administrator E-Mail und den Namen ein, wenn Sie SMTP Versand nutzen wollen.';
+$wb['warning'] = 'Bearbeiten Sie diese Werte sorgfältig! Entfernen Sie die Präfixe nicht auf Systemen mit mehr als einem Kunden.';
+$wb['tab_change_warning_txt'] = 'Reiter Wechsel Warnung';
+$wb['tab_change_discard_txt'] = 'Verwerfe Änderungen bei Reiter Wechsel';
+$wb['tab_change_warning_note_txt'] = 'Zeigt eine Warnung an, wenn der Reiter in einem Formular gewechselt wird und Daten geändert wurden.';
+$wb['dbname_prefix_txt'] = 'Datenbank Namen Präfix';
+$wb['dbuser_prefix_txt'] = 'Datenbank Benutzer Präfix';
+$wb['shelluser_prefix_txt'] = 'Shell Benutzer Präfix';
+$wb['ftpuser_prefix_txt'] = 'FTP Benutzer Präfix';
+$wb['vhost_subdomains_txt'] = 'Subdomains als Webseite anlegen';
+$wb['vhost_subdomains_note_txt'] = 'Diese Einstellung kann nicht wieder deaktiviert werden, wenn Vhost Subdomains im System vorhanden sind!';
+$wb['vhost_aliasdomains_txt'] = 'Aliasdomains als Webseite anlegen';
+$wb['vhost_aliasdomains_note_txt'] = 'Diese Einstellung kann nicht wieder deaktiviert werden, wenn Vhost Aliasdomains im System vorhanden sind!';
+$wb['dbname_prefix_error_regex'] = 'Zeichen nicht erlaubt in Datenbank Namen Präfix.';
+$wb['dbuser_prefix_error_regex'] = 'Zeichen nicht erlaubt in Datenbank Benutzer Präfix.';
+$wb['ftpuser_prefix_error_regex'] = 'Zeichen nicht erlaubt in FTP Benutzer Präfix.';
+$wb['shelluser_prefix_error_regex'] = 'Zeichen nicht erlaubt in Shell Benutzer Präfix.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link zu phpMyAdmin in der Datenbankliste';
+$wb['mailboxlist_webmail_link_txt'] = 'Link zu Webmail in der Mailboxliste';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'phpMyAdmin URL';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (für Admins)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (für Reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (für Kunden)';
+$wb['webdavuser_prefix_txt'] = 'WebDAV Benutzer Präfix';
+$wb['webdavuser_prefix_error_regex'] = 'Zeichen nicht zulässig im WebDAV Benutzer Präfix.';
+$wb['use_domain_module_txt'] = 'Domain Limits im Kundenmodul benutzen, um neue Domains hinzuzufügen';
+$wb['use_domain_module_hint'] = 'Falls Sie die Domain Limits benutzen, können Ihre Kunden nur eine der Domains auswählen, die der Admin für sie angelegt hat. Die Kunden können das Domain-Feld nicht frei editieren. Sie müssen sich neu einloggen, wenn Sie diesen Wert ändern.';
+$wb['new_domain_txt'] = 'HTML Text zum Anlegen einer neuen Domain';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Abweichenden Login Namen erlauben';
+$wb['mailmailinglist_link_txt'] = 'Link zur Mailingliste in der Mailinglisten Ãœbersicht';
+$wb['mailmailinglist_url_txt'] = 'Mailinglisten URL';
+$wb['admin_mail_txt'] = 'Administrator E-Mail';
+$wb['monitor_key_txt'] = 'ISPConfig Monitor App Passwort';
+$wb['admin_name_txt'] = 'Name des Administrators';
+$wb['maintenance_mode_txt'] = 'Wartungsmodus';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'SMTP zum System E-Mailversand nutzen';
+$wb['smtp_host_txt'] = 'SMTP Server';
+$wb['smtp_port_txt'] = 'SMTP Port';
+$wb['smtp_user_txt'] = 'SMTP Benutzer';
+$wb['smtp_pass_txt'] = 'SMTP Passwort';
+$wb['smtp_crypt_txt'] = 'SSL/TLS verschlüsselte Verbindung für SMTP';
+$wb['use_combobox_txt'] = 'jQuery UI Combobox benutzen';
+$wb['use_loadindicator_txt'] = 'Laden Grafik anzeigen';
+$wb['f5_to_reload_js_txt'] = 'Wenn Sie den Wert ändern, müssen Sie F5 drücken, damit der Browser die JavaScript Bibliotheken neu lädt, oder Ihren Browser Cache leeren.';
+$wb['phpmyadmin_url_error_regex'] = 'Falsche phpMyAdmin URL';
+$wb['client_username_web_check_disabled_txt'] = 'Deaktiviere die Kunden Benutzernamen Überprüfung für den Begriff <b>web<b>.';
+$wb['backups_include_into_web_quota_txt'] = 'Backups in Web Quota hinzuzählen.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Zeige Autoresponder Reiter in E-Mail Kontodetails';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Zeige E-Mail Filter Reiter in E-Mail Kontodetails';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Zeige Benutzerregel Reiter in E-Mail Kontodetails';
+$wb['webmail_url_error_regex'] = 'Falsche Webmail URL';
+$wb['reseller_can_use_options_txt'] = 'Reseller können den Optionen Reiter bei Webseiten verwenden';
+$wb['phpmyadmin_url_note_txt'] = 'Platzhalter:';
+$wb['webmail_url_note_txt'] = 'Platzhalter:';
+$wb['available_dashlets_note_txt'] = 'Verfügbare Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Admin-Dashlets links';
+$wb['admin_dashlets_right_txt'] = 'Admin-Dashlets rechts';
+$wb['reseller_dashlets_left_txt'] = 'Reseller-Dashlets links';
+$wb['reseller_dashlets_right_txt'] = 'Reseller-Dashlets rechts';
+$wb['client_dashlets_left_txt'] = 'Kunden-Dashlets links';
+$wb['client_dashlets_right_txt'] = 'Kunden-Dashlets rechts';
+$wb['customer_no_template_txt'] = 'Kundennummer-Vorlage';
+$wb['customer_no_template_error_regex_txt'] = 'Die Kundennummer-Vorlage enthält ungültige Zeichen';
+$wb['customer_no_start_txt'] = 'Kundennummer Startwert';
+$wb['customer_no_counter_txt'] = 'Kundennummer Zähler';
+$wb['session_timeout_txt'] = 'Session-Timeout (Minuten)';
+$wb['session_allow_endless_txt'] = '&quot;Eingeloggt bleiben&quot; aktivieren';
+$wb['No'] = 'Nein';
+$wb['min_password_length_txt'] = 'Minimale Passwortlänge';
+$wb['min_password_strength_txt'] = 'Minimale Passwortstärke';
+$wb['company_name_txt'] = 'Firmenname fuer den Seitentitel';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Wildcard verwenden';
+$wb['ca_critical_txt'] = 'Strikte Überprüfung';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktiv';
+$wb['btn_save_txt'] = 'Speichern';
+$wb['btn_cancel_txt'] = 'Abbrechen';
+$wb['web_php_options_txt'] = 'PHP Handler (Nur Apache)';
+?>
diff --git a/dk_system_config.lng b/dk_system_config.lng
new file mode 100644
index 0000000000..5f298f091a
--- /dev/null
+++ b/dk_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['smtp_missing_admin_mail_txt'] = 'Indtast venligst admin navn og admin mail adresse, hvis du vil bruge smtp mail afsendelse.';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (forhandler)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (klient)';
+$wb['warning'] = 'Rediger disse værdier forsigtigt! Fjern ikke præfikser på et system med mere end én klient.';
+$wb['tab_change_discard_txt'] = 'Kassér ændringer på fanen forandring';
+$wb['tab_change_warning_txt'] = 'Fane ændrings advarsel';
+$wb['tab_change_warning_note_txt'] = 'Vis en advarsel på fanen ændring i redigere formularer, hvis nogen data er blevet ændret af brugeren.';
+$wb['dbname_prefix_txt'] = 'Database navn prefix';
+$wb['dbuser_prefix_txt'] = 'Database bruger prefix';
+$wb['shelluser_prefix_txt'] = 'Shell bruger prefix';
+$wb['webdavuser_prefix_txt'] = 'Webdav bruger prefix';
+$wb['ftpuser_prefix_txt'] = 'FTP bruger prefix';
+$wb['vhost_subdomains_txt'] = 'Opret Sub-domæne som web side';
+$wb['vhost_subdomains_note_txt'] = 'Du kan ikke deaktivere dette, så længe der findes vhost sub-domæner i systemet!';
+$wb['dbname_prefix_error_regex'] = 'Char ikke tilladt i database name prefix.';
+$wb['dbuser_prefix_error_regex'] = 'Char ikke tilladt i database bruger prefix.';
+$wb['ftpuser_prefix_error_regex'] = 'Char ikke tilladt i ftp bruger prefix.';
+$wb['shelluser_prefix_error_regex'] = 'Char ikke tilladt i shell bruger prefix.';
+$wb['webdavuser_prefix_error_regex'] = 'Char ikke tilladt i webdav bruger prefix.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link til phpmyadmin i DB liste';
+$wb['enable_custom_login_txt'] = 'Tillad brugerdefinerede login-navn';
+$wb['mailboxlist_webmail_link_txt'] = 'Link til webmail i Postboks liste';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['mailmailinglist_link_txt'] = 'Link til mailing list i Mailing list liste';
+$wb['mailmailinglist_url_txt'] = 'Mail-list URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Brug domæne grænser i klient-modul for at tilføje nye domæner';
+$wb['use_domain_module_hint'] = 'Hvis du bruger domæne grænser, kan dine kunder kun vælge et af de områder admin skabte for dem. De kan ikke frit redigere domæne-feltet. Du er nødt til at re-login efter at ændre denne værdi, for at gøre ændringerne synlige.';
+$wb['new_domain_txt'] = 'HTML for at oprette et nyt domæne';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['admin_mail_txt'] = 'Administratorer e-mail';
+$wb['monitor_key_txt'] = 'Monitor nøgleord';
+$wb['admin_name_txt'] = 'Administratorer navn';
+$wb['maintenance_mode_txt'] = 'Vedligeholdelsestilstand';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Brug SMTP for at sende system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP bruger';
+$wb['smtp_pass_txt'] = 'SMTP adgangskode';
+$wb['smtp_crypt_txt'] = 'Brug SSL/TLS krypteret forbindelse for SMTP';
+$wb['phpmyadmin_url_error_regex'] = 'Ugyldigt phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Brug jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Brug Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'Hvis du ændrer dette, kan du blive nødt til at trykke på F5 for at browseren genindlæser JavaScript-biblioteker eller tømme browserens cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Deaktiver klient-brugernavns check for ordet \'web\'.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Vis autoresponder tab i mail kontooplysninger';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Vis mail filter tab i mail kontooplysninger';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Vis custom mailfilter tab i mail kontooplysninger';
+$wb['webmail_url_error_regex'] = 'Ugyldigt webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Pladsholder:';
+$wb['webmail_url_note_txt'] = 'Pladsholder:';
+$wb['available_dashlets_note_txt'] = 'Tilgængelig Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Forhandler Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Forhandler Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Kunde Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Kunde Dashlets';
+$wb['customer_no_template_txt'] = 'Kunde Nr. skabelon';
+$wb['customer_no_template_error_regex_txt'] = 'Kunde Nr. skabelon indeholder ugyldigt karaktere';
+$wb['customer_no_start_txt'] = 'Kunde Nr. start værdi';
+$wb['customer_no_counter_txt'] = 'Kunde Nr. tæller';
+$wb['session_timeout_txt'] = 'Session timeout (minutter)';
+$wb['session_allow_endless_txt'] = 'Aktiver \\"forbliv logget ind\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum adgangskode længde';
+$wb['min_password_strength_txt'] = 'Minimum adgangskode styrke';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/el_system_config.lng b/el_system_config.lng
new file mode 100644
index 0000000000..17414e666d
--- /dev/null
+++ b/el_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['warning'] = 'Επεξεργαστείτε τις τιμές με προσοχή! ΜΗΝ αφαιρείτε τα προθέματα σε συστήματα με περισσότερους από έναν πελάτες.';
+$wb['dbname_prefix_txt'] = 'Πρόθεμα Ονόματος Βάσης Δεδομένων';
+$wb['dbuser_prefix_txt'] = 'Πρόθεμα Χρήστη Βάσης Δεδομένων';
+$wb['shelluser_prefix_txt'] = 'Πρόθεμα Χρήστη Shell';
+$wb['webdavuser_prefix_txt'] = 'Πρόθεμα Χρήστη Webdav';
+$wb['ftpuser_prefix_txt'] = 'Πρόθεμα Χρήστη FTP';
+$wb['dbname_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Ονόματος της Βάσης Δεδομένων.';
+$wb['dbuser_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Χρήστη της Βάσης Δεδομένων.';
+$wb['ftpuser_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Χρήστη ftp.';
+$wb['shelluser_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Χρήστη Shell.';
+$wb['webdavuser_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Χρήστη Webdav.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link για το phpmyadmin στη λίστα των βάσεων δεδομένων';
+$wb['mailboxlist_webmail_link_txt'] = 'Link για το webmail στην λίστα των θυρίδων mail';
+$wb['webmail_url_txt'] = 'URL του Webmail';
+$wb['phpmyadmin_url_txt'] = 'URL του PHPMyAdmin';
+$wb['use_domain_module_txt'] = 'Χρήση του αρθρώματος-domain για την προσθήκη νέων domains';
+$wb['use_domain_module_hint'] = 'Αν χρησιμοποιήσετε αυτό το άρθρωμα, οι πελάτες σας μπορούν μόνο να διαλέξουν ένα από τα domains που δημιούργησε για αυτούς ο διαχειριστής. Δεν μπορούν να επεξεργαστούν ελεύθερα τα πεδία του domain.Πρέπει να επανασυνδεθείτε αν αλλάξετε αυτή την τιμή, για να γίνουν οι αλλαγές σας, ορατές.';
+$wb['new_domain_txt'] = 'HTML για την δημιουργία domain';
+$wb['webftp_url_txt'] = 'URL του WebFTP';
+$wb['enable_custom_login_txt'] = 'Αποδοχή  προσαρμοσμένου ονόματος login';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'URL της Mailing list ';
+$wb['admin_mail_txt'] = 'e-mail Διαχειριστών';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Όνομα Administrator';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP θύρα';
+$wb['smtp_user_txt'] = 'SMTP χρήστης';
+$wb['smtp_pass_txt'] = 'SMTP συνθηματικό';
+$wb['smtp_crypt_txt'] = 'Χρήση κρυπτογραφημένης σύνδεσης SSL/TLS για SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'ΠΑρακαλούμε εισάγετε το όνομα διαχειριστή και την διεύθυνση mail αν θέλετε να χρησιμοποιήσετε απόστολή mail με smtp.';
+$wb['tab_change_discard_txt'] = 'Ακύρωση αλλαγών με την αλλαγή καρτέλας';
+$wb['tab_change_warning_txt'] = 'Προειδοποίηση αλλαγής καρτέλας';
+$wb['tab_change_warning_note_txt'] = 'Εμφάνιση μιας προειδοποίησης κατα την αλλαγή καρτέλας σε φόρμες επεξεργασίας που έχουν τροποποιηθεί από τον χρήστη.';
+$wb['vhost_subdomains_txt'] = 'Δημιουργία Subdomains ως web site';
+$wb['vhost_subdomains_note_txt'] = 'Δεν μπορεί να γίνει απενεργοποίηση όσο υπάρχουν vhost subdomains στο σύστημα!';
+$wb['vhost_aliasdomains_txt'] = 'Δημιουργία aliasdomains ως web site';
+$wb['vhost_aliasdomains_note_txt'] = 'Δεν μπορεί να γίνει απενεργοποίηση όσο υπάρχουν vhost aliasdomains στο σύστημα!';
+$wb['phpmyadmin_url_error_regex'] = 'Μη έγκυρο URL phpmyadmin';
+$wb['use_combobox_txt'] = 'Χρήση jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Χρήση Load Indicator (ενδεικτή φόρτωσης)';
+$wb['f5_to_reload_js_txt'] = 'Αν το αλλάξετε, ίσως πρέπει να πατήσετε το F5 για να κάνετε τον φυλλομετρητη να ξαναφορτώσει τις βιβλιοθήκες JavaScript ή να αδείασετε την cache του φυλλομετρητή.';
+$wb['client_username_web_check_disabled_txt'] = 'Απενεργοποίηση ελέγχου στο όνομα χρήστη για την λέξη \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Εμφάνιση της καρτέλας Αυτόματης Απάντησης στις λεπτομέρειες του λογαριασμού mail';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Εμφάνιση της καρτέλας Φίλτρα mail στις λεπτομέρειες του λογαριασμού mail';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Εμφάνιση της καρτέλας Προσαρμοσμένοι Κανόνες στις λεπτομέρειες του λογαριασμού mail';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/en_system_config.lng b/en_system_config.lng
new file mode 100644
index 0000000000..840b3f434b
--- /dev/null
+++ b/en_system_config.lng
@@ -0,0 +1,99 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb["warning"] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb["dbname_prefix_txt"] = 'Database name prefix';
+$wb["dbuser_prefix_txt"] = 'Database user prefix';
+$wb["shelluser_prefix_txt"] = 'Shell user prefix';
+$wb["webdavuser_prefix_txt"] = 'Webdav user prefix';
+$wb["ftpuser_prefix_txt"] = 'FTP user prefix';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb["dbname_prefix_error_regex"] = 'Char not allowed in database name prefix.';
+$wb["dbuser_prefix_error_regex"] = 'Char not allowed in database user prefix.';
+$wb["ftpuser_prefix_error_regex"] = 'Char not allowed in ftp user prefix.';
+$wb["shelluser_prefix_error_regex"] = 'Char not allowed in shell user prefix.';
+$wb["webdavuser_prefix_error_regex"] = 'Char not allowed in webdav user prefix.';
+$wb["dblist_phpmyadmin_link_txt"] = 'Link to phpmyadmin in DB list';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb["mailboxlist_webmail_link_txt"] = 'Link to webmail in Mailbox list';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show Autoresponder tab in Mailbox detail';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show Mail Filter tab in Mailbox detail';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show Custom Rules tab in Mailbox detail';
+$wb["webmail_url_txt"] = 'Webmail URL';
+$wb["mailmailinglist_link_txt"] = 'Link to mailing list in Mailing list list';
+$wb["mailmailinglist_url_txt"] = 'Mailing list URL';
+$wb["phpmyadmin_url_txt"] = 'PHPMyAdmin URL';
+$wb["use_domain_module_txt"] = 'Use the domain limits in client module to add new domains';
+$wb["use_domain_module_hint"] = 'If you use the domain limits, your customers can only select one of the domains the admin creates for them. They cannot freely edit the domain-field. You have to re-login after changing this value, to make the changes visible.';
+$wb["new_domain_txt"] = 'HTML to create a new domain';
+$wb["webftp_url_txt"] = 'WebFTP URL';
+$wb['admin_mail_txt'] = 'Administrator\'s e-mail';
+$wb["monitor_key_txt"] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrator\'s name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable "stay logged in"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb["default_mailserver_txt"] = 'Default Mailserver';
+$wb["default_webserver_txt"] = 'Default Webserver';
+$wb["default_dnsserver_txt"] = 'Default DNS Server';
+$wb["default_slave_dnsserver_txt"] = 'Default Secondary DNS Server';
+$wb["default_dbserver_txt"] = 'Default Database Server';
+$wb["company_name_txt"] = "Company Name for the page title";
+$wb["reseller_can_use_options_txt"] = "Reseller can use the option-tab for websites";
+$wb["custom_login_text_txt"] = "Custom Text on Login-Page";
+$wb["custom_login_link_txt"] = "Custom Link on Login-Page";
+$wb["login_link_error_regex"] = "Invalid Link for Custom Login";
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Active';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/es_system_config.lng b/es_system_config.lng
new file mode 100644
index 0000000000..7c4525da9a
--- /dev/null
+++ b/es_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['admin_dashlets_left_txt'] = 'Componentes del administrador a la izquierda';
+$wb['admin_dashlets_right_txt'] = 'Componentes del administrador a la derecha';
+$wb['admin_mail_txt'] = 'Correo del administrador';
+$wb['admin_name_txt'] = 'Nombre del administrador';
+$wb['available_dashlets_note_txt'] = 'Componentes disponibles:';
+$wb['backups_include_into_web_quota_txt'] = 'Incluir archivos de copia de seguridad en la cuota web.';
+$wb['client_dashlets_left_txt'] = 'Componentes del cliente a la izquierda';
+$wb['client_dashlets_right_txt'] = 'Componentes del cliente a la derecha';
+$wb['client_username_web_check_disabled_txt'] = 'Desactivar la comprobación de la palabra \\"web\\" en los nombres de clientes.';
+$wb['company_name_txt'] = 'Nombre de la compañía para el título de la página';
+$wb['custom_login_link_txt'] = 'Enlace personalizado para la página de Inicio de Sesión';
+$wb['custom_login_text_txt'] = 'Texto personalizado para la página de Inicio de Sesión';
+$wb['customer_no_counter_txt'] = 'Contador de Nº. cliente';
+$wb['customer_no_start_txt'] = 'Valor de inicio de Nº. de cliente';
+$wb['customer_no_template_error_regex_txt'] = 'La plantilla Nº. de cliente contiene caracteres inválidos';
+$wb['customer_no_template_txt'] = 'Plantilla de Nº. de cliente';
+$wb['dashboard_atom_url_admin_txt'] = 'URL del feed atom en el panel (admin)';
+$wb['dashboard_atom_url_client_txt'] = 'URL del feed atom en el panel (cliente)';
+$wb['dashboard_atom_url_reseller_txt'] = 'URL del feed atom en el panel (revendedor)';
+$wb['dblist_phpmyadmin_link_txt'] = 'Vínculo a phpMyAdmin en la lista de bases de datos';
+$wb['dbname_prefix_error_regex'] = 'Carácter no permitido en el prefijo de nombre de base de datos.';
+$wb['dbname_prefix_txt'] = 'Prefijo del nombre de la base de datos';
+$wb['dbuser_prefix_error_regex'] = 'Carácter no permitido en el nombre del usuario de la base datos.';
+$wb['dbuser_prefix_txt'] = 'Prefijo del usuario de la base de datos';
+$wb['default_dbserver_txt'] = 'Servidor de bases de datos por defecto';
+$wb['default_dnsserver_txt'] = 'Servidor DNS por defecto';
+$wb['default_mailserver_txt'] = 'Servidor de correo por defecto';
+$wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundario por defecto';
+$wb['default_webserver_txt'] = 'Servidor web por defecto';
+$wb['enable_custom_login_txt'] = 'Permitir nombre de inicio de sesión personalizado';
+$wb['f5_to_reload_js_txt'] = 'Si modifica esto, deberá pulsar F5 para que el explorador cargue las librerías JavaScript o incluso necesitará borrar la caché de su explorador.';
+$wb['ftpuser_prefix_error_regex'] = 'Carácter no permitido en el prefijo de usuario de FTP.';
+$wb['ftpuser_prefix_txt'] = 'Prefijo del usuario de FTP';
+$wb['login_link_error_regex'] = 'Enlace incorrecto para el inicio de sesión personalizado';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Mostrar la pestaña del auto-respondedor en los detalles de la cuenta de correo';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Mostrar la pestaña filtro de correo personalizado en los detalles de la cuenta de correo';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Mostrar la pestaña filtro de correo en los detalles de la cuenta de correo';
+$wb['mailboxlist_webmail_link_txt'] = 'Vinculo a correo web en la lista de buzones de correo';
+$wb['mailmailinglist_link_txt'] = 'Vínculo a la lista de correos en la lista de la Lista de correos';
+$wb['mailmailinglist_url_txt'] = 'URL a la lista de correos';
+$wb['maintenance_mode_txt'] = 'Modo de mantenimiento';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['min_password_length_txt'] = 'Longitud mínima de la contraseña';
+$wb['min_password_strength_txt'] = 'Fortaleza mínima de la contraseña';
+$wb['monitor_key_txt'] = 'Palabra clave del Monitor';
+$wb['new_domain_txt'] = 'HTML para la creación de nuevos dominios';
+$wb['No'] = 'No';
+$wb['phpmyadmin_url_error_regex'] = 'URL inválida a phpMyAdmin';
+$wb['phpmyadmin_url_note_txt'] = 'Marcador de posición:';
+$wb['phpmyadmin_url_txt'] = 'Enlace a phpMyAdmin';
+$wb['reseller_can_use_options_txt'] = 'El revendedor puede utilizar la pestaña opciones para los sitios webs';
+$wb['reseller_dashlets_left_txt'] = 'Componentes de revendedores a la izquierda';
+$wb['reseller_dashlets_right_txt'] = 'Componentes de revendedores a la derecha';
+$wb['session_allow_endless_txt'] = 'Habilitar \\"mantenerme conectado\\"';
+$wb['session_timeout_txt'] = 'Tiempo límite de sesión (minutos)';
+$wb['shelluser_prefix_error_regex'] = 'Carácter no permitido en el prefijo de usuario del shell.';
+$wb['shelluser_prefix_txt'] = 'Prefijo del usuario del Shell';
+$wb['smtp_crypt_txt'] = 'Usar conexión encriptada SSL/TLS para el SMTP';
+$wb['smtp_enabled_txt'] = 'Usar SMTP para enviar correos del sistema';
+$wb['smtp_host_txt'] = 'Host del SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Por favor ingrese el nombre y correo del admin si desea usar el envío de correo mediante SMTP.';
+$wb['smtp_pass_txt'] = 'Contraseña del SMTP';
+$wb['smtp_port_txt'] = 'Puerto del SMTP';
+$wb['smtp_user_txt'] = 'Usuario del SMTP';
+$wb['system_config_desc_txt'] = '';
+$wb['tab_change_discard_txt'] = 'Descartar cambios al cambiar de pestaña';
+$wb['tab_change_warning_note_txt'] = 'Mostrar advertencia al cambiar de pestaña en los formularios de edición si se ha cambiado algún parámetro.';
+$wb['tab_change_warning_txt'] = 'Advertencia al cambiar de pestaña';
+$wb['use_combobox_txt'] = 'Usar lista desplegable de jQuery UI';
+$wb['use_domain_module_hint'] = 'Si utiliza los límites de dominio, sus clientes solo podrán seleccionar los dominios que el administrador haya creado para ellos. Los clientes no podrán editar libremente en campo de dominio. Necesitará reiniciar la sesión después de modificar esta opción para que que los cambios surjan efecto.';
+$wb['use_domain_module_txt'] = 'Usar los límites de dominio en el modulo del cliente para agregar nuevos dominios';
+$wb['use_loadindicator_txt'] = 'Usar indicador de carga';
+$wb['vhost_aliasdomains_note_txt'] = 'No puede deshabilitar esto mientras existan host virtuales de alias de dominios en el sistema';
+$wb['vhost_aliasdomains_txt'] = 'Crear alias de dominios como sitios web';
+$wb['vhost_subdomains_note_txt'] = '¡No se puede desactivar esta opción mientras existan sub-dominios con host virtuales en el sistema!';
+$wb['vhost_subdomains_txt'] = 'Crear sub-dominio como sitio web';
+$wb['warning'] = '¡Edite estos valores cuidadosamente! No elimine los prefijos si el sistema contiene más de un cliente.';
+$wb['webdavuser_prefix_error_regex'] = 'Carácter no permitido en el prefijo del usuario de webdav.';
+$wb['webdavuser_prefix_txt'] = 'Prefijo del usuario de Webdav';
+$wb['webftp_url_txt'] = 'Enlace al cliente FTP por web';
+$wb['webmail_url_error_regex'] = 'Dirección del correo web inválida';
+$wb['webmail_url_note_txt'] = 'Marcador de posición:';
+$wb['webmail_url_txt'] = 'URL de correo web';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/fi_system_config.lng b/fi_system_config.lng
new file mode 100644
index 0000000000..2cafa6f5bf
--- /dev/null
+++ b/fi_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Muokkaa näitä arvoja varoen! Älä poista etuliitteitä jos järjestelmässä on enemmän kuin yksi asiakas.';
+$wb['dbname_prefix_txt'] = 'Tietokannan nimen etuliite';
+$wb['dbuser_prefix_txt'] = 'Tietokannan käyttäjätunnuksen etuliite';
+$wb['shelluser_prefix_txt'] = 'Shell-käyttäjätunnuksen etuliite';
+$wb['ftpuser_prefix_txt'] = 'FTP-käyttäjätunnuksen etuliite';
+$wb['dbname_prefix_error_regex'] = 'Tietokannan nimen etuliite on vääränlainen.';
+$wb['dbuser_prefix_error_regex'] = 'Tietokannan käyttäjätunnuksen etuliite on vääränlainen.';
+$wb['ftpuser_prefix_error_regex'] = 'FTP-käyttäjätunnuksen etuliite on vääränlainen.';
+$wb['shelluser_prefix_error_regex'] = 'Shell-käyttäjätunnuksen etuliite on vääränlainen.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Linkki phpMyAdminiin tietokantalistassa';
+$wb['mailboxlist_webmail_link_txt'] = 'Linkki internetpostiin postilaatikkolistassa';
+$wb['webmail_url_txt'] = 'Webmail-osoite';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin-osoite';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/fr_system_config.lng b/fr_system_config.lng
new file mode 100644
index 0000000000..3b6fe68521
--- /dev/null
+++ b/fr_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['dashboard_atom_url_admin_txt'] = 'URL du fil de syndication Atom du tableau de bord (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'URL du fil de syndication Atom du tableau de bord ( reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'URL du fil de syndication Atom du tableau de bord (client)';
+$wb['warning'] = 'Editez ces valeurs prudemment ! Il n’est pas conseillé de modifier les préfixes lorsque vous avez des clients !';
+$wb['dbname_prefix_txt'] = 'Préfixe du nom de la BDd';
+$wb['dbuser_prefix_txt'] = 'Préfixe de l’utilisateur de la BDd';
+$wb['shelluser_prefix_txt'] = 'Préfixe de l’utilisateur Shell';
+$wb['webdavuser_prefix_txt'] = 'Préfixe de l’utilisateur WebDAV';
+$wb['ftpuser_prefix_txt'] = 'Préfixe de l’utilisateur FTP';
+$wb['dbname_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe du nom de la BDD.';
+$wb['dbuser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe de l’utilisateur de la BDD.';
+$wb['ftpuser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe de l’utilisateur FTP.';
+$wb['shelluser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe de l’utilisateur Shell.';
+$wb['webdavuser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe utilisateur WebDAV.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Lien vers PHPMyAdmin dans la liste des bases';
+$wb['enable_custom_login_txt'] = 'Autoriser les noms d’utilisateurs personnalisés';
+$wb['mailboxlist_webmail_link_txt'] = 'Lien vers le Webmail dans la liste des boîtes mail';
+$wb['webmail_url_txt'] = 'URL du Webmail';
+$wb['mailmailinglist_link_txt'] = 'Lien vers la mailing list dans la liste des Liste de distribution';
+$wb['mailmailinglist_url_txt'] = 'URL des Liste de distribution';
+$wb['phpmyadmin_url_txt'] = 'URL de PHPMyAdmin';
+$wb['use_domain_module_txt'] = 'Utiliser le module de domaine pour ajouter de nouveaux domaines';
+$wb['use_domain_module_hint'] = 'Si vous utilisez ce module, vos utilisateurs peuvent uniquement sélectionner un des domaines que l’admin crée pour eux. Ils ne peuvent pas éditer librement le champ domaine. Vous devez vous identifier à nouveau après avoir modifié cette valeur pour rendre les modifications visibles.';
+$wb['new_domain_txt'] = 'HTML pour créer un nouveau domaine';
+$wb['webftp_url_txt'] = 'URL du WebFTP';
+$wb['admin_mail_txt'] = 'E-mail de l’administrateur';
+$wb['monitor_key_txt'] = 'Mot-clé du moniteur';
+$wb['admin_name_txt'] = 'Nom des administrateurs';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create Subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word ’web’.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/hr_system_config.lng b/hr_system_config.lng
new file mode 100644
index 0000000000..66931524ec
--- /dev/null
+++ b/hr_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Oprezno mijenjajte prefikse i postavke! Nemojte brisati prefikse na sistemima gdje postoji više od jednog klijenata.';
+$wb['dbname_prefix_txt'] = 'Prefiks nazivu baze';
+$wb['dbuser_prefix_txt'] = 'Prefiks nazivu korisnika baze';
+$wb['shelluser_prefix_txt'] = 'Prefiks Shell računu';
+$wb['webdavuser_prefix_txt'] = 'Prefix Webdav računu';
+$wb['ftpuser_prefix_txt'] = 'Prefiks FTP računu';
+$wb['dbname_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu naziva baze.';
+$wb['dbuser_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu naziva korisnika baze.';
+$wb['ftpuser_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu FTP računa.';
+$wb['shelluser_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu Shell računa.';
+$wb['webdavuser_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu webdav računa.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link za phpmyadmin u DB listi';
+$wb['mailboxlist_webmail_link_txt'] = 'Link za webmail u Mailbox listi';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Koristi modul Domene za dodavanje novih domena';
+$wb['use_domain_module_hint'] = 'Ukoliko koristite ovaj modul, vaši klijenti mogu izabrati samo domenu koju im je admin kreirao. Klijenti ne mogu slobodno mijenjati postavke domene. Morate se ponovno logirati nakon mijenjanja ove postavke da bi promjene bile vidljive.';
+$wb['new_domain_txt'] = 'HTML za kreiranje nove domene';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['monitor_key_txt'] = 'Monitoriranje riječi';
+$wb['dashboard_atom_url_admin_txt'] = 'RSS URL za početnu stranicu (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'RSS URL za početnu stranicu (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'RSS URL za početnu stranicu (client)';
+$wb['enable_custom_login_txt'] = 'Dozvoli izbor korisničkog imena';
+$wb['mailmailinglist_link_txt'] = 'Link na mailing listu u Mailing listi';
+$wb['mailmailinglist_url_txt'] = 'URL mailing liste';
+$wb['admin_mail_txt'] = 'e-mail administratora';
+$wb['admin_name_txt'] = 'Ime administratora';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/hu_system_config.lng b/hu_system_config.lng
new file mode 100644
index 0000000000..6e1f97dfbb
--- /dev/null
+++ b/hu_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one Ügyfél.';
+$wb['dbname_prefix_txt'] = 'Database name prefix';
+$wb['dbuser_prefix_txt'] = 'Database user prefix';
+$wb['shelluser_prefix_txt'] = 'Shell user prefix';
+$wb['ftpuser_prefix_txt'] = 'FTP user prefix';
+$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
+$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
+$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
+$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
+$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/id_system_config.lng b/id_system_config.lng
new file mode 100644
index 0000000000..9072d62832
--- /dev/null
+++ b/id_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Sunting nilai-nilai ini dengan hati-hati! Jangan hapus prefiks di sistem yang memiliki lebih dari 1 klien.';
+$wb['dbname_prefix_txt'] = 'Prefiks nama database';
+$wb['dbuser_prefix_txt'] = 'Prefiks pengguna database';
+$wb['shelluser_prefix_txt'] = 'Prefiks pengguna shell';
+$wb['ftpuser_prefix_txt'] = 'Prefiks pengguna FTP';
+$wb['dbname_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks nama database.';
+$wb['dbuser_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks pengguna database.';
+$wb['ftpuser_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks pengguna ftp.';
+$wb['shelluser_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks pengguna shell.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Tautan ke phpmyadmin di daftar DB';
+$wb['mailboxlist_webmail_link_txt'] = 'Tautan ke webmail di daftar Mailbox';
+$wb['webmail_url_txt'] = 'URL Webmail';
+$wb['phpmyadmin_url_txt'] = 'URL PHPMyAdmin';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Prefiks pengguna Webdav';
+$wb['webdavuser_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks pengguna webdav.';
+$wb['use_domain_module_txt'] = 'Gunakan modul domain untuk menambahkan domain baru';
+$wb['use_domain_module_hint'] = 'Jika Anda menggunakan modul ini, pelanggan Anda hanya dapat memilih salah satu domain yang dibuat oleh admin untuk mereka. Mereka tidak bisa menyunting dengan bebas kolom domain. Anda harus masuk kembali setelah mengubah nilai ini, agar perubahannya terlihat.';
+$wb['new_domain_txt'] = 'HTML untuk membuat domain baru';
+$wb['webftp_url_txt'] = 'URL WebFTP';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/it_system_config.lng b/it_system_config.lng
new file mode 100644
index 0000000000..42a03ed0b8
--- /dev/null
+++ b/it_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
+$wb['dbname_prefix_txt'] = 'Prefisso nome database';
+$wb['dbuser_prefix_txt'] = 'Prefisso utente database';
+$wb['shelluser_prefix_txt'] = 'Prefisso utente Shell';
+$wb['ftpuser_prefix_txt'] = 'Prefisso utente FTP';
+$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
+$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
+$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
+$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
+$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Crea  Subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/ja_system_config.lng b/ja_system_config.lng
new file mode 100644
index 0000000000..dfea52b18d
--- /dev/null
+++ b/ja_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = '値の変更には細心の注意を払ってください。クライアントが利用中のシステムのプリフィックスは削除しないでください。';
+$wb['dbname_prefix_txt'] = 'データベース名のプリフィックス';
+$wb['dbuser_prefix_txt'] = 'データベースユーザー名のプリフィックス';
+$wb['shelluser_prefix_txt'] = 'Shellユーザー名のプリフィックス';
+$wb['ftpuser_prefix_txt'] = 'FTPユーザー名のプリフィックス';
+$wb['dbname_prefix_error_regex'] = 'データベースのプリフィックスとして不正な値が指定されています。';
+$wb['dbuser_prefix_error_regex'] = 'データベースユーザーのプリフィックスとして不正な値が指定されています。';
+$wb['ftpuser_prefix_error_regex'] = 'FTPユーザーのプリフィックスとして不正な値が指定されています。';
+$wb['shelluser_prefix_error_regex'] = 'Shellユーザーのプリフィックスとして不正な値が指定されています。';
+$wb['dblist_phpmyadmin_link_txt'] = 'データベースの一覧から phpmyadmin へリンクする';
+$wb['mailboxlist_webmail_link_txt'] = 'メールボックスの一覧から webmail へリンクする';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/nl_system_config.lng b/nl_system_config.lng
new file mode 100644
index 0000000000..358edde69b
--- /dev/null
+++ b/nl_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['warning'] = 'Edit these values carefully! Verwijder de voorvoegsels niet op systemen met meer dan ♪één klant.';
+$wb['dbname_prefix_txt'] = 'Database naam voorvoegsel';
+$wb['dbuser_prefix_txt'] = 'Database gebruiker voorvoegsel';
+$wb['shelluser_prefix_txt'] = 'Shell gebruiker voorvoegsel';
+$wb['webdavuser_prefix_txt'] = 'Webdav gebruiker voorvoegsel';
+$wb['ftpuser_prefix_txt'] = 'FTP gebruiker voorvoegsel';
+$wb['dbname_prefix_error_regex'] = 'Char niet toegestaan in database naam voorvoegsel.';
+$wb['dbuser_prefix_error_regex'] = 'Char niet toegestaan in database gebruiker voorvoegsel.';
+$wb['ftpuser_prefix_error_regex'] = 'Char niet toegestaan in ftp gebruiker voorvoegsel.';
+$wb['shelluser_prefix_error_regex'] = 'Char niet toegestaan in shell gebruiker voorvoegsel.';
+$wb['webdavuser_prefix_error_regex'] = 'Char niet toegestaan in webdav gebruiker voorvoegsel.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link naar phpmyadmin in DB lijst';
+$wb['mailboxlist_webmail_link_txt'] = 'Link naar webmail in Mailbox lijst';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Gebruik de domein-module om nieuwe domeinen toe te voegen';
+$wb['use_domain_module_hint'] = 'Als u deze module gebruikt, kunnen uw klanten alleen de domeinen selecteren die de administrator heeft aangemaakt. klanten kunnen het domein-veld zelf niet wijzigen. Na opnieuw ingelogd te zijn zullen de wijzigingen zichtbaar zijn.';
+$wb['new_domain_txt'] = 'HTML om een nieuw domein te maken';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/pl_system_config.lng b/pl_system_config.lng
new file mode 100644
index 0000000000..d309ab812f
--- /dev/null
+++ b/pl_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['warning'] = 'Edytuj te wartości ostrożnie! Nie usuwaj prefiksów w systemie w więcej niż jednym kliencie.';
+$wb['dbname_prefix_txt'] = 'Prefiks nazwy bazy danych';
+$wb['dbuser_prefix_txt'] = 'Prefiks użytkownika bazy danych';
+$wb['shelluser_prefix_txt'] = 'Prefiks użytkownika shell';
+$wb['ftpuser_prefix_txt'] = 'Prefiks użytkownika FTP';
+$wb['dbname_prefix_error_regex'] = 'Znak nie jest dozwolony w prefiksie nazwy bazy danych.';
+$wb['dbuser_prefix_error_regex'] = 'Znak nie jest dozwolony w prefiksie nazwy użytkownika bazy danych.';
+$wb['ftpuser_prefix_error_regex'] = 'Znak nie jest dozwolony w prefiksie nazwy użytkownika ftp.';
+$wb['shelluser_prefix_error_regex'] = 'Znak nie jest dozwolony w prefiksie nazwy użytkownika shell.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Adres do phpMyAdmin w liście baz danych';
+$wb['mailboxlist_webmail_link_txt'] = 'Adres do poczty e-mail w liście skrzynek pocztowych';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Użyj modułu Domeny do dodawania nowych domen';
+$wb['use_domain_module_hint'] = 'Jeżeli użyjesz tego modułu, Twoi użytkownicy będą mogli użyć tylko domeny stworzonej im przez administratora. Nie mogą edytować wpisów domeny. Musisz przelogować się po zmianie tej wartości, aby zobaczyć widoczne rezultaty.';
+$wb['new_domain_txt'] = 'HTML do stworzenia nowej domeny';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Prefiks użytkownika webdav';
+$wb['webdavuser_prefix_error_regex'] = 'Niedozwolony znak w prefiksie użytkownika webdav.';
+$wb['webftp_url_txt'] = 'Link do WebFTP';
+$wb['enable_custom_login_txt'] = 'Zezwalaj na dowolnÄ… nazwÄ™ loginu';
+$wb['mailmailinglist_link_txt'] = 'Link do listy mailingowej na liście list mailingowych';
+$wb['mailmailinglist_url_txt'] = 'URL listy mailingowej';
+$wb['admin_mail_txt'] = 'E-Mail administratora';
+$wb['monitor_key_txt'] = 'Klucz monitora';
+$wb['admin_name_txt'] = 'Nazwa administratora';
+$wb['system_config_desc_txt'] = '';
+$wb['smtp_missing_admin_mail_txt'] = 'Podaj nazwę administratora oraz adres email jeżeli chcesz użyć wysyłanie maili przez SMTP.';
+$wb['tab_change_discard_txt'] = 'Porzuć zmiany przy zmianie zakładki';
+$wb['tab_change_warning_txt'] = 'Ostrzegaj przy zmianie zakładki';
+$wb['tab_change_warning_note_txt'] = 'Pokaż ostrzeżenie przy zmianie zakładki jeżeli zostały zmienione dane przez użytkownika.';
+$wb['vhost_subdomains_txt'] = 'Twórz subdomeny jako strony web';
+$wb['vhost_subdomains_note_txt'] = 'Nie możesz wyłączyć tego tak długo jak istnieją w systemie vhosty subdomen.';
+$wb['vhost_aliasdomains_txt'] = 'Twórz aliasdomeny jako strony web';
+$wb['vhost_aliasdomains_note_txt'] = 'Nie możesz wyłączyć tego tak długo jak istnieją w systemie vhosty aliasdomen.';
+$wb['maintenance_mode_txt'] = 'Tryb serwisowy';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Używaj SMTP do wysyłania powiadomień systemowych';
+$wb['smtp_host_txt'] = 'Host SMTP';
+$wb['smtp_port_txt'] = 'Port SMTP';
+$wb['smtp_user_txt'] = 'Użytkownik SMTP';
+$wb['smtp_pass_txt'] = 'Hasło SMTP';
+$wb['smtp_crypt_txt'] = 'Użyj połączenia szyfrowanego SSL/TLS dla SMTP';
+$wb['phpmyadmin_url_error_regex'] = 'Nieprawidłowy link do phpmyadmin';
+$wb['use_combobox_txt'] = 'Użyj jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Użyj wskaźnika ładowania';
+$wb['f5_to_reload_js_txt'] = 'Jeżeli zmienisz to, możesz potrzebować wcisnąć F5 lub wyczyścić cache aby przeglądarka przeładowała biblioteki JavaScript.';
+$wb['client_username_web_check_disabled_txt'] = 'Wyłącz sprawdzanie nazwy klienta w poszukiwaniu słowa -web-.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Pokaż zakładkę autorespondera w szczegółach konta email.';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Pokaż zakładkę filtra email w szczegółach konta email.';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Pokaż zakładkę własnych filtrów email w szczegółach konta email.';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/pt_system_config.lng b/pt_system_config.lng
new file mode 100644
index 0000000000..05edb306d9
--- /dev/null
+++ b/pt_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Edite estes valores com cuidado! Não remova os prefixos em um sistema com mais de um cliente!!';
+$wb['dbname_prefix_txt'] = 'Prefixo Nome da Base de Dados';
+$wb['dbuser_prefix_txt'] = 'Prefixo Utilizador da Base de Dados';
+$wb['shelluser_prefix_txt'] = 'Prefixo Utilizador de Shell';
+$wb['ftpuser_prefix_txt'] = 'Prefixo Utilizador FTP';
+$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo do nome da Base de Dados!';
+$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Utilizador da Base de Dados!';
+$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Utilizador FTP!';
+$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Utilizador Shell!';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link para phpmyadmin';
+$wb['mailboxlist_webmail_link_txt'] = 'Link para o webmail';
+$wb['webmail_url_txt'] = 'URL do Webmail';
+$wb['phpmyadmin_url_txt'] = 'URL do PHPMyAdmin';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/ro_system_config.lng b/ro_system_config.lng
new file mode 100644
index 0000000000..33ee2b4bde
--- /dev/null
+++ b/ro_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
+$wb['dbname_prefix_txt'] = 'Database name prefix';
+$wb['dbuser_prefix_txt'] = 'Database user prefix';
+$wb['shelluser_prefix_txt'] = 'Shell user prefix';
+$wb['ftpuser_prefix_txt'] = 'FTP user prefix';
+$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
+$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
+$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
+$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
+$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/ru_system_config.lng b/ru_system_config.lng
new file mode 100644
index 0000000000..62c856fae0
--- /dev/null
+++ b/ru_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = 'Настройка параметров по умолчанию';
+$wb['warning'] = 'Изменяйте эти значения аккуратно! Не удаляйте префиксы на системах где более одного пользователя.';
+$wb['dbname_prefix_txt'] = 'Префикс базы данных';
+$wb['dbuser_prefix_txt'] = 'Префикс пользователя базы данных';
+$wb['shelluser_prefix_txt'] = 'Префикс shell-пользователя';
+$wb['ftpuser_prefix_txt'] = 'Префикс FTP пользователя';
+$wb['dbname_prefix_error_regex'] = 'Некорректный символ в префиксе базы данных';
+$wb['dbuser_prefix_error_regex'] = 'Некорректный символ в префиксе пользователя базы данных';
+$wb['ftpuser_prefix_error_regex'] = 'Некорректный символ в префиксе FTP пользователя';
+$wb['shelluser_prefix_error_regex'] = 'Некорректный символ в префиксе shell-пользователя';
+$wb['dblist_phpmyadmin_link_txt'] = 'Ссылка на phpmyadmin в списке баз данных';
+$wb['mailboxlist_webmail_link_txt'] = 'Ссылка на веб-почту в списке почтовых ящиков';
+$wb['webmail_url_txt'] = 'URL веб-почты';
+$wb['phpmyadmin_url_txt'] = 'URL PHPMyAdmin';
+$wb['use_domain_module_txt'] = 'Использовать модуль домена, чтобы добавить новые домены';
+$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \\"домен\\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
+$wb['new_domain_txt'] = 'HTML текст, чтобы создать новый домен';
+$wb['webdavuser_prefix_txt'] = 'Префикс пользователя WebDAV';
+$wb['webdavuser_prefix_error_regex'] = 'Некорректный символ в префиксе пользователя WebDAV.';
+$wb['webftp_url_txt'] = 'URL WebFTP';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['enable_custom_login_txt'] = 'Разрешить пользовательское имя входа в систему';
+$wb['mailmailinglist_link_txt'] = 'Ссылка на почтовую рассылку в списке рассылок';
+$wb['mailmailinglist_url_txt'] = 'URL почтовой рассылки';
+$wb['admin_mail_txt'] = 'E-mail администратора';
+$wb['admin_name_txt'] = 'Имя администратора';
+$wb['maintenance_mode_txt'] = 'Режим технического бслуживания';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Использовать SMTP для отправки системных сообщений';
+$wb['smtp_host_txt'] = 'Хост SMTP';
+$wb['smtp_port_txt'] = 'Порт SMTP';
+$wb['smtp_user_txt'] = 'Пользователь SMTP';
+$wb['smtp_pass_txt'] = 'Пароль SMTP';
+$wb['smtp_crypt_txt'] = 'Использовать SSL/TLS-шифрование соединения для SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Пожалуйста, введите имя администратора и адрес эл. почты администратора, если вы хотите использовать SMTP для отправки почты.';
+$wb['tab_change_discard_txt'] = 'Откатить изменения на вкладке изменить';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Показать предупреждение об изменении вкладки в формах редактирования, если какие-либо данные были изменены пользователем.';
+$wb['vhost_subdomains_txt'] = 'Создать поддомен как веб-сайт';
+$wb['vhost_subdomains_note_txt'] = 'Этот параметр не может быть отключен пока поскольку существует виртуальный хост поддоменов в системе!';
+$wb['vhost_aliasdomains_txt'] = 'Создать алиас доменов как веб-сайт';
+$wb['vhost_aliasdomains_note_txt'] = 'Этот параметр не может быть отключен пока поскольку существует виртуальный хост алиасов доменов в системе!';
+$wb['phpmyadmin_url_error_regex'] = 'Некорректный URL phpmyadmin';
+$wb['use_combobox_txt'] = 'Использовать jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Использовать индикатор загрузки';
+$wb['f5_to_reload_js_txt'] = 'Если вы измените это, вам, возможно, придется нажать F5, чтобы перезагрузить в браузере JavaScript-библиотеи или очистить кэш браузера.';
+$wb['client_username_web_check_disabled_txt'] = 'Отключить проверку логина клиента для слова \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Включить резервное копирование файлов в веб-квоту.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Показывать вкладку автоответчика в деталях учетной записи электронной почты';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Показывать вкладку почтового фильтра в деталях учетной записи электронной почты';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Показывать вкладку пользовательского почтового фильтра в деталях учетной записи электронной почты';
+$wb['webmail_url_error_regex'] = 'Некорректный URL веб-почты';
+$wb['phpmyadmin_url_note_txt'] = 'Заменитель:';
+$wb['webmail_url_note_txt'] = 'Заменитель:';
+$wb['available_dashlets_note_txt'] = 'Доступные дашлеты:';
+$wb['admin_dashlets_left_txt'] = 'Дашлеты Админа слева';
+$wb['admin_dashlets_right_txt'] = 'Дашлеты Админа справа';
+$wb['reseller_dashlets_left_txt'] = 'Дашлеты Реселлера слева';
+$wb['reseller_dashlets_right_txt'] = 'Дашлеты Реселлера справа';
+$wb['client_dashlets_left_txt'] = 'Дашлеты Клиента слева';
+$wb['client_dashlets_right_txt'] = 'Дашлеты Клиента справа';
+$wb['customer_no_template_txt'] = 'Шаблон номера Клиента';
+$wb['customer_no_template_error_regex_txt'] = 'Шаблон номера Клиента содержит недопустимые символы.';
+$wb['customer_no_start_txt'] = 'Начальное значение номера Клиента';
+$wb['customer_no_counter_txt'] = 'Счётчик номера Клиента';
+$wb['session_timeout_txt'] = 'Тайм-аут сессии (в минутах)';
+$wb['session_allow_endless_txt'] = 'Включить \\"оставаться в системе\\"';
+$wb['No'] = 'Нет';
+$wb['min_password_length_txt'] = 'Минимальная длина пароля';
+$wb['min_password_strength_txt'] = 'Минимальная стойкость пароля';
+$wb['company_name_txt'] = 'Название компании для заголовка страницы';
+$wb['reseller_can_use_options_txt'] = 'Реселлер может использовать вкладку Параметры для веб-сайтов';
+$wb['custom_login_text_txt'] = 'Пользовательский текст на странице входа';
+$wb['custom_login_link_txt'] = 'Пользовательская ссылка на страницу входа';
+$wb['login_link_error_regex'] = 'Некорректная ссылка для пользовательского входа';
+$wb['default_mailserver_txt'] = 'Почтовый сервер по умолчанию';
+$wb['default_webserver_txt'] = 'Web-сервер по умолчанию';
+$wb['default_dnsserver_txt'] = 'DNS-сервер по умолчанию';
+$wb['default_slave_dnsserver_txt'] = 'Вторичный DNS-сервер по умолчанию';
+$wb['default_dbserver_txt'] = 'Сервер базы данных по умолчанию';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/se_system_config.lng b/se_system_config.lng
new file mode 100644
index 0000000000..bf0ec4942d
--- /dev/null
+++ b/se_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Redigera dess värden försiktigt! Ta inte bort prefix på system med mer än en kund.';
+$wb['dbname_prefix_txt'] = 'Prefix för databasnamn';
+$wb['dbuser_prefix_txt'] = 'Prefix för databasanvändare';
+$wb['shelluser_prefix_txt'] = 'Prefix för shell-användare';
+$wb['ftpuser_prefix_txt'] = 'Prefix för FTP-användare';
+$wb['dbname_prefix_error_regex'] = 'Otillåtet tecken i prefix för databasnamn.';
+$wb['dbuser_prefix_error_regex'] = 'Otillåtet tecken i prefix för databasanvändare.';
+$wb['ftpuser_prefix_error_regex'] = 'Otillåtet tecken i prefix för FTP-användare.';
+$wb['shelluser_prefix_error_regex'] = 'Otillåtet tecken i prefix för shell-användare.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Länka till PHPMyAdmin i databaslista';
+$wb['mailboxlist_webmail_link_txt'] = 'Länka till webbmail i epostkontolista';
+$wb['webmail_url_txt'] = 'Webbmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = 'Används domänmodul för att lägga till nya domäner';
+$wb['use_domain_module_hint'] = 'Om du använder denna modul kommer kunder endast kunna välja bland de domäner administratören har tilldelat dem, de kan alltså inte lägga till vilken domän som helst. Du måste logga in på nytt innan dessa ändringar blir synliga.';
+$wb['new_domain_txt'] = 'HTML vid skapande av nya domäner';
+$wb['dashboard_atom_url_admin_txt'] = 'Kontrolpanelens nyhetsflöde URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Kontrolpanelens nyhetsflöde URL (återförsäljare)';
+$wb['dashboard_atom_url_client_txt'] = 'Kontrolpanelens nyhetsflöde URL (kund)';
+$wb['webdavuser_prefix_txt'] = 'Prefix för WebDAV-användare';
+$wb['webdavuser_prefix_error_regex'] = 'Otillåtet tecken i prefix för WebDAV-användare';
+$wb['webftp_url_txt'] = 'WebbFTP URL';
+$wb['enable_custom_login_txt'] = 'Tillåt valfritt inloggningsnamn';
+$wb['mailmailinglist_link_txt'] = 'Länka till epostlista i listan över epostlistor';
+$wb['mailmailinglist_url_txt'] = 'Adress till epostlista';
+$wb['admin_mail_txt'] = 'Administratörens epostadress';
+$wb['monitor_key_txt'] = 'Bevakning nyckelord';
+$wb['admin_name_txt'] = 'Administratörens namn';
+$wb['maintenance_mode_txt'] = 'Underhållsläge';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Använd SMTP för att skicka systemmail';
+$wb['smtp_host_txt'] = 'SMTP-värd';
+$wb['smtp_port_txt'] = 'SMTP-port';
+$wb['smtp_user_txt'] = 'SMTP-användare';
+$wb['smtp_pass_txt'] = 'SMTP-lösenord';
+$wb['smtp_crypt_txt'] = 'Använd SSL/TLS-krypterad anslutning för SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Kasta ändringar vid byte av flik';
+$wb['tab_change_warning_txt'] = 'Varning vid byte av flik';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['vhost_subdomains_txt'] = 'Skapa underdomäner som en egen sajt';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Ogiltig adress till PHPMyAdmin';
+$wb['use_combobox_txt'] = 'Använd jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Använd laddningsindikator';
+$wb['f5_to_reload_js_txt'] = 'Om du ändrar detta kan du behöva trycka F5 för att ladda om javascript, eller rensa din webbläsarcache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Visa autosvarsfliken vid detaljerna för epostkonto';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Visa epostfilterfliken vid detaljerna för epostkonto';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Kundnummermall';
+$wb['customer_no_template_error_regex_txt'] = 'Kundnummermallen innehåller otillåtna tecken';
+$wb['customer_no_start_txt'] = 'Kundnummer startvärde';
+$wb['customer_no_counter_txt'] = 'Kundnummer räknare';
+$wb['session_timeout_txt'] = 'Session timeout (minuter)';
+$wb['session_allow_endless_txt'] = 'Aktivera \\"håll mig inloggad\\"';
+$wb['No'] = 'Nej';
+$wb['min_password_length_txt'] = 'Minsta lösenordslängd';
+$wb['min_password_strength_txt'] = 'Minsta lösenordsstyrka';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/sk_system_config.lng b/sk_system_config.lng
new file mode 100644
index 0000000000..b6bbe102dd
--- /dev/null
+++ b/sk_system_config.lng
@@ -0,0 +1,96 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['warning'] = 'Upravte tieto hodnoty pozorne! Neodstraňujte predpony na systémoch s viac ako jedného klienta.';
+$wb['dbname_prefix_txt'] = 'Predpona názvu databázy ';
+$wb['dbuser_prefix_txt'] = 'Predpona databáza užívateľa';
+$wb['shelluser_prefix_txt'] = 'Predpona Shell užívateľa';
+$wb['ftpuser_prefix_txt'] = 'Predpona FTP užívateľ';
+$wb['dbname_prefix_error_regex'] = 'Char nie je povolený v prefix názov databázy.';
+$wb['dbuser_prefix_error_regex'] = 'Char nie je povolené v databáze predpone user.';
+$wb['ftpuser_prefix_error_regex'] = 'Char nie je povolené v ftp užívateľ predpone .';
+$wb['shelluser_prefix_error_regex'] = 'Char nie je povolené Shell užívateľ predpone .';
+$wb['dblist_phpmyadmin_link_txt'] = 'Odkaz na phpmyadmin v DB zozname';
+$wb['mailboxlist_webmail_link_txt'] = 'Odkaz na webmail v zozname schránok';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
+$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
+$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
+$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
+$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They cannot free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
+$wb['new_domain_txt'] = 'HTML to create a new domain';
+$wb['webftp_url_txt'] = 'WebFTP URL';
+$wb['enable_custom_login_txt'] = 'Allow custom login name';
+$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
+$wb['admin_mail_txt'] = 'Administrators e-mail';
+$wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['admin_name_txt'] = 'Administrators name';
+$wb['maintenance_mode_txt'] = 'Maintenance Mode';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['smtp_host_txt'] = 'SMTP host';
+$wb['smtp_port_txt'] = 'SMTP port';
+$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_pass_txt'] = 'SMTP password';
+$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
+$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
+$wb['tab_change_warning_txt'] = 'Tab change warning';
+$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
+$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
+$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
+$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
+$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
+$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
+$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Use Load Indicator';
+$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
+$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
+$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
+$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
+$wb['webmail_url_note_txt'] = 'Placeholder:';
+$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
+$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
+$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
+$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
+$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
+$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
+$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'Minimum password length';
+$wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['company_name_txt'] = 'Company Name for the page title';
+$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
+$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
+$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['default_mailserver_txt'] = 'Default Mailserver';
+$wb['default_webserver_txt'] = 'Default Webserver';
+$wb['default_dnsserver_txt'] = 'Default DNS Server';
+$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
+$wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+?>
diff --git a/tr_system_config.lng b/tr_system_config.lng
new file mode 100644
index 0000000000..21a70bec4b
--- /dev/null
+++ b/tr_system_config.lng
@@ -0,0 +1,90 @@
+<?php
+$wb['system_config_title'] = 'System Config';
+$wb['system_config_desc_txt'] = '';
+$wb['smtp_missing_admin_mail_txt'] = 'SMTP e-posta gönderimini kullanmak için yönetici adı ve yönetici e-posta adresini yazmalısınız.';
+$wb['dashboard_atom_url_admin_txt'] = 'Panel Atom akışının İnternet adresi (yönetici)';
+$wb['dashboard_atom_url_reseller_txt'] = 'Panel Atom akışının İnternet adresi (bayi)';
+$wb['dashboard_atom_url_client_txt'] = 'Panel Atom akışının İnternet adresi (müşteri)';
+$wb['warning'] = 'Bu değerleri değiştirirken dikkatli olun! Sistemde birden fazla müşteri varsa, ön ekleri kaldırmayın.';
+$wb['tab_change_discard_txt'] = 'Sekme değiştirildiğinde değişiklikler yok sayılsın';
+$wb['tab_change_warning_txt'] = 'Sekme değiştirme uyarısı';
+$wb['tab_change_warning_note_txt'] = 'Formlardaki veriler düzenlenirken, kullanıcı bir değişiklik yapmışsa sekme değiştirilmek istendiğinde bir uyarı görüntülenir.';
+$wb['dbname_prefix_txt'] = 'Veritabanı adı ön eki';
+$wb['dbuser_prefix_txt'] = 'Veritabanı kullanıcısı ön eki';
+$wb['shelluser_prefix_txt'] = 'Kabuk kullanıcısı ön eki';
+$wb['webdavuser_prefix_txt'] = 'Webdav kullanıcısı ön eki';
+$wb['ftpuser_prefix_txt'] = 'FTP kullanıcısı ön eki';
+$wb['vhost_subdomains_txt'] = 'Etki alanları web sitesi şeklinde oluşturulsun';
+$wb['vhost_subdomains_note_txt'] = 'Sistemde sanal sunucu alt etki alanları varken bu seçenek devre dışı bırakılamaz!';
+$wb['vhost_aliasdomains_txt'] = 'Takma etki alanı web sitesi olarak eklensin';
+$wb['vhost_aliasdomains_note_txt'] = 'Sistemde sanal sunucu takma etki alanları varken bu seçenek devre dışı bırakılamaz!';
+$wb['dbname_prefix_error_regex'] = 'Veritabanı adı ön ekinde izin verilmeyen karakterler var';
+$wb['dbuser_prefix_error_regex'] = 'Veritabanı kullanıcısı ön ekinde izin verilmeyen karakterler var';
+$wb['ftpuser_prefix_error_regex'] = 'FTP kullanıcısı ön ekinde izin verilmeyen karakterler var';
+$wb['shelluser_prefix_error_regex'] = 'Kabuk kullanıcısı ön ekinde izin verilmeyen karakterler var';
+$wb['webdavuser_prefix_error_regex'] = 'Webdav kullanıcısı ön ekinde izin verilmeyen karakterler var.';
+$wb['dblist_phpmyadmin_link_txt'] = 'Veritabanı listesinde phpMyAdmin bağlantısı';
+$wb['enable_custom_login_txt'] = 'Özel oturum açma kullanıcı adı kullanılabilsin';
+$wb['mailboxlist_webmail_link_txt'] = 'E-posta kutusu listesinde Webmail bağlantısı';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin';
+$wb['webmail_url_txt'] = 'Webmail Adresi';
+$wb['mailmailinglist_link_txt'] = 'E-posta Listeleri listesinde E-posta Listesi bağlantısı';
+$wb['mailmailinglist_url_txt'] = 'E-posta Listesi Adresi';
+$wb['phpmyadmin_url_txt'] = 'phpMyAdmin Adresi';
+$wb['use_domain_module_txt'] = 'Etki alanı eklemek için etki alanı modülü kullanılsın';
+$wb['use_domain_module_hint'] = 'Bu modül kullanıldığında, müşteriler yalnız yöneticinin oluşturduğu etki alanlarından birini seçebilir. Etki alanını istediği gibi yazamaz. Bu değeri değiştirdikten sonra değişikliklerin geçerli olması için oturumu kapatıp yeniden açmalısınız.';
+$wb['new_domain_txt'] = 'Yeni etki alanı oluşturma HTML kodu';
+$wb['webftp_url_txt'] = 'WebFTP Adresi';
+$wb['admin_mail_txt'] = 'Yönetici E-posta Adresi';
+$wb['monitor_key_txt'] = 'Ä°zlenecek Kelime';
+$wb['admin_name_txt'] = 'Yönetici Adı';
+$wb['maintenance_mode_txt'] = 'Bakım Kipi';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
+$wb['smtp_enabled_txt'] = 'Sistem e-postaları SMTP ile gönderilsin';
+$wb['smtp_host_txt'] = 'SMTP Sunucusu';
+$wb['smtp_port_txt'] = 'SMTP Kapısı';
+$wb['smtp_user_txt'] = 'SMTP Kullanıcı Adı';
+$wb['smtp_pass_txt'] = 'SMTP Parolası';
+$wb['smtp_crypt_txt'] = 'SMTP için SSL/TLS şifreli bağlantı kullanılsın';
+$wb['phpmyadmin_url_error_regex'] = 'phpmyadmin adresi geçersiz';
+$wb['use_combobox_txt'] = 'jQuery Açılan Kutusu Kullanılsın';
+$wb['use_loadindicator_txt'] = 'Yük Göstergesi Kullanılsın';
+$wb['f5_to_reload_js_txt'] = 'Bu değer değiştirildiğinde, web tarayıcının JavaScript kitaplıklarını yeniden yüklemesi için F5 tuşuna basmalı ya da web tarayıcının ön belleğini temizlemelisiniz.';
+$wb['client_username_web_check_disabled_txt'] = 'Müşteri kullanıcı adında \'web\' sözcüğü denetimi devre dışı bırakılsın.';
+$wb['backups_include_into_web_quota_txt'] = 'Yedek dosyaları web kotasına katılsın.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin';
+$wb['webmail_url_error_regex'] = 'Webmail adresi geçersiz';
+$wb['phpmyadmin_url_note_txt'] = 'Kod:';
+$wb['webmail_url_note_txt'] = 'Kod:';
+$wb['available_dashlets_note_txt'] = 'Kullanılabilecek Bileşenler:';
+$wb['admin_dashlets_left_txt'] = 'Sol Yönetici Bileşenleri';
+$wb['admin_dashlets_right_txt'] = 'Sağ Yönetici Bileşenleri';
+$wb['reseller_dashlets_left_txt'] = 'Sol Bayi BileÅŸenleri';
+$wb['reseller_dashlets_right_txt'] = 'SaÄŸ Bayi BileÅŸenleri';
+$wb['client_dashlets_left_txt'] = 'Sol Müşteri Bileşenleri';
+$wb['client_dashlets_right_txt'] = 'Sağ Müşteri Bileşenleri';
+$wb['customer_no_template_txt'] = 'Müşteri No Kalıbı';
+$wb['customer_no_template_error_regex_txt'] = 'Müşteri no kalıbında geçersiz karakterler var';
+$wb['customer_no_start_txt'] = 'Müşteri No Başlangıç Değeri';
+$wb['customer_no_counter_txt'] = 'Müşteri No Sayacı';
+$wb['session_timeout_txt'] = 'Oturum Zaman Aşımı (dakika)';
+$wb['session_allow_endless_txt'] = '"Oturum açık kalsın" kullanılabilsin';
+$wb['No'] = 'No';
+$wb['min_password_length_txt'] = 'En Az Parola UzunluÄŸu';
+$wb['min_password_strength_txt'] = 'En Az Parola ZorluÄŸu';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
+$wb['default_dnsserver_txt'] = 'Varsayılan Birincil DNS Sunucusu';
+$wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
+$wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['company_name_txt'] = 'Sayfa başlığı için kurum adı';
+$wb['reseller_can_use_options_txt'] = 'Bayi web siteleri için seçenek sekmesini kullanabilsin';
+$wb['custom_login_text_txt'] = 'Oturum Açma Sayfası Metni';
+$wb['custom_login_link_txt'] = 'Oturum Açma Sayfası Bağlantısı';
+$wb['login_link_error_regex'] = 'Oturum Açma Bağlantısı Geçersiz';
+?>
-- 
GitLab


From 9ac0e6e6e50201a6df59115e2a5e8be610c2d6b1 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 19:52:10 +0200
Subject: [PATCH 279/571] Update system_config.tform.php

---
 system_config.tform.php | 774 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 774 insertions(+)
 create mode 100644 system_config.tform.php

diff --git a/system_config.tform.php b/system_config.tform.php
new file mode 100644
index 0000000000..1b84e59560
--- /dev/null
+++ b/system_config.tform.php
@@ -0,0 +1,774 @@
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"]   = "system_config_title";
+$form["description"]  = "system_config_desc_txt";
+$form["name"]   = "system_config";
+$form["action"]  = "system_config_edit.php";
+$form["db_table"] = "sys_ini";
+$form["db_table_idx"] = "sysini_id";
+$form["db_history"] = "yes";
+$form["tab_default"] = "sites";
+$form["list_default"] = "server_list.php";
+$form["auth"]  = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['sites'] = array (
+	'title'  => "Sites",
+	'width'  => 70,
+	'template'  => "templates/system_config_sites_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'dbname_prefix' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
+					'errmsg'=> 'dbname_prefix_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'dbuser_prefix' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
+					'errmsg'=> 'dbuser_prefix_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'ftpuser_prefix' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
+					'errmsg'=> 'ftpuser_prefix_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'shelluser_prefix' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
+					'errmsg'=> 'shelluser_prefix_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'webdavuser_prefix' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
+					'errmsg'=> 'webdavuser_prefix_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'dblist_phpmyadmin_link' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'phpmyadmin_url' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[0-9a-zA-Z\:\/\-\.\_\[\]\?\=\&]{0,255}$/',
+					'errmsg'=> 'phpmyadmin_url_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'webftp_url' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
+					'errmsg'=> 'webftp_url_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'vhost_subdomains' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'vhost_aliasdomains' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'client_username_web_check_disabled' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'backups_include_into_web_quota' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'reseller_can_use_options' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'default_webserver' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '1',
+			'datasource' => array (  'type' => 'CUSTOM',
+				'class'=> 'custom_datasource',
+				'function'=> 'client_servers'
+			),
+			'value'  => '',
+			'name'  => 'default_webserver'
+		),
+		'default_dbserver' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '1',
+			'datasource' => array (  'type' => 'CUSTOM',
+				'class'=> 'custom_datasource',
+				'function'=> 'client_servers'
+			),
+			'value'  => '',
+			'name'  => 'default_dbserver'
+		),
+		'web_php_options' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOXARRAY',
+			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
+					'errmsg'=> 'web_php_options_notempty'),
+			),
+			'default' => '',
+			'separator' => ',',
+			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['mail'] = array (
+	'title'  => "Mail",
+	'width'  => 70,
+	'template'  => "templates/system_config_mail_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'enable_custom_login' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'mailbox_show_autoresponder_tab' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'y',
+			'value'    => array(0 => 'n', 1 => 'y')
+		),
+		'mailbox_show_mail_filter_tab' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'y',
+			'value'    => array(0 => 'n', 1 => 'y')
+		),
+		'mailbox_show_custom_rules_tab' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'y',
+			'value'    => array(0 => 'n', 1 => 'y')
+		),
+		'mailboxlist_webmail_link' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'webmail_url' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					/*'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}(\?.+)?$/',*/
+					'regex' => '/^[0-9a-zA-Z\:\/\-\.\[\]]{0,255}$/',
+					'errmsg'=> 'webmail_url_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'mailmailinglist_link' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'mailmailinglist_url' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
+					'errmsg'=> 'mailinglist_url_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'admin_mail' => array (
+			'datatype' => 'VARCHAR',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER'),
+				3 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+				4 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'admin_name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'smtp_enabled' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'smtp_host' => array (
+			'datatype' => 'VARCHAR',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER'),
+				3 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+				4 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'formtype' => 'TEXT',
+			'default' => 'localhost',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'smtp_port' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '25',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'smtp_user' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'smtp_pass' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'smtp_crypt' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => array('' => 'No', 'ssl' => 'SSL', 'tls' => 'STARTTLS')
+		),
+		'default_mailserver' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '1',
+			'datasource' => array (  'type' => 'CUSTOM',
+				'class'=> 'custom_datasource',
+				'function'=> 'client_servers'
+			),
+			'value'  => '',
+			'name'  => 'default_mailserver'
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['dns'] = array (
+	'title'  => "DNS",
+	'width'  => 70,
+	'template'  => "templates/system_config_dns_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'default_dnsserver' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '1',
+			'datasource' => array (  'type' => 'CUSTOM',
+				'class'=> 'custom_datasource',
+				'function'=> 'client_servers'
+			),
+			'value'  => '',
+			'name'  => 'default_dnsserver'
+		),
+		'default_slave_dnsserver' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '1',
+			'datasource' => array (  'type' => 'CUSTOM',
+				'class'=> 'custom_datasource',
+				'function'=> 'client_servers'
+			),
+			'value'  => '',
+			'name'  => 'default_slave_dnsserver'
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['domains'] = array (
+	'title'  => "Domains",
+	'width'  => 70,
+	'template'  => "templates/system_config_domains_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'use_domain_module' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'new_domain_html' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+/* TODO_ BEGIN: Branding
+
+$form["tabs"]['domains'] = array (
+	'title' 	=> "Branding",
+	'width' 	=> 70,
+	'template' 	=> "templates/system_config_branding_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+                'allow_themechange' => array (
+                        'datatype'	=> 'VARCHAR',
+                        'formtype'	=> 'CHECKBOX',
+                        'default'	=> 'N',
+                        'value'         => array(0 => 'n',1 => 'y')
+                ),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+
+ END: Branding */
+$form["tabs"]['misc'] = array (
+	'title'  => "Misc",
+	'width'  => 70,
+	'template'  => "templates/system_config_misc_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'company_name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'custom_login_text' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'custom_login_link' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+				'regex' => '/^(http|https):\\/\\/.*|^$/',
+				'errmsg'=> 'login_link_error_regex'),
+			)
+		),
+		'dashboard_atom_url_admin' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => 'http://www.ispconfig.org/atom',
+			'value'  => ''
+		),
+		'dashboard_atom_url_reseller' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => 'http://www.ispconfig.org/atom',
+			'value'  => ''
+		),
+		'dashboard_atom_url_client' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => 'http://www.ispconfig.org/atom',
+			'value'  => ''
+		),
+		'monitor_key' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => ''
+		),
+		'tab_change_discard' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'tab_change_warning' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'use_loadindicator' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'use_combobox' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'maintenance_mode' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'maintenance_mode_exclude_ips' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array(
+				 0 => array (
+					'type' => 'ISIP',
+					'allowempty' => true,
+					'separator' => ',',
+					'errmsg'=> 'maintenance_mode_exclude_ips_error_isip'
+				),
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'admin_dashlets_left' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'admin_dashlets_right' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'reseller_dashlets_left' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'reseller_dashlets_right' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'client_dashlets_left' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'client_dashlets_right' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => '',
+			'value'  => ''
+		),
+		'customer_no_template' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
+					'errmsg'=> 'customer_no_template_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'customer_no_start' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'customer_no_counter' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'session_timeout' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'session_allow_endless' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		'min_password_length' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '5',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'min_password_strength' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => array('' => 'None', '1' => 'strength_1', '2' => 'strength_2', '3' => 'strength_3', '4' => 'strength_4', '5' => 'strength_5')
+		)
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+$form['tabs']['dns_ca'] = array (
+	'title'  => 'DNS CAs',
+	'width'  => 100,
+	'template'  => 'templates/system_config_dns_ca.htm',
+	'fields'  => array (),
+	'plugins' => array (
+		'dns_ca' => array (
+			'class'   => 'plugin_system_config_dns_ca',
+			'options' => array()
+		),
+		'dns_ca_list' => array (
+			'class'   => 'plugin_system_config_dns_ca_list',
+			'options' => array()
+		)
+	)
+);
+
+?>
-- 
GitLab


From c9b0ce235d6fff2f18c31caa58f3ac384de5fcd0 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 19:55:14 +0200
Subject: [PATCH 280/571] Deleted system_config.tform.php

---
 system_config.tform.php | 774 ----------------------------------------
 1 file changed, 774 deletions(-)
 delete mode 100644 system_config.tform.php

diff --git a/system_config.tform.php b/system_config.tform.php
deleted file mode 100644
index 1b84e59560..0000000000
--- a/system_config.tform.php
+++ /dev/null
@@ -1,774 +0,0 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"]   = "system_config_title";
-$form["description"]  = "system_config_desc_txt";
-$form["name"]   = "system_config";
-$form["action"]  = "system_config_edit.php";
-$form["db_table"] = "sys_ini";
-$form["db_table_idx"] = "sysini_id";
-$form["db_history"] = "yes";
-$form["tab_default"] = "sites";
-$form["list_default"] = "server_list.php";
-$form["auth"]  = 'yes'; // yes / no
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['sites'] = array (
-	'title'  => "Sites",
-	'width'  => 70,
-	'template'  => "templates/system_config_sites_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'dbname_prefix' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
-					'errmsg'=> 'dbname_prefix_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'dbuser_prefix' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
-					'errmsg'=> 'dbuser_prefix_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'ftpuser_prefix' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
-					'errmsg'=> 'ftpuser_prefix_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'shelluser_prefix' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
-					'errmsg'=> 'shelluser_prefix_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'webdavuser_prefix' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
-					'errmsg'=> 'webdavuser_prefix_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'dblist_phpmyadmin_link' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'phpmyadmin_url' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[0-9a-zA-Z\:\/\-\.\_\[\]\?\=\&]{0,255}$/',
-					'errmsg'=> 'phpmyadmin_url_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'webftp_url' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
-					'errmsg'=> 'webftp_url_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'vhost_subdomains' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'vhost_aliasdomains' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'client_username_web_check_disabled' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'backups_include_into_web_quota' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'reseller_can_use_options' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'default_webserver' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '1',
-			'datasource' => array (  'type' => 'CUSTOM',
-				'class'=> 'custom_datasource',
-				'function'=> 'client_servers'
-			),
-			'value'  => '',
-			'name'  => 'default_webserver'
-		),
-		'default_dbserver' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '1',
-			'datasource' => array (  'type' => 'CUSTOM',
-				'class'=> 'custom_datasource',
-				'function'=> 'client_servers'
-			),
-			'value'  => '',
-			'name'  => 'default_dbserver'
-		),
-		'web_php_options' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOXARRAY',
-			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
-					'errmsg'=> 'web_php_options_notempty'),
-			),
-			'default' => '',
-			'separator' => ',',
-			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
-		),
-		//#################################
-		// END Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['mail'] = array (
-	'title'  => "Mail",
-	'width'  => 70,
-	'template'  => "templates/system_config_mail_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'enable_custom_login' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'mailbox_show_autoresponder_tab' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default'  => 'y',
-			'value'    => array(0 => 'n', 1 => 'y')
-		),
-		'mailbox_show_mail_filter_tab' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default'  => 'y',
-			'value'    => array(0 => 'n', 1 => 'y')
-		),
-		'mailbox_show_custom_rules_tab' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default'  => 'y',
-			'value'    => array(0 => 'n', 1 => 'y')
-		),
-		'mailboxlist_webmail_link' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'webmail_url' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					/*'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}(\?.+)?$/',*/
-					'regex' => '/^[0-9a-zA-Z\:\/\-\.\[\]]{0,255}$/',
-					'errmsg'=> 'webmail_url_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'mailmailinglist_link' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'mailmailinglist_url' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
-					'errmsg'=> 'mailinglist_url_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'admin_mail' => array (
-			'datatype' => 'VARCHAR',
-			'filters'   => array( 0 => array( 'event' => 'SAVE',
-					'type' => 'IDNTOASCII'),
-				1 => array( 'event' => 'SHOW',
-					'type' => 'IDNTOUTF8'),
-				2 => array( 'event' => 'SAVE',
-					'type' => 'TOLOWER'),
-				3 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-				4 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'admin_name' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'smtp_enabled' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'smtp_host' => array (
-			'datatype' => 'VARCHAR',
-			'filters'   => array( 0 => array( 'event' => 'SAVE',
-					'type' => 'IDNTOASCII'),
-				1 => array( 'event' => 'SHOW',
-					'type' => 'IDNTOUTF8'),
-				2 => array( 'event' => 'SAVE',
-					'type' => 'TOLOWER'),
-				3 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-				4 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'formtype' => 'TEXT',
-			'default' => 'localhost',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'smtp_port' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '25',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'smtp_user' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'smtp_pass' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'smtp_crypt' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'value'  => array('' => 'No', 'ssl' => 'SSL', 'tls' => 'STARTTLS')
-		),
-		'default_mailserver' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '1',
-			'datasource' => array (  'type' => 'CUSTOM',
-				'class'=> 'custom_datasource',
-				'function'=> 'client_servers'
-			),
-			'value'  => '',
-			'name'  => 'default_mailserver'
-		),
-		//#################################
-		// END Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['dns'] = array (
-	'title'  => "DNS",
-	'width'  => 70,
-	'template'  => "templates/system_config_dns_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'default_dnsserver' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '1',
-			'datasource' => array (  'type' => 'CUSTOM',
-				'class'=> 'custom_datasource',
-				'function'=> 'client_servers'
-			),
-			'value'  => '',
-			'name'  => 'default_dnsserver'
-		),
-		'default_slave_dnsserver' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '1',
-			'datasource' => array (  'type' => 'CUSTOM',
-				'class'=> 'custom_datasource',
-				'function'=> 'client_servers'
-			),
-			'value'  => '',
-			'name'  => 'default_slave_dnsserver'
-		),
-		//#################################
-		// END Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['domains'] = array (
-	'title'  => "Domains",
-	'width'  => 70,
-	'template'  => "templates/system_config_domains_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'use_domain_module' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'new_domain_html' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		//#################################
-		// END Datatable fields
-		//#################################
-	)
-);
-
-/* TODO_ BEGIN: Branding
-
-$form["tabs"]['domains'] = array (
-	'title' 	=> "Branding",
-	'width' 	=> 70,
-	'template' 	=> "templates/system_config_branding_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-                'allow_themechange' => array (
-                        'datatype'	=> 'VARCHAR',
-                        'formtype'	=> 'CHECKBOX',
-                        'default'	=> 'N',
-                        'value'         => array(0 => 'n',1 => 'y')
-                ),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-
-
- END: Branding */
-$form["tabs"]['misc'] = array (
-	'title'  => "Misc",
-	'width'  => 70,
-	'template'  => "templates/system_config_misc_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-		'company_name' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'custom_login_text' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'custom_login_link' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value'  => '',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-				'regex' => '/^(http|https):\\/\\/.*|^$/',
-				'errmsg'=> 'login_link_error_regex'),
-			)
-		),
-		'dashboard_atom_url_admin' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => 'http://www.ispconfig.org/atom',
-			'value'  => ''
-		),
-		'dashboard_atom_url_reseller' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => 'http://www.ispconfig.org/atom',
-			'value'  => ''
-		),
-		'dashboard_atom_url_client' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => 'http://www.ispconfig.org/atom',
-			'value'  => ''
-		),
-		'monitor_key' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value'  => ''
-		),
-		'tab_change_discard' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'tab_change_warning' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'use_loadindicator' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'use_combobox' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'maintenance_mode' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'maintenance_mode_exclude_ips' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array(
-				 0 => array (
-					'type' => 'ISIP',
-					'allowempty' => true,
-					'separator' => ',',
-					'errmsg'=> 'maintenance_mode_exclude_ips_error_isip'
-				),
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'admin_dashlets_left' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'admin_dashlets_right' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'reseller_dashlets_left' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'reseller_dashlets_right' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'client_dashlets_left' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'client_dashlets_right' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'filters'   => array(
-					0 => array( 'event' => 'SAVE',
-					'type' => 'STRIPTAGS'),
-					1 => array( 'event' => 'SAVE',
-					'type' => 'STRIPNL')
-			),
-			'default' => '',
-			'value'  => ''
-		),
-		'customer_no_template' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
-					'errmsg'=> 'customer_no_template_error_regex'),
-			),
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'customer_no_start' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'customer_no_counter' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'session_timeout' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'session_allow_endless' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'n',
-			'value'  => array(0 => 'n', 1 => 'y')
-		),
-		'min_password_length' => array(
-			'datatype' => 'INTEGER',
-			'formtype' => 'TEXT',
-			'default' => '5',
-			'value'  => '',
-			'width'  => '30',
-			'maxlength' => '255'
-		),
-		'min_password_strength' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'value'  => array('' => 'None', '1' => 'strength_1', '2' => 'strength_2', '3' => 'strength_3', '4' => 'strength_4', '5' => 'strength_5')
-		)
-		//#################################
-		// END Datatable fields
-		//#################################
-	)
-);
-
-$form['tabs']['dns_ca'] = array (
-	'title'  => 'DNS CAs',
-	'width'  => 100,
-	'template'  => 'templates/system_config_dns_ca.htm',
-	'fields'  => array (),
-	'plugins' => array (
-		'dns_ca' => array (
-			'class'   => 'plugin_system_config_dns_ca',
-			'options' => array()
-		),
-		'dns_ca_list' => array (
-			'class'   => 'plugin_system_config_dns_ca_list',
-			'options' => array()
-		)
-	)
-);
-
-?>
-- 
GitLab


From bcb6e94bc8d98587ee32e4b51186495071a0882d Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 19:56:49 +0200
Subject: [PATCH 281/571] Update
 interface/web/admin/form/system_config.tform.php

---
 interface/web/admin/form/system_config.tform.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index d1b0a793e7..1b84e59560 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -33,7 +33,7 @@
 
 */
 
-$form["title"]   = "System Config";
+$form["title"]   = "system_config_title";
 $form["description"]  = "system_config_desc_txt";
 $form["name"]   = "system_config";
 $form["action"]  = "system_config_edit.php";
-- 
GitLab


From a4420597b95fcaeb458133a15510986ebc3e7c0f Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 20:11:02 +0200
Subject: [PATCH 282/571] Update interface/web/admin/form/server_ip.tform.php

---
 interface/web/admin/form/server_ip.tform.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/form/server_ip.tform.php b/interface/web/admin/form/server_ip.tform.php
index cd7190ebc6..d86dbb7535 100644
--- a/interface/web/admin/form/server_ip.tform.php
+++ b/interface/web/admin/form/server_ip.tform.php
@@ -64,8 +64,8 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 */
 
-$form["title"]    = "IP Addresses";
-$form["description"]  = "Form to edit system IP Addresses";
+$form["title"]    = "server_ip_edit_title";
+$form["description"]  = "server_ip_edit_desc";
 $form["name"]    = "server_ip";
 $form["action"]   = "server_ip_edit.php";
 $form["db_table"]  = "server_ip";
-- 
GitLab


From 13c9e0baeb50303d063f30a80cdb67bc86a7c04a Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 20:17:12 +0200
Subject: [PATCH 283/571] Fixes #4480 (Translate IP edit form title and desc)

---
 ar_server_ip.lng | 13 +++++++++++++
 bg_server_ip.lng | 13 +++++++++++++
 br_server_ip.lng | 13 +++++++++++++
 ca_server_ip.lng | 13 +++++++++++++
 cz_server_ip.lng | 13 +++++++++++++
 de_server_ip.lng | 13 +++++++++++++
 dk_server_ip.lng | 13 +++++++++++++
 el_server_ip.lng | 13 +++++++++++++
 en_server_ip.lng | 13 +++++++++++++
 es_server_ip.lng | 13 +++++++++++++
 fi_server_ip.lng | 13 +++++++++++++
 fr_server_ip.lng | 13 +++++++++++++
 hr_server_ip.lng | 13 +++++++++++++
 hu_server_ip.lng | 13 +++++++++++++
 id_server_ip.lng | 13 +++++++++++++
 it_server_ip.lng | 13 +++++++++++++
 ja_server_ip.lng | 13 +++++++++++++
 nl_server_ip.lng | 13 +++++++++++++
 pl_server_ip.lng | 13 +++++++++++++
 pt_server_ip.lng | 13 +++++++++++++
 ro_server_ip.lng | 13 +++++++++++++
 ru_server_ip.lng | 13 +++++++++++++
 se_server_ip.lng | 13 +++++++++++++
 sk_server_ip.lng | 13 +++++++++++++
 tr_server_ip.lng | 13 +++++++++++++
 25 files changed, 325 insertions(+)
 create mode 100644 ar_server_ip.lng
 create mode 100644 bg_server_ip.lng
 create mode 100644 br_server_ip.lng
 create mode 100644 ca_server_ip.lng
 create mode 100644 cz_server_ip.lng
 create mode 100644 de_server_ip.lng
 create mode 100644 dk_server_ip.lng
 create mode 100644 el_server_ip.lng
 create mode 100644 en_server_ip.lng
 create mode 100644 es_server_ip.lng
 create mode 100644 fi_server_ip.lng
 create mode 100644 fr_server_ip.lng
 create mode 100644 hr_server_ip.lng
 create mode 100644 hu_server_ip.lng
 create mode 100644 id_server_ip.lng
 create mode 100644 it_server_ip.lng
 create mode 100644 ja_server_ip.lng
 create mode 100644 nl_server_ip.lng
 create mode 100644 pl_server_ip.lng
 create mode 100644 pt_server_ip.lng
 create mode 100644 ro_server_ip.lng
 create mode 100644 ru_server_ip.lng
 create mode 100644 se_server_ip.lng
 create mode 100644 sk_server_ip.lng
 create mode 100644 tr_server_ip.lng

diff --git a/ar_server_ip.lng b/ar_server_ip.lng
new file mode 100644
index 0000000000..1947d3ec37
--- /dev/null
+++ b/ar_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'IP Address';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'The IP address is invalid';
+$wb['ip_error_unique'] = 'The IP address must be unique';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/bg_server_ip.lng b/bg_server_ip.lng
new file mode 100644
index 0000000000..70f428a634
--- /dev/null
+++ b/bg_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Сървър';
+$wb['ip_address_txt'] = 'IP адрес';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'IP адресът е грешен';
+$wb['ip_error_unique'] = 'IP адресът трябва да бъде уникален';
+$wb['client_id_txt'] = 'Клиент';
+$wb['ip_type_txt'] = 'Тип';
+$wb['virtualhost_port_txt'] = 'HTTP портове';
+$wb['error_port_syntax'] = 'Грешни символи в полето за портове, моля въвеждайте само числа разделени с запетая. Пример: 80,443';
+?>
diff --git a/br_server_ip.lng b/br_server_ip.lng
new file mode 100644
index 0000000000..8380b61ebd
--- /dev/null
+++ b/br_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Servidor';
+$wb['client_id_txt'] = 'Cliente';
+$wb['ip_type_txt'] = 'Tipo';
+$wb['ip_address_txt'] = 'Endereço IP';
+$wb['virtualhost_txt'] = 'Nome do vhost http';
+$wb['virtualhost_port_txt'] = 'Porta http';
+$wb['ip_error_wrong'] = 'O endereço IP é inválido.';
+$wb['ip_error_unique'] = 'O endereço IP deve ser exclusivo.';
+$wb['error_port_syntax'] = 'Caracteres inválidos para porta http, por favor, insira apenas uma porta ou separe portas por vírgula. Exemplo: 80,443.';
+?>
diff --git a/ca_server_ip.lng b/ca_server_ip.lng
new file mode 100644
index 0000000000..8f7738e51f
--- /dev/null
+++ b/ca_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['ip_address_txt'] = 'IP Address';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['ip_error_wrong'] = 'The IP address is invalid';
+$wb['ip_error_unique'] = 'The IP address must be unique';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/cz_server_ip.lng b/cz_server_ip.lng
new file mode 100644
index 0000000000..3698df5c74
--- /dev/null
+++ b/cz_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'IP adresa';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'IP adresa je neplatná nebo prázdná';
+$wb['ip_error_unique'] = 'IP adresa musí být unikátní';
+$wb['client_id_txt'] = 'Klient';
+$wb['ip_type_txt'] = 'Verze';
+$wb['virtualhost_port_txt'] = 'HTTP Porty';
+$wb['error_port_syntax'] = 'Neplatné znaky ve volbě HTTP Portů. Prosím, zadejte pouze číselné hodnoty oddělené čárkami. Příklad: 80,443';
+?>
diff --git a/de_server_ip.lng b/de_server_ip.lng
new file mode 100644
index 0000000000..88f23ebc15
--- /dev/null
+++ b/de_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'IP Adresse';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'Die IP Adresse ist ungültig';
+$wb['ip_error_unique'] = 'Die IP Adresse muss einzigartig sein';
+$wb['client_id_txt'] = 'Kunde';
+$wb['ip_type_txt'] = 'Typ';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Ungültige Zeichen im Ports Feld. Bitte geben Sie nur komma-separierte Nummern an. Beispiel: 80,443';
+?>
diff --git a/dk_server_ip.lng b/dk_server_ip.lng
new file mode 100644
index 0000000000..a6ba3ba045
--- /dev/null
+++ b/dk_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['client_id_txt'] = 'Kunde';
+$wb['ip_type_txt'] = 'Type';
+$wb['ip_address_txt'] = 'IP Adresse';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['virtualhost_port_txt'] = 'HTTP Porte';
+$wb['ip_error_wrong'] = 'IP adressen er ugyldigt';
+$wb['ip_error_unique'] = 'IP adressen skal være unikke';
+$wb['error_port_syntax'] = 'Ugyldigt tegn i Port felt, du må kun indtaste kommasepareret tal. F.eks.: 80,443';
+?>
diff --git a/el_server_ip.lng b/el_server_ip.lng
new file mode 100644
index 0000000000..f00925fc62
--- /dev/null
+++ b/el_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'Διεύθυνση IP';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'Η Διεύθυνση IP είναι άκυρη';
+$wb['ip_error_unique'] = 'Η Διεύθυνση IP πρέπει να είναι μοναδική';
+$wb['client_id_txt'] = 'Πελάτης';
+$wb['ip_type_txt'] = 'Τύπος';
+$wb['virtualhost_port_txt'] = 'Θύρες HTTP';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/en_server_ip.lng b/en_server_ip.lng
new file mode 100644
index 0000000000..8ef448f85d
--- /dev/null
+++ b/en_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb["server_id_txt"] = 'Server';
+$wb["client_id_txt"] = 'Client';
+$wb["ip_type_txt"] = 'Type';
+$wb["ip_address_txt"] = 'IP Address';
+$wb["virtualhost_txt"] = 'HTTP NameVirtualHost';
+$wb["virtualhost_port_txt"] = 'HTTP Ports';
+$wb["ip_error_wrong"] = 'The IP address is invalid';
+$wb["ip_error_unique"] = 'The IP address must be unique';
+$wb["error_port_syntax"] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/es_server_ip.lng b/es_server_ip.lng
new file mode 100644
index 0000000000..ba4d06d098
--- /dev/null
+++ b/es_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['client_id_txt'] = 'Cliente';
+$wb['error_port_syntax'] = 'Caracteres inválidos en el campo puerto, por favor introduzca sólo números separados por comas. Por ejemplo: 80,443';
+$wb['ip_address_txt'] = 'Dirección IP';
+$wb['ip_error_unique'] = 'La dirección IP debe ser única';
+$wb['ip_error_wrong'] = 'La dirección IP no es correcta';
+$wb['ip_type_txt'] = 'Tipo';
+$wb['server_id_txt'] = 'Servidor';
+$wb['virtualhost_port_txt'] = 'Puertos HTTP';
+$wb['virtualhost_txt'] = 'Nombre de host virtual HTTP (NameVirtualHost)';
+?>
diff --git a/fi_server_ip.lng b/fi_server_ip.lng
new file mode 100644
index 0000000000..a9f49cc124
--- /dev/null
+++ b/fi_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Palvelin';
+$wb['ip_address_txt'] = 'IP-osoite';
+$wb['virtualhost_txt'] = 'Virtuaalipalvelin';
+$wb['ip_error_wrong'] = 'IP-osoite vääränlainen';
+$wb['ip_error_unique'] = 'IP-osoitteen on oltava yksilöllinen';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/fr_server_ip.lng b/fr_server_ip.lng
new file mode 100644
index 0000000000..1289cd755a
--- /dev/null
+++ b/fr_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Serveur';
+$wb['ip_address_txt'] = 'Adresse IP';
+$wb['virtualhost_txt'] = 'NameVirtualHost HTTP';
+$wb['ip_error_wrong'] = 'L’adresse IP est invalide';
+$wb['ip_error_unique'] = 'L’adresse IP doit être unique';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/hr_server_ip.lng b/hr_server_ip.lng
new file mode 100644
index 0000000000..f26fd720ca
--- /dev/null
+++ b/hr_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'IP adresa';
+$wb['virtualhost_txt'] = 'HTTP ime virtualnog hosta';
+$wb['ip_error_wrong'] = 'Neispravna IP adresa';
+$wb['ip_error_unique'] = 'IP adresa mora biti jedinstvena';
+$wb['client_id_txt'] = 'Klijent';
+$wb['ip_type_txt'] = 'Vrsta';
+$wb['virtualhost_port_txt'] = 'HTTP portovi';
+$wb['error_port_syntax'] = 'Nedozvoljeni znakovi u port polju, unesite samo znamenke odvojene zarezom. Primjer: 80,443';
+?>
diff --git a/hu_server_ip.lng b/hu_server_ip.lng
new file mode 100644
index 0000000000..2e8f88a2f7
--- /dev/null
+++ b/hu_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Szerver';
+$wb['ip_address_txt'] = 'IP cím';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'IP cím érvénytelen';
+$wb['ip_error_unique'] = 'AZ IP címnek egyedinek kell lennie';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/id_server_ip.lng b/id_server_ip.lng
new file mode 100644
index 0000000000..00cecf5026
--- /dev/null
+++ b/id_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'Alamat IP';
+$wb['virtualhost_txt'] = 'Nama VirtualHost HTTP';
+$wb['ip_error_wrong'] = 'Alamat IP tidak valid';
+$wb['ip_error_unique'] = 'Alamat IP harus unik';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/it_server_ip.lng b/it_server_ip.lng
new file mode 100644
index 0000000000..9850f2e38b
--- /dev/null
+++ b/it_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'Indirizzo IP';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'Indirizzo IP non valido';
+$wb['ip_error_unique'] = 'Indirizzo IP deve essere unico';
+$wb['client_id_txt'] = 'Cliente';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Caratteri non validi nel campo porta, per favore inserire solo valori separati da virgola. Esempio: 80,443';
+?>
diff --git a/ja_server_ip.lng b/ja_server_ip.lng
new file mode 100644
index 0000000000..982d797760
--- /dev/null
+++ b/ja_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'サーバー';
+$wb['ip_address_txt'] = 'IPアドレス';
+$wb['virtualhost_txt'] = 'HTTP の NameVirtualHost を使う';
+$wb['ip_error_wrong'] = 'IPアドレスが不正です。';
+$wb['ip_error_unique'] = '既に登録済みのIPアドレスです。別の値に変更してください。';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/nl_server_ip.lng b/nl_server_ip.lng
new file mode 100644
index 0000000000..1fd397e01b
--- /dev/null
+++ b/nl_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'IP adres';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'Het IP adres is ongeldig';
+$wb['ip_error_unique'] = 'Het IP addres moet uniek zijn';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/pl_server_ip.lng b/pl_server_ip.lng
new file mode 100644
index 0000000000..0e31866078
--- /dev/null
+++ b/pl_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Serwer';
+$wb['ip_address_txt'] = 'Adres IP';
+$wb['virtualhost_txt'] = 'Nazwa wirtualnego hosta HTTP';
+$wb['ip_error_wrong'] = 'Adres IP jest niepoprawny';
+$wb['ip_error_unique'] = 'Adres IP musi być unikalny';
+$wb['client_id_txt'] = 'Klient';
+$wb['ip_type_txt'] = 'Typ';
+$wb['virtualhost_port_txt'] = 'Porty HTTP';
+$wb['error_port_syntax'] = 'Nieprawidłowe wartości w polu portów, proszę wpisać tylko liczby oddzielone przecinkiem. Przykładowo: 80,443';
+?>
diff --git a/pt_server_ip.lng b/pt_server_ip.lng
new file mode 100644
index 0000000000..8a3d00be61
--- /dev/null
+++ b/pt_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Servidor';
+$wb['ip_address_txt'] = 'Endereço IP';
+$wb['virtualhost_txt'] = 'Nome VirtualHost HTTP';
+$wb['ip_error_wrong'] = 'Endereço IP inválido!';
+$wb['ip_error_unique'] = 'O endereço IP deve ser único';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/ro_server_ip.lng b/ro_server_ip.lng
new file mode 100644
index 0000000000..1947d3ec37
--- /dev/null
+++ b/ro_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'IP Address';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'The IP address is invalid';
+$wb['ip_error_unique'] = 'The IP address must be unique';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/ru_server_ip.lng b/ru_server_ip.lng
new file mode 100644
index 0000000000..f874ba1bbd
--- /dev/null
+++ b/ru_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Сервер';
+$wb['ip_address_txt'] = 'IP-адрес';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'Неправильный формат IP-адреса';
+$wb['ip_error_unique'] = 'IP-адрес должен быть уникальным';
+$wb['client_id_txt'] = 'ID Клиента';
+$wb['ip_type_txt'] = 'Тип';
+$wb['virtualhost_port_txt'] = 'HTTP порты';
+$wb['error_port_syntax'] = 'Недопустимые символы в поле порта. Пожалуйста, вводите только числа, разделенные запятой. Пример: 80,443';
+?>
diff --git a/se_server_ip.lng b/se_server_ip.lng
new file mode 100644
index 0000000000..09bc3b593a
--- /dev/null
+++ b/se_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'IP-adress';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'IP_adressen är ogiltig';
+$wb['ip_error_unique'] = 'IP-adressen måste vara unik';
+$wb['client_id_txt'] = 'Kund';
+$wb['ip_type_txt'] = 'Typ';
+$wb['virtualhost_port_txt'] = 'HTTP-portar';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/sk_server_ip.lng b/sk_server_ip.lng
new file mode 100644
index 0000000000..02f84ded4c
--- /dev/null
+++ b/sk_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Server';
+$wb['ip_address_txt'] = 'IP Adresa';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['ip_error_wrong'] = 'IP adresa je neplatná';
+$wb['ip_error_unique'] = 'IP adresa musí byť unikátna';
+$wb['client_id_txt'] = 'Client';
+$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+?>
diff --git a/tr_server_ip.lng b/tr_server_ip.lng
new file mode 100644
index 0000000000..1f31bd3932
--- /dev/null
+++ b/tr_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['client_id_txt'] = 'Müşteri';
+$wb['ip_type_txt'] = 'Tür';
+$wb['ip_address_txt'] = 'IP Adresi';
+$wb['virtualhost_txt'] = 'HTTP sSunucu Adı';
+$wb['virtualhost_port_txt'] = 'HTTP Kapı Numaraları';
+$wb['ip_error_wrong'] = 'IP adresi geçersiz';
+$wb['ip_error_unique'] = 'Aynı IP adresi zaten var';
+$wb['error_port_syntax'] = 'Kapı alanında geçersiz karakterler var. Lütfen yalnız virgül ile ayrılmış sayılar yazın. Örnek: 80,443';
+?>
-- 
GitLab


From cdded70e3033b5d2c939f915126d582d1d844e3f Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 20:19:25 +0200
Subject: [PATCH 284/571] Revert "Added translation option for form title"

This reverts commit 2548cc13b35e87138f49ab0475c7e807666d75a2
---
 ar_system_config.lng | 96 ------------------------------------------
 bg_system_config.lng | 96 ------------------------------------------
 br_system_config.lng | 95 ------------------------------------------
 ca_system_config.lng | 96 ------------------------------------------
 cz_system_config.lng | 96 ------------------------------------------
 de_system_config.lng | 96 ------------------------------------------
 dk_system_config.lng | 96 ------------------------------------------
 el_system_config.lng | 96 ------------------------------------------
 en_system_config.lng | 99 --------------------------------------------
 es_system_config.lng | 96 ------------------------------------------
 fi_system_config.lng | 96 ------------------------------------------
 fr_system_config.lng | 96 ------------------------------------------
 hr_system_config.lng | 96 ------------------------------------------
 hu_system_config.lng | 96 ------------------------------------------
 id_system_config.lng | 96 ------------------------------------------
 it_system_config.lng | 96 ------------------------------------------
 ja_system_config.lng | 96 ------------------------------------------
 nl_system_config.lng | 96 ------------------------------------------
 pl_system_config.lng | 96 ------------------------------------------
 pt_system_config.lng | 96 ------------------------------------------
 ro_system_config.lng | 96 ------------------------------------------
 ru_system_config.lng | 96 ------------------------------------------
 se_system_config.lng | 96 ------------------------------------------
 sk_system_config.lng | 96 ------------------------------------------
 tr_system_config.lng | 90 ----------------------------------------
 25 files changed, 2396 deletions(-)
 delete mode 100644 ar_system_config.lng
 delete mode 100644 bg_system_config.lng
 delete mode 100644 br_system_config.lng
 delete mode 100644 ca_system_config.lng
 delete mode 100644 cz_system_config.lng
 delete mode 100644 de_system_config.lng
 delete mode 100644 dk_system_config.lng
 delete mode 100644 el_system_config.lng
 delete mode 100644 en_system_config.lng
 delete mode 100644 es_system_config.lng
 delete mode 100644 fi_system_config.lng
 delete mode 100644 fr_system_config.lng
 delete mode 100644 hr_system_config.lng
 delete mode 100644 hu_system_config.lng
 delete mode 100644 id_system_config.lng
 delete mode 100644 it_system_config.lng
 delete mode 100644 ja_system_config.lng
 delete mode 100644 nl_system_config.lng
 delete mode 100644 pl_system_config.lng
 delete mode 100644 pt_system_config.lng
 delete mode 100644 ro_system_config.lng
 delete mode 100644 ru_system_config.lng
 delete mode 100644 se_system_config.lng
 delete mode 100644 sk_system_config.lng
 delete mode 100644 tr_system_config.lng

diff --git a/ar_system_config.lng b/ar_system_config.lng
deleted file mode 100644
index 3a7ef0796c..0000000000
--- a/ar_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
-$wb['dbname_prefix_txt'] = 'Database name prefix';
-$wb['dbuser_prefix_txt'] = 'Database user prefix';
-$wb['shelluser_prefix_txt'] = 'Shell user prefix';
-$wb['ftpuser_prefix_txt'] = 'FTP user prefix';
-$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
-$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
-$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
-$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
-$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They cannot free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/bg_system_config.lng b/bg_system_config.lng
deleted file mode 100644
index 4e6add8a6d..0000000000
--- a/bg_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['warning'] = 'Редактирай тези променливи внимателно! Не премахвай префиксите на системата.';
-$wb['dbname_prefix_txt'] = 'Име на префикса в базата данни';
-$wb['dbuser_prefix_txt'] = 'Потребителски префикс в базата данни';
-$wb['shelluser_prefix_txt'] = 'Shell user prefix';
-$wb['ftpuser_prefix_txt'] = 'Потребителски префикс на FTP';
-$wb['dbname_prefix_error_regex'] = 'Неразрешени символи в името на префикса.';
-$wb['dbuser_prefix_error_regex'] = 'Неразрешени символи в името на префикса.';
-$wb['ftpuser_prefix_error_regex'] = 'Неразрешени символи в името на ftp префикса.';
-$wb['shelluser_prefix_error_regex'] = 'Неразрешени символи в името на shell префикса.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
-$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'Ако използвате този модул, вашите клиенти могат да изберет само един от домейните, които администратора създава за тях. Те не могат да освободят и редактират домейн - полето. Вие , трябва отново да влезете след промяна на тази стойност, за да направите промените видими.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Неразрешени символи в името на webdav префикса.';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['enable_custom_login_txt'] = 'Разреши различни имена за вход';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Мейлинг лист адрес URL';
-$wb['admin_mail_txt'] = 'Администраторски емаил';
-$wb['admin_name_txt'] = 'Администраторски имена';
-$wb['system_config_desc_txt'] = '';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create Subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/br_system_config.lng b/br_system_config.lng
deleted file mode 100644
index f5ed36e9ea..0000000000
--- a/br_system_config.lng
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = 'Configurações do Sistema';
-$wb['smtp_missing_admin_mail_txt'] = 'Por favor, insira um nome e e-mail do administrador se você usar smtp para envio dos e-mails do sistema.';
-$wb['dashboard_atom_url_admin_txt'] = 'URL do Dashboard atom (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'URL do Dashboard atom (revendas)';
-$wb['dashboard_atom_url_client_txt'] = 'URL do Dashboard atom  (clientes)';
-$wb['warning'] = 'Edite estes valores com cuidado! Não remova os prefixos em um sistema com mais de um cliente!';
-$wb['tab_change_discard_txt'] = 'Descartar alterações nesta aba';
-$wb['tab_change_warning_txt'] = 'Alerta de alterações';
-$wb['tab_change_warning_note_txt'] = 'Exibir alertas de alterações nesta aba se qualquer dado for alterado pelo usuário.';
-$wb['dbname_prefix_txt'] = 'Prefixo de banco de dados';
-$wb['dbuser_prefix_txt'] = 'Prefixo de usuário de banco de dados';
-$wb['shelluser_prefix_txt'] = 'Prefixo de usuário do shell';
-$wb['webdavuser_prefix_txt'] = 'Prefixo de usuário webdav';
-$wb['ftpuser_prefix_txt'] = 'Prefixo de usuário ftp';
-$wb['vhost_subdomains_txt'] = 'Adicionar subdomínios como um site';
-$wb['vhost_subdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem subdomínios vhost no sistema!';
-$wb['vhost_aliasdomains_txt'] = 'Adicionar alias de domínio como um site';
-$wb['vhost_aliasdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem alias de domínios vhost no sistema!';
-$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo de banco de dados.';
-$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário de banco de dados.';
-$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário ftp.';
-$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário do shell.';
-$wb['webdavuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuários webdav.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link para o phpmyadmin';
-$wb['enable_custom_login_txt'] = 'Permitir nome de usuário personalizado';
-$wb['mailboxlist_webmail_link_txt'] = 'Link para o webmail';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Exibir aba de auto-resposta nos detalhes da conta de e-mail';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Exibir aba de filtro de e-mails nos detalhes da conta de e-mail';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Exibir aba de filtros personalizados de e-mail nos detalhes da conta de e-mail';
-$wb['webmail_url_txt'] = 'URL do webmail';
-$wb['mailmailinglist_link_txt'] = 'Link para lista de e-mails na lista de e-mails';
-$wb['mailmailinglist_url_txt'] = 'URL da lista de e-mails';
-$wb['phpmyadmin_url_txt'] = 'URL do phpMyAdmin';
-$wb['use_domain_module_txt'] = 'Use o módulo de cliente para adicionar novos domínios';
-$wb['use_domain_module_hint'] = 'Se você usar este módulo, os clientes podem selecionar apenas um dos domínios que o administrador adicionar para eles. Eles não podem editar o campo domínio livremente. Você deve sair e acessar novamente após alterar este valor para que as mudanças sejam aplicadas.';
-$wb['new_domain_txt'] = 'Código HTML para criar um novo domínio';
-$wb['webftp_url_txt'] = 'URL do FTPweb';
-$wb['admin_mail_txt'] = 'Administrador(es) de e-mails';
-$wb['monitor_key_txt'] = 'Palavras reservadas a monitorar';
-$wb['admin_name_txt'] = 'Nome do administrador';
-$wb['maintenance_mode_txt'] = 'Modo manutenção';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Usar SMTP para enviar e-mails do sistema';
-$wb['smtp_host_txt'] = 'Host SMTP';
-$wb['smtp_port_txt'] = 'Porta SMTP';
-$wb['smtp_user_txt'] = 'Usuário SMTP';
-$wb['smtp_pass_txt'] = 'Senha do SMTP';
-$wb['smtp_crypt_txt'] = 'Usar conexão criptografada SSL/TLS para o SMTP';
-$wb['phpmyadmin_url_error_regex'] = 'URL do phpmyadmin é inválida.';
-$wb['use_combobox_txt'] = 'Usar combobox jQuery UI';
-$wb['use_loadindicator_txt'] = 'Usar indicador de carga';
-$wb['f5_to_reload_js_txt'] = 'Se você modificar esta configuração, talvez será necessário pressionar F5 no seu navegador para recarregar as bibliotecas do JavaScript ou esvaziar o cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Desabilitar verificação da palavra reservada "web" para o nome de usuário (não recomendado!).';
-$wb['backups_include_into_web_quota_txt'] = 'Incluir arquivos de backup na cota do site.';
-$wb['webmail_url_error_regex'] = 'URL do webmail é inválida.';
-$wb['phpmyadmin_url_note_txt'] = 'Área reservada:';
-$wb['webmail_url_note_txt'] = 'Área reservada:';
-$wb['available_dashlets_note_txt'] = 'Dashlets disponíveis:';
-$wb['admin_dashlets_left_txt'] = 'Restrições de dashlets para administradores';
-$wb['admin_dashlets_right_txt'] = 'Permissões de dashlets para administradores';
-$wb['reseller_dashlets_left_txt'] = 'Restrições de dashlets para revendas';
-$wb['reseller_dashlets_right_txt'] = 'Permissões de dashlets para revendas';
-$wb['client_dashlets_left_txt'] = 'Restrições de dashlets para clientes';
-$wb['client_dashlets_right_txt'] = 'Permissões de dashlets para clientes';
-$wb['customer_no_template_txt'] = 'No. do gabarito do cliente';
-$wb['customer_no_template_error_regex_txt'] = 'O número do gabarito do cliente contém caracteres inválidos.';
-$wb['customer_no_start_txt'] = 'Valor inicial do código de cliente';
-$wb['customer_no_counter_txt'] = 'Contador do código de cliente';
-$wb['session_timeout_txt'] = 'Duração da sessão (minutos)';
-$wb['session_allow_endless_txt'] = 'Habilitar "Manter-me conectado"';
-$wb['No'] = 'Não';
-$wb['min_password_length_txt'] = 'Comprimento mínimo da senha';
-$wb['min_password_strength_txt'] = 'Dificuldade mínima da senha';
-$wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
-$wb['default_webserver_txt'] = 'Servidor web padrão';
-$wb['default_dnsserver_txt'] = 'Servidor dns padrão';
-$wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
-$wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['company_name_txt'] = 'Nome da empresa para título da página';
-$wb['reseller_can_use_options_txt'] = 'Revendas podem utilizar o menu sites';
-$wb['custom_login_text_txt'] = 'Texto personalizado para a página de acesso';
-$wb['custom_login_link_txt'] = 'Link personalizado para página de acesso';
-$wb['login_link_error_regex'] = 'Link personalizado para acesso inválido';
-$wb['ca_name_txt'] = 'Nome';
-$wb['ca_issue_txt'] = 'Questão';
-$wb['ca_wildcard_txt'] = 'Usar curingas';
-$wb['ca_iodef_txt'] = 'Definições de E/S';
-$wb['active_txt'] = 'Ativo';
-$wb['btn_save_txt'] = 'Salvar';
-$wb['btn_cancel_txt'] = 'Cancelar';
-$wb['web_php_options_txt'] = 'Manipulador do php (Somente apache)';
-?>
diff --git a/ca_system_config.lng b/ca_system_config.lng
deleted file mode 100644
index f721f688c5..0000000000
--- a/ca_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['dbname_prefix_txt'] = 'Database name prefix';
-$wb['dbuser_prefix_txt'] = 'Database user prefix';
-$wb['shelluser_prefix_txt'] = 'Shell user prefix';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['ftpuser_prefix_txt'] = 'FTP user prefix';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
-$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
-$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
-$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Use the domain limits in client module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use the domain limits, your customers can only select one of the domains the admin creates for them. They cannot freely edit the domain-field. You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['admin_mail_txt'] = 'Administrator\'s e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrator\'s name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/cz_system_config.lng b/cz_system_config.lng
deleted file mode 100644
index 4ee62ece32..0000000000
--- a/cz_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Upravujte tyto údaje opatrne! Neodstraňujte prefixy na systémech s více, než jedním klientem.';
-$wb['dbname_prefix_txt'] = 'Prefix názvu databáze';
-$wb['dbuser_prefix_txt'] = 'Prefix uživatele databáze';
-$wb['shelluser_prefix_txt'] = 'Prefix shell uživatele';
-$wb['ftpuser_prefix_txt'] = 'Prefix FTP uživatele';
-$wb['dbname_prefix_error_regex'] = 'Znak není povolen v prefixu databázovém názvu.';
-$wb['dbuser_prefix_error_regex'] = 'Znak není povolen v prefixu databázového uživatele.';
-$wb['ftpuser_prefix_error_regex'] = 'Znak není povolen v prefixu FTP uživatele.';
-$wb['shelluser_prefix_error_regex'] = 'Znak není povolen v prefixu shell uživatele.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Ikonový odkaz na aplikaci PHPMyAdmin v seznamu databází';
-$wb['mailboxlist_webmail_link_txt'] = 'Ikonový odkaz na aplikaci Webmail v seznamu e-mailových schránek';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['dashboard_atom_url_admin_txt'] = 'Nástěnka - novinky načítat z URL pro: (admina)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Nástěnka - novinky načítat z URL pro: (prodejce)';
-$wb['dashboard_atom_url_client_txt'] = 'Nástěnka - novinky načítat z URL pro: (klienty)';
-$wb['webdavuser_prefix_txt'] = 'Prefix webdav uživatele';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['use_domain_module_txt'] = 'Použijte modul-domény pro přidání nových domén';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML vytvořit novou doménu';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['admin_mail_txt'] = 'E-mail Administrátora';
-$wb['admin_name_txt'] = 'Jméno Administrátora';
-$wb['enable_custom_login_txt'] = 'Povolit vlastní přihlašovací jméno u e-mailové schránky';
-$wb['mailmailinglist_link_txt'] = 'Ikonový odkaz na aplikaci E-mailových konferencí seznamu e-mailových konferencí';
-$wb['mailmailinglist_url_txt'] = 'E-mailové konference URL';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['maintenance_mode_txt'] = 'Režim údržby';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Použít (zvolit) SMTP server pro zasílání systémových mailů';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP uživatel';
-$wb['smtp_pass_txt'] = 'SMTP heslo';
-$wb['smtp_crypt_txt'] = 'Použít SSL/TLS šifrované spojení pro SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Zadejte prosím jméno Administrátora a e-mailovou adresu Administrátora, pokud chcete používat zvolený SMTP server pro zasílání systémových mailů.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Záložka změna varování';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Vytvořit subdomény jako webové stránky';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'phpmyadmin neplatné URL';
-$wb['use_combobox_txt'] = 'Použití jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Použití indikátoru zatížení';
-$wb['f5_to_reload_js_txt'] = 'Pokud vypnete tuto volbu, zřejmě budete muset používat klávesu F5, aby internetový prohlížeč znovu načetl JavaScript knihovny nebo budete muset ručně vyprázdňovat mezipaměť (cache) vašeho internetového prohlížeče.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Ukázat kartu automatická odpověď v podrobnostech u e-mailové schránky';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Ukázat kartu e-mailové filtry v podrobnostech u e-mailové schránky';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Ukázat kartu vlastní pravidla v podrobnostech u e-mailové schránky';
-$wb['webmail_url_error_regex'] = 'Neplatný webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Zástupný symbol';
-$wb['webmail_url_note_txt'] = 'Zástupný symbol';
-$wb['available_dashlets_note_txt'] = 'Dostupné moduly pro nástěnku:';
-$wb['admin_dashlets_left_txt'] = 'Nástěnka - zobrazení modulů v lévé části pro: (admina)';
-$wb['admin_dashlets_right_txt'] = 'Nástěnka - zobrazení modulů v pravé části pro: (admina)';
-$wb['reseller_dashlets_left_txt'] = 'Nástěnka - zobrazení modulů v lévé části pro: (prodejce)';
-$wb['reseller_dashlets_right_txt'] = 'Nástěnka - zobrazení modulů v pravé části pro: (prodejce)';
-$wb['client_dashlets_left_txt'] = 'Nástěnka - zobrazení modulů v lévé části pro: (klienty)';
-$wb['client_dashlets_right_txt'] = 'Nástěnka - zobrazení modulů v pravé části pro: (klienty)';
-$wb['customer_no_template_txt'] = 'Zákaznické číslo - šablona';
-$wb['customer_no_template_error_regex_txt'] = 'Zákaznické číslo šablony obsahuje neplatné znaky';
-$wb['customer_no_start_txt'] = 'Zákaznické číslo - počáteční hodnota';
-$wb['customer_no_counter_txt'] = 'Zákaznické číslo -  čítač';
-$wb['session_timeout_txt'] = 'Časový limit relace (minuty)';
-$wb['session_allow_endless_txt'] = 'Povolit - zůstat přihlášen';
-$wb['No'] = 'Ne';
-$wb['min_password_length_txt'] = 'Minimální délka hesla';
-$wb['min_password_strength_txt'] = 'Minimální síla hesla';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['default_mailserver_txt'] = 'Výchozí E-mailový server';
-$wb['default_webserver_txt'] = 'Výchozí webový server';
-$wb['default_dnsserver_txt'] = 'Výchozí DNS server';
-$wb['default_slave_dnsserver_txt'] = 'Výchozí sekundární DNS server';
-$wb['default_dbserver_txt'] = 'Výchozí databázový server';
-$wb['company_name_txt'] = 'Název společnosti v panelu (listu) webového prohlížeče';
-$wb['reseller_can_use_options_txt'] = 'Distributor (prodejce) může použít kartu možností pro weby.';
-$wb['custom_login_text_txt'] = 'Vlastní text na přihlašovací stránce';
-$wb['custom_login_link_txt'] = 'Vlastní odkaz (URL) na přihlašovací stránce (vlastní text)';
-$wb['login_link_error_regex'] = 'Neplatný formát URL pro vlastní odkaz na přihlašovací stránce';
-$wb['ca_name_txt'] = 'Název vydavatele';
-$wb['ca_issue_txt'] = 'Doména vydavatele';
-$wb['ca_wildcard_txt'] = 'Použít Wildcard (*)';
-$wb['ca_critical_txt'] = 'Přísná kontrola';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktivní';
-$wb['btn_save_txt'] = 'Uložit';
-$wb['btn_cancel_txt'] = 'Zrušit';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/de_system_config.lng b/de_system_config.lng
deleted file mode 100644
index f981cce832..0000000000
--- a/de_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = 'Systemkonfiguration';
-$wb['smtp_missing_admin_mail_txt'] = 'Bitte geben Sie die Administrator E-Mail und den Namen ein, wenn Sie SMTP Versand nutzen wollen.';
-$wb['warning'] = 'Bearbeiten Sie diese Werte sorgfältig! Entfernen Sie die Präfixe nicht auf Systemen mit mehr als einem Kunden.';
-$wb['tab_change_warning_txt'] = 'Reiter Wechsel Warnung';
-$wb['tab_change_discard_txt'] = 'Verwerfe Änderungen bei Reiter Wechsel';
-$wb['tab_change_warning_note_txt'] = 'Zeigt eine Warnung an, wenn der Reiter in einem Formular gewechselt wird und Daten geändert wurden.';
-$wb['dbname_prefix_txt'] = 'Datenbank Namen Präfix';
-$wb['dbuser_prefix_txt'] = 'Datenbank Benutzer Präfix';
-$wb['shelluser_prefix_txt'] = 'Shell Benutzer Präfix';
-$wb['ftpuser_prefix_txt'] = 'FTP Benutzer Präfix';
-$wb['vhost_subdomains_txt'] = 'Subdomains als Webseite anlegen';
-$wb['vhost_subdomains_note_txt'] = 'Diese Einstellung kann nicht wieder deaktiviert werden, wenn Vhost Subdomains im System vorhanden sind!';
-$wb['vhost_aliasdomains_txt'] = 'Aliasdomains als Webseite anlegen';
-$wb['vhost_aliasdomains_note_txt'] = 'Diese Einstellung kann nicht wieder deaktiviert werden, wenn Vhost Aliasdomains im System vorhanden sind!';
-$wb['dbname_prefix_error_regex'] = 'Zeichen nicht erlaubt in Datenbank Namen Präfix.';
-$wb['dbuser_prefix_error_regex'] = 'Zeichen nicht erlaubt in Datenbank Benutzer Präfix.';
-$wb['ftpuser_prefix_error_regex'] = 'Zeichen nicht erlaubt in FTP Benutzer Präfix.';
-$wb['shelluser_prefix_error_regex'] = 'Zeichen nicht erlaubt in Shell Benutzer Präfix.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link zu phpMyAdmin in der Datenbankliste';
-$wb['mailboxlist_webmail_link_txt'] = 'Link zu Webmail in der Mailboxliste';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'phpMyAdmin URL';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (für Admins)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (für Reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (für Kunden)';
-$wb['webdavuser_prefix_txt'] = 'WebDAV Benutzer Präfix';
-$wb['webdavuser_prefix_error_regex'] = 'Zeichen nicht zulässig im WebDAV Benutzer Präfix.';
-$wb['use_domain_module_txt'] = 'Domain Limits im Kundenmodul benutzen, um neue Domains hinzuzufügen';
-$wb['use_domain_module_hint'] = 'Falls Sie die Domain Limits benutzen, können Ihre Kunden nur eine der Domains auswählen, die der Admin für sie angelegt hat. Die Kunden können das Domain-Feld nicht frei editieren. Sie müssen sich neu einloggen, wenn Sie diesen Wert ändern.';
-$wb['new_domain_txt'] = 'HTML Text zum Anlegen einer neuen Domain';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['enable_custom_login_txt'] = 'Abweichenden Login Namen erlauben';
-$wb['mailmailinglist_link_txt'] = 'Link zur Mailingliste in der Mailinglisten Ãœbersicht';
-$wb['mailmailinglist_url_txt'] = 'Mailinglisten URL';
-$wb['admin_mail_txt'] = 'Administrator E-Mail';
-$wb['monitor_key_txt'] = 'ISPConfig Monitor App Passwort';
-$wb['admin_name_txt'] = 'Name des Administrators';
-$wb['maintenance_mode_txt'] = 'Wartungsmodus';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'SMTP zum System E-Mailversand nutzen';
-$wb['smtp_host_txt'] = 'SMTP Server';
-$wb['smtp_port_txt'] = 'SMTP Port';
-$wb['smtp_user_txt'] = 'SMTP Benutzer';
-$wb['smtp_pass_txt'] = 'SMTP Passwort';
-$wb['smtp_crypt_txt'] = 'SSL/TLS verschlüsselte Verbindung für SMTP';
-$wb['use_combobox_txt'] = 'jQuery UI Combobox benutzen';
-$wb['use_loadindicator_txt'] = 'Laden Grafik anzeigen';
-$wb['f5_to_reload_js_txt'] = 'Wenn Sie den Wert ändern, müssen Sie F5 drücken, damit der Browser die JavaScript Bibliotheken neu lädt, oder Ihren Browser Cache leeren.';
-$wb['phpmyadmin_url_error_regex'] = 'Falsche phpMyAdmin URL';
-$wb['client_username_web_check_disabled_txt'] = 'Deaktiviere die Kunden Benutzernamen Überprüfung für den Begriff <b>web<b>.';
-$wb['backups_include_into_web_quota_txt'] = 'Backups in Web Quota hinzuzählen.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Zeige Autoresponder Reiter in E-Mail Kontodetails';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Zeige E-Mail Filter Reiter in E-Mail Kontodetails';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Zeige Benutzerregel Reiter in E-Mail Kontodetails';
-$wb['webmail_url_error_regex'] = 'Falsche Webmail URL';
-$wb['reseller_can_use_options_txt'] = 'Reseller können den Optionen Reiter bei Webseiten verwenden';
-$wb['phpmyadmin_url_note_txt'] = 'Platzhalter:';
-$wb['webmail_url_note_txt'] = 'Platzhalter:';
-$wb['available_dashlets_note_txt'] = 'Verfügbare Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Admin-Dashlets links';
-$wb['admin_dashlets_right_txt'] = 'Admin-Dashlets rechts';
-$wb['reseller_dashlets_left_txt'] = 'Reseller-Dashlets links';
-$wb['reseller_dashlets_right_txt'] = 'Reseller-Dashlets rechts';
-$wb['client_dashlets_left_txt'] = 'Kunden-Dashlets links';
-$wb['client_dashlets_right_txt'] = 'Kunden-Dashlets rechts';
-$wb['customer_no_template_txt'] = 'Kundennummer-Vorlage';
-$wb['customer_no_template_error_regex_txt'] = 'Die Kundennummer-Vorlage enthält ungültige Zeichen';
-$wb['customer_no_start_txt'] = 'Kundennummer Startwert';
-$wb['customer_no_counter_txt'] = 'Kundennummer Zähler';
-$wb['session_timeout_txt'] = 'Session-Timeout (Minuten)';
-$wb['session_allow_endless_txt'] = '&quot;Eingeloggt bleiben&quot; aktivieren';
-$wb['No'] = 'Nein';
-$wb['min_password_length_txt'] = 'Minimale Passwortlänge';
-$wb['min_password_strength_txt'] = 'Minimale Passwortstärke';
-$wb['company_name_txt'] = 'Firmenname fuer den Seitentitel';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Wildcard verwenden';
-$wb['ca_critical_txt'] = 'Strikte Überprüfung';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktiv';
-$wb['btn_save_txt'] = 'Speichern';
-$wb['btn_cancel_txt'] = 'Abbrechen';
-$wb['web_php_options_txt'] = 'PHP Handler (Nur Apache)';
-?>
diff --git a/dk_system_config.lng b/dk_system_config.lng
deleted file mode 100644
index 5f298f091a..0000000000
--- a/dk_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['smtp_missing_admin_mail_txt'] = 'Indtast venligst admin navn og admin mail adresse, hvis du vil bruge smtp mail afsendelse.';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (forhandler)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (klient)';
-$wb['warning'] = 'Rediger disse værdier forsigtigt! Fjern ikke præfikser på et system med mere end én klient.';
-$wb['tab_change_discard_txt'] = 'Kassér ændringer på fanen forandring';
-$wb['tab_change_warning_txt'] = 'Fane ændrings advarsel';
-$wb['tab_change_warning_note_txt'] = 'Vis en advarsel på fanen ændring i redigere formularer, hvis nogen data er blevet ændret af brugeren.';
-$wb['dbname_prefix_txt'] = 'Database navn prefix';
-$wb['dbuser_prefix_txt'] = 'Database bruger prefix';
-$wb['shelluser_prefix_txt'] = 'Shell bruger prefix';
-$wb['webdavuser_prefix_txt'] = 'Webdav bruger prefix';
-$wb['ftpuser_prefix_txt'] = 'FTP bruger prefix';
-$wb['vhost_subdomains_txt'] = 'Opret Sub-domæne som web side';
-$wb['vhost_subdomains_note_txt'] = 'Du kan ikke deaktivere dette, så længe der findes vhost sub-domæner i systemet!';
-$wb['dbname_prefix_error_regex'] = 'Char ikke tilladt i database name prefix.';
-$wb['dbuser_prefix_error_regex'] = 'Char ikke tilladt i database bruger prefix.';
-$wb['ftpuser_prefix_error_regex'] = 'Char ikke tilladt i ftp bruger prefix.';
-$wb['shelluser_prefix_error_regex'] = 'Char ikke tilladt i shell bruger prefix.';
-$wb['webdavuser_prefix_error_regex'] = 'Char ikke tilladt i webdav bruger prefix.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link til phpmyadmin i DB liste';
-$wb['enable_custom_login_txt'] = 'Tillad brugerdefinerede login-navn';
-$wb['mailboxlist_webmail_link_txt'] = 'Link til webmail i Postboks liste';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['mailmailinglist_link_txt'] = 'Link til mailing list i Mailing list liste';
-$wb['mailmailinglist_url_txt'] = 'Mail-list URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Brug domæne grænser i klient-modul for at tilføje nye domæner';
-$wb['use_domain_module_hint'] = 'Hvis du bruger domæne grænser, kan dine kunder kun vælge et af de områder admin skabte for dem. De kan ikke frit redigere domæne-feltet. Du er nødt til at re-login efter at ændre denne værdi, for at gøre ændringerne synlige.';
-$wb['new_domain_txt'] = 'HTML for at oprette et nyt domæne';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['admin_mail_txt'] = 'Administratorer e-mail';
-$wb['monitor_key_txt'] = 'Monitor nøgleord';
-$wb['admin_name_txt'] = 'Administratorer navn';
-$wb['maintenance_mode_txt'] = 'Vedligeholdelsestilstand';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Brug SMTP for at sende system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP bruger';
-$wb['smtp_pass_txt'] = 'SMTP adgangskode';
-$wb['smtp_crypt_txt'] = 'Brug SSL/TLS krypteret forbindelse for SMTP';
-$wb['phpmyadmin_url_error_regex'] = 'Ugyldigt phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Brug jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Brug Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'Hvis du ændrer dette, kan du blive nødt til at trykke på F5 for at browseren genindlæser JavaScript-biblioteker eller tømme browserens cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Deaktiver klient-brugernavns check for ordet \'web\'.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Vis autoresponder tab i mail kontooplysninger';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Vis mail filter tab i mail kontooplysninger';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Vis custom mailfilter tab i mail kontooplysninger';
-$wb['webmail_url_error_regex'] = 'Ugyldigt webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Pladsholder:';
-$wb['webmail_url_note_txt'] = 'Pladsholder:';
-$wb['available_dashlets_note_txt'] = 'Tilgængelig Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Forhandler Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Forhandler Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Kunde Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Kunde Dashlets';
-$wb['customer_no_template_txt'] = 'Kunde Nr. skabelon';
-$wb['customer_no_template_error_regex_txt'] = 'Kunde Nr. skabelon indeholder ugyldigt karaktere';
-$wb['customer_no_start_txt'] = 'Kunde Nr. start værdi';
-$wb['customer_no_counter_txt'] = 'Kunde Nr. tæller';
-$wb['session_timeout_txt'] = 'Session timeout (minutter)';
-$wb['session_allow_endless_txt'] = 'Aktiver \\"forbliv logget ind\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum adgangskode længde';
-$wb['min_password_strength_txt'] = 'Minimum adgangskode styrke';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/el_system_config.lng b/el_system_config.lng
deleted file mode 100644
index 17414e666d..0000000000
--- a/el_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['warning'] = 'Επεξεργαστείτε τις τιμές με προσοχή! ΜΗΝ αφαιρείτε τα προθέματα σε συστήματα με περισσότερους από έναν πελάτες.';
-$wb['dbname_prefix_txt'] = 'Πρόθεμα Ονόματος Βάσης Δεδομένων';
-$wb['dbuser_prefix_txt'] = 'Πρόθεμα Χρήστη Βάσης Δεδομένων';
-$wb['shelluser_prefix_txt'] = 'Πρόθεμα Χρήστη Shell';
-$wb['webdavuser_prefix_txt'] = 'Πρόθεμα Χρήστη Webdav';
-$wb['ftpuser_prefix_txt'] = 'Πρόθεμα Χρήστη FTP';
-$wb['dbname_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Ονόματος της Βάσης Δεδομένων.';
-$wb['dbuser_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Χρήστη της Βάσης Δεδομένων.';
-$wb['ftpuser_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Χρήστη ftp.';
-$wb['shelluser_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Χρήστη Shell.';
-$wb['webdavuser_prefix_error_regex'] = 'Δεν επιτρέπονται χαρακτήρες στο πρόθεμα του Χρήστη Webdav.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link για το phpmyadmin στη λίστα των βάσεων δεδομένων';
-$wb['mailboxlist_webmail_link_txt'] = 'Link για το webmail στην λίστα των θυρίδων mail';
-$wb['webmail_url_txt'] = 'URL του Webmail';
-$wb['phpmyadmin_url_txt'] = 'URL του PHPMyAdmin';
-$wb['use_domain_module_txt'] = 'Χρήση του αρθρώματος-domain για την προσθήκη νέων domains';
-$wb['use_domain_module_hint'] = 'Αν χρησιμοποιήσετε αυτό το άρθρωμα, οι πελάτες σας μπορούν μόνο να διαλέξουν ένα από τα domains που δημιούργησε για αυτούς ο διαχειριστής. Δεν μπορούν να επεξεργαστούν ελεύθερα τα πεδία του domain.Πρέπει να επανασυνδεθείτε αν αλλάξετε αυτή την τιμή, για να γίνουν οι αλλαγές σας, ορατές.';
-$wb['new_domain_txt'] = 'HTML για την δημιουργία domain';
-$wb['webftp_url_txt'] = 'URL του WebFTP';
-$wb['enable_custom_login_txt'] = 'Αποδοχή  προσαρμοσμένου ονόματος login';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'URL της Mailing list ';
-$wb['admin_mail_txt'] = 'e-mail Διαχειριστών';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Όνομα Administrator';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP θύρα';
-$wb['smtp_user_txt'] = 'SMTP χρήστης';
-$wb['smtp_pass_txt'] = 'SMTP συνθηματικό';
-$wb['smtp_crypt_txt'] = 'Χρήση κρυπτογραφημένης σύνδεσης SSL/TLS για SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'ΠΑρακαλούμε εισάγετε το όνομα διαχειριστή και την διεύθυνση mail αν θέλετε να χρησιμοποιήσετε απόστολή mail με smtp.';
-$wb['tab_change_discard_txt'] = 'Ακύρωση αλλαγών με την αλλαγή καρτέλας';
-$wb['tab_change_warning_txt'] = 'Προειδοποίηση αλλαγής καρτέλας';
-$wb['tab_change_warning_note_txt'] = 'Εμφάνιση μιας προειδοποίησης κατα την αλλαγή καρτέλας σε φόρμες επεξεργασίας που έχουν τροποποιηθεί από τον χρήστη.';
-$wb['vhost_subdomains_txt'] = 'Δημιουργία Subdomains ως web site';
-$wb['vhost_subdomains_note_txt'] = 'Δεν μπορεί να γίνει απενεργοποίηση όσο υπάρχουν vhost subdomains στο σύστημα!';
-$wb['vhost_aliasdomains_txt'] = 'Δημιουργία aliasdomains ως web site';
-$wb['vhost_aliasdomains_note_txt'] = 'Δεν μπορεί να γίνει απενεργοποίηση όσο υπάρχουν vhost aliasdomains στο σύστημα!';
-$wb['phpmyadmin_url_error_regex'] = 'Μη έγκυρο URL phpmyadmin';
-$wb['use_combobox_txt'] = 'Χρήση jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Χρήση Load Indicator (ενδεικτή φόρτωσης)';
-$wb['f5_to_reload_js_txt'] = 'Αν το αλλάξετε, ίσως πρέπει να πατήσετε το F5 για να κάνετε τον φυλλομετρητη να ξαναφορτώσει τις βιβλιοθήκες JavaScript ή να αδείασετε την cache του φυλλομετρητή.';
-$wb['client_username_web_check_disabled_txt'] = 'Απενεργοποίηση ελέγχου στο όνομα χρήστη για την λέξη \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Εμφάνιση της καρτέλας Αυτόματης Απάντησης στις λεπτομέρειες του λογαριασμού mail';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Εμφάνιση της καρτέλας Φίλτρα mail στις λεπτομέρειες του λογαριασμού mail';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Εμφάνιση της καρτέλας Προσαρμοσμένοι Κανόνες στις λεπτομέρειες του λογαριασμού mail';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/en_system_config.lng b/en_system_config.lng
deleted file mode 100644
index 840b3f434b..0000000000
--- a/en_system_config.lng
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb["warning"] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb["dbname_prefix_txt"] = 'Database name prefix';
-$wb["dbuser_prefix_txt"] = 'Database user prefix';
-$wb["shelluser_prefix_txt"] = 'Shell user prefix';
-$wb["webdavuser_prefix_txt"] = 'Webdav user prefix';
-$wb["ftpuser_prefix_txt"] = 'FTP user prefix';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb["dbname_prefix_error_regex"] = 'Char not allowed in database name prefix.';
-$wb["dbuser_prefix_error_regex"] = 'Char not allowed in database user prefix.';
-$wb["ftpuser_prefix_error_regex"] = 'Char not allowed in ftp user prefix.';
-$wb["shelluser_prefix_error_regex"] = 'Char not allowed in shell user prefix.';
-$wb["webdavuser_prefix_error_regex"] = 'Char not allowed in webdav user prefix.';
-$wb["dblist_phpmyadmin_link_txt"] = 'Link to phpmyadmin in DB list';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb["mailboxlist_webmail_link_txt"] = 'Link to webmail in Mailbox list';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show Autoresponder tab in Mailbox detail';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show Mail Filter tab in Mailbox detail';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show Custom Rules tab in Mailbox detail';
-$wb["webmail_url_txt"] = 'Webmail URL';
-$wb["mailmailinglist_link_txt"] = 'Link to mailing list in Mailing list list';
-$wb["mailmailinglist_url_txt"] = 'Mailing list URL';
-$wb["phpmyadmin_url_txt"] = 'PHPMyAdmin URL';
-$wb["use_domain_module_txt"] = 'Use the domain limits in client module to add new domains';
-$wb["use_domain_module_hint"] = 'If you use the domain limits, your customers can only select one of the domains the admin creates for them. They cannot freely edit the domain-field. You have to re-login after changing this value, to make the changes visible.';
-$wb["new_domain_txt"] = 'HTML to create a new domain';
-$wb["webftp_url_txt"] = 'WebFTP URL';
-$wb['admin_mail_txt'] = 'Administrator\'s e-mail';
-$wb["monitor_key_txt"] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrator\'s name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable "stay logged in"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb["default_mailserver_txt"] = 'Default Mailserver';
-$wb["default_webserver_txt"] = 'Default Webserver';
-$wb["default_dnsserver_txt"] = 'Default DNS Server';
-$wb["default_slave_dnsserver_txt"] = 'Default Secondary DNS Server';
-$wb["default_dbserver_txt"] = 'Default Database Server';
-$wb["company_name_txt"] = "Company Name for the page title";
-$wb["reseller_can_use_options_txt"] = "Reseller can use the option-tab for websites";
-$wb["custom_login_text_txt"] = "Custom Text on Login-Page";
-$wb["custom_login_link_txt"] = "Custom Link on Login-Page";
-$wb["login_link_error_regex"] = "Invalid Link for Custom Login";
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Active';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/es_system_config.lng b/es_system_config.lng
deleted file mode 100644
index 7c4525da9a..0000000000
--- a/es_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['admin_dashlets_left_txt'] = 'Componentes del administrador a la izquierda';
-$wb['admin_dashlets_right_txt'] = 'Componentes del administrador a la derecha';
-$wb['admin_mail_txt'] = 'Correo del administrador';
-$wb['admin_name_txt'] = 'Nombre del administrador';
-$wb['available_dashlets_note_txt'] = 'Componentes disponibles:';
-$wb['backups_include_into_web_quota_txt'] = 'Incluir archivos de copia de seguridad en la cuota web.';
-$wb['client_dashlets_left_txt'] = 'Componentes del cliente a la izquierda';
-$wb['client_dashlets_right_txt'] = 'Componentes del cliente a la derecha';
-$wb['client_username_web_check_disabled_txt'] = 'Desactivar la comprobación de la palabra \\"web\\" en los nombres de clientes.';
-$wb['company_name_txt'] = 'Nombre de la compañía para el título de la página';
-$wb['custom_login_link_txt'] = 'Enlace personalizado para la página de Inicio de Sesión';
-$wb['custom_login_text_txt'] = 'Texto personalizado para la página de Inicio de Sesión';
-$wb['customer_no_counter_txt'] = 'Contador de Nº. cliente';
-$wb['customer_no_start_txt'] = 'Valor de inicio de Nº. de cliente';
-$wb['customer_no_template_error_regex_txt'] = 'La plantilla Nº. de cliente contiene caracteres inválidos';
-$wb['customer_no_template_txt'] = 'Plantilla de Nº. de cliente';
-$wb['dashboard_atom_url_admin_txt'] = 'URL del feed atom en el panel (admin)';
-$wb['dashboard_atom_url_client_txt'] = 'URL del feed atom en el panel (cliente)';
-$wb['dashboard_atom_url_reseller_txt'] = 'URL del feed atom en el panel (revendedor)';
-$wb['dblist_phpmyadmin_link_txt'] = 'Vínculo a phpMyAdmin en la lista de bases de datos';
-$wb['dbname_prefix_error_regex'] = 'Carácter no permitido en el prefijo de nombre de base de datos.';
-$wb['dbname_prefix_txt'] = 'Prefijo del nombre de la base de datos';
-$wb['dbuser_prefix_error_regex'] = 'Carácter no permitido en el nombre del usuario de la base datos.';
-$wb['dbuser_prefix_txt'] = 'Prefijo del usuario de la base de datos';
-$wb['default_dbserver_txt'] = 'Servidor de bases de datos por defecto';
-$wb['default_dnsserver_txt'] = 'Servidor DNS por defecto';
-$wb['default_mailserver_txt'] = 'Servidor de correo por defecto';
-$wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundario por defecto';
-$wb['default_webserver_txt'] = 'Servidor web por defecto';
-$wb['enable_custom_login_txt'] = 'Permitir nombre de inicio de sesión personalizado';
-$wb['f5_to_reload_js_txt'] = 'Si modifica esto, deberá pulsar F5 para que el explorador cargue las librerías JavaScript o incluso necesitará borrar la caché de su explorador.';
-$wb['ftpuser_prefix_error_regex'] = 'Carácter no permitido en el prefijo de usuario de FTP.';
-$wb['ftpuser_prefix_txt'] = 'Prefijo del usuario de FTP';
-$wb['login_link_error_regex'] = 'Enlace incorrecto para el inicio de sesión personalizado';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Mostrar la pestaña del auto-respondedor en los detalles de la cuenta de correo';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Mostrar la pestaña filtro de correo personalizado en los detalles de la cuenta de correo';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Mostrar la pestaña filtro de correo en los detalles de la cuenta de correo';
-$wb['mailboxlist_webmail_link_txt'] = 'Vinculo a correo web en la lista de buzones de correo';
-$wb['mailmailinglist_link_txt'] = 'Vínculo a la lista de correos en la lista de la Lista de correos';
-$wb['mailmailinglist_url_txt'] = 'URL a la lista de correos';
-$wb['maintenance_mode_txt'] = 'Modo de mantenimiento';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['min_password_length_txt'] = 'Longitud mínima de la contraseña';
-$wb['min_password_strength_txt'] = 'Fortaleza mínima de la contraseña';
-$wb['monitor_key_txt'] = 'Palabra clave del Monitor';
-$wb['new_domain_txt'] = 'HTML para la creación de nuevos dominios';
-$wb['No'] = 'No';
-$wb['phpmyadmin_url_error_regex'] = 'URL inválida a phpMyAdmin';
-$wb['phpmyadmin_url_note_txt'] = 'Marcador de posición:';
-$wb['phpmyadmin_url_txt'] = 'Enlace a phpMyAdmin';
-$wb['reseller_can_use_options_txt'] = 'El revendedor puede utilizar la pestaña opciones para los sitios webs';
-$wb['reseller_dashlets_left_txt'] = 'Componentes de revendedores a la izquierda';
-$wb['reseller_dashlets_right_txt'] = 'Componentes de revendedores a la derecha';
-$wb['session_allow_endless_txt'] = 'Habilitar \\"mantenerme conectado\\"';
-$wb['session_timeout_txt'] = 'Tiempo límite de sesión (minutos)';
-$wb['shelluser_prefix_error_regex'] = 'Carácter no permitido en el prefijo de usuario del shell.';
-$wb['shelluser_prefix_txt'] = 'Prefijo del usuario del Shell';
-$wb['smtp_crypt_txt'] = 'Usar conexión encriptada SSL/TLS para el SMTP';
-$wb['smtp_enabled_txt'] = 'Usar SMTP para enviar correos del sistema';
-$wb['smtp_host_txt'] = 'Host del SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Por favor ingrese el nombre y correo del admin si desea usar el envío de correo mediante SMTP.';
-$wb['smtp_pass_txt'] = 'Contraseña del SMTP';
-$wb['smtp_port_txt'] = 'Puerto del SMTP';
-$wb['smtp_user_txt'] = 'Usuario del SMTP';
-$wb['system_config_desc_txt'] = '';
-$wb['tab_change_discard_txt'] = 'Descartar cambios al cambiar de pestaña';
-$wb['tab_change_warning_note_txt'] = 'Mostrar advertencia al cambiar de pestaña en los formularios de edición si se ha cambiado algún parámetro.';
-$wb['tab_change_warning_txt'] = 'Advertencia al cambiar de pestaña';
-$wb['use_combobox_txt'] = 'Usar lista desplegable de jQuery UI';
-$wb['use_domain_module_hint'] = 'Si utiliza los límites de dominio, sus clientes solo podrán seleccionar los dominios que el administrador haya creado para ellos. Los clientes no podrán editar libremente en campo de dominio. Necesitará reiniciar la sesión después de modificar esta opción para que que los cambios surjan efecto.';
-$wb['use_domain_module_txt'] = 'Usar los límites de dominio en el modulo del cliente para agregar nuevos dominios';
-$wb['use_loadindicator_txt'] = 'Usar indicador de carga';
-$wb['vhost_aliasdomains_note_txt'] = 'No puede deshabilitar esto mientras existan host virtuales de alias de dominios en el sistema';
-$wb['vhost_aliasdomains_txt'] = 'Crear alias de dominios como sitios web';
-$wb['vhost_subdomains_note_txt'] = '¡No se puede desactivar esta opción mientras existan sub-dominios con host virtuales en el sistema!';
-$wb['vhost_subdomains_txt'] = 'Crear sub-dominio como sitio web';
-$wb['warning'] = '¡Edite estos valores cuidadosamente! No elimine los prefijos si el sistema contiene más de un cliente.';
-$wb['webdavuser_prefix_error_regex'] = 'Carácter no permitido en el prefijo del usuario de webdav.';
-$wb['webdavuser_prefix_txt'] = 'Prefijo del usuario de Webdav';
-$wb['webftp_url_txt'] = 'Enlace al cliente FTP por web';
-$wb['webmail_url_error_regex'] = 'Dirección del correo web inválida';
-$wb['webmail_url_note_txt'] = 'Marcador de posición:';
-$wb['webmail_url_txt'] = 'URL de correo web';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/fi_system_config.lng b/fi_system_config.lng
deleted file mode 100644
index 2cafa6f5bf..0000000000
--- a/fi_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Muokkaa näitä arvoja varoen! Älä poista etuliitteitä jos järjestelmässä on enemmän kuin yksi asiakas.';
-$wb['dbname_prefix_txt'] = 'Tietokannan nimen etuliite';
-$wb['dbuser_prefix_txt'] = 'Tietokannan käyttäjätunnuksen etuliite';
-$wb['shelluser_prefix_txt'] = 'Shell-käyttäjätunnuksen etuliite';
-$wb['ftpuser_prefix_txt'] = 'FTP-käyttäjätunnuksen etuliite';
-$wb['dbname_prefix_error_regex'] = 'Tietokannan nimen etuliite on vääränlainen.';
-$wb['dbuser_prefix_error_regex'] = 'Tietokannan käyttäjätunnuksen etuliite on vääränlainen.';
-$wb['ftpuser_prefix_error_regex'] = 'FTP-käyttäjätunnuksen etuliite on vääränlainen.';
-$wb['shelluser_prefix_error_regex'] = 'Shell-käyttäjätunnuksen etuliite on vääränlainen.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Linkki phpMyAdminiin tietokantalistassa';
-$wb['mailboxlist_webmail_link_txt'] = 'Linkki internetpostiin postilaatikkolistassa';
-$wb['webmail_url_txt'] = 'Webmail-osoite';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin-osoite';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/fr_system_config.lng b/fr_system_config.lng
deleted file mode 100644
index 3b6fe68521..0000000000
--- a/fr_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['dashboard_atom_url_admin_txt'] = 'URL du fil de syndication Atom du tableau de bord (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'URL du fil de syndication Atom du tableau de bord ( reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'URL du fil de syndication Atom du tableau de bord (client)';
-$wb['warning'] = 'Editez ces valeurs prudemment ! Il n’est pas conseillé de modifier les préfixes lorsque vous avez des clients !';
-$wb['dbname_prefix_txt'] = 'Préfixe du nom de la BDd';
-$wb['dbuser_prefix_txt'] = 'Préfixe de l’utilisateur de la BDd';
-$wb['shelluser_prefix_txt'] = 'Préfixe de l’utilisateur Shell';
-$wb['webdavuser_prefix_txt'] = 'Préfixe de l’utilisateur WebDAV';
-$wb['ftpuser_prefix_txt'] = 'Préfixe de l’utilisateur FTP';
-$wb['dbname_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe du nom de la BDD.';
-$wb['dbuser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe de l’utilisateur de la BDD.';
-$wb['ftpuser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe de l’utilisateur FTP.';
-$wb['shelluser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe de l’utilisateur Shell.';
-$wb['webdavuser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe utilisateur WebDAV.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Lien vers PHPMyAdmin dans la liste des bases';
-$wb['enable_custom_login_txt'] = 'Autoriser les noms d’utilisateurs personnalisés';
-$wb['mailboxlist_webmail_link_txt'] = 'Lien vers le Webmail dans la liste des boîtes mail';
-$wb['webmail_url_txt'] = 'URL du Webmail';
-$wb['mailmailinglist_link_txt'] = 'Lien vers la mailing list dans la liste des Liste de distribution';
-$wb['mailmailinglist_url_txt'] = 'URL des Liste de distribution';
-$wb['phpmyadmin_url_txt'] = 'URL de PHPMyAdmin';
-$wb['use_domain_module_txt'] = 'Utiliser le module de domaine pour ajouter de nouveaux domaines';
-$wb['use_domain_module_hint'] = 'Si vous utilisez ce module, vos utilisateurs peuvent uniquement sélectionner un des domaines que l’admin crée pour eux. Ils ne peuvent pas éditer librement le champ domaine. Vous devez vous identifier à nouveau après avoir modifié cette valeur pour rendre les modifications visibles.';
-$wb['new_domain_txt'] = 'HTML pour créer un nouveau domaine';
-$wb['webftp_url_txt'] = 'URL du WebFTP';
-$wb['admin_mail_txt'] = 'E-mail de l’administrateur';
-$wb['monitor_key_txt'] = 'Mot-clé du moniteur';
-$wb['admin_name_txt'] = 'Nom des administrateurs';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create Subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word ’web’.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/hr_system_config.lng b/hr_system_config.lng
deleted file mode 100644
index 66931524ec..0000000000
--- a/hr_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Oprezno mijenjajte prefikse i postavke! Nemojte brisati prefikse na sistemima gdje postoji više od jednog klijenata.';
-$wb['dbname_prefix_txt'] = 'Prefiks nazivu baze';
-$wb['dbuser_prefix_txt'] = 'Prefiks nazivu korisnika baze';
-$wb['shelluser_prefix_txt'] = 'Prefiks Shell računu';
-$wb['webdavuser_prefix_txt'] = 'Prefix Webdav računu';
-$wb['ftpuser_prefix_txt'] = 'Prefiks FTP računu';
-$wb['dbname_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu naziva baze.';
-$wb['dbuser_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu naziva korisnika baze.';
-$wb['ftpuser_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu FTP računa.';
-$wb['shelluser_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu Shell računa.';
-$wb['webdavuser_prefix_error_regex'] = 'Nedozvoljeni znak u prefiksu webdav računa.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link za phpmyadmin u DB listi';
-$wb['mailboxlist_webmail_link_txt'] = 'Link za webmail u Mailbox listi';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Koristi modul Domene za dodavanje novih domena';
-$wb['use_domain_module_hint'] = 'Ukoliko koristite ovaj modul, vaši klijenti mogu izabrati samo domenu koju im je admin kreirao. Klijenti ne mogu slobodno mijenjati postavke domene. Morate se ponovno logirati nakon mijenjanja ove postavke da bi promjene bile vidljive.';
-$wb['new_domain_txt'] = 'HTML za kreiranje nove domene';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['monitor_key_txt'] = 'Monitoriranje riječi';
-$wb['dashboard_atom_url_admin_txt'] = 'RSS URL za početnu stranicu (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'RSS URL za početnu stranicu (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'RSS URL za početnu stranicu (client)';
-$wb['enable_custom_login_txt'] = 'Dozvoli izbor korisničkog imena';
-$wb['mailmailinglist_link_txt'] = 'Link na mailing listu u Mailing listi';
-$wb['mailmailinglist_url_txt'] = 'URL mailing liste';
-$wb['admin_mail_txt'] = 'e-mail administratora';
-$wb['admin_name_txt'] = 'Ime administratora';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/hu_system_config.lng b/hu_system_config.lng
deleted file mode 100644
index 6e1f97dfbb..0000000000
--- a/hu_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one Ügyfél.';
-$wb['dbname_prefix_txt'] = 'Database name prefix';
-$wb['dbuser_prefix_txt'] = 'Database user prefix';
-$wb['shelluser_prefix_txt'] = 'Shell user prefix';
-$wb['ftpuser_prefix_txt'] = 'FTP user prefix';
-$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
-$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
-$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
-$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
-$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/id_system_config.lng b/id_system_config.lng
deleted file mode 100644
index 9072d62832..0000000000
--- a/id_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Sunting nilai-nilai ini dengan hati-hati! Jangan hapus prefiks di sistem yang memiliki lebih dari 1 klien.';
-$wb['dbname_prefix_txt'] = 'Prefiks nama database';
-$wb['dbuser_prefix_txt'] = 'Prefiks pengguna database';
-$wb['shelluser_prefix_txt'] = 'Prefiks pengguna shell';
-$wb['ftpuser_prefix_txt'] = 'Prefiks pengguna FTP';
-$wb['dbname_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks nama database.';
-$wb['dbuser_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks pengguna database.';
-$wb['ftpuser_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks pengguna ftp.';
-$wb['shelluser_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks pengguna shell.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Tautan ke phpmyadmin di daftar DB';
-$wb['mailboxlist_webmail_link_txt'] = 'Tautan ke webmail di daftar Mailbox';
-$wb['webmail_url_txt'] = 'URL Webmail';
-$wb['phpmyadmin_url_txt'] = 'URL PHPMyAdmin';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Prefiks pengguna Webdav';
-$wb['webdavuser_prefix_error_regex'] = 'Karakter tidak diperbolehkan di prefiks pengguna webdav.';
-$wb['use_domain_module_txt'] = 'Gunakan modul domain untuk menambahkan domain baru';
-$wb['use_domain_module_hint'] = 'Jika Anda menggunakan modul ini, pelanggan Anda hanya dapat memilih salah satu domain yang dibuat oleh admin untuk mereka. Mereka tidak bisa menyunting dengan bebas kolom domain. Anda harus masuk kembali setelah mengubah nilai ini, agar perubahannya terlihat.';
-$wb['new_domain_txt'] = 'HTML untuk membuat domain baru';
-$wb['webftp_url_txt'] = 'URL WebFTP';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/it_system_config.lng b/it_system_config.lng
deleted file mode 100644
index 42a03ed0b8..0000000000
--- a/it_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
-$wb['dbname_prefix_txt'] = 'Prefisso nome database';
-$wb['dbuser_prefix_txt'] = 'Prefisso utente database';
-$wb['shelluser_prefix_txt'] = 'Prefisso utente Shell';
-$wb['ftpuser_prefix_txt'] = 'Prefisso utente FTP';
-$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
-$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
-$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
-$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
-$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Crea  Subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/ja_system_config.lng b/ja_system_config.lng
deleted file mode 100644
index dfea52b18d..0000000000
--- a/ja_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = '値の変更には細心の注意を払ってください。クライアントが利用中のシステムのプリフィックスは削除しないでください。';
-$wb['dbname_prefix_txt'] = 'データベース名のプリフィックス';
-$wb['dbuser_prefix_txt'] = 'データベースユーザー名のプリフィックス';
-$wb['shelluser_prefix_txt'] = 'Shellユーザー名のプリフィックス';
-$wb['ftpuser_prefix_txt'] = 'FTPユーザー名のプリフィックス';
-$wb['dbname_prefix_error_regex'] = 'データベースのプリフィックスとして不正な値が指定されています。';
-$wb['dbuser_prefix_error_regex'] = 'データベースユーザーのプリフィックスとして不正な値が指定されています。';
-$wb['ftpuser_prefix_error_regex'] = 'FTPユーザーのプリフィックスとして不正な値が指定されています。';
-$wb['shelluser_prefix_error_regex'] = 'Shellユーザーのプリフィックスとして不正な値が指定されています。';
-$wb['dblist_phpmyadmin_link_txt'] = 'データベースの一覧から phpmyadmin へリンクする';
-$wb['mailboxlist_webmail_link_txt'] = 'メールボックスの一覧から webmail へリンクする';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/nl_system_config.lng b/nl_system_config.lng
deleted file mode 100644
index 358edde69b..0000000000
--- a/nl_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['warning'] = 'Edit these values carefully! Verwijder de voorvoegsels niet op systemen met meer dan ♪één klant.';
-$wb['dbname_prefix_txt'] = 'Database naam voorvoegsel';
-$wb['dbuser_prefix_txt'] = 'Database gebruiker voorvoegsel';
-$wb['shelluser_prefix_txt'] = 'Shell gebruiker voorvoegsel';
-$wb['webdavuser_prefix_txt'] = 'Webdav gebruiker voorvoegsel';
-$wb['ftpuser_prefix_txt'] = 'FTP gebruiker voorvoegsel';
-$wb['dbname_prefix_error_regex'] = 'Char niet toegestaan in database naam voorvoegsel.';
-$wb['dbuser_prefix_error_regex'] = 'Char niet toegestaan in database gebruiker voorvoegsel.';
-$wb['ftpuser_prefix_error_regex'] = 'Char niet toegestaan in ftp gebruiker voorvoegsel.';
-$wb['shelluser_prefix_error_regex'] = 'Char niet toegestaan in shell gebruiker voorvoegsel.';
-$wb['webdavuser_prefix_error_regex'] = 'Char niet toegestaan in webdav gebruiker voorvoegsel.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link naar phpmyadmin in DB lijst';
-$wb['mailboxlist_webmail_link_txt'] = 'Link naar webmail in Mailbox lijst';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Gebruik de domein-module om nieuwe domeinen toe te voegen';
-$wb['use_domain_module_hint'] = 'Als u deze module gebruikt, kunnen uw klanten alleen de domeinen selecteren die de administrator heeft aangemaakt. klanten kunnen het domein-veld zelf niet wijzigen. Na opnieuw ingelogd te zijn zullen de wijzigingen zichtbaar zijn.';
-$wb['new_domain_txt'] = 'HTML om een nieuw domein te maken';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/pl_system_config.lng b/pl_system_config.lng
deleted file mode 100644
index d309ab812f..0000000000
--- a/pl_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['warning'] = 'Edytuj te wartości ostrożnie! Nie usuwaj prefiksów w systemie w więcej niż jednym kliencie.';
-$wb['dbname_prefix_txt'] = 'Prefiks nazwy bazy danych';
-$wb['dbuser_prefix_txt'] = 'Prefiks użytkownika bazy danych';
-$wb['shelluser_prefix_txt'] = 'Prefiks użytkownika shell';
-$wb['ftpuser_prefix_txt'] = 'Prefiks użytkownika FTP';
-$wb['dbname_prefix_error_regex'] = 'Znak nie jest dozwolony w prefiksie nazwy bazy danych.';
-$wb['dbuser_prefix_error_regex'] = 'Znak nie jest dozwolony w prefiksie nazwy użytkownika bazy danych.';
-$wb['ftpuser_prefix_error_regex'] = 'Znak nie jest dozwolony w prefiksie nazwy użytkownika ftp.';
-$wb['shelluser_prefix_error_regex'] = 'Znak nie jest dozwolony w prefiksie nazwy użytkownika shell.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Adres do phpMyAdmin w liście baz danych';
-$wb['mailboxlist_webmail_link_txt'] = 'Adres do poczty e-mail w liście skrzynek pocztowych';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Użyj modułu Domeny do dodawania nowych domen';
-$wb['use_domain_module_hint'] = 'Jeżeli użyjesz tego modułu, Twoi użytkownicy będą mogli użyć tylko domeny stworzonej im przez administratora. Nie mogą edytować wpisów domeny. Musisz przelogować się po zmianie tej wartości, aby zobaczyć widoczne rezultaty.';
-$wb['new_domain_txt'] = 'HTML do stworzenia nowej domeny';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Prefiks użytkownika webdav';
-$wb['webdavuser_prefix_error_regex'] = 'Niedozwolony znak w prefiksie użytkownika webdav.';
-$wb['webftp_url_txt'] = 'Link do WebFTP';
-$wb['enable_custom_login_txt'] = 'Zezwalaj na dowolnÄ… nazwÄ™ loginu';
-$wb['mailmailinglist_link_txt'] = 'Link do listy mailingowej na liście list mailingowych';
-$wb['mailmailinglist_url_txt'] = 'URL listy mailingowej';
-$wb['admin_mail_txt'] = 'E-Mail administratora';
-$wb['monitor_key_txt'] = 'Klucz monitora';
-$wb['admin_name_txt'] = 'Nazwa administratora';
-$wb['system_config_desc_txt'] = '';
-$wb['smtp_missing_admin_mail_txt'] = 'Podaj nazwę administratora oraz adres email jeżeli chcesz użyć wysyłanie maili przez SMTP.';
-$wb['tab_change_discard_txt'] = 'Porzuć zmiany przy zmianie zakładki';
-$wb['tab_change_warning_txt'] = 'Ostrzegaj przy zmianie zakładki';
-$wb['tab_change_warning_note_txt'] = 'Pokaż ostrzeżenie przy zmianie zakładki jeżeli zostały zmienione dane przez użytkownika.';
-$wb['vhost_subdomains_txt'] = 'Twórz subdomeny jako strony web';
-$wb['vhost_subdomains_note_txt'] = 'Nie możesz wyłączyć tego tak długo jak istnieją w systemie vhosty subdomen.';
-$wb['vhost_aliasdomains_txt'] = 'Twórz aliasdomeny jako strony web';
-$wb['vhost_aliasdomains_note_txt'] = 'Nie możesz wyłączyć tego tak długo jak istnieją w systemie vhosty aliasdomen.';
-$wb['maintenance_mode_txt'] = 'Tryb serwisowy';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Używaj SMTP do wysyłania powiadomień systemowych';
-$wb['smtp_host_txt'] = 'Host SMTP';
-$wb['smtp_port_txt'] = 'Port SMTP';
-$wb['smtp_user_txt'] = 'Użytkownik SMTP';
-$wb['smtp_pass_txt'] = 'Hasło SMTP';
-$wb['smtp_crypt_txt'] = 'Użyj połączenia szyfrowanego SSL/TLS dla SMTP';
-$wb['phpmyadmin_url_error_regex'] = 'Nieprawidłowy link do phpmyadmin';
-$wb['use_combobox_txt'] = 'Użyj jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Użyj wskaźnika ładowania';
-$wb['f5_to_reload_js_txt'] = 'Jeżeli zmienisz to, możesz potrzebować wcisnąć F5 lub wyczyścić cache aby przeglądarka przeładowała biblioteki JavaScript.';
-$wb['client_username_web_check_disabled_txt'] = 'Wyłącz sprawdzanie nazwy klienta w poszukiwaniu słowa -web-.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Pokaż zakładkę autorespondera w szczegółach konta email.';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Pokaż zakładkę filtra email w szczegółach konta email.';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Pokaż zakładkę własnych filtrów email w szczegółach konta email.';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/pt_system_config.lng b/pt_system_config.lng
deleted file mode 100644
index 05edb306d9..0000000000
--- a/pt_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Edite estes valores com cuidado! Não remova os prefixos em um sistema com mais de um cliente!!';
-$wb['dbname_prefix_txt'] = 'Prefixo Nome da Base de Dados';
-$wb['dbuser_prefix_txt'] = 'Prefixo Utilizador da Base de Dados';
-$wb['shelluser_prefix_txt'] = 'Prefixo Utilizador de Shell';
-$wb['ftpuser_prefix_txt'] = 'Prefixo Utilizador FTP';
-$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo do nome da Base de Dados!';
-$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Utilizador da Base de Dados!';
-$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Utilizador FTP!';
-$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Utilizador Shell!';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link para phpmyadmin';
-$wb['mailboxlist_webmail_link_txt'] = 'Link para o webmail';
-$wb['webmail_url_txt'] = 'URL do Webmail';
-$wb['phpmyadmin_url_txt'] = 'URL do PHPMyAdmin';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/ro_system_config.lng b/ro_system_config.lng
deleted file mode 100644
index 33ee2b4bde..0000000000
--- a/ro_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
-$wb['dbname_prefix_txt'] = 'Database name prefix';
-$wb['dbuser_prefix_txt'] = 'Database user prefix';
-$wb['shelluser_prefix_txt'] = 'Shell user prefix';
-$wb['ftpuser_prefix_txt'] = 'FTP user prefix';
-$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
-$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
-$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
-$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
-$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/ru_system_config.lng b/ru_system_config.lng
deleted file mode 100644
index 62c856fae0..0000000000
--- a/ru_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = 'Настройка параметров по умолчанию';
-$wb['warning'] = 'Изменяйте эти значения аккуратно! Не удаляйте префиксы на системах где более одного пользователя.';
-$wb['dbname_prefix_txt'] = 'Префикс базы данных';
-$wb['dbuser_prefix_txt'] = 'Префикс пользователя базы данных';
-$wb['shelluser_prefix_txt'] = 'Префикс shell-пользователя';
-$wb['ftpuser_prefix_txt'] = 'Префикс FTP пользователя';
-$wb['dbname_prefix_error_regex'] = 'Некорректный символ в префиксе базы данных';
-$wb['dbuser_prefix_error_regex'] = 'Некорректный символ в префиксе пользователя базы данных';
-$wb['ftpuser_prefix_error_regex'] = 'Некорректный символ в префиксе FTP пользователя';
-$wb['shelluser_prefix_error_regex'] = 'Некорректный символ в префиксе shell-пользователя';
-$wb['dblist_phpmyadmin_link_txt'] = 'Ссылка на phpmyadmin в списке баз данных';
-$wb['mailboxlist_webmail_link_txt'] = 'Ссылка на веб-почту в списке почтовых ящиков';
-$wb['webmail_url_txt'] = 'URL веб-почты';
-$wb['phpmyadmin_url_txt'] = 'URL PHPMyAdmin';
-$wb['use_domain_module_txt'] = 'Использовать модуль домена, чтобы добавить новые домены';
-$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \\"домен\\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
-$wb['new_domain_txt'] = 'HTML текст, чтобы создать новый домен';
-$wb['webdavuser_prefix_txt'] = 'Префикс пользователя WebDAV';
-$wb['webdavuser_prefix_error_regex'] = 'Некорректный символ в префиксе пользователя WebDAV.';
-$wb['webftp_url_txt'] = 'URL WebFTP';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['enable_custom_login_txt'] = 'Разрешить пользовательское имя входа в систему';
-$wb['mailmailinglist_link_txt'] = 'Ссылка на почтовую рассылку в списке рассылок';
-$wb['mailmailinglist_url_txt'] = 'URL почтовой рассылки';
-$wb['admin_mail_txt'] = 'E-mail администратора';
-$wb['admin_name_txt'] = 'Имя администратора';
-$wb['maintenance_mode_txt'] = 'Режим технического бслуживания';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Использовать SMTP для отправки системных сообщений';
-$wb['smtp_host_txt'] = 'Хост SMTP';
-$wb['smtp_port_txt'] = 'Порт SMTP';
-$wb['smtp_user_txt'] = 'Пользователь SMTP';
-$wb['smtp_pass_txt'] = 'Пароль SMTP';
-$wb['smtp_crypt_txt'] = 'Использовать SSL/TLS-шифрование соединения для SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Пожалуйста, введите имя администратора и адрес эл. почты администратора, если вы хотите использовать SMTP для отправки почты.';
-$wb['tab_change_discard_txt'] = 'Откатить изменения на вкладке изменить';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Показать предупреждение об изменении вкладки в формах редактирования, если какие-либо данные были изменены пользователем.';
-$wb['vhost_subdomains_txt'] = 'Создать поддомен как веб-сайт';
-$wb['vhost_subdomains_note_txt'] = 'Этот параметр не может быть отключен пока поскольку существует виртуальный хост поддоменов в системе!';
-$wb['vhost_aliasdomains_txt'] = 'Создать алиас доменов как веб-сайт';
-$wb['vhost_aliasdomains_note_txt'] = 'Этот параметр не может быть отключен пока поскольку существует виртуальный хост алиасов доменов в системе!';
-$wb['phpmyadmin_url_error_regex'] = 'Некорректный URL phpmyadmin';
-$wb['use_combobox_txt'] = 'Использовать jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Использовать индикатор загрузки';
-$wb['f5_to_reload_js_txt'] = 'Если вы измените это, вам, возможно, придется нажать F5, чтобы перезагрузить в браузере JavaScript-библиотеи или очистить кэш браузера.';
-$wb['client_username_web_check_disabled_txt'] = 'Отключить проверку логина клиента для слова \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Включить резервное копирование файлов в веб-квоту.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Показывать вкладку автоответчика в деталях учетной записи электронной почты';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Показывать вкладку почтового фильтра в деталях учетной записи электронной почты';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Показывать вкладку пользовательского почтового фильтра в деталях учетной записи электронной почты';
-$wb['webmail_url_error_regex'] = 'Некорректный URL веб-почты';
-$wb['phpmyadmin_url_note_txt'] = 'Заменитель:';
-$wb['webmail_url_note_txt'] = 'Заменитель:';
-$wb['available_dashlets_note_txt'] = 'Доступные дашлеты:';
-$wb['admin_dashlets_left_txt'] = 'Дашлеты Админа слева';
-$wb['admin_dashlets_right_txt'] = 'Дашлеты Админа справа';
-$wb['reseller_dashlets_left_txt'] = 'Дашлеты Реселлера слева';
-$wb['reseller_dashlets_right_txt'] = 'Дашлеты Реселлера справа';
-$wb['client_dashlets_left_txt'] = 'Дашлеты Клиента слева';
-$wb['client_dashlets_right_txt'] = 'Дашлеты Клиента справа';
-$wb['customer_no_template_txt'] = 'Шаблон номера Клиента';
-$wb['customer_no_template_error_regex_txt'] = 'Шаблон номера Клиента содержит недопустимые символы.';
-$wb['customer_no_start_txt'] = 'Начальное значение номера Клиента';
-$wb['customer_no_counter_txt'] = 'Счётчик номера Клиента';
-$wb['session_timeout_txt'] = 'Тайм-аут сессии (в минутах)';
-$wb['session_allow_endless_txt'] = 'Включить \\"оставаться в системе\\"';
-$wb['No'] = 'Нет';
-$wb['min_password_length_txt'] = 'Минимальная длина пароля';
-$wb['min_password_strength_txt'] = 'Минимальная стойкость пароля';
-$wb['company_name_txt'] = 'Название компании для заголовка страницы';
-$wb['reseller_can_use_options_txt'] = 'Реселлер может использовать вкладку Параметры для веб-сайтов';
-$wb['custom_login_text_txt'] = 'Пользовательский текст на странице входа';
-$wb['custom_login_link_txt'] = 'Пользовательская ссылка на страницу входа';
-$wb['login_link_error_regex'] = 'Некорректная ссылка для пользовательского входа';
-$wb['default_mailserver_txt'] = 'Почтовый сервер по умолчанию';
-$wb['default_webserver_txt'] = 'Web-сервер по умолчанию';
-$wb['default_dnsserver_txt'] = 'DNS-сервер по умолчанию';
-$wb['default_slave_dnsserver_txt'] = 'Вторичный DNS-сервер по умолчанию';
-$wb['default_dbserver_txt'] = 'Сервер базы данных по умолчанию';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/se_system_config.lng b/se_system_config.lng
deleted file mode 100644
index bf0ec4942d..0000000000
--- a/se_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Redigera dess värden försiktigt! Ta inte bort prefix på system med mer än en kund.';
-$wb['dbname_prefix_txt'] = 'Prefix för databasnamn';
-$wb['dbuser_prefix_txt'] = 'Prefix för databasanvändare';
-$wb['shelluser_prefix_txt'] = 'Prefix för shell-användare';
-$wb['ftpuser_prefix_txt'] = 'Prefix för FTP-användare';
-$wb['dbname_prefix_error_regex'] = 'Otillåtet tecken i prefix för databasnamn.';
-$wb['dbuser_prefix_error_regex'] = 'Otillåtet tecken i prefix för databasanvändare.';
-$wb['ftpuser_prefix_error_regex'] = 'Otillåtet tecken i prefix för FTP-användare.';
-$wb['shelluser_prefix_error_regex'] = 'Otillåtet tecken i prefix för shell-användare.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Länka till PHPMyAdmin i databaslista';
-$wb['mailboxlist_webmail_link_txt'] = 'Länka till webbmail i epostkontolista';
-$wb['webmail_url_txt'] = 'Webbmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Används domänmodul för att lägga till nya domäner';
-$wb['use_domain_module_hint'] = 'Om du använder denna modul kommer kunder endast kunna välja bland de domäner administratören har tilldelat dem, de kan alltså inte lägga till vilken domän som helst. Du måste logga in på nytt innan dessa ändringar blir synliga.';
-$wb['new_domain_txt'] = 'HTML vid skapande av nya domäner';
-$wb['dashboard_atom_url_admin_txt'] = 'Kontrolpanelens nyhetsflöde URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Kontrolpanelens nyhetsflöde URL (återförsäljare)';
-$wb['dashboard_atom_url_client_txt'] = 'Kontrolpanelens nyhetsflöde URL (kund)';
-$wb['webdavuser_prefix_txt'] = 'Prefix för WebDAV-användare';
-$wb['webdavuser_prefix_error_regex'] = 'Otillåtet tecken i prefix för WebDAV-användare';
-$wb['webftp_url_txt'] = 'WebbFTP URL';
-$wb['enable_custom_login_txt'] = 'Tillåt valfritt inloggningsnamn';
-$wb['mailmailinglist_link_txt'] = 'Länka till epostlista i listan över epostlistor';
-$wb['mailmailinglist_url_txt'] = 'Adress till epostlista';
-$wb['admin_mail_txt'] = 'Administratörens epostadress';
-$wb['monitor_key_txt'] = 'Bevakning nyckelord';
-$wb['admin_name_txt'] = 'Administratörens namn';
-$wb['maintenance_mode_txt'] = 'Underhållsläge';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Använd SMTP för att skicka systemmail';
-$wb['smtp_host_txt'] = 'SMTP-värd';
-$wb['smtp_port_txt'] = 'SMTP-port';
-$wb['smtp_user_txt'] = 'SMTP-användare';
-$wb['smtp_pass_txt'] = 'SMTP-lösenord';
-$wb['smtp_crypt_txt'] = 'Använd SSL/TLS-krypterad anslutning för SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Kasta ändringar vid byte av flik';
-$wb['tab_change_warning_txt'] = 'Varning vid byte av flik';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['vhost_subdomains_txt'] = 'Skapa underdomäner som en egen sajt';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Ogiltig adress till PHPMyAdmin';
-$wb['use_combobox_txt'] = 'Använd jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Använd laddningsindikator';
-$wb['f5_to_reload_js_txt'] = 'Om du ändrar detta kan du behöva trycka F5 för att ladda om javascript, eller rensa din webbläsarcache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Visa autosvarsfliken vid detaljerna för epostkonto';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Visa epostfilterfliken vid detaljerna för epostkonto';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Kundnummermall';
-$wb['customer_no_template_error_regex_txt'] = 'Kundnummermallen innehåller otillåtna tecken';
-$wb['customer_no_start_txt'] = 'Kundnummer startvärde';
-$wb['customer_no_counter_txt'] = 'Kundnummer räknare';
-$wb['session_timeout_txt'] = 'Session timeout (minuter)';
-$wb['session_allow_endless_txt'] = 'Aktivera \\"håll mig inloggad\\"';
-$wb['No'] = 'Nej';
-$wb['min_password_length_txt'] = 'Minsta lösenordslängd';
-$wb['min_password_strength_txt'] = 'Minsta lösenordsstyrka';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/sk_system_config.lng b/sk_system_config.lng
deleted file mode 100644
index b6bbe102dd..0000000000
--- a/sk_system_config.lng
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['warning'] = 'Upravte tieto hodnoty pozorne! Neodstraňujte predpony na systémoch s viac ako jedného klienta.';
-$wb['dbname_prefix_txt'] = 'Predpona názvu databázy ';
-$wb['dbuser_prefix_txt'] = 'Predpona databáza užívateľa';
-$wb['shelluser_prefix_txt'] = 'Predpona Shell užívateľa';
-$wb['ftpuser_prefix_txt'] = 'Predpona FTP užívateľ';
-$wb['dbname_prefix_error_regex'] = 'Char nie je povolený v prefix názov databázy.';
-$wb['dbuser_prefix_error_regex'] = 'Char nie je povolené v databáze predpone user.';
-$wb['ftpuser_prefix_error_regex'] = 'Char nie je povolené v ftp užívateľ predpone .';
-$wb['shelluser_prefix_error_regex'] = 'Char nie je povolené Shell užívateľ predpone .';
-$wb['dblist_phpmyadmin_link_txt'] = 'Odkaz na phpmyadmin v DB zozname';
-$wb['mailboxlist_webmail_link_txt'] = 'Odkaz na webmail v zozname schránok';
-$wb['webmail_url_txt'] = 'Webmail URL';
-$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
-$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They cannot free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['webftp_url_txt'] = 'WebFTP URL';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
-$wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['monitor_key_txt'] = 'Monitor keyword';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
-$wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
-$wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Create subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['ca_name_txt'] = 'Name';
-$wb['ca_issue_txt'] = 'Issue';
-$wb['ca_wildcard_txt'] = 'Use Wildcard';
-$wb['ca_critical_txt'] = 'Strict Check';
-$wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-?>
diff --git a/tr_system_config.lng b/tr_system_config.lng
deleted file mode 100644
index 21a70bec4b..0000000000
--- a/tr_system_config.lng
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-$wb['system_config_title'] = 'System Config';
-$wb['system_config_desc_txt'] = '';
-$wb['smtp_missing_admin_mail_txt'] = 'SMTP e-posta gönderimini kullanmak için yönetici adı ve yönetici e-posta adresini yazmalısınız.';
-$wb['dashboard_atom_url_admin_txt'] = 'Panel Atom akışının İnternet adresi (yönetici)';
-$wb['dashboard_atom_url_reseller_txt'] = 'Panel Atom akışının İnternet adresi (bayi)';
-$wb['dashboard_atom_url_client_txt'] = 'Panel Atom akışının İnternet adresi (müşteri)';
-$wb['warning'] = 'Bu değerleri değiştirirken dikkatli olun! Sistemde birden fazla müşteri varsa, ön ekleri kaldırmayın.';
-$wb['tab_change_discard_txt'] = 'Sekme değiştirildiğinde değişiklikler yok sayılsın';
-$wb['tab_change_warning_txt'] = 'Sekme değiştirme uyarısı';
-$wb['tab_change_warning_note_txt'] = 'Formlardaki veriler düzenlenirken, kullanıcı bir değişiklik yapmışsa sekme değiştirilmek istendiğinde bir uyarı görüntülenir.';
-$wb['dbname_prefix_txt'] = 'Veritabanı adı ön eki';
-$wb['dbuser_prefix_txt'] = 'Veritabanı kullanıcısı ön eki';
-$wb['shelluser_prefix_txt'] = 'Kabuk kullanıcısı ön eki';
-$wb['webdavuser_prefix_txt'] = 'Webdav kullanıcısı ön eki';
-$wb['ftpuser_prefix_txt'] = 'FTP kullanıcısı ön eki';
-$wb['vhost_subdomains_txt'] = 'Etki alanları web sitesi şeklinde oluşturulsun';
-$wb['vhost_subdomains_note_txt'] = 'Sistemde sanal sunucu alt etki alanları varken bu seçenek devre dışı bırakılamaz!';
-$wb['vhost_aliasdomains_txt'] = 'Takma etki alanı web sitesi olarak eklensin';
-$wb['vhost_aliasdomains_note_txt'] = 'Sistemde sanal sunucu takma etki alanları varken bu seçenek devre dışı bırakılamaz!';
-$wb['dbname_prefix_error_regex'] = 'Veritabanı adı ön ekinde izin verilmeyen karakterler var';
-$wb['dbuser_prefix_error_regex'] = 'Veritabanı kullanıcısı ön ekinde izin verilmeyen karakterler var';
-$wb['ftpuser_prefix_error_regex'] = 'FTP kullanıcısı ön ekinde izin verilmeyen karakterler var';
-$wb['shelluser_prefix_error_regex'] = 'Kabuk kullanıcısı ön ekinde izin verilmeyen karakterler var';
-$wb['webdavuser_prefix_error_regex'] = 'Webdav kullanıcısı ön ekinde izin verilmeyen karakterler var.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Veritabanı listesinde phpMyAdmin bağlantısı';
-$wb['enable_custom_login_txt'] = 'Özel oturum açma kullanıcı adı kullanılabilsin';
-$wb['mailboxlist_webmail_link_txt'] = 'E-posta kutusu listesinde Webmail bağlantısı';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin';
-$wb['webmail_url_txt'] = 'Webmail Adresi';
-$wb['mailmailinglist_link_txt'] = 'E-posta Listeleri listesinde E-posta Listesi bağlantısı';
-$wb['mailmailinglist_url_txt'] = 'E-posta Listesi Adresi';
-$wb['phpmyadmin_url_txt'] = 'phpMyAdmin Adresi';
-$wb['use_domain_module_txt'] = 'Etki alanı eklemek için etki alanı modülü kullanılsın';
-$wb['use_domain_module_hint'] = 'Bu modül kullanıldığında, müşteriler yalnız yöneticinin oluşturduğu etki alanlarından birini seçebilir. Etki alanını istediği gibi yazamaz. Bu değeri değiştirdikten sonra değişikliklerin geçerli olması için oturumu kapatıp yeniden açmalısınız.';
-$wb['new_domain_txt'] = 'Yeni etki alanı oluşturma HTML kodu';
-$wb['webftp_url_txt'] = 'WebFTP Adresi';
-$wb['admin_mail_txt'] = 'Yönetici E-posta Adresi';
-$wb['monitor_key_txt'] = 'Ä°zlenecek Kelime';
-$wb['admin_name_txt'] = 'Yönetici Adı';
-$wb['maintenance_mode_txt'] = 'Bakım Kipi';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Sistem e-postaları SMTP ile gönderilsin';
-$wb['smtp_host_txt'] = 'SMTP Sunucusu';
-$wb['smtp_port_txt'] = 'SMTP Kapısı';
-$wb['smtp_user_txt'] = 'SMTP Kullanıcı Adı';
-$wb['smtp_pass_txt'] = 'SMTP Parolası';
-$wb['smtp_crypt_txt'] = 'SMTP için SSL/TLS şifreli bağlantı kullanılsın';
-$wb['phpmyadmin_url_error_regex'] = 'phpmyadmin adresi geçersiz';
-$wb['use_combobox_txt'] = 'jQuery Açılan Kutusu Kullanılsın';
-$wb['use_loadindicator_txt'] = 'Yük Göstergesi Kullanılsın';
-$wb['f5_to_reload_js_txt'] = 'Bu değer değiştirildiğinde, web tarayıcının JavaScript kitaplıklarını yeniden yüklemesi için F5 tuşuna basmalı ya da web tarayıcının ön belleğini temizlemelisiniz.';
-$wb['client_username_web_check_disabled_txt'] = 'Müşteri kullanıcı adında \'web\' sözcüğü denetimi devre dışı bırakılsın.';
-$wb['backups_include_into_web_quota_txt'] = 'Yedek dosyaları web kotasına katılsın.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin';
-$wb['webmail_url_error_regex'] = 'Webmail adresi geçersiz';
-$wb['phpmyadmin_url_note_txt'] = 'Kod:';
-$wb['webmail_url_note_txt'] = 'Kod:';
-$wb['available_dashlets_note_txt'] = 'Kullanılabilecek Bileşenler:';
-$wb['admin_dashlets_left_txt'] = 'Sol Yönetici Bileşenleri';
-$wb['admin_dashlets_right_txt'] = 'Sağ Yönetici Bileşenleri';
-$wb['reseller_dashlets_left_txt'] = 'Sol Bayi BileÅŸenleri';
-$wb['reseller_dashlets_right_txt'] = 'SaÄŸ Bayi BileÅŸenleri';
-$wb['client_dashlets_left_txt'] = 'Sol Müşteri Bileşenleri';
-$wb['client_dashlets_right_txt'] = 'Sağ Müşteri Bileşenleri';
-$wb['customer_no_template_txt'] = 'Müşteri No Kalıbı';
-$wb['customer_no_template_error_regex_txt'] = 'Müşteri no kalıbında geçersiz karakterler var';
-$wb['customer_no_start_txt'] = 'Müşteri No Başlangıç Değeri';
-$wb['customer_no_counter_txt'] = 'Müşteri No Sayacı';
-$wb['session_timeout_txt'] = 'Oturum Zaman Aşımı (dakika)';
-$wb['session_allow_endless_txt'] = '"Oturum açık kalsın" kullanılabilsin';
-$wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'En Az Parola UzunluÄŸu';
-$wb['min_password_strength_txt'] = 'En Az Parola ZorluÄŸu';
-$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
-$wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
-$wb['default_dnsserver_txt'] = 'Varsayılan Birincil DNS Sunucusu';
-$wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
-$wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
-$wb['company_name_txt'] = 'Sayfa başlığı için kurum adı';
-$wb['reseller_can_use_options_txt'] = 'Bayi web siteleri için seçenek sekmesini kullanabilsin';
-$wb['custom_login_text_txt'] = 'Oturum Açma Sayfası Metni';
-$wb['custom_login_link_txt'] = 'Oturum Açma Sayfası Bağlantısı';
-$wb['login_link_error_regex'] = 'Oturum Açma Bağlantısı Geçersiz';
-?>
-- 
GitLab


From 90f7fcd8aba740e71d11b45458f1c9a5eea61e22 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 20:19:52 +0200
Subject: [PATCH 285/571] Revert "Fixes #4480 (Translate IP edit form title and
 desc)"

This reverts commit 13c9e0baeb50303d063f30a80cdb67bc86a7c04a
---
 ar_server_ip.lng | 13 -------------
 bg_server_ip.lng | 13 -------------
 br_server_ip.lng | 13 -------------
 ca_server_ip.lng | 13 -------------
 cz_server_ip.lng | 13 -------------
 de_server_ip.lng | 13 -------------
 dk_server_ip.lng | 13 -------------
 el_server_ip.lng | 13 -------------
 en_server_ip.lng | 13 -------------
 es_server_ip.lng | 13 -------------
 fi_server_ip.lng | 13 -------------
 fr_server_ip.lng | 13 -------------
 hr_server_ip.lng | 13 -------------
 hu_server_ip.lng | 13 -------------
 id_server_ip.lng | 13 -------------
 it_server_ip.lng | 13 -------------
 ja_server_ip.lng | 13 -------------
 nl_server_ip.lng | 13 -------------
 pl_server_ip.lng | 13 -------------
 pt_server_ip.lng | 13 -------------
 ro_server_ip.lng | 13 -------------
 ru_server_ip.lng | 13 -------------
 se_server_ip.lng | 13 -------------
 sk_server_ip.lng | 13 -------------
 tr_server_ip.lng | 13 -------------
 25 files changed, 325 deletions(-)
 delete mode 100644 ar_server_ip.lng
 delete mode 100644 bg_server_ip.lng
 delete mode 100644 br_server_ip.lng
 delete mode 100644 ca_server_ip.lng
 delete mode 100644 cz_server_ip.lng
 delete mode 100644 de_server_ip.lng
 delete mode 100644 dk_server_ip.lng
 delete mode 100644 el_server_ip.lng
 delete mode 100644 en_server_ip.lng
 delete mode 100644 es_server_ip.lng
 delete mode 100644 fi_server_ip.lng
 delete mode 100644 fr_server_ip.lng
 delete mode 100644 hr_server_ip.lng
 delete mode 100644 hu_server_ip.lng
 delete mode 100644 id_server_ip.lng
 delete mode 100644 it_server_ip.lng
 delete mode 100644 ja_server_ip.lng
 delete mode 100644 nl_server_ip.lng
 delete mode 100644 pl_server_ip.lng
 delete mode 100644 pt_server_ip.lng
 delete mode 100644 ro_server_ip.lng
 delete mode 100644 ru_server_ip.lng
 delete mode 100644 se_server_ip.lng
 delete mode 100644 sk_server_ip.lng
 delete mode 100644 tr_server_ip.lng

diff --git a/ar_server_ip.lng b/ar_server_ip.lng
deleted file mode 100644
index 1947d3ec37..0000000000
--- a/ar_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'IP Address';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'The IP address is invalid';
-$wb['ip_error_unique'] = 'The IP address must be unique';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/bg_server_ip.lng b/bg_server_ip.lng
deleted file mode 100644
index 70f428a634..0000000000
--- a/bg_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Сървър';
-$wb['ip_address_txt'] = 'IP адрес';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'IP адресът е грешен';
-$wb['ip_error_unique'] = 'IP адресът трябва да бъде уникален';
-$wb['client_id_txt'] = 'Клиент';
-$wb['ip_type_txt'] = 'Тип';
-$wb['virtualhost_port_txt'] = 'HTTP портове';
-$wb['error_port_syntax'] = 'Грешни символи в полето за портове, моля въвеждайте само числа разделени с запетая. Пример: 80,443';
-?>
diff --git a/br_server_ip.lng b/br_server_ip.lng
deleted file mode 100644
index 8380b61ebd..0000000000
--- a/br_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Servidor';
-$wb['client_id_txt'] = 'Cliente';
-$wb['ip_type_txt'] = 'Tipo';
-$wb['ip_address_txt'] = 'Endereço IP';
-$wb['virtualhost_txt'] = 'Nome do vhost http';
-$wb['virtualhost_port_txt'] = 'Porta http';
-$wb['ip_error_wrong'] = 'O endereço IP é inválido.';
-$wb['ip_error_unique'] = 'O endereço IP deve ser exclusivo.';
-$wb['error_port_syntax'] = 'Caracteres inválidos para porta http, por favor, insira apenas uma porta ou separe portas por vírgula. Exemplo: 80,443.';
-?>
diff --git a/ca_server_ip.lng b/ca_server_ip.lng
deleted file mode 100644
index 8f7738e51f..0000000000
--- a/ca_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['ip_address_txt'] = 'IP Address';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['ip_error_wrong'] = 'The IP address is invalid';
-$wb['ip_error_unique'] = 'The IP address must be unique';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/cz_server_ip.lng b/cz_server_ip.lng
deleted file mode 100644
index 3698df5c74..0000000000
--- a/cz_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'IP adresa';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'IP adresa je neplatná nebo prázdná';
-$wb['ip_error_unique'] = 'IP adresa musí být unikátní';
-$wb['client_id_txt'] = 'Klient';
-$wb['ip_type_txt'] = 'Verze';
-$wb['virtualhost_port_txt'] = 'HTTP Porty';
-$wb['error_port_syntax'] = 'Neplatné znaky ve volbě HTTP Portů. Prosím, zadejte pouze číselné hodnoty oddělené čárkami. Příklad: 80,443';
-?>
diff --git a/de_server_ip.lng b/de_server_ip.lng
deleted file mode 100644
index 88f23ebc15..0000000000
--- a/de_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'IP Adresse';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'Die IP Adresse ist ungültig';
-$wb['ip_error_unique'] = 'Die IP Adresse muss einzigartig sein';
-$wb['client_id_txt'] = 'Kunde';
-$wb['ip_type_txt'] = 'Typ';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Ungültige Zeichen im Ports Feld. Bitte geben Sie nur komma-separierte Nummern an. Beispiel: 80,443';
-?>
diff --git a/dk_server_ip.lng b/dk_server_ip.lng
deleted file mode 100644
index a6ba3ba045..0000000000
--- a/dk_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['client_id_txt'] = 'Kunde';
-$wb['ip_type_txt'] = 'Type';
-$wb['ip_address_txt'] = 'IP Adresse';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['virtualhost_port_txt'] = 'HTTP Porte';
-$wb['ip_error_wrong'] = 'IP adressen er ugyldigt';
-$wb['ip_error_unique'] = 'IP adressen skal være unikke';
-$wb['error_port_syntax'] = 'Ugyldigt tegn i Port felt, du må kun indtaste kommasepareret tal. F.eks.: 80,443';
-?>
diff --git a/el_server_ip.lng b/el_server_ip.lng
deleted file mode 100644
index f00925fc62..0000000000
--- a/el_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'Διεύθυνση IP';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'Η Διεύθυνση IP είναι άκυρη';
-$wb['ip_error_unique'] = 'Η Διεύθυνση IP πρέπει να είναι μοναδική';
-$wb['client_id_txt'] = 'Πελάτης';
-$wb['ip_type_txt'] = 'Τύπος';
-$wb['virtualhost_port_txt'] = 'Θύρες HTTP';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/en_server_ip.lng b/en_server_ip.lng
deleted file mode 100644
index 8ef448f85d..0000000000
--- a/en_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb["server_id_txt"] = 'Server';
-$wb["client_id_txt"] = 'Client';
-$wb["ip_type_txt"] = 'Type';
-$wb["ip_address_txt"] = 'IP Address';
-$wb["virtualhost_txt"] = 'HTTP NameVirtualHost';
-$wb["virtualhost_port_txt"] = 'HTTP Ports';
-$wb["ip_error_wrong"] = 'The IP address is invalid';
-$wb["ip_error_unique"] = 'The IP address must be unique';
-$wb["error_port_syntax"] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/es_server_ip.lng b/es_server_ip.lng
deleted file mode 100644
index ba4d06d098..0000000000
--- a/es_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['client_id_txt'] = 'Cliente';
-$wb['error_port_syntax'] = 'Caracteres inválidos en el campo puerto, por favor introduzca sólo números separados por comas. Por ejemplo: 80,443';
-$wb['ip_address_txt'] = 'Dirección IP';
-$wb['ip_error_unique'] = 'La dirección IP debe ser única';
-$wb['ip_error_wrong'] = 'La dirección IP no es correcta';
-$wb['ip_type_txt'] = 'Tipo';
-$wb['server_id_txt'] = 'Servidor';
-$wb['virtualhost_port_txt'] = 'Puertos HTTP';
-$wb['virtualhost_txt'] = 'Nombre de host virtual HTTP (NameVirtualHost)';
-?>
diff --git a/fi_server_ip.lng b/fi_server_ip.lng
deleted file mode 100644
index a9f49cc124..0000000000
--- a/fi_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Palvelin';
-$wb['ip_address_txt'] = 'IP-osoite';
-$wb['virtualhost_txt'] = 'Virtuaalipalvelin';
-$wb['ip_error_wrong'] = 'IP-osoite vääränlainen';
-$wb['ip_error_unique'] = 'IP-osoitteen on oltava yksilöllinen';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/fr_server_ip.lng b/fr_server_ip.lng
deleted file mode 100644
index 1289cd755a..0000000000
--- a/fr_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Serveur';
-$wb['ip_address_txt'] = 'Adresse IP';
-$wb['virtualhost_txt'] = 'NameVirtualHost HTTP';
-$wb['ip_error_wrong'] = 'L’adresse IP est invalide';
-$wb['ip_error_unique'] = 'L’adresse IP doit être unique';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/hr_server_ip.lng b/hr_server_ip.lng
deleted file mode 100644
index f26fd720ca..0000000000
--- a/hr_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'IP adresa';
-$wb['virtualhost_txt'] = 'HTTP ime virtualnog hosta';
-$wb['ip_error_wrong'] = 'Neispravna IP adresa';
-$wb['ip_error_unique'] = 'IP adresa mora biti jedinstvena';
-$wb['client_id_txt'] = 'Klijent';
-$wb['ip_type_txt'] = 'Vrsta';
-$wb['virtualhost_port_txt'] = 'HTTP portovi';
-$wb['error_port_syntax'] = 'Nedozvoljeni znakovi u port polju, unesite samo znamenke odvojene zarezom. Primjer: 80,443';
-?>
diff --git a/hu_server_ip.lng b/hu_server_ip.lng
deleted file mode 100644
index 2e8f88a2f7..0000000000
--- a/hu_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Szerver';
-$wb['ip_address_txt'] = 'IP cím';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'IP cím érvénytelen';
-$wb['ip_error_unique'] = 'AZ IP címnek egyedinek kell lennie';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/id_server_ip.lng b/id_server_ip.lng
deleted file mode 100644
index 00cecf5026..0000000000
--- a/id_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'Alamat IP';
-$wb['virtualhost_txt'] = 'Nama VirtualHost HTTP';
-$wb['ip_error_wrong'] = 'Alamat IP tidak valid';
-$wb['ip_error_unique'] = 'Alamat IP harus unik';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/it_server_ip.lng b/it_server_ip.lng
deleted file mode 100644
index 9850f2e38b..0000000000
--- a/it_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'Indirizzo IP';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'Indirizzo IP non valido';
-$wb['ip_error_unique'] = 'Indirizzo IP deve essere unico';
-$wb['client_id_txt'] = 'Cliente';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Caratteri non validi nel campo porta, per favore inserire solo valori separati da virgola. Esempio: 80,443';
-?>
diff --git a/ja_server_ip.lng b/ja_server_ip.lng
deleted file mode 100644
index 982d797760..0000000000
--- a/ja_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'サーバー';
-$wb['ip_address_txt'] = 'IPアドレス';
-$wb['virtualhost_txt'] = 'HTTP の NameVirtualHost を使う';
-$wb['ip_error_wrong'] = 'IPアドレスが不正です。';
-$wb['ip_error_unique'] = '既に登録済みのIPアドレスです。別の値に変更してください。';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/nl_server_ip.lng b/nl_server_ip.lng
deleted file mode 100644
index 1fd397e01b..0000000000
--- a/nl_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'IP adres';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'Het IP adres is ongeldig';
-$wb['ip_error_unique'] = 'Het IP addres moet uniek zijn';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/pl_server_ip.lng b/pl_server_ip.lng
deleted file mode 100644
index 0e31866078..0000000000
--- a/pl_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Serwer';
-$wb['ip_address_txt'] = 'Adres IP';
-$wb['virtualhost_txt'] = 'Nazwa wirtualnego hosta HTTP';
-$wb['ip_error_wrong'] = 'Adres IP jest niepoprawny';
-$wb['ip_error_unique'] = 'Adres IP musi być unikalny';
-$wb['client_id_txt'] = 'Klient';
-$wb['ip_type_txt'] = 'Typ';
-$wb['virtualhost_port_txt'] = 'Porty HTTP';
-$wb['error_port_syntax'] = 'Nieprawidłowe wartości w polu portów, proszę wpisać tylko liczby oddzielone przecinkiem. Przykładowo: 80,443';
-?>
diff --git a/pt_server_ip.lng b/pt_server_ip.lng
deleted file mode 100644
index 8a3d00be61..0000000000
--- a/pt_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Servidor';
-$wb['ip_address_txt'] = 'Endereço IP';
-$wb['virtualhost_txt'] = 'Nome VirtualHost HTTP';
-$wb['ip_error_wrong'] = 'Endereço IP inválido!';
-$wb['ip_error_unique'] = 'O endereço IP deve ser único';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/ro_server_ip.lng b/ro_server_ip.lng
deleted file mode 100644
index 1947d3ec37..0000000000
--- a/ro_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'IP Address';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'The IP address is invalid';
-$wb['ip_error_unique'] = 'The IP address must be unique';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/ru_server_ip.lng b/ru_server_ip.lng
deleted file mode 100644
index f874ba1bbd..0000000000
--- a/ru_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Сервер';
-$wb['ip_address_txt'] = 'IP-адрес';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'Неправильный формат IP-адреса';
-$wb['ip_error_unique'] = 'IP-адрес должен быть уникальным';
-$wb['client_id_txt'] = 'ID Клиента';
-$wb['ip_type_txt'] = 'Тип';
-$wb['virtualhost_port_txt'] = 'HTTP порты';
-$wb['error_port_syntax'] = 'Недопустимые символы в поле порта. Пожалуйста, вводите только числа, разделенные запятой. Пример: 80,443';
-?>
diff --git a/se_server_ip.lng b/se_server_ip.lng
deleted file mode 100644
index 09bc3b593a..0000000000
--- a/se_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'IP-adress';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'IP_adressen är ogiltig';
-$wb['ip_error_unique'] = 'IP-adressen måste vara unik';
-$wb['client_id_txt'] = 'Kund';
-$wb['ip_type_txt'] = 'Typ';
-$wb['virtualhost_port_txt'] = 'HTTP-portar';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/sk_server_ip.lng b/sk_server_ip.lng
deleted file mode 100644
index 02f84ded4c..0000000000
--- a/sk_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Server';
-$wb['ip_address_txt'] = 'IP Adresa';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['ip_error_wrong'] = 'IP adresa je neplatná';
-$wb['ip_error_unique'] = 'IP adresa musí byť unikátna';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
diff --git a/tr_server_ip.lng b/tr_server_ip.lng
deleted file mode 100644
index 1f31bd3932..0000000000
--- a/tr_server_ip.lng
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
-$wb['server_id_txt'] = 'Sunucu';
-$wb['client_id_txt'] = 'Müşteri';
-$wb['ip_type_txt'] = 'Tür';
-$wb['ip_address_txt'] = 'IP Adresi';
-$wb['virtualhost_txt'] = 'HTTP sSunucu Adı';
-$wb['virtualhost_port_txt'] = 'HTTP Kapı Numaraları';
-$wb['ip_error_wrong'] = 'IP adresi geçersiz';
-$wb['ip_error_unique'] = 'Aynı IP adresi zaten var';
-$wb['error_port_syntax'] = 'Kapı alanında geçersiz karakterler var. Lütfen yalnız virgül ile ayrılmış sayılar yazın. Örnek: 80,443';
-?>
-- 
GitLab


From 306d944ceb20930ab52472ec20dd09455339665b Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 20:32:36 +0200
Subject: [PATCH 286/571] Fixes #4480

---
 interface/web/admin/lib/lang/ar_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/bg_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/br_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/ca_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/cz_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/de_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/dk_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/el_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/en_server_ip.lng | 4 +++-
 interface/web/admin/lib/lang/es_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/fi_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/fr_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/hr_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/hu_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/id_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/it_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/ja_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/nl_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/pl_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/pt_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/ro_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/ru_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/se_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/sk_server_ip.lng | 2 ++
 interface/web/admin/lib/lang/tr_server_ip.lng | 2 ++
 25 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/interface/web/admin/lib/lang/ar_server_ip.lng b/interface/web/admin/lib/lang/ar_server_ip.lng
index 88d8a2f604..1947d3ec37 100644
--- a/interface/web/admin/lib/lang/ar_server_ip.lng
+++ b/interface/web/admin/lib/lang/ar_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'IP Address';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/bg_server_ip.lng b/interface/web/admin/lib/lang/bg_server_ip.lng
index 7337577754..70f428a634 100644
--- a/interface/web/admin/lib/lang/bg_server_ip.lng
+++ b/interface/web/admin/lib/lang/bg_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Сървър';
 $wb['ip_address_txt'] = 'IP адрес';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/br_server_ip.lng b/interface/web/admin/lib/lang/br_server_ip.lng
index b9bbd47949..8380b61ebd 100644
--- a/interface/web/admin/lib/lang/br_server_ip.lng
+++ b/interface/web/admin/lib/lang/br_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_id_txt'] = 'Cliente';
 $wb['ip_type_txt'] = 'Tipo';
diff --git a/interface/web/admin/lib/lang/ca_server_ip.lng b/interface/web/admin/lib/lang/ca_server_ip.lng
index f06b6be78a..8f7738e51f 100644
--- a/interface/web/admin/lib/lang/ca_server_ip.lng
+++ b/interface/web/admin/lib/lang/ca_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['client_id_txt'] = 'Client';
 $wb['ip_type_txt'] = 'Type';
diff --git a/interface/web/admin/lib/lang/cz_server_ip.lng b/interface/web/admin/lib/lang/cz_server_ip.lng
index 43a382a646..3698df5c74 100644
--- a/interface/web/admin/lib/lang/cz_server_ip.lng
+++ b/interface/web/admin/lib/lang/cz_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'IP adresa';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/de_server_ip.lng b/interface/web/admin/lib/lang/de_server_ip.lng
index 5757b165cb..88f23ebc15 100644
--- a/interface/web/admin/lib/lang/de_server_ip.lng
+++ b/interface/web/admin/lib/lang/de_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'IP Adresse';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/dk_server_ip.lng b/interface/web/admin/lib/lang/dk_server_ip.lng
index ba1586644d..a6ba3ba045 100644
--- a/interface/web/admin/lib/lang/dk_server_ip.lng
+++ b/interface/web/admin/lib/lang/dk_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['client_id_txt'] = 'Kunde';
 $wb['ip_type_txt'] = 'Type';
diff --git a/interface/web/admin/lib/lang/el_server_ip.lng b/interface/web/admin/lib/lang/el_server_ip.lng
index 212f432793..f00925fc62 100644
--- a/interface/web/admin/lib/lang/el_server_ip.lng
+++ b/interface/web/admin/lib/lang/el_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'Διεύθυνση IP';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/en_server_ip.lng b/interface/web/admin/lib/lang/en_server_ip.lng
index fd91fc30d6..8ef448f85d 100644
--- a/interface/web/admin/lib/lang/en_server_ip.lng
+++ b/interface/web/admin/lib/lang/en_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb["server_id_txt"] = 'Server';
 $wb["client_id_txt"] = 'Client';
 $wb["ip_type_txt"] = 'Type';
@@ -8,4 +10,4 @@ $wb["virtualhost_port_txt"] = 'HTTP Ports';
 $wb["ip_error_wrong"] = 'The IP address is invalid';
 $wb["ip_error_unique"] = 'The IP address must be unique';
 $wb["error_port_syntax"] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/admin/lib/lang/es_server_ip.lng b/interface/web/admin/lib/lang/es_server_ip.lng
index 5cd2d77e52..ba4d06d098 100755
--- a/interface/web/admin/lib/lang/es_server_ip.lng
+++ b/interface/web/admin/lib/lang/es_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['client_id_txt'] = 'Cliente';
 $wb['error_port_syntax'] = 'Caracteres inválidos en el campo puerto, por favor introduzca sólo números separados por comas. Por ejemplo: 80,443';
 $wb['ip_address_txt'] = 'Dirección IP';
diff --git a/interface/web/admin/lib/lang/fi_server_ip.lng b/interface/web/admin/lib/lang/fi_server_ip.lng
index 7d2b642fc2..a9f49cc124 100755
--- a/interface/web/admin/lib/lang/fi_server_ip.lng
+++ b/interface/web/admin/lib/lang/fi_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Palvelin';
 $wb['ip_address_txt'] = 'IP-osoite';
 $wb['virtualhost_txt'] = 'Virtuaalipalvelin';
diff --git a/interface/web/admin/lib/lang/fr_server_ip.lng b/interface/web/admin/lib/lang/fr_server_ip.lng
index 471abb87ae..1289cd755a 100644
--- a/interface/web/admin/lib/lang/fr_server_ip.lng
+++ b/interface/web/admin/lib/lang/fr_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Serveur';
 $wb['ip_address_txt'] = 'Adresse IP';
 $wb['virtualhost_txt'] = 'NameVirtualHost HTTP';
diff --git a/interface/web/admin/lib/lang/hr_server_ip.lng b/interface/web/admin/lib/lang/hr_server_ip.lng
index 0ddf8be14c..f26fd720ca 100644
--- a/interface/web/admin/lib/lang/hr_server_ip.lng
+++ b/interface/web/admin/lib/lang/hr_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'IP adresa';
 $wb['virtualhost_txt'] = 'HTTP ime virtualnog hosta';
diff --git a/interface/web/admin/lib/lang/hu_server_ip.lng b/interface/web/admin/lib/lang/hu_server_ip.lng
index 33be4f514e..2e8f88a2f7 100644
--- a/interface/web/admin/lib/lang/hu_server_ip.lng
+++ b/interface/web/admin/lib/lang/hu_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Szerver';
 $wb['ip_address_txt'] = 'IP cím';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/id_server_ip.lng b/interface/web/admin/lib/lang/id_server_ip.lng
index c6d99a1212..00cecf5026 100644
--- a/interface/web/admin/lib/lang/id_server_ip.lng
+++ b/interface/web/admin/lib/lang/id_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'Alamat IP';
 $wb['virtualhost_txt'] = 'Nama VirtualHost HTTP';
diff --git a/interface/web/admin/lib/lang/it_server_ip.lng b/interface/web/admin/lib/lang/it_server_ip.lng
index 0d36ac79c3..9850f2e38b 100644
--- a/interface/web/admin/lib/lang/it_server_ip.lng
+++ b/interface/web/admin/lib/lang/it_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'Indirizzo IP';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/ja_server_ip.lng b/interface/web/admin/lib/lang/ja_server_ip.lng
index fdd8681ebb..982d797760 100644
--- a/interface/web/admin/lib/lang/ja_server_ip.lng
+++ b/interface/web/admin/lib/lang/ja_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'サーバー';
 $wb['ip_address_txt'] = 'IPアドレス';
 $wb['virtualhost_txt'] = 'HTTP の NameVirtualHost を使う';
diff --git a/interface/web/admin/lib/lang/nl_server_ip.lng b/interface/web/admin/lib/lang/nl_server_ip.lng
index 3b281d60a0..1fd397e01b 100644
--- a/interface/web/admin/lib/lang/nl_server_ip.lng
+++ b/interface/web/admin/lib/lang/nl_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'IP adres';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/pl_server_ip.lng b/interface/web/admin/lib/lang/pl_server_ip.lng
index cb16e104d5..0e31866078 100644
--- a/interface/web/admin/lib/lang/pl_server_ip.lng
+++ b/interface/web/admin/lib/lang/pl_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Serwer';
 $wb['ip_address_txt'] = 'Adres IP';
 $wb['virtualhost_txt'] = 'Nazwa wirtualnego hosta HTTP';
diff --git a/interface/web/admin/lib/lang/pt_server_ip.lng b/interface/web/admin/lib/lang/pt_server_ip.lng
index 62f9ad351a..8a3d00be61 100644
--- a/interface/web/admin/lib/lang/pt_server_ip.lng
+++ b/interface/web/admin/lib/lang/pt_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Servidor';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['virtualhost_txt'] = 'Nome VirtualHost HTTP';
diff --git a/interface/web/admin/lib/lang/ro_server_ip.lng b/interface/web/admin/lib/lang/ro_server_ip.lng
index 88d8a2f604..1947d3ec37 100644
--- a/interface/web/admin/lib/lang/ro_server_ip.lng
+++ b/interface/web/admin/lib/lang/ro_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'IP Address';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/ru_server_ip.lng b/interface/web/admin/lib/lang/ru_server_ip.lng
index fd82e2efa1..f874ba1bbd 100644
--- a/interface/web/admin/lib/lang/ru_server_ip.lng
+++ b/interface/web/admin/lib/lang/ru_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Сервер';
 $wb['ip_address_txt'] = 'IP-адрес';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/se_server_ip.lng b/interface/web/admin/lib/lang/se_server_ip.lng
index c6f92d8b60..09bc3b593a 100644
--- a/interface/web/admin/lib/lang/se_server_ip.lng
+++ b/interface/web/admin/lib/lang/se_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'IP-adress';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/sk_server_ip.lng b/interface/web/admin/lib/lang/sk_server_ip.lng
index 65915cc56b..02f84ded4c 100644
--- a/interface/web/admin/lib/lang/sk_server_ip.lng
+++ b/interface/web/admin/lib/lang/sk_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'IP Adresa';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
diff --git a/interface/web/admin/lib/lang/tr_server_ip.lng b/interface/web/admin/lib/lang/tr_server_ip.lng
index 4b2cb1187d..1f31bd3932 100644
--- a/interface/web/admin/lib/lang/tr_server_ip.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_edit_title'] = 'IP Adresses';
+$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['client_id_txt'] = 'Müşteri';
 $wb['ip_type_txt'] = 'Tür';
-- 
GitLab


From e178ce60051a048fca875476d8353e42c16d1daa Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 20:39:38 +0200
Subject: [PATCH 287/571] Fixes #4478 (Translate option for System Config)

---
 interface/web/admin/lib/lang/ar_system_config.lng | 1 +
 interface/web/admin/lib/lang/bg_system_config.lng | 1 +
 interface/web/admin/lib/lang/br_system_config.lng | 1 +
 interface/web/admin/lib/lang/ca_system_config.lng | 1 +
 interface/web/admin/lib/lang/cz_system_config.lng | 1 +
 interface/web/admin/lib/lang/de_system_config.lng | 1 +
 interface/web/admin/lib/lang/dk_system_config.lng | 1 +
 interface/web/admin/lib/lang/el_system_config.lng | 1 +
 interface/web/admin/lib/lang/en_system_config.lng | 1 +
 interface/web/admin/lib/lang/es_system_config.lng | 1 +
 interface/web/admin/lib/lang/fi_system_config.lng | 1 +
 interface/web/admin/lib/lang/fr_system_config.lng | 1 +
 interface/web/admin/lib/lang/hr_system_config.lng | 1 +
 interface/web/admin/lib/lang/hu_system_config.lng | 1 +
 interface/web/admin/lib/lang/id_system_config.lng | 1 +
 interface/web/admin/lib/lang/it_system_config.lng | 1 +
 interface/web/admin/lib/lang/ja_system_config.lng | 1 +
 interface/web/admin/lib/lang/nl_system_config.lng | 1 +
 interface/web/admin/lib/lang/pl_system_config.lng | 1 +
 interface/web/admin/lib/lang/pt_system_config.lng | 1 +
 interface/web/admin/lib/lang/ro_system_config.lng | 1 +
 interface/web/admin/lib/lang/ru_system_config.lng | 1 +
 interface/web/admin/lib/lang/se_system_config.lng | 1 +
 interface/web/admin/lib/lang/sk_system_config.lng | 1 +
 interface/web/admin/lib/lang/tr_system_config.lng | 1 +
 25 files changed, 25 insertions(+)

diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index 4ea9a68919..3a7ef0796c 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
 $wb['dbname_prefix_txt'] = 'Database name prefix';
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index 1ea00be94f..4e6add8a6d 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['warning'] = 'Редактирай тези променливи внимателно! Не премахвай префиксите на системата.';
 $wb['dbname_prefix_txt'] = 'Име на префикса в базата данни';
 $wb['dbuser_prefix_txt'] = 'Потребителски префикс в базата данни';
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index f1feae4768..f5ed36e9ea 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = 'Configurações do Sistema';
 $wb['smtp_missing_admin_mail_txt'] = 'Por favor, insira um nome e e-mail do administrador se você usar smtp para envio dos e-mails do sistema.';
 $wb['dashboard_atom_url_admin_txt'] = 'URL do Dashboard atom (admin)';
diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index d9dfcfaa66..f721f688c5 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
 $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index e85b8ab9a5..4ee62ece32 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Upravujte tyto údaje opatrne! Neodstraňujte prefixy na systémech s více, než jedním klientem.';
 $wb['dbname_prefix_txt'] = 'Prefix názvu databáze';
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 21169ddf08..f981cce832 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = 'Systemkonfiguration';
 $wb['smtp_missing_admin_mail_txt'] = 'Bitte geben Sie die Administrator E-Mail und den Namen ein, wenn Sie SMTP Versand nutzen wollen.';
 $wb['warning'] = 'Bearbeiten Sie diese Werte sorgfältig! Entfernen Sie die Präfixe nicht auf Systemen mit mehr als einem Kunden.';
diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index eb725ac519..5f298f091a 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['smtp_missing_admin_mail_txt'] = 'Indtast venligst admin navn og admin mail adresse, hvis du vil bruge smtp mail afsendelse.';
 $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 583bef7d39..17414e666d 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
 $wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index f43603f6b6..840b3f434b 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
 $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index f788117fd4..7c4525da9a 100755
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['admin_dashlets_left_txt'] = 'Componentes del administrador a la izquierda';
 $wb['admin_dashlets_right_txt'] = 'Componentes del administrador a la derecha';
 $wb['admin_mail_txt'] = 'Correo del administrador';
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index 9def05e14a..2cafa6f5bf 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Muokkaa näitä arvoja varoen! Älä poista etuliitteitä jos järjestelmässä on enemmän kuin yksi asiakas.';
 $wb['dbname_prefix_txt'] = 'Tietokannan nimen etuliite';
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 7150804aaf..3b6fe68521 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['dashboard_atom_url_admin_txt'] = 'URL du fil de syndication Atom du tableau de bord (admin)';
 $wb['dashboard_atom_url_reseller_txt'] = 'URL du fil de syndication Atom du tableau de bord ( reseller)';
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index 21b7953035..66931524ec 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Oprezno mijenjajte prefikse i postavke! Nemojte brisati prefikse na sistemima gdje postoji više od jednog klijenata.';
 $wb['dbname_prefix_txt'] = 'Prefiks nazivu baze';
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index 8ef0acdeae..6e1f97dfbb 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one Ügyfél.';
 $wb['dbname_prefix_txt'] = 'Database name prefix';
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index 5e76d45bf7..9072d62832 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Sunting nilai-nilai ini dengan hati-hati! Jangan hapus prefiks di sistem yang memiliki lebih dari 1 klien.';
 $wb['dbname_prefix_txt'] = 'Prefiks nama database';
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index 85464c3739..42a03ed0b8 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
 $wb['dbname_prefix_txt'] = 'Prefisso nome database';
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index 744db787b8..dfea52b18d 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = '値の変更には細心の注意を払ってください。クライアントが利用中のシステムのプリフィックスは削除しないでください。';
 $wb['dbname_prefix_txt'] = 'データベース名のプリフィックス';
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index f4b778d337..358edde69b 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
 $wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index 95bf2f6ffc..d309ab812f 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['warning'] = 'Edytuj te wartości ostrożnie! Nie usuwaj prefiksów w systemie w więcej niż jednym kliencie.';
 $wb['dbname_prefix_txt'] = 'Prefiks nazwy bazy danych';
 $wb['dbuser_prefix_txt'] = 'Prefiks użytkownika bazy danych';
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index faaebeca2a..05edb306d9 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Edite estes valores com cuidado! Não remova os prefixos em um sistema com mais de um cliente!!';
 $wb['dbname_prefix_txt'] = 'Prefixo Nome da Base de Dados';
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index e6ed186de7..33ee2b4bde 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Edit these values carefully! Do not remove the prefixes on a systems with more then one client.';
 $wb['dbname_prefix_txt'] = 'Database name prefix';
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index 792628d492..62c856fae0 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = 'Настройка параметров по умолчанию';
 $wb['warning'] = 'Изменяйте эти значения аккуратно! Не удаляйте префиксы на системах где более одного пользователя.';
 $wb['dbname_prefix_txt'] = 'Префикс базы данных';
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 8f6c9a63f0..bf0ec4942d 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Redigera dess värden försiktigt! Ta inte bort prefix på system med mer än en kund.';
 $wb['dbname_prefix_txt'] = 'Prefix för databasnamn';
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index 2ea9666db5..b6bbe102dd 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['warning'] = 'Upravte tieto hodnoty pozorne! Neodstraňujte predpony na systémoch s viac ako jedného klienta.';
 $wb['dbname_prefix_txt'] = 'Predpona názvu databázy ';
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index 0ccf846c1c..21a70bec4b 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['system_config_title'] = 'System Config';
 $wb['system_config_desc_txt'] = '';
 $wb['smtp_missing_admin_mail_txt'] = 'SMTP e-posta gönderimini kullanmak için yönetici adı ve yönetici e-posta adresini yazmalısınız.';
 $wb['dashboard_atom_url_admin_txt'] = 'Panel Atom akışının İnternet adresi (yönetici)';
-- 
GitLab


From 9e6898414c4f0d7624f550e4547f6bb749379b54 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 22:03:12 +0200
Subject: [PATCH 288/571] Fixes #4479

---
 interface/web/client/lib/lang/ar_client.lng              | 1 +
 interface/web/client/lib/lang/ar_reseller.lng            | 2 ++
 interface/web/client/lib/lang/bg_client.lng              | 1 +
 interface/web/client/lib/lang/bg_reseller.lng            | 2 ++
 interface/web/client/lib/lang/br_client.lng              | 1 +
 interface/web/client/lib/lang/br_reseller.lng            | 2 ++
 interface/web/client/lib/lang/ca_client.lng              | 1 +
 interface/web/client/lib/lang/ca_reseller.lng            | 2 ++
 interface/web/client/lib/lang/cz_client.lng              | 1 +
 interface/web/client/lib/lang/cz_reseller.lng            | 2 ++
 interface/web/client/lib/lang/de_client.lng              | 1 +
 interface/web/client/lib/lang/de_reseller.lng            | 2 ++
 interface/web/client/lib/lang/dk_client.lng              | 1 +
 interface/web/client/lib/lang/dk_reseller.lng            | 2 ++
 interface/web/client/lib/lang/el_client.lng              | 1 +
 interface/web/client/lib/lang/el_reseller.lng            | 2 ++
 interface/web/client/lib/lang/en_client.lng              | 1 +
 interface/web/client/lib/lang/en_reseller.lng            | 2 ++
 interface/web/client/lib/lang/es_client.lng              | 1 +
 interface/web/client/lib/lang/es_reseller.lng            | 2 ++
 interface/web/client/lib/lang/fi_client.lng              | 1 +
 interface/web/client/lib/lang/fi_reseller.lng            | 2 ++
 interface/web/client/lib/lang/fr_client.lng              | 1 +
 interface/web/client/lib/lang/fr_reseller.lng            | 2 ++
 interface/web/client/lib/lang/hr_client.lng              | 1 +
 interface/web/client/lib/lang/hr_reseller.lng            | 2 ++
 interface/web/client/lib/lang/hu_client.lng              | 1 +
 interface/web/client/lib/lang/hu_reseller.lng            | 2 ++
 interface/web/client/lib/lang/id_client.lng              | 1 +
 interface/web/client/lib/lang/id_reseller.lng            | 2 ++
 interface/web/client/lib/lang/it_client.lng              | 1 +
 interface/web/client/lib/lang/it_reseller.lng            | 2 ++
 interface/web/client/lib/lang/ja_client.lng              | 1 +
 interface/web/client/lib/lang/ja_reseller.lng            | 2 ++
 interface/web/client/lib/lang/nl_client.lng              | 1 +
 interface/web/client/lib/lang/nl_reseller.lng            | 2 ++
 interface/web/client/lib/lang/pl_client.lng              | 1 +
 interface/web/client/lib/lang/pl_reseller.lng            | 2 ++
 interface/web/client/lib/lang/pt_client.lng              | 1 +
 interface/web/client/lib/lang/pt_reseller.lng            | 2 ++
 interface/web/client/lib/lang/ro_client.lng              | 1 +
 interface/web/client/lib/lang/ro_reseller.lng            | 2 ++
 interface/web/client/lib/lang/ru_client.lng              | 1 +
 interface/web/client/lib/lang/ru_reseller.lng            | 2 ++
 interface/web/client/lib/lang/se_client.lng              | 1 +
 interface/web/client/lib/lang/se_reseller.lng            | 2 ++
 interface/web/client/lib/lang/sk_client.lng              | 1 +
 interface/web/client/lib/lang/sk_reseller.lng            | 2 ++
 interface/web/client/lib/lang/tr_client.lng              | 1 +
 interface/web/client/lib/lang/tr_reseller.lng            | 2 ++
 interface/web/client/templates/client_edit_address.htm   | 2 +-
 interface/web/client/templates/reseller_edit_address.htm | 2 +-
 52 files changed, 77 insertions(+), 2 deletions(-)

diff --git a/interface/web/client/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng
index 71bc0fc1f7..deefcd8ade 100644
--- a/interface/web/client/lib/lang/ar_client.lng
+++ b/interface/web/client/lib/lang/ar_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/ar_reseller.lng b/interface/web/client/lib/lang/ar_reseller.lng
index 68e8a950f3..333c8bdb96 100644
--- a/interface/web/client/lib/lang/ar_reseller.lng
+++ b/interface/web/client/lib/lang/ar_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/bg_client.lng b/interface/web/client/lib/lang/bg_client.lng
index 36da0a0422..8b024de0eb 100644
--- a/interface/web/client/lib/lang/bg_client.lng
+++ b/interface/web/client/lib/lang/bg_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/bg_reseller.lng b/interface/web/client/lib/lang/bg_reseller.lng
index 211b6daf93..528b2c7897 100644
--- a/interface/web/client/lib/lang/bg_reseller.lng
+++ b/interface/web/client/lib/lang/bg_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng
index c640be54fb..ba26b61513 100644
--- a/interface/web/client/lib/lang/br_client.lng
+++ b/interface/web/client/lib/lang/br_client.lng
@@ -200,5 +200,6 @@ $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['invalid_vat_id'] = 'O ID do VAT é inválido.';
 $wb['email_error_empty'] = 'O e-mail está em branco';
 $wb['limit_directive_snippets_txt'] = 'Exibir configurações de seleção do servidor web';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limites';
 ?>
diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng
index 12a8a2953f..322235d36b 100644
--- a/interface/web/client/lib/lang/br_reseller.lng
+++ b/interface/web/client/lib/lang/br_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_directive_snippets_txt'] = 'Exibir seleção de configuração do ser
 $wb['limit_database_user_error_notint'] = 'O limite de usuários do banco de dados deve ser um número.';
 $wb['limit_database_quota_txt'] = 'Cota do banco de dados';
 $wb['limit_database_quota_error_notint'] = 'A cota do banco de dados deve ser um número.';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limites';
 ?>
diff --git a/interface/web/client/lib/lang/ca_client.lng b/interface/web/client/lib/lang/ca_client.lng
index bfa38a3401..1797c17cd7 100644
--- a/interface/web/client/lib/lang/ca_client.lng
+++ b/interface/web/client/lib/lang/ca_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/ca_reseller.lng b/interface/web/client/lib/lang/ca_reseller.lng
index f83d3aaff7..411096ef54 100644
--- a/interface/web/client/lib/lang/ca_reseller.lng
+++ b/interface/web/client/lib/lang/ca_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/cz_client.lng b/interface/web/client/lib/lang/cz_client.lng
index 3351ac58e1..355611f50e 100644
--- a/interface/web/client/lib/lang/cz_client.lng
+++ b/interface/web/client/lib/lang/cz_client.lng
@@ -200,5 +200,6 @@ $wb['limit_database_user_txt'] = 'Max. počet databázových uživatelů';
 $wb['limit_database_user_error_notint'] = 'Limit databázové kvóty musí být číslo.';
 $wb['password_click_to_set_txt'] = 'Pro nastavení klikni zde';
 $wb['limit_dns_record_error_notint'] = 'Limit DNS záznamů musí být číslo.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limity';
 ?>
diff --git a/interface/web/client/lib/lang/cz_reseller.lng b/interface/web/client/lib/lang/cz_reseller.lng
index adfea62ac5..d9ddb4c5c4 100644
--- a/interface/web/client/lib/lang/cz_reseller.lng
+++ b/interface/web/client/lib/lang/cz_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_user_error_notint'] = 'Limit databázové kvóty musí být
 $wb['limit_database_quota_txt'] = 'Databázové kvóty';
 $wb['limit_database_quota_error_notint'] = 'Limit databázové kvóty musí být číslo.';
 $wb['password_click_to_set_txt'] = 'Pro nastavení klikni zde';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limity';
 ?>
diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng
index b051d71305..58e390c9f2 100644
--- a/interface/web/client/lib/lang/de_client.lng
+++ b/interface/web/client/lib/lang/de_client.lng
@@ -200,5 +200,6 @@ $wb['limit_database_user_txt'] = 'Max. Database users';
 $wb['limit_database_user_error_notint'] = 'The database user limit must be a number.';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng
index e37ca395af..9f68b18cf5 100644
--- a/interface/web/client/lib/lang/de_reseller.lng
+++ b/interface/web/client/lib/lang/de_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_user_error_notint'] = 'The database user limit must be a num
 $wb['limit_database_quota_txt'] = 'Database quota';
 $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/dk_client.lng b/interface/web/client/lib/lang/dk_client.lng
index b944e03175..c0e8734912 100644
--- a/interface/web/client/lib/lang/dk_client.lng
+++ b/interface/web/client/lib/lang/dk_client.lng
@@ -200,5 +200,6 @@ $wb['invalid_vat_id'] = 'The VAT ID is invalid.';
 $wb['email_error_empty'] = 'Email is empty';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/dk_reseller.lng b/interface/web/client/lib/lang/dk_reseller.lng
index b06301ccdd..12004df761 100644
--- a/interface/web/client/lib/lang/dk_reseller.lng
+++ b/interface/web/client/lib/lang/dk_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['limit_database_user_error_notint'] = 'The database user limit must be a number.';
 $wb['limit_database_quota_txt'] = 'Database quota';
 $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/el_client.lng b/interface/web/client/lib/lang/el_client.lng
index b85f653d4e..59d50b3c85 100644
--- a/interface/web/client/lib/lang/el_client.lng
+++ b/interface/web/client/lib/lang/el_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/el_reseller.lng b/interface/web/client/lib/lang/el_reseller.lng
index b409c169e6..3b7bc470bc 100644
--- a/interface/web/client/lib/lang/el_reseller.lng
+++ b/interface/web/client/lib/lang/el_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng
index 3cc323fd4b..9b114d4e64 100644
--- a/interface/web/client/lib/lang/en_client.lng
+++ b/interface/web/client/lib/lang/en_client.lng
@@ -202,5 +202,6 @@ $wb['btn_cancel_txt'] = "Cancel";
 $wb['invalid_vat_id'] = 'The VAT ID is invalid.';
 $wb["email_error_empty"] = "Email is empty";
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng
index b5950132c4..789229460f 100644
--- a/interface/web/client/lib/lang/en_reseller.lng
+++ b/interface/web/client/lib/lang/en_reseller.lng
@@ -207,5 +207,7 @@ $wb['limit_database_user_txt'] = 'Max. Database users';
 $wb['limit_database_user_error_notint'] = 'The database user limit must be a number.';
 $wb['limit_database_quota_txt'] = 'Database quota';
 $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng
index 75125024fb..2595853096 100755
--- a/interface/web/client/lib/lang/es_client.lng
+++ b/interface/web/client/lib/lang/es_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/es_reseller.lng b/interface/web/client/lib/lang/es_reseller.lng
index 5a94b9e803..6830c56cb8 100755
--- a/interface/web/client/lib/lang/es_reseller.lng
+++ b/interface/web/client/lib/lang/es_reseller.lng
@@ -203,5 +203,7 @@ $wb['zip_txt'] = 'Código postal';
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng
index 6df30e7753..65893189b3 100755
--- a/interface/web/client/lib/lang/fi_client.lng
+++ b/interface/web/client/lib/lang/fi_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/fi_reseller.lng b/interface/web/client/lib/lang/fi_reseller.lng
index 58af2fdf0d..122fea5268 100644
--- a/interface/web/client/lib/lang/fi_reseller.lng
+++ b/interface/web/client/lib/lang/fi_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng
index 61612ccbe0..10f212e0f1 100644
--- a/interface/web/client/lib/lang/fr_client.lng
+++ b/interface/web/client/lib/lang/fr_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng
index f30fcd48c6..76d44cb324 100644
--- a/interface/web/client/lib/lang/fr_reseller.lng
+++ b/interface/web/client/lib/lang/fr_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/hr_client.lng b/interface/web/client/lib/lang/hr_client.lng
index ec5b73d940..9975861bde 100644
--- a/interface/web/client/lib/lang/hr_client.lng
+++ b/interface/web/client/lib/lang/hr_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/hr_reseller.lng b/interface/web/client/lib/lang/hr_reseller.lng
index 9188b6861b..d4b9f58eeb 100644
--- a/interface/web/client/lib/lang/hr_reseller.lng
+++ b/interface/web/client/lib/lang/hr_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/hu_client.lng b/interface/web/client/lib/lang/hu_client.lng
index 10993601c0..b74881e9bf 100644
--- a/interface/web/client/lib/lang/hu_client.lng
+++ b/interface/web/client/lib/lang/hu_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/hu_reseller.lng b/interface/web/client/lib/lang/hu_reseller.lng
index dd9290885a..91c31b05ad 100644
--- a/interface/web/client/lib/lang/hu_reseller.lng
+++ b/interface/web/client/lib/lang/hu_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/id_client.lng b/interface/web/client/lib/lang/id_client.lng
index c84e6251f4..b9cec3c1e6 100644
--- a/interface/web/client/lib/lang/id_client.lng
+++ b/interface/web/client/lib/lang/id_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/id_reseller.lng b/interface/web/client/lib/lang/id_reseller.lng
index 821a35e3cd..f466b2562c 100644
--- a/interface/web/client/lib/lang/id_reseller.lng
+++ b/interface/web/client/lib/lang/id_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng
index 0f75d849d6..09c93513ae 100644
--- a/interface/web/client/lib/lang/it_client.lng
+++ b/interface/web/client/lib/lang/it_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/it_reseller.lng b/interface/web/client/lib/lang/it_reseller.lng
index 2cef293265..1a2e6a1092 100644
--- a/interface/web/client/lib/lang/it_reseller.lng
+++ b/interface/web/client/lib/lang/it_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/ja_client.lng b/interface/web/client/lib/lang/ja_client.lng
index 33aa6ab4e9..41023dd0a6 100644
--- a/interface/web/client/lib/lang/ja_client.lng
+++ b/interface/web/client/lib/lang/ja_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/ja_reseller.lng b/interface/web/client/lib/lang/ja_reseller.lng
index 7edf836f39..c1bade6839 100644
--- a/interface/web/client/lib/lang/ja_reseller.lng
+++ b/interface/web/client/lib/lang/ja_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng
index 188a37f4fd..4d6f11ca51 100644
--- a/interface/web/client/lib/lang/nl_client.lng
+++ b/interface/web/client/lib/lang/nl_client.lng
@@ -200,5 +200,6 @@ $wb['limit_database_user_error_notint'] = 'The database user limit must be a num
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng
index 9953880bec..bed1291a2b 100644
--- a/interface/web/client/lib/lang/nl_reseller.lng
+++ b/interface/web/client/lib/lang/nl_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_txt'] = 'Database quota';
 $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/pl_client.lng b/interface/web/client/lib/lang/pl_client.lng
index f1a1e1e6e7..5fcf7a26d4 100644
--- a/interface/web/client/lib/lang/pl_client.lng
+++ b/interface/web/client/lib/lang/pl_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/pl_reseller.lng b/interface/web/client/lib/lang/pl_reseller.lng
index 9b2cf58f75..71f5bcfa4b 100644
--- a/interface/web/client/lib/lang/pl_reseller.lng
+++ b/interface/web/client/lib/lang/pl_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/pt_client.lng b/interface/web/client/lib/lang/pt_client.lng
index ae3e45b24d..a3f98566ee 100644
--- a/interface/web/client/lib/lang/pt_client.lng
+++ b/interface/web/client/lib/lang/pt_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/pt_reseller.lng b/interface/web/client/lib/lang/pt_reseller.lng
index e021cd2511..7f47221418 100644
--- a/interface/web/client/lib/lang/pt_reseller.lng
+++ b/interface/web/client/lib/lang/pt_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/ro_client.lng b/interface/web/client/lib/lang/ro_client.lng
index 034c4d0e44..0b7c552b37 100644
--- a/interface/web/client/lib/lang/ro_client.lng
+++ b/interface/web/client/lib/lang/ro_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/ro_reseller.lng b/interface/web/client/lib/lang/ro_reseller.lng
index 68e8a950f3..333c8bdb96 100644
--- a/interface/web/client/lib/lang/ro_reseller.lng
+++ b/interface/web/client/lib/lang/ro_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng
index befd6b15bf..94d0bb6a0d 100644
--- a/interface/web/client/lib/lang/ru_client.lng
+++ b/interface/web/client/lib/lang/ru_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt доступен';
 $wb['limit_directive_snippets_txt'] = 'Показать выбор конфигурации веб-сервера';
 $wb['password_click_to_set_txt'] = 'Клик для установки';
 $wb['limit_dns_record_error_notint'] = 'Лимит вторичных DNS-зон должен быть числом.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Лимиты';
 ?>
diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng
index 998a886990..f5806377c3 100644
--- a/interface/web/client/lib/lang/ru_reseller.lng
+++ b/interface/web/client/lib/lang/ru_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'Лимит квоты базы да
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt доступен';
 $wb['limit_directive_snippets_txt'] = 'Показать выбор конфигурации веб-сервера';
 $wb['password_click_to_set_txt'] = 'Клик для установки';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Лимиты';
 ?>
diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng
index 2884302c18..fb1151ed8e 100644
--- a/interface/web/client/lib/lang/se_client.lng
+++ b/interface/web/client/lib/lang/se_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng
index 68e8a950f3..333c8bdb96 100644
--- a/interface/web/client/lib/lang/se_reseller.lng
+++ b/interface/web/client/lib/lang/se_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/sk_client.lng b/interface/web/client/lib/lang/sk_client.lng
index 3edec417cf..dcd291bc53 100644
--- a/interface/web/client/lib/lang/sk_client.lng
+++ b/interface/web/client/lib/lang/sk_client.lng
@@ -200,5 +200,6 @@ $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/sk_reseller.lng b/interface/web/client/lib/lang/sk_reseller.lng
index 4ae3ef5b97..9e1ec0a80f 100644
--- a/interface/web/client/lib/lang/sk_reseller.lng
+++ b/interface/web/client/lib/lang/sk_reseller.lng
@@ -203,5 +203,7 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
 $wb['limit_directive_snippets_txt'] = 'Show web server config selection';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Limits';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng
index f071170966..9e8e6b9be3 100644
--- a/interface/web/client/lib/lang/tr_client.lng
+++ b/interface/web/client/lib/lang/tr_client.lng
@@ -202,5 +202,6 @@ $wb['btn_cancel_txt'] = 'Ä°ptal';
 $wb['invalid_vat_id'] = 'Vergi numarası geçersiz.';
 $wb['email_error_empty'] = 'E-posta boÅŸ olamaz.';
 $wb['limit_directive_snippets_txt'] = 'Web Sunucu Yapılandırma Seçimi Görüntülensin';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Sınırlar';
 ?>
diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng
index e042301400..d7bc06429e 100644
--- a/interface/web/client/lib/lang/tr_reseller.lng
+++ b/interface/web/client/lib/lang/tr_reseller.lng
@@ -207,5 +207,7 @@ $wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
 $wb['limit_database_user_error_notint'] = 'Veritabanı kullanıcı sınırı bir sayı olmalıdır.';
 $wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
 $wb['limit_database_quota_error_notint'] = 'Veritabanı kotası sınırı bir sayı olmalıdır.';
+$wb['Reseller'] = 'Reseller';
+$wb['Address'] = 'Address';
 $wb['Limits'] = 'Sınırlar';
 ?>
diff --git a/interface/web/client/templates/client_edit_address.htm b/interface/web/client/templates/client_edit_address.htm
index 86393c8e9d..689849287c 100644
--- a/interface/web/client/templates/client_edit_address.htm
+++ b/interface/web/client/templates/client_edit_address.htm
@@ -4,7 +4,7 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-        <legend>Address</legend>
+        <legend>{tmpl_var name='Address'}</legend>
             <div class="form-group">
                 <label for="company_name" class="col-sm-3 control-label">{tmpl_var name='company_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="company_name" id="company_name" value="{tmpl_var name='company_name'}" class="form-control" /></div></div>
diff --git a/interface/web/client/templates/reseller_edit_address.htm b/interface/web/client/templates/reseller_edit_address.htm
index 69b6552938..5cb829a008 100644
--- a/interface/web/client/templates/reseller_edit_address.htm
+++ b/interface/web/client/templates/reseller_edit_address.htm
@@ -4,7 +4,7 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-        <legend>Address</legend>
+        <legend>{tmpl_var name='Address'}</legend>
             <div class="form-group">
                 <label for="company_name" class="col-sm-3 control-label">{tmpl_var name='company_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="company_name" id="company_name" value="{tmpl_var name='company_name'}" class="form-control" /></div></div>
-- 
GitLab


From c6cb9f3dc7369985566a56bee01ba8cbd97aa45a Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 23:03:42 +0200
Subject: [PATCH 289/571] Fixed several language module issues (#4473)

---
 .../web/admin/templates/language_add.htm      |  3 +--
 .../web/admin/templates/language_complete.htm | 26 +++++++++----------
 .../web/admin/templates/language_edit.htm     | 20 ++++++++------
 .../web/admin/templates/language_export.htm   |  1 -
 .../web/admin/templates/language_import.htm   |  3 +--
 .../web/admin/templates/language_list.htm     |  4 +--
 6 files changed, 27 insertions(+), 30 deletions(-)

diff --git a/interface/web/admin/templates/language_add.htm b/interface/web/admin/templates/language_add.htm
index e124abf575..30dc4d153c 100644
--- a/interface/web/admin/templates/language_add.htm
+++ b/interface/web/admin/templates/language_add.htm
@@ -4,7 +4,6 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-        <legend>Language Add</legend>
             <div class="form-group">
                 <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
                 <div class="col-sm-9"><select name="lng_select" id="language" class="form-control flags">
@@ -22,4 +21,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_add.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/admin/templates/language_complete.htm b/interface/web/admin/templates/language_complete.htm
index 5205b285d5..53f42fc8fe 100644
--- a/interface/web/admin/templates/language_complete.htm
+++ b/interface/web/admin/templates/language_complete.htm
@@ -13,20 +13,18 @@
     </tmpl_if>
 
     <div class="pnl_formsarea">
-        <legend>Language Complete</legend>
-            <div class="form-group">
-                <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
-                <div class="col-sm-9"><select name="lng_select" id="language" class="form-control flags">
-                    {tmpl_var name='language_option'}
-                </select></div>
+        <div class="form-group">
+             <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
+            <div class="col-sm-9">
+                <select name="lng_select" id="language" class="form-control flags">{tmpl_var name='language_option'}</select>
             </div>
-			<div class="clear"><div class="right">
-				<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_complete.php">{tmpl_var name='btn_save_txt'}</button>
-				<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-			</div></div>
-        
-
-        
+        </div>
+		<div class="clear">
+            <div class="right">
+			    <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_complete.php">{tmpl_var name='btn_save_txt'}</button>
+			    <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+			</div>
+        </div>       
     </div>
 
-</div>
\ No newline at end of file
+</div>
diff --git a/interface/web/admin/templates/language_edit.htm b/interface/web/admin/templates/language_edit.htm
index d3830494da..c42ebaa51e 100644
--- a/interface/web/admin/templates/language_edit.htm
+++ b/interface/web/admin/templates/language_edit.htm
@@ -4,16 +4,20 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-        <fieldset id="wf_area_language_edit"><legend>Language File Edit: {tmpl_var name="file_path"}</legend>
+        <fieldset id="wf_area_language_edit"><legend>{tmpl_var name="lang_file_txt"}: {tmpl_var name="file_path"}</legend>
             <span class="wf_oneField">
                 <tmpl_loop name="records">
                     <span class="wf_oneField">
-                        <label for="records[{tmpl_var name="key"}]" class="wf_preField">{tmpl_var name="key"}</label>
-                        <div class="col-sm-9"><input class="form-control" type="text" id="records[{tmpl_var name="key"}]" name="records[{tmpl_var name="key"}]" value="{tmpl_var name='val'}" ></div></span> 
-                </tmpl_loop>
-            </span>
-        </fieldset>  
-                
+                        <div class="col-sm-9">
+                            <label for="records[{tmpl_var name="key"}]" class="wf_preField">{tmpl_var name="key"}</label>
+                            <input class="form-control" type="text" id="records[{tmpl_var name="key"}]" name="records[{tmpl_var name="key"}]" value="{tmpl_var name='val'}" >
+                        </div>
+                    </span>
+                </tmpl_loop> 
+            </span> 
+        </fieldset>
+
+
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="lang" value="{tmpl_var name='lang'}">
         <input type="hidden" name="lang_file" value="{tmpl_var name='lang_file'}">
@@ -22,4 +26,4 @@
         <div class="wf_actions buttons">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php?lng_select={tmpl_var name='lang'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div>
\ No newline at end of file
+        </div>
diff --git a/interface/web/admin/templates/language_export.htm b/interface/web/admin/templates/language_export.htm
index b00a204b29..a115e6493a 100644
--- a/interface/web/admin/templates/language_export.htm
+++ b/interface/web/admin/templates/language_export.htm
@@ -4,7 +4,6 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-        <legend>Language Export</legend>
             <div class="form-group">
                 <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
                 <div class="col-sm-9"><select name="lng_select" id="lng_select" class="form-control flags">
diff --git a/interface/web/admin/templates/language_import.htm b/interface/web/admin/templates/language_import.htm
index 8bd653c13e..0761cc87ed 100644
--- a/interface/web/admin/templates/language_import.htm
+++ b/interface/web/admin/templates/language_import.htm
@@ -4,7 +4,6 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-		<legend>Language Import</legend>
             <div class="form-group">
                 <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_import_txt'}</label>
                 <input name="file" id="file" size="30" type="file" class="fileUpload" />
@@ -31,4 +30,4 @@
             <div class="clear"><div class="right">
                 <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_import.php" data-form-upload="true">{tmpl_var name='btn_save_txt'}</button>
                 <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-            </div></div>
\ No newline at end of file
+            </div></div>
diff --git a/interface/web/admin/templates/language_list.htm b/interface/web/admin/templates/language_list.htm
index 33897be0a1..0a80e5391c 100644
--- a/interface/web/admin/templates/language_list.htm
+++ b/interface/web/admin/templates/language_list.htm
@@ -3,8 +3,6 @@
 </div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-
-        <legend>Tools</legend>
             
                 <div class="form-group">
                     <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
@@ -43,4 +41,4 @@
             </table>
 </div>
         
-    
\ No newline at end of file
+    
-- 
GitLab


From ab6ee8799fa7bc72270b17c2df0b4715c2be39ba Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 23:47:01 +0200
Subject: [PATCH 290/571] Fixes #4480

---
 interface/web/admin/templates/server_ip_edit.htm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/templates/server_ip_edit.htm b/interface/web/admin/templates/server_ip_edit.htm
index 9e895eac04..85f06432e8 100644
--- a/interface/web/admin/templates/server_ip_edit.htm
+++ b/interface/web/admin/templates/server_ip_edit.htm
@@ -4,7 +4,7 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-        <legend>IP Address</legend>
+        <legend>{tmpl_var name='server_ip_edit_title'}</legend>
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -42,4 +42,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_ip_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_ip_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
-- 
GitLab


From 5c646738481813909e9f58b688b6e9171f5bcf04 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 24 May 2020 23:59:35 +0200
Subject: [PATCH 291/571] Fixes #4474

---
 interface/web/admin/form/server_ip_map.tform.php  | 4 ++--
 interface/web/admin/lib/lang/ar_server_ip_map.lng | 2 ++
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/form/server_ip_map.tform.php b/interface/web/admin/form/server_ip_map.tform.php
index 4f7ed3d28c..bdaac87429 100644
--- a/interface/web/admin/form/server_ip_map.tform.php
+++ b/interface/web/admin/form/server_ip_map.tform.php
@@ -28,8 +28,8 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
-$form["title"]    = "IPv4 Address mapping";
-$form["description"]  = "Form to map IPv4-addresses for Web-Server";
+$form["title"]    = "server_ip_map_title";
+$form["description"]  = "server_ip_map_desc";
 $form["name"]    = "server_ip_map";
 $form["action"]   = "server_ip_map_edit.php";
 $form["db_table"]  = "server_ip_map";
diff --git a/interface/web/admin/lib/lang/ar_server_ip_map.lng b/interface/web/admin/lib/lang/ar_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/ar_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/ar_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
-- 
GitLab


From 3cd63a2179f0cbc0b1c85e762960b3e8c32ac24c Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Mon, 25 May 2020 00:05:08 +0200
Subject: [PATCH 292/571] Fixes #4474 (tweak)

---
 interface/web/admin/form/server_ip_map.tform.php     | 2 +-
 interface/web/admin/templates/server_ip_map_edit.htm | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/interface/web/admin/form/server_ip_map.tform.php b/interface/web/admin/form/server_ip_map.tform.php
index bdaac87429..2374ca0ce0 100644
--- a/interface/web/admin/form/server_ip_map.tform.php
+++ b/interface/web/admin/form/server_ip_map.tform.php
@@ -46,7 +46,7 @@ $form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update,
 $form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
 
 $form["tabs"]['server_ip_map'] = array (
-	'title'  => "IP Address Mapping",
+	'title'  => "server_ip_map_title",
 	'width'  => 80,
 	'template'  => "templates/server_ip_map_edit.htm",
 	'fields'  => array (
diff --git a/interface/web/admin/templates/server_ip_map_edit.htm b/interface/web/admin/templates/server_ip_map_edit.htm
index a53d982c85..bba26348ae 100644
--- a/interface/web/admin/templates/server_ip_map_edit.htm
+++ b/interface/web/admin/templates/server_ip_map_edit.htm
@@ -2,7 +2,6 @@
 	<h1><tmpl_var name="list_head_txt"></h1>
 </div>
 <p><tmpl_var name="list_desc_txt"></p>
-<legend>IP Address Mapping</legend>
 <div class="form-group">
 	<label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
 	<div class="col-sm-9">
-- 
GitLab


From 9e8048f790d26d82aa19d0b9f334445fb6dfde0e Mon Sep 17 00:00:00 2001
From: Webslice <webslice@bixels.nl>
Date: Mon, 25 May 2020 09:50:51 +0200
Subject: [PATCH 293/571] Add option to enable chrooted PHP-FPM by default per
 server

---
 install/tpl/server.ini.master                  |  1 +
 .../web/admin/form/server_config.tform.php     |  6 ++++++
 .../web/admin/lib/lang/ar_server_config.lng    |  1 +
 .../web/admin/lib/lang/bg_server_config.lng    |  1 +
 .../web/admin/lib/lang/br_server_config.lng    |  1 +
 .../web/admin/lib/lang/ca_server_config.lng    |  1 +
 .../web/admin/lib/lang/cz_server_config.lng    |  1 +
 .../web/admin/lib/lang/de_server_config.lng    |  1 +
 .../web/admin/lib/lang/dk_server_config.lng    |  1 +
 .../web/admin/lib/lang/el_server_config.lng    |  1 +
 .../web/admin/lib/lang/en_server_config.lng    |  1 +
 .../web/admin/lib/lang/es_server_config.lng    |  1 +
 .../web/admin/lib/lang/fi_server_config.lng    |  1 +
 .../web/admin/lib/lang/fr_server_config.lng    |  1 +
 .../web/admin/lib/lang/hr_server_config.lng    |  1 +
 .../web/admin/lib/lang/hu_server_config.lng    |  1 +
 .../web/admin/lib/lang/id_server_config.lng    |  1 +
 .../web/admin/lib/lang/it_server_config.lng    |  1 +
 .../web/admin/lib/lang/ja_server_config.lng    |  1 +
 .../web/admin/lib/lang/nl_server_config.lng    |  1 +
 .../web/admin/lib/lang/pl_server_config.lng    |  1 +
 .../web/admin/lib/lang/pt_server_config.lng    |  1 +
 .../web/admin/lib/lang/ro_server_config.lng    |  1 +
 .../web/admin/lib/lang/ru_server_config.lng    |  1 +
 .../web/admin/lib/lang/se_server_config.lng    |  1 +
 .../web/admin/lib/lang/sk_server_config.lng    |  1 +
 .../web/admin/lib/lang/tr_server_config.lng    |  1 +
 .../admin/templates/server_config_web_edit.htm |  6 ++++++
 interface/web/sites/web_vhost_domain_edit.php  | 18 ++++++++++++------
 29 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 45a5644392..5edc09807c 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -121,6 +121,7 @@ overquota_db_notify_client=y
 overquota_notify_onok=n
 logging=yes
 php_fpm_reload_mode=reload
+php_fpm_default_chroot=n
 
 [dns]
 bind_user=root
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 945e422da2..b95ab024a3 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -1274,6 +1274,12 @@ $form["tabs"]['web'] = array(
 			'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
 			'searchable' => 2
 		),
+		'php_fpm_default_chroot' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
 		'php_fpm_incron_reload' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 520fdb1028..5865981382 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 1ca873fd2d..cda45345cb 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 79a956cfad..7c2c5f3db1 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -215,6 +215,7 @@ $wb['overquota_db_notify_admin_txt'] = 'Enviar alerta da cota do banco de dados
 $wb['overquota_db_notify_client_txt'] = 'Enviar alerta da cota do banco de dados para o cliente';
 $wb['monitor_system_updates_txt'] = 'Verificar por atualizações do sistema';
 $wb['php_handler_txt'] = 'Manipulador padrão do php';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Instale o arquivo de disparo do incron para recarregar o php-fpm.';
 $wb['disabled_txt'] = 'Desabilitado';
 $wb['dkim_strength_txt'] = 'Dificuldade do DKIM';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index b1ac3545e7..ee03ca41ca 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -211,6 +211,7 @@ $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index a4219cafa3..649938c0fb 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -260,6 +260,7 @@ $wb['backup_delete_txt'] = 'Odstranit zálohy pokud byla smazána doména/webov
 $wb['overquota_db_notify_admin_txt'] = 'Poslat varování o překročení nebo vyčerpání DB kvót adminovi';
 $wb['overquota_db_notify_client_txt'] = 'Poslat varování o překročení nebo vyčerpání DB kvót klientovi';
 $wb['php_handler_txt'] = 'Výchozí PHP obslužná rutina';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Vypnuto';
 $wb['php_ini_check_minutes_txt'] = 'Provádět kontrolu změny obsahu souboru php.ini každých X minut';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index aa7818f9ad..de1a84f30e 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -270,6 +270,7 @@ $wb['php_ini_check_minutes_txt'] = 'Prüfe php.ini alle X Minuten auf Änderunge
 $wb['php_ini_check_minutes_error_empty'] = 'Bitte geben Sie einen Wert an, wie oft die php.ini auf Änderungen geprüft werden soll.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung';
 $wb['php_handler_txt'] = 'Standard-PHP-Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['enable_spdy_txt'] = 'Stellt SPDY/HTTP2 zur Verfügung';
 $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 0020d5347a..38f5a90281 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -263,6 +263,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 29ad1bf454..50665670b3 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 9093ac6baa..70801dca2f 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -215,6 +215,7 @@ $wb["overquota_db_notify_admin_txt"] = 'Send DB quota warnings to admin';
 $wb["overquota_db_notify_client_txt"] = 'Send DB quota warnings to client';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
 $wb['php_handler_txt'] = "Default PHP Handler";
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 2b1ca0a221..ca61f29883 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -209,6 +209,7 @@ $wb['php_fpm_socket_dir_txt'] = 'Directorio para el socket de PHP-FPM';
 $wb['php_fpm_start_port_error_empty'] = 'El puerto de inicio de PHP-FPM está vacío.';
 $wb['php_fpm_start_port_txt'] = 'Puerto de inicio de PHP-FPM';
 $wb['php_handler_txt'] = 'Controlador PHP por defecto';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['php_ini_check_minutes_error_empty'] = 'Por favor especifique un valor para definir con qué frecuencia se deberían buscar cambios en el archivo php.ini.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no comprobar';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 6724ea0e85..060f956776 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index a505ceef37..3efb6b3d9c 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -262,6 +262,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index a390c29e6c..500b1e3a8c 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -264,6 +264,7 @@ $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 3da2d0ad4e..0ba1d523e1 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index c79b296072..15693cabc4 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 89491ae497..de074d94c1 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -262,6 +262,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 6569591233..6690aadd20 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 1e398f9bdc..7d3260a89c 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 87ec7fc285..02d22662ff 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index e1df35f548..0ec4c89827 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 6d7dc3d8ca..f8da71cf01 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 027e41c13e..2a721bfac1 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Выполните команду монти
 $wb['overquota_db_notify_admin_txt'] = 'Присылать предупреждения квоты DB администратору';
 $wb['overquota_db_notify_client_txt'] = 'Присылать предупреждения квоты DB клиенту';
 $wb['php_handler_txt'] = 'Обработчик PHP по умолчанию';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Отключено';
 $wb['dkim_strength_txt'] = 'Стойкость DKIM';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index be8742f80c..6e27cbb4a6 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 659a83e7d4..a244690cb2 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -264,6 +264,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 76812dd90d..ddc679d78e 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -215,6 +215,7 @@ $wb['overquota_db_notify_admin_txt'] = 'Veritabanı Kotası Bildirimleri Yöneti
 $wb['overquota_db_notify_client_txt'] = 'Veritabanı Kotası Bildirimleri Müşteriye Gönderilsin';
 $wb['monitor_system_updates_txt'] = 'Linux Güncellemeleri Denetlensin';
 $wb['php_handler_txt'] = 'Varsayılan PHP İşleyici';
+$wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['disabled_txt'] = 'Devre Dışı';
 $wb['dkim_strength_txt'] = 'DKIM zorluÄŸu';
 $wb['monitor_system_updates_txt'] = 'Linux Güncelleme Denetimi';
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 1031eea183..f5f38affe7 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -316,6 +316,12 @@
                             {tmpl_var name='php_handler'}
                         </select></div>
                 </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_default_chroot_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='php_fpm_default_chroot'}
+                    </div>
+                </div>
                 <div class="form-group">
                     <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_incron_reload_txt'}</label>
                     <div class="col-sm-9">
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 7f0cd697e9..81415f194a 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -1430,6 +1430,12 @@ class page_action extends tform_actions {
 			$log_retention = 10;
 		}
 
+		// Get default value for chrooted PHP-FPM
+		$php_fpm_chroot = 'n';
+		if (!empty($web_config['php_fpm_default_chroot'])) {
+			$php_fpm_chroot = $web_config['php_fpm_default_chroot'];
+		}
+
 		if($this->_vhostdomain_type == 'domain') {
 			$document_root = str_replace("[website_id]", $this->id, $web_config["website_path"]);
 			$document_root = str_replace("[website_idhash_1]", $this->id_hash($page_form->id, 1), $document_root);
@@ -1462,8 +1468,8 @@ class page_action extends tform_actions {
 			$htaccess_allow_override = $web_config["htaccess_allow_override"];
 			$added_by = $_SESSION['s']['user']['username'];
 
-			$sql = "UPDATE web_domain SET system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ?, added_date = CURDATE(), added_by = ?, log_retention = ? WHERE domain_id = ?";
-			$app->db->query($sql, $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $added_by, $log_retention, $this->id);
+			$sql = "UPDATE web_domain SET system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ?, added_date = CURDATE(), added_by = ?, log_retention = ?, php_fpm_chroot = ? WHERE domain_id = ?";
+			$app->db->query($sql, $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $added_by, $log_retention, $php_fpm_chroot, $this->id);
 		} else  {
 			// Set the values for document_root, system_user and system_group
 			$system_user = $this->parent_domain_record['system_user'];
@@ -1475,12 +1481,12 @@ class page_action extends tform_actions {
 			$php_open_basedir = str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir);
 			$htaccess_allow_override = $this->parent_domain_record['allow_override'];
 			$added_by = $_SESSION['s']['user']['username'];
-			
-			$sql = "UPDATE web_domain SET sys_groupid = ?, system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ?, added_date = CURDATE(), added_by = ?, log_retention = ? WHERE domain_id = ?";
-			$app->db->query($sql, $this->parent_domain_record['sys_groupid'], $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $added_by, $log_retention, $this->id);
+
+			$sql = "UPDATE web_domain SET sys_groupid = ?, system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ?, added_date = CURDATE(), added_by = ?, log_retention = ?, php_fpm_chroot = ? WHERE domain_id = ?";
+			$app->db->query($sql, $this->parent_domain_record['sys_groupid'], $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $added_by, $log_retention, $php_fpm_chroot, $this->id);
 		}
 		if(isset($this->dataRecord['folder_directive_snippets'])) $app->db->query("UPDATE web_domain SET folder_directive_snippets = ? WHERE domain_id = ?", $this->dataRecord['folder_directive_snippets'], $this->id);
-		
+
 		// Add a datalog insert without letsencrypt and then an update with letsencrypt enabled (see also onBeforeInsert)
 		if($this->_letsencrypt_on_insert == true) {
 			$new_data_record = $app->tform->getDataRecord($this->id);
-- 
GitLab


From 8183c38bdd1ac60f0537c581dcacde9c566a1615 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Mon, 25 May 2020 13:51:37 +0200
Subject: [PATCH 294/571] Disable TLSv1 and TLSv1.1

---
 server/conf/nginx_vhost.conf.master | 2 +-
 server/conf/vhost.conf.master       | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 4487e4e450..978139174f 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -18,7 +18,7 @@ server {
         listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_https'> ssl proxy_protocol;
 </tmpl_if>
 </tmpl_if>
-		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+		ssl_protocols TLSv1.2;
 		# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
 		# ssl_prefer_server_ciphers on;
 <tmpl_if name='ipv6_enabled'>
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index f6ad4b830f..0612c13f7f 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -52,7 +52,7 @@
 <tmpl_if name='ssl_enabled'>
 <tmpl_if name='enable_http2' op='==' value='y'>
 		Protocols h2 http/1.1
-		SSLProtocol All -SSLv2 -SSLv3
+		SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 		SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
 </tmpl_if>
 </tmpl_if>
@@ -79,7 +79,7 @@
 		<IfModule mod_ssl.c>
 <tmpl_if name='ssl_enabled'>
 		SSLEngine on
-		SSLProtocol All -SSLv2 -SSLv3
+		SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 		# SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
 		SSLHonorCipherOrder     on
 		# <IfModule mod_headers.c>
-- 
GitLab


From f589bbbf16a756dbfa69d9d339000eaaa412e949 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Mon, 25 May 2020 22:14:05 +0200
Subject: [PATCH 295/571] Fixes #4725

---
 interface/lib/classes/custom_datasource.inc.php | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/interface/lib/classes/custom_datasource.inc.php b/interface/lib/classes/custom_datasource.inc.php
index c50d585027..57078388f0 100644
--- a/interface/lib/classes/custom_datasource.inc.php
+++ b/interface/lib/classes/custom_datasource.inc.php
@@ -161,9 +161,10 @@ class custom_datasource {
 			$sql = "SELECT $server_type as server_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?";
 			$client = $app->db->queryOneRecord($sql, $client_group_id);
 			if($client['server_id'] > 0) {
-				//* Select the default server for the client
-				$sql = "SELECT server_id,server_name FROM server WHERE server_id = ?";
-				$records = $app->db->queryAllRecords($sql, $client['server_id']);
+				///* Select the available servers for the client
+				$clientservers = $client['server_id'];
+				$sql = "SELECT server_id,server_name FROM server WHERE server_id IN ($clientservers) ORDER BY server_name";
+				$records = $app->db->queryAllRecords($sql);
 			} else {
 				//* Not able to find the clients defaults, use this as fallback and add a warning message to the log
 				$app->log('Unable to find default server for client in custom_datasource.inc.php', 1);
-- 
GitLab


From ba4577bac30ba879be2f3f6e8feeaa21da40f245 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Tue, 26 May 2020 17:19:57 +0200
Subject: [PATCH 296/571] Revert "Fixes #4725"

This reverts commit f589bbbf16a756dbfa69d9d339000eaaa412e949
---
 interface/lib/classes/custom_datasource.inc.php | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/interface/lib/classes/custom_datasource.inc.php b/interface/lib/classes/custom_datasource.inc.php
index 57078388f0..c50d585027 100644
--- a/interface/lib/classes/custom_datasource.inc.php
+++ b/interface/lib/classes/custom_datasource.inc.php
@@ -161,10 +161,9 @@ class custom_datasource {
 			$sql = "SELECT $server_type as server_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?";
 			$client = $app->db->queryOneRecord($sql, $client_group_id);
 			if($client['server_id'] > 0) {
-				///* Select the available servers for the client
-				$clientservers = $client['server_id'];
-				$sql = "SELECT server_id,server_name FROM server WHERE server_id IN ($clientservers) ORDER BY server_name";
-				$records = $app->db->queryAllRecords($sql);
+				//* Select the default server for the client
+				$sql = "SELECT server_id,server_name FROM server WHERE server_id = ?";
+				$records = $app->db->queryAllRecords($sql, $client['server_id']);
 			} else {
 				//* Not able to find the clients defaults, use this as fallback and add a warning message to the log
 				$app->log('Unable to find default server for client in custom_datasource.inc.php', 1);
-- 
GitLab


From 4d622544edd4572532b2ac42a311f8ede01b722c Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Tue, 26 May 2020 17:22:23 +0200
Subject: [PATCH 297/571] Server select fix (fixes #4725)

---
 interface/lib/classes/custom_datasource.inc.php | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/interface/lib/classes/custom_datasource.inc.php b/interface/lib/classes/custom_datasource.inc.php
index c50d585027..57078388f0 100644
--- a/interface/lib/classes/custom_datasource.inc.php
+++ b/interface/lib/classes/custom_datasource.inc.php
@@ -161,9 +161,10 @@ class custom_datasource {
 			$sql = "SELECT $server_type as server_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?";
 			$client = $app->db->queryOneRecord($sql, $client_group_id);
 			if($client['server_id'] > 0) {
-				//* Select the default server for the client
-				$sql = "SELECT server_id,server_name FROM server WHERE server_id = ?";
-				$records = $app->db->queryAllRecords($sql, $client['server_id']);
+				///* Select the available servers for the client
+				$clientservers = $client['server_id'];
+				$sql = "SELECT server_id,server_name FROM server WHERE server_id IN ($clientservers) ORDER BY server_name";
+				$records = $app->db->queryAllRecords($sql);
 			} else {
 				//* Not able to find the clients defaults, use this as fallback and add a warning message to the log
 				$app->log('Unable to find default server for client in custom_datasource.inc.php', 1);
-- 
GitLab


From 9e1fe1b51c017b8dc97dd15187896c31429bded8 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 26 May 2020 17:51:21 +0200
Subject: [PATCH 298/571] Update custom_datasource.inc.php

---
 interface/lib/classes/custom_datasource.inc.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/interface/lib/classes/custom_datasource.inc.php b/interface/lib/classes/custom_datasource.inc.php
index 57078388f0..3158fdde1a 100644
--- a/interface/lib/classes/custom_datasource.inc.php
+++ b/interface/lib/classes/custom_datasource.inc.php
@@ -162,9 +162,9 @@ class custom_datasource {
 			$client = $app->db->queryOneRecord($sql, $client_group_id);
 			if($client['server_id'] > 0) {
 				///* Select the available servers for the client
-				$clientservers = $client['server_id'];
-				$sql = "SELECT server_id,server_name FROM server WHERE server_id IN ($clientservers) ORDER BY server_name";
-				$records = $app->db->queryAllRecords($sql);
+				$clientservers = explode(',',$client['server_id']);
+				$sql = "SELECT server_id,server_name FROM server WHERE server_id IN ? ORDER BY server_name";
+				$records = $app->db->queryAllRecords($sql,$clientservers);
 			} else {
 				//* Not able to find the clients defaults, use this as fallback and add a warning message to the log
 				$app->log('Unable to find default server for client in custom_datasource.inc.php', 1);
-- 
GitLab


From 15ae954a0cf8978ad9a3a3e9da6db7f45722ddcc Mon Sep 17 00:00:00 2001
From: Ninos <me@ninosego.de>
Date: Tue, 26 May 2020 18:24:00 +0200
Subject: [PATCH 299/571] Added: SSH authentication option (password, key,
 both)

---
 install/tpl/system.ini.master                             | 1 +
 interface/web/admin/form/system_config.tform.php          | 6 ++++++
 interface/web/admin/lib/lang/de_system_config.lng         | 4 ++++
 interface/web/admin/lib/lang/en_system_config.lng         | 4 ++++
 interface/web/admin/templates/system_config_misc_edit.htm | 6 ++++++
 interface/web/sites/shell_user_edit.php                   | 3 +++
 interface/web/sites/templates/shell_user_edit.htm         | 4 ++++
 7 files changed, 28 insertions(+)

diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index 4df1a877dc..873b0e7372 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -69,3 +69,4 @@ session_timeout=0
 session_allow_endless=0
 min_password_length=8
 min_password_strength=3
+ssh_authentication=
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 1b84e59560..58649d3f1b 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -747,6 +747,12 @@ $form["tabs"]['misc'] = array (
 			'formtype' => 'SELECT',
 			'default' => '',
 			'value'  => array('' => 'None', '1' => 'strength_1', '2' => 'strength_2', '3' => 'strength_3', '4' => 'strength_4', '5' => 'strength_5')
+		),
+		'ssh_authentication' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => array('' => 'ssh_authentication_password_key', 'password' => 'ssh_authentication_password', 'key' => 'ssh_authentication_key')
 		)
 		//#################################
 		// END Datatable fields
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index f981cce832..693fd2110e 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -75,6 +75,10 @@ $wb['session_allow_endless_txt'] = '&quot;Eingeloggt bleiben&quot; aktivieren';
 $wb['No'] = 'Nein';
 $wb['min_password_length_txt'] = 'Minimale Passwortlänge';
 $wb['min_password_strength_txt'] = 'Minimale Passwortstärke';
+$wb['ssh_authentication_txt'] = 'Erlaubte SSH Authentifizierung';
+$wb['ssh_authentication_password_key'] = 'Passwort & Schlüssel';
+$wb['ssh_authentication_password'] = 'Passwort';
+$wb['ssh_authentication_key'] = 'Schlüssel';
 $wb['company_name_txt'] = 'Firmenname fuer den Seitentitel';
 $wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
 $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 840b3f434b..e0b25eb4af 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -77,6 +77,10 @@ $wb['session_allow_endless_txt'] = 'Enable "stay logged in"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
+$wb['ssh_authentication_txt'] = 'Allowed SSH authentication';
+$wb['ssh_authentication_password_key'] = 'Password & Key';
+$wb['ssh_authentication_password'] = 'Password';
+$wb['ssh_authentication_key'] = 'Key';
 $wb["default_mailserver_txt"] = 'Default Mailserver';
 $wb["default_webserver_txt"] = 'Default Webserver';
 $wb["default_dnsserver_txt"] = 'Default DNS Server';
diff --git a/interface/web/admin/templates/system_config_misc_edit.htm b/interface/web/admin/templates/system_config_misc_edit.htm
index 00debd66dc..b8f36b2efd 100644
--- a/interface/web/admin/templates/system_config_misc_edit.htm
+++ b/interface/web/admin/templates/system_config_misc_edit.htm
@@ -106,6 +106,12 @@
                 <div class="col-sm-9"><select name="min_password_strength" id="min_password_strength" class="form-control">
                     {tmpl_var name='min_password_strength'}
                 </select></div>
+            </div>
+            <div class="form-group">
+                <label for="ssh_authentication" class="col-sm-3 control-label">{tmpl_var name='ssh_authentication_txt'}</label>
+                <div class="col-sm-9"><select name="ssh_authentication" id="ssh_authentication" class="form-control">
+                    {tmpl_var name='ssh_authentication'}
+                </select></div>
             </div>
 			<div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='maintenance_mode_txt'}</label>
diff --git a/interface/web/sites/shell_user_edit.php b/interface/web/sites/shell_user_edit.php
index 7f74d893fc..d1b7017cc7 100644
--- a/interface/web/sites/shell_user_edit.php
+++ b/interface/web/sites/shell_user_edit.php
@@ -75,6 +75,7 @@ class page_action extends tform_actions {
 
 		$app->uses('getconf,tools_sites');
 		$global_config = $app->getconf->get_global_config('sites');
+		$system_config = $app->getconf->get_global_config();
 		$shelluser_prefix = $app->tools_sites->replacePrefix($global_config['shelluser_prefix'], $this->dataRecord);
 
 		if ($this->dataRecord['username'] != ""){
@@ -96,6 +97,8 @@ class page_action extends tform_actions {
 			$app->tpl->setVar("edit_disabled", 0);
 		}
 
+		$app->tpl->setVar('ssh_authentication', $system_config['misc']['ssh_authentication']);
+
 		parent::onShowEnd();
 	}
 
diff --git a/interface/web/sites/templates/shell_user_edit.htm b/interface/web/sites/templates/shell_user_edit.htm
index 9ea5f183e5..e5b305b0d4 100644
--- a/interface/web/sites/templates/shell_user_edit.htm
+++ b/interface/web/sites/templates/shell_user_edit.htm
@@ -28,6 +28,7 @@
 					</div>
 				</div>
             </div>
+			<tmpl_if name="ssh_authentication" op="!=" value="key">
 			<div class="form-group">
                 <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
                 <div class="col-sm-9">
@@ -55,6 +56,7 @@
 					<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
 				</div>
 			</div>
+			</tmpl_if>
             <div class="form-group">
                 <label for="chroot" class="col-sm-3 control-label">{tmpl_var name='chroot_txt'}</label>
                 <div class="col-sm-9"><select name="chroot" id="chroot" class="form-control">
@@ -65,10 +67,12 @@
                 <label for="quota_size" class="col-sm-3 control-label">{tmpl_var name='quota_size_txt'}</label>
                 <div class="col-sm-9"><div class="input-group"><input type="text" name="quota_size" id="quota_size" value="{tmpl_var name='quota_size'}" class="form-control" aria-describedby="quota_size-desc" /><span class="input-group-addon" id="quota_size-desc">MB</span></div></div>
             </div>
+			<tmpl_if name="ssh_authentication" op="!=" value="password">
             <div class="form-group">
                 <label for="ssh_rsa" class="col-sm-3 control-label">{tmpl_var name='ssh_rsa_txt'}</label>
                 <div class="col-sm-9"><textarea class="form-control" name="ssh_rsa" id="ssh_rsa" rows="10" cols="30">{tmpl_var name='ssh_rsa'}</textarea></div>
             </div>
+			</tmpl_if>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
                 <div class="col-sm-9">
-- 
GitLab


From 734277e2f1c5abacaac3035584d463459740bcfe Mon Sep 17 00:00:00 2001
From: Ninos <me@ninosego.de>
Date: Tue, 26 May 2020 18:25:48 +0200
Subject: [PATCH 300/571] Added: Field validation (do not allow
 key/password-field, if only password/key is allowed)

---
 interface/web/sites/shell_user_edit.php | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/interface/web/sites/shell_user_edit.php b/interface/web/sites/shell_user_edit.php
index d1b7017cc7..055676ad95 100644
--- a/interface/web/sites/shell_user_edit.php
+++ b/interface/web/sites/shell_user_edit.php
@@ -126,6 +126,17 @@ class page_action extends tform_actions {
 
 		if(isset($this->dataRecord['ssh_rsa'])) $this->dataRecord['ssh_rsa'] = trim($this->dataRecord['ssh_rsa']);
 
+		$system_config = $app->getconf->get_global_config();
+
+		if($system_config['misc']['ssh_authentication'] == 'password') {
+			$this->dataRecord['ssh_rsa'] = null;
+		}
+
+		if($system_config['misc']['ssh_authentication'] == 'key') {
+			$this->dataRecord['password'] = null;
+			$this->dataRecord['repeat_password'] = null;
+		}
+
 		parent::onSubmit();
 	}
 
-- 
GitLab


From b6c42d0e630719352ee87f79333f9e92f8a0577b Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 00:47:36 +0200
Subject: [PATCH 301/571] Removed double titles or descriptions

---
 interface/web/client/templates/client_edit_address.htm   | 6 ------
 interface/web/client/templates/client_edit_limits.htm    | 7 -------
 interface/web/client/templates/client_message.htm        | 6 +-----
 .../web/client/templates/client_template_edit_limits.htm | 8 --------
 .../client/templates/client_template_edit_template.htm   | 9 ---------
 interface/web/client/templates/message_template.htm      | 6 ------
 interface/web/client/templates/reseller_edit_address.htm | 7 -------
 interface/web/client/templates/reseller_edit_limits.htm  | 8 --------
 8 files changed, 1 insertion(+), 56 deletions(-)

diff --git a/interface/web/client/templates/client_edit_address.htm b/interface/web/client/templates/client_edit_address.htm
index 689849287c..23318b218b 100644
--- a/interface/web/client/templates/client_edit_address.htm
+++ b/interface/web/client/templates/client_edit_address.htm
@@ -1,9 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
         <legend>{tmpl_var name='Address'}</legend>
             <div class="form-group">
                 <label for="company_name" class="col-sm-3 control-label">{tmpl_var name='company_name_txt'}</label>
diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm
index c8cf74e328..0508ab5090 100644
--- a/interface/web/client/templates/client_edit_limits.htm
+++ b/interface/web/client/templates/client_edit_limits.htm
@@ -1,10 +1,3 @@
-<tmpl_if name="list_head_txt">
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-</tmpl_if>
-<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
-
 <div class="panel panel_client">
     
 	<div class="pnl_formsarea">
diff --git a/interface/web/client/templates/client_message.htm b/interface/web/client/templates/client_message.htm
index 7e1b1da701..b546181fa7 100644
--- a/interface/web/client/templates/client_message.htm
+++ b/interface/web/client/templates/client_message.htm
@@ -1,10 +1,6 @@
 <div class='page-header'>
 	<h1><tmpl_var name="page_head_txt"></h1>
 </div>
-<p><tmpl_var name="form_desc_txt"></p>
-
-
-        <legend>{tmpl_var name='form_legend_txt'}</legend>
             <tmpl_if name="okmsg">
                 <div id="OKMsg"><p><tmpl_var name="okmsg"></p></div>
             </tmpl_if>
@@ -32,4 +28,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_send_txt'}" data-submit-form="pageForm" data-form-action="client/client_message.php">{tmpl_var name='btn_send_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm
index df5501602b..a3e4b63e9a 100644
--- a/interface/web/client/templates/client_template_edit_limits.htm
+++ b/interface/web/client/templates/client_template_edit_limits.htm
@@ -1,11 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>{tmpl_var name="Limits"}</legend>
-		
 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
   <div class="panel panel-default">
     <div class="panel-heading" role="tab" id="headingWeb">
diff --git a/interface/web/client/templates/client_template_edit_template.htm b/interface/web/client/templates/client_template_edit_template.htm
index e06d07792d..181dedd20f 100644
--- a/interface/web/client/templates/client_template_edit_template.htm
+++ b/interface/web/client/templates/client_template_edit_template.htm
@@ -1,12 +1,3 @@
-<tmpl_if name="list_head_txt">
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-</tmpl_if>
-<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
-
-
-        <legend>Template</legend>
             <div class="form-group">
                 <label for="template_type" class="col-sm-3 control-label">{tmpl_var name='template_type_txt'}</label>
                 <div class="col-sm-9"><select name="template_type" id="template_type" class="form-control">
diff --git a/interface/web/client/templates/message_template.htm b/interface/web/client/templates/message_template.htm
index 7fd63f3448..4078d36ac8 100644
--- a/interface/web/client/templates/message_template.htm
+++ b/interface/web/client/templates/message_template.htm
@@ -1,12 +1,6 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <div class="panel panel_invoice_message_template">
 
   <div class="pnl_formsarea">
-    <legend>Settings</legend>
       <div class="form-group">
       	<label for="template_type" class="col-sm-3 control-label">{tmpl_var name='template_type_txt'}</label>
         <div class="col-sm-9"><select name="template_type" id="template_type" class="form-control">
diff --git a/interface/web/client/templates/reseller_edit_address.htm b/interface/web/client/templates/reseller_edit_address.htm
index 5cb829a008..eb2760dc3d 100644
--- a/interface/web/client/templates/reseller_edit_address.htm
+++ b/interface/web/client/templates/reseller_edit_address.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>{tmpl_var name='Address'}</legend>
             <div class="form-group">
                 <label for="company_name" class="col-sm-3 control-label">{tmpl_var name='company_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="company_name" id="company_name" value="{tmpl_var name='company_name'}" class="form-control" /></div></div>
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm
index 7a4dc09041..c0a25939df 100644
--- a/interface/web/client/templates/reseller_edit_limits.htm
+++ b/interface/web/client/templates/reseller_edit_limits.htm
@@ -1,14 +1,6 @@
-<tmpl_if name="list_head_txt">
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-</tmpl_if>
-<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
-
 <div class="panel panel_client">
 
     <div class="pnl_formsarea">
-        <legend>{tmpl_var name="Limits"}</legend>
 			<tmpl_if name="is_admin">
                 <div class="form-group">
                     <label for="template_master" class="col-sm-3 control-label">{tmpl_var name='template_master_txt'}</label>
-- 
GitLab


From ad0ffdf677009519354b5e053c87313d2b1053ba Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 00:53:59 +0200
Subject: [PATCH 302/571] Improved page title

---
 interface/web/client/lib/lang/ar_client_message.lng | 2 +-
 interface/web/client/lib/lang/bg_client_message.lng | 2 +-
 interface/web/client/lib/lang/el_client_message.lng | 2 +-
 interface/web/client/lib/lang/en_client_message.lng | 2 +-
 interface/web/client/lib/lang/fi_client_message.lng | 2 +-
 interface/web/client/lib/lang/hu_client_message.lng | 2 +-
 interface/web/client/lib/lang/id_client_message.lng | 2 +-
 interface/web/client/lib/lang/it_client_message.lng | 2 +-
 interface/web/client/lib/lang/ja_client_message.lng | 2 +-
 interface/web/client/lib/lang/nl_client_message.lng | 2 +-
 interface/web/client/lib/lang/pt_client_message.lng | 2 +-
 interface/web/client/lib/lang/ro_client_message.lng | 2 +-
 interface/web/client/lib/lang/sk_client_message.lng | 2 +-
 13 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/interface/web/client/lib/lang/ar_client_message.lng b/interface/web/client/lib/lang/ar_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/ar_client_message.lng
+++ b/interface/web/client/lib/lang/ar_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/bg_client_message.lng b/interface/web/client/lib/lang/bg_client_message.lng
index 671d454304..557972113b 100644
--- a/interface/web/client/lib/lang/bg_client_message.lng
+++ b/interface/web/client/lib/lang/bg_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Полето с Тема е празно.';
 $wb['message_invalid_error'] = 'Полето с съобщение е празно.';
 $wb['email_sent_to_txt'] = 'Изпрати до:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/el_client_message.lng b/interface/web/client/lib/lang/el_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/el_client_message.lng
+++ b/interface/web/client/lib/lang/el_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/en_client_message.lng b/interface/web/client/lib/lang/en_client_message.lng
index c04bd6cda2..01d34392f7 100644
--- a/interface/web/client/lib/lang/en_client_message.lng
+++ b/interface/web/client/lib/lang/en_client_message.lng
@@ -1,5 +1,5 @@
 <?php
-$wb["page_head_txt"] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb["btn_send_txt"] = 'Send email';
 $wb["btn_cancel_txt"] = 'Cancel';
 $wb["sender_txt"] = 'Sender email address';
diff --git a/interface/web/client/lib/lang/fi_client_message.lng b/interface/web/client/lib/lang/fi_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/fi_client_message.lng
+++ b/interface/web/client/lib/lang/fi_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/hu_client_message.lng b/interface/web/client/lib/lang/hu_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/hu_client_message.lng
+++ b/interface/web/client/lib/lang/hu_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/id_client_message.lng b/interface/web/client/lib/lang/id_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/id_client_message.lng
+++ b/interface/web/client/lib/lang/id_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/it_client_message.lng b/interface/web/client/lib/lang/it_client_message.lng
index f5f93c2294..c21f9fb3be 100644
--- a/interface/web/client/lib/lang/it_client_message.lng
+++ b/interface/web/client/lib/lang/it_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject  vuoto.';
 $wb['message_invalid_error'] = 'Message  vuoto.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/ja_client_message.lng b/interface/web/client/lib/lang/ja_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/ja_client_message.lng
+++ b/interface/web/client/lib/lang/ja_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/nl_client_message.lng b/interface/web/client/lib/lang/nl_client_message.lng
index aaa93be1b8..39962efa65 100644
--- a/interface/web/client/lib/lang/nl_client_message.lng
+++ b/interface/web/client/lib/lang/nl_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Onderwerp is leeg.';
 $wb['message_invalid_error'] = 'Bericht is leeg.';
 $wb['email_sent_to_txt'] = 'E-mail verstuurd aan:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Ontvanger';
 $wb['all_clients_resellers_txt'] = 'Alle klanten en resellers';
 $wb['all_clients_txt'] = 'Alle klanten';
diff --git a/interface/web/client/lib/lang/pt_client_message.lng b/interface/web/client/lib/lang/pt_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/pt_client_message.lng
+++ b/interface/web/client/lib/lang/pt_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/ro_client_message.lng b/interface/web/client/lib/lang/ro_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/ro_client_message.lng
+++ b/interface/web/client/lib/lang/ro_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
diff --git a/interface/web/client/lib/lang/sk_client_message.lng b/interface/web/client/lib/lang/sk_client_message.lng
index 6b2a872f10..1b6b3bb7ae 100644
--- a/interface/web/client/lib/lang/sk_client_message.lng
+++ b/interface/web/client/lib/lang/sk_client_message.lng
@@ -10,7 +10,7 @@ $wb['sender_invalid_error'] = 'Sender email invalid.';
 $wb['subject_invalid_error'] = 'Subject is empty.';
 $wb['message_invalid_error'] = 'Message is empty.';
 $wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send customer information';
+$wb["page_head_txt"] = 'Send email message to clients and resellers';
 $wb['recipient_txt'] = 'Recipient';
 $wb['all_clients_resellers_txt'] = 'All clients and resellers';
 $wb['all_clients_txt'] = 'All clients';
-- 
GitLab


From b7cb06c065e54121af407bf4789aa1200969936c Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 01:41:41 +0200
Subject: [PATCH 303/571] Removed double or empty titles / descriptions

---
 interface/web/sites/templates/cron_edit.htm              | 9 +--------
 interface/web/sites/templates/database_edit.htm          | 7 -------
 interface/web/sites/templates/database_user_edit.htm     | 9 +--------
 interface/web/sites/templates/ftp_user_advanced.htm      | 7 -------
 .../web/sites/templates/ftp_user_advanced_client.htm     | 7 -------
 interface/web/sites/templates/ftp_user_edit.htm          | 9 +--------
 interface/web/sites/templates/shell_user_advanced.htm    | 7 +------
 interface/web/sites/templates/shell_user_edit.htm        | 9 +--------
 .../web/sites/templates/web_childdomain_advanced.htm     | 7 -------
 interface/web/sites/templates/web_childdomain_edit.htm   | 9 +--------
 interface/web/sites/templates/web_folder_edit.htm        | 7 -------
 interface/web/sites/templates/web_folder_user_edit.htm   | 7 -------
 .../web/sites/templates/web_vhost_domain_advanced.htm    | 5 -----
 .../web/sites/templates/web_vhost_domain_backup.htm      | 8 +-------
 interface/web/sites/templates/web_vhost_domain_edit.htm  | 4 +++-
 interface/web/sites/templates/web_vhost_domain_list.htm  | 2 +-
 .../web/sites/templates/web_vhost_domain_redirect.htm    | 7 +------
 interface/web/sites/templates/web_vhost_domain_ssl.htm   | 7 +------
 interface/web/sites/templates/web_vhost_domain_stats.htm | 5 -----
 interface/web/sites/templates/webdav_user_edit.htm       | 9 +--------
 20 files changed, 14 insertions(+), 127 deletions(-)

diff --git a/interface/web/sites/templates/cron_edit.htm b/interface/web/sites/templates/cron_edit.htm
index 579ba8af4f..2c0f22ddb9 100644
--- a/interface/web/sites/templates/cron_edit.htm
+++ b/interface/web/sites/templates/cron_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>Cron Job</legend>
             <div class="form-group">
                 <tmpl_if name="edit_disabled">
                     <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
@@ -80,4 +73,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/cron_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/cron_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/sites/templates/database_edit.htm b/interface/web/sites/templates/database_edit.htm
index 290ae30a96..a61e85e193 100644
--- a/interface/web/sites/templates/database_edit.htm
+++ b/interface/web/sites/templates/database_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <tmpl_if name="is_admin">
                 <div class="form-group">
                     <tmpl_if name="edit_disabled">
diff --git a/interface/web/sites/templates/database_user_edit.htm b/interface/web/sites/templates/database_user_edit.htm
index c9ae106cb0..8e9c9fd43d 100644
--- a/interface/web/sites/templates/database_user_edit.htm
+++ b/interface/web/sites/templates/database_user_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <tmpl_if name="is_admin">
                 <div class="form-group">
                     <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
@@ -64,4 +57,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/database_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/database_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/sites/templates/ftp_user_advanced.htm b/interface/web/sites/templates/ftp_user_advanced.htm
index 11069aee97..e77c0bcb26 100644
--- a/interface/web/sites/templates/ftp_user_advanced.htm
+++ b/interface/web/sites/templates/ftp_user_advanced.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="uid" class="col-sm-3 control-label">{tmpl_var name='uid_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="uid" id="uid" value="{tmpl_var name='uid'}" class="form-control" /></div></div>
diff --git a/interface/web/sites/templates/ftp_user_advanced_client.htm b/interface/web/sites/templates/ftp_user_advanced_client.htm
index 02479c9e2f..c4cb1646ac 100644
--- a/interface/web/sites/templates/ftp_user_advanced_client.htm
+++ b/interface/web/sites/templates/ftp_user_advanced_client.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="dir" class="col-sm-3 control-label">{tmpl_var name='dir_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="dir" id="dir" value="{tmpl_var name='dir'}" class="form-control" /></div></div>
diff --git a/interface/web/sites/templates/ftp_user_edit.htm b/interface/web/sites/templates/ftp_user_edit.htm
index 72ec55fbec..e9b4e7ff9a 100644
--- a/interface/web/sites/templates/ftp_user_edit.htm
+++ b/interface/web/sites/templates/ftp_user_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
                 <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
@@ -64,4 +57,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/ftp_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/ftp_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/sites/templates/shell_user_advanced.htm b/interface/web/sites/templates/shell_user_advanced.htm
index bcbbdfa16d..640497a571 100644
--- a/interface/web/sites/templates/shell_user_advanced.htm
+++ b/interface/web/sites/templates/shell_user_advanced.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 		<div class="form-group">
 			<label for="puser" class="col-sm-3 control-label">{tmpl_var name='puser_txt'}</label>
 			<div class="col-sm-9"><input type="text" name="puser" id="puser" value="{tmpl_var name='puser'}" class="form-control" /></div>
@@ -30,4 +25,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/shell_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/shell_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/sites/templates/shell_user_edit.htm b/interface/web/sites/templates/shell_user_edit.htm
index 9ea5f183e5..b9afe15d98 100644
--- a/interface/web/sites/templates/shell_user_edit.htm
+++ b/interface/web/sites/templates/shell_user_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <tmpl_if name="edit_disabled">
                     <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
@@ -82,4 +75,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/shell_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/shell_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/sites/templates/web_childdomain_advanced.htm b/interface/web/sites/templates/web_childdomain_advanced.htm
index 1eac311824..e2a1bc4975 100644
--- a/interface/web/sites/templates/web_childdomain_advanced.htm
+++ b/interface/web/sites/templates/web_childdomain_advanced.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-    <legend>Options</legend>
       <div class="form-group proxy">
                 <label for="proxy_directives" class="col-sm-3 control-label">{tmpl_var name='proxy_directives_txt'}</label>
 				 <div class="col-sm-9"><textarea class="form-control" name="proxy_directives" id="proxy_directives" rows='10' cols='50'>{tmpl_var name='proxy_directives'}</textarea>&nbsp;<b>{tmpl_var name="available_proxy_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="proxy_directive_snippets_txt"}
diff --git a/interface/web/sites/templates/web_childdomain_edit.htm b/interface/web/sites/templates/web_childdomain_edit.htm
index 4836f4a65c..9e16d3ce94 100644
--- a/interface/web/sites/templates/web_childdomain_edit.htm
+++ b/interface/web/sites/templates/web_childdomain_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
 			<tmpl_if name="childdomain_type" value="subdomain">
             <tmpl_if name="domain_option">
             <div class="form-group">
@@ -175,4 +168,4 @@
             }
         });
     }
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/sites/templates/web_folder_edit.htm b/interface/web/sites/templates/web_folder_edit.htm
index dd24094434..e3fef0e477 100644
--- a/interface/web/sites/templates/web_folder_edit.htm
+++ b/interface/web/sites/templates/web_folder_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>Folder</legend>
             <div class="form-group">
                 <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
                 <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
diff --git a/interface/web/sites/templates/web_folder_user_edit.htm b/interface/web/sites/templates/web_folder_user_edit.htm
index 5a7ab466c1..a0c0db8120 100644
--- a/interface/web/sites/templates/web_folder_user_edit.htm
+++ b/interface/web/sites/templates/web_folder_user_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>Folder</legend>
             <div class="form-group">
                 <label for="web_folder_id" class="col-sm-3 control-label">{tmpl_var name='web_folder_id_txt'}</label>
                 <div class="col-sm-9"><select name="web_folder_id" id="web_folder_id" class="form-control">
diff --git a/interface/web/sites/templates/web_vhost_domain_advanced.htm b/interface/web/sites/templates/web_vhost_domain_advanced.htm
index 11f95d9cbd..f1df422bad 100644
--- a/interface/web/sites/templates/web_vhost_domain_advanced.htm
+++ b/interface/web/sites/templates/web_vhost_domain_advanced.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                 <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
diff --git a/interface/web/sites/templates/web_vhost_domain_backup.htm b/interface/web/sites/templates/web_vhost_domain_backup.htm
index c31a579fc2..8c8aa11bee 100644
--- a/interface/web/sites/templates/web_vhost_domain_backup.htm
+++ b/interface/web/sites/templates/web_vhost_domain_backup.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                 <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
@@ -12,7 +7,6 @@
 </div>
 </tmpl_if>
 
-        <legend>Backup</legend>
             <div class="form-group">
                 <label for="backup_interval" class="col-sm-3 control-label">{tmpl_var name='backup_interval_txt'}</label>
                 <div class="col-sm-9"><select name="backup_interval" id="backup_interval" class="form-control">
@@ -38,4 +32,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_vhost_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index 247ef175e2..6092778af8 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -92,7 +92,9 @@
 			<tmpl_if name="edit_disabled">
 				<div class="form-group">
 					<label for="document_root" class="col-sm-3 control-label" readonly >{tmpl_var name='document_root_txt'}</label>
-					<div class="col-sm-9">{tmpl_var name='document_root'}</div>
+					<div class="col-sm-9">
+                        <div class="checkbox">{tmpl_var name='document_root'}</div>
+                    </div> 
 				</div>
 			</tmpl_if>
             <div class="form-group">
diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm
index 4cdde852a3..a202aff2e2 100644
--- a/interface/web/sites/templates/web_vhost_domain_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_list.htm
@@ -1,4 +1,4 @@
-<div class='page-header'>
+<div class="page-header">
 	<h1><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="domain_list_head_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="subdomain_list_head_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="aliasdomain_list_head_txt"}</tmpl_if></h1>
 </div>
 <p><tmpl_var name="list_desc_txt"></p>
diff --git a/interface/web/sites/templates/web_vhost_domain_redirect.htm b/interface/web/sites/templates/web_vhost_domain_redirect.htm
index e38c08671c..3326d5ec96 100644
--- a/interface/web/sites/templates/web_vhost_domain_redirect.htm
+++ b/interface/web/sites/templates/web_vhost_domain_redirect.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                 <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
@@ -94,4 +89,4 @@
         });
     }
 			
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/sites/templates/web_vhost_domain_ssl.htm b/interface/web/sites/templates/web_vhost_domain_ssl.htm
index ad9629fe4c..8b3d986a02 100644
--- a/interface/web/sites/templates/web_vhost_domain_ssl.htm
+++ b/interface/web/sites/templates/web_vhost_domain_ssl.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                 <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
@@ -111,4 +106,4 @@
     }
 	</tmpl_if>
 //-->
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/sites/templates/web_vhost_domain_stats.htm b/interface/web/sites/templates/web_vhost_domain_stats.htm
index 66c9fa3c94..6ebf9a6613 100644
--- a/interface/web/sites/templates/web_vhost_domain_stats.htm
+++ b/interface/web/sites/templates/web_vhost_domain_stats.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                 <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
diff --git a/interface/web/sites/templates/webdav_user_edit.htm b/interface/web/sites/templates/webdav_user_edit.htm
index ee261ec29e..3ea8ed2776 100644
--- a/interface/web/sites/templates/webdav_user_edit.htm
+++ b/interface/web/sites/templates/webdav_user_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <tmpl_if name="edit_disabled">
                     <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
@@ -76,4 +69,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/webdav_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/webdav_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
-- 
GitLab


From 6281ea7328bcd501f5528e9e1604e12b5fc41bc3 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 01:42:29 +0200
Subject: [PATCH 304/571] Changed the class on accident, revert

---
 interface/web/sites/templates/web_vhost_domain_list.htm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm
index a202aff2e2..4cdde852a3 100644
--- a/interface/web/sites/templates/web_vhost_domain_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_list.htm
@@ -1,4 +1,4 @@
-<div class="page-header">
+<div class='page-header'>
 	<h1><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="domain_list_head_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="subdomain_list_head_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="aliasdomain_list_head_txt"}</tmpl_if></h1>
 </div>
 <p><tmpl_var name="list_desc_txt"></p>
-- 
GitLab


From 666d1df8726a964bb74c7ab2d50992bd582fc149 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 27 May 2020 21:16:02 +0200
Subject: [PATCH 305/571] Fixed: #5622 Do not display user switcher to
 client_id 0 users.

---
 interface/web/admin/templates/users_list.htm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/admin/templates/users_list.htm b/interface/web/admin/templates/users_list.htm
index 8db81c6c8d..6486ed344d 100644
--- a/interface/web/admin/templates/users_list.htm
+++ b/interface/web/admin/templates/users_list.htm
@@ -41,7 +41,7 @@
                             <td><div class="icons16 group-{tmpl_var name="typ"}" title="{tmpl_var name="typ"}"><span>{tmpl_var name="typ"}</span></div> <div class="group-icon"><a href="#" data-load-content="admin/users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></div></td>
                             <td>{tmpl_var name="groups"}</td>
                             <td class="text-right">
-                                <tmpl_if name="username" op="!=" value="admin">
+                                <tmpl_if name="client_id" op="!=" value="0">
                                     <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='client_id'}"><span class="icon icon-loginas"></span></a>
                                     <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/users_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
-- 
GitLab


From e7fadf857fca081c40e2f18a8ca037995aa51537 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 21:26:55 +0200
Subject: [PATCH 306/571] Removed double / empty titles and descriptions

---
 interface/web/mail/templates/mail_alias_edit.htm      |  5 -----
 .../web/mail/templates/mail_aliasdomain_edit.htm      |  9 +--------
 interface/web/mail/templates/mail_blacklist_edit.htm  |  9 +--------
 .../web/mail/templates/mail_content_filter_edit.htm   |  9 +--------
 .../web/mail/templates/mail_domain_catchall_edit.htm  |  8 ++------
 interface/web/mail/templates/mail_domain_edit.htm     |  9 +--------
 interface/web/mail/templates/mail_forward_edit.htm    |  5 -----
 interface/web/mail/templates/mail_get_edit.htm        |  9 +--------
 .../web/mail/templates/mail_mailinglist_edit.htm      |  7 -------
 .../web/mail/templates/mail_relay_recipient_edit.htm  |  9 +--------
 interface/web/mail/templates/mail_transport_edit.htm  |  9 +--------
 .../mail/templates/mail_user_autoresponder_edit.htm   |  9 +--------
 interface/web/mail/templates/mail_user_backup.htm     |  5 -----
 .../mail/templates/mail_user_custom_rules_edit.htm    |  9 +--------
 .../web/mail/templates/mail_user_filter_edit.htm      |  9 +--------
 .../web/mail/templates/mail_user_mailbox_edit.htm     |  7 -------
 .../web/mail/templates/mail_user_mailfilter_edit.htm  |  9 +--------
 interface/web/mail/templates/mail_whitelist_edit.htm  |  9 +--------
 .../web/mail/templates/spamfilter_amavis_edit.htm     |  7 +------
 .../web/mail/templates/spamfilter_blacklist_edit.htm  |  9 +--------
 .../web/mail/templates/spamfilter_policy_edit.htm     |  8 +-------
 .../web/mail/templates/spamfilter_rspamd_edit.htm     |  7 +------
 .../web/mail/templates/spamfilter_users_edit.htm      |  9 +--------
 .../web/mail/templates/spamfilter_whitelist_edit.htm  | 11 ++---------
 interface/web/mail/templates/xmpp_domain_edit.htm     |  7 -------
 .../web/mail/templates/xmpp_domain_edit_modules.htm   |  6 ------
 interface/web/mail/templates/xmpp_domain_edit_muc.htm |  7 -------
 interface/web/mail/templates/xmpp_domain_edit_ssl.htm |  7 +------
 interface/web/mail/templates/xmpp_user_edit.htm       |  4 ----
 29 files changed, 22 insertions(+), 205 deletions(-)

diff --git a/interface/web/mail/templates/mail_alias_edit.htm b/interface/web/mail/templates/mail_alias_edit.htm
index 6a67887bf9..2fd149a348 100644
--- a/interface/web/mail/templates/mail_alias_edit.htm
+++ b/interface/web/mail/templates/mail_alias_edit.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 			<div class="form-group">
                 <label class="col-sm-3 control-label"><em>*</em> {tmpl_var name='email_txt'}</label>
                 <div class="col-sm-9">
diff --git a/interface/web/mail/templates/mail_aliasdomain_edit.htm b/interface/web/mail/templates/mail_aliasdomain_edit.htm
index 9e19b5d07a..a18ff0e3db 100644
--- a/interface/web/mail/templates/mail_aliasdomain_edit.htm
+++ b/interface/web/mail/templates/mail_aliasdomain_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="destination" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
                 <div class="col-sm-9"><select name="source" id="source" class="form-control">
@@ -31,4 +24,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_aliasdomain_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_aliasdomain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_blacklist_edit.htm b/interface/web/mail/templates/mail_blacklist_edit.htm
index c68729cbce..24ad67e569 100644
--- a/interface/web/mail/templates/mail_blacklist_edit.htm
+++ b/interface/web/mail/templates/mail_blacklist_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -34,4 +27,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_blacklist_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_blacklist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_content_filter_edit.htm b/interface/web/mail/templates/mail_content_filter_edit.htm
index 4aa59c8e06..8eb4266fef 100644
--- a/interface/web/mail/templates/mail_content_filter_edit.htm
+++ b/interface/web/mail/templates/mail_content_filter_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -42,4 +35,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_content_filter_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_content_filter_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_domain_catchall_edit.htm b/interface/web/mail/templates/mail_domain_catchall_edit.htm
index 5991f2aecc..0ccae15a8f 100644
--- a/interface/web/mail/templates/mail_domain_catchall_edit.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_edit.htm
@@ -1,8 +1,4 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-			<div class="form-group">
+<			<div class="form-group">
                 <label for="email_domain" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
                 <div class="col-sm-9">
 					<div class="input-group">
@@ -33,4 +29,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_domain_catchall_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_domain_catchall_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_domain_edit.htm b/interface/web/mail/templates/mail_domain_edit.htm
index 71a6655e80..1e4a49c2a5 100644
--- a/interface/web/mail/templates/mail_domain_edit.htm
+++ b/interface/web/mail/templates/mail_domain_edit.htm
@@ -1,11 +1,4 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
-            <tmpl_if name="is_admin">
+                 <tmpl_if name="is_admin">
                 <div class="form-group">
                     <tmpl_if name="edit_disabled">
                         <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
diff --git a/interface/web/mail/templates/mail_forward_edit.htm b/interface/web/mail/templates/mail_forward_edit.htm
index 7c1fca0299..a5de2a00b7 100644
--- a/interface/web/mail/templates/mail_forward_edit.htm
+++ b/interface/web/mail/templates/mail_forward_edit.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
             <div class="form-group">
                 <label class="col-sm-3 control-label"><em>*</em> {tmpl_var name='email_txt'}</label>
                 <div class="col-sm-9">
diff --git a/interface/web/mail/templates/mail_get_edit.htm b/interface/web/mail/templates/mail_get_edit.htm
index f3d8a3b0f4..6b5b8c198e 100644
--- a/interface/web/mail/templates/mail_get_edit.htm
+++ b/interface/web/mail/templates/mail_get_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="type" class="col-sm-3 control-label">{tmpl_var name='type_txt'}</label>
                 <div class="col-sm-9"><select name="type" id="type" class="form-control">
@@ -51,4 +44,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_get_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_get_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_mailinglist_edit.htm b/interface/web/mail/templates/mail_mailinglist_edit.htm
index 9d6f8bdde6..ac43cbb417 100644
--- a/interface/web/mail/templates/mail_mailinglist_edit.htm
+++ b/interface/web/mail/templates/mail_mailinglist_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>Mailing List</legend>	
             <tmpl_if name="is_admin">
                 <div class="form-group">
                     <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
diff --git a/interface/web/mail/templates/mail_relay_recipient_edit.htm b/interface/web/mail/templates/mail_relay_recipient_edit.htm
index 83e52aa661..7b476fe37a 100644
--- a/interface/web/mail/templates/mail_relay_recipient_edit.htm
+++ b/interface/web/mail/templates/mail_relay_recipient_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>Relay recipient</legend>
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -28,4 +21,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_relay_recipient_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_relay_recipient_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_transport_edit.htm b/interface/web/mail/templates/mail_transport_edit.htm
index e0332de1b6..694e57634d 100644
--- a/interface/web/mail/templates/mail_transport_edit.htm
+++ b/interface/web/mail/templates/mail_transport_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -48,4 +41,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_transport_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_transport_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_user_autoresponder_edit.htm b/interface/web/mail/templates/mail_user_autoresponder_edit.htm
index c5fc584c09..1c1cdc6759 100644
--- a/interface/web/mail/templates/mail_user_autoresponder_edit.htm
+++ b/interface/web/mail/templates/mail_user_autoresponder_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="autoresponder_subject" class="col-sm-3 control-label">{tmpl_var name='autoresponder_subject_txt'}</label>
                 <div class="col-sm-9"><input class="form-control" type="text" name="autoresponder_subject" id="autoresponder_subject" value="{tmpl_var name='autoresponder_subject'}" /></div></div>
@@ -30,4 +23,4 @@
             <button class="btn btn-default formbutton-success" type="button"
                     value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_user_backup.htm b/interface/web/mail/templates/mail_user_backup.htm
index f9abba3bba..0de61a3297 100644
--- a/interface/web/mail/templates/mail_user_backup.htm
+++ b/interface/web/mail/templates/mail_user_backup.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                 <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
diff --git a/interface/web/mail/templates/mail_user_custom_rules_edit.htm b/interface/web/mail/templates/mail_user_custom_rules_edit.htm
index d12378678c..263ea7916a 100644
--- a/interface/web/mail/templates/mail_user_custom_rules_edit.htm
+++ b/interface/web/mail/templates/mail_user_custom_rules_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="custom_mailfilter" class="col-sm-3 control-label">{tmpl_var name='custom_mailfilter_txt'}</label>
                 <div class="col-sm-9"><textarea class="form-control" name="custom_mailfilter" id="custom_mailfilter" rows='15' cols='30'>{tmpl_var name='custom_mailfilter'}</textarea></div>
@@ -16,4 +9,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_user_filter_edit.htm b/interface/web/mail/templates/mail_user_filter_edit.htm
index cb2d79a249..6a7983c64e 100644
--- a/interface/web/mail/templates/mail_user_filter_edit.htm
+++ b/interface/web/mail/templates/mail_user_filter_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="rulename" class="col-sm-3 control-label">{tmpl_var name='rulename_txt'}</label>
                 <div class="col-sm-9"><input type="text" id="rulename" name="rulename" value="{tmpl_var name='rulename'}" class="form-control"></div>
@@ -32,4 +25,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_filter_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='mailuser_id'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm
index bcab744de3..a90799cf11 100644
--- a/interface/web/mail/templates/mail_user_mailbox_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-6"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp; {tmpl_var name='name_optional_txt'}
diff --git a/interface/web/mail/templates/mail_user_mailfilter_edit.htm b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
index 183a98b5e3..fc40398d5d 100644
--- a/interface/web/mail/templates/mail_user_mailfilter_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='move_junk_txt'}</label>
                 <div class="col-sm-9">
@@ -20,4 +13,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/mail_whitelist_edit.htm b/interface/web/mail/templates/mail_whitelist_edit.htm
index 1f72e6935f..575a6ae2fb 100644
--- a/interface/web/mail/templates/mail_whitelist_edit.htm
+++ b/interface/web/mail/templates/mail_whitelist_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -34,4 +27,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_whitelist_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_whitelist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_amavis_edit.htm b/interface/web/mail/templates/spamfilter_amavis_edit.htm
index 41bf6b5410..d770ed842a 100644
--- a/interface/web/mail/templates/spamfilter_amavis_edit.htm
+++ b/interface/web/mail/templates/spamfilter_amavis_edit.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
 	<!-- Settings -->
   <div class="panel panel-default">
@@ -195,4 +190,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_blacklist_edit.htm b/interface/web/mail/templates/spamfilter_blacklist_edit.htm
index 1db93dd7c2..3a7fd47869 100644
--- a/interface/web/mail/templates/spamfilter_blacklist_edit.htm
+++ b/interface/web/mail/templates/spamfilter_blacklist_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <!--
                 <div class="form-group">
                     <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
@@ -42,4 +35,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_blacklist_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_blacklist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_policy_edit.htm b/interface/web/mail/templates/spamfilter_policy_edit.htm
index 506b4d5b89..11fd8e73d1 100644
--- a/interface/web/mail/templates/spamfilter_policy_edit.htm
+++ b/interface/web/mail/templates/spamfilter_policy_edit.htm
@@ -1,9 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-       
             <div class="form-group">
                 <label for="policy_name" class="col-sm-3 control-label">{tmpl_var name='policy_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="policy_name" id="policy_name" value="{tmpl_var name='policy_name'}" class="form-control" /></div></div>
@@ -26,4 +20,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_rspamd_edit.htm b/interface/web/mail/templates/spamfilter_rspamd_edit.htm
index 2f8ea0f451..5d1602514a 100644
--- a/interface/web/mail/templates/spamfilter_rspamd_edit.htm
+++ b/interface/web/mail/templates/spamfilter_rspamd_edit.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 			<div class="form-group">
                 <label for="rspamd_spam_greylisting_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_greylisting_level_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="rspamd_spam_greylisting_level" id="rspamd_spam_greylisting_level" value="{tmpl_var name='rspamd_spam_greylisting_level'}" class="form-control" /></div>
@@ -27,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_users_edit.htm b/interface/web/mail/templates/spamfilter_users_edit.htm
index 7c75c5ee34..80bdbd66ca 100644
--- a/interface/web/mail/templates/spamfilter_users_edit.htm
+++ b/interface/web/mail/templates/spamfilter_users_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -42,4 +35,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_users_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_whitelist_edit.htm b/interface/web/mail/templates/spamfilter_whitelist_edit.htm
index aefe5f9fec..fcc6e09a2e 100644
--- a/interface/web/mail/templates/spamfilter_whitelist_edit.htm
+++ b/interface/web/mail/templates/spamfilter_whitelist_edit.htm
@@ -1,11 +1,4 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
-            <!--
+                  <!--
                   <div class="form-group">
                     <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                     <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -42,4 +35,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_whitelist_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_whitelist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mail/templates/xmpp_domain_edit.htm b/interface/web/mail/templates/xmpp_domain_edit.htm
index 5c4e8d79a0..6953fbfb14 100644
--- a/interface/web/mail/templates/xmpp_domain_edit.htm
+++ b/interface/web/mail/templates/xmpp_domain_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <tmpl_if name="is_admin">
                 <div class="form-group">
                     <tmpl_if name="edit_disabled">
diff --git a/interface/web/mail/templates/xmpp_domain_edit_modules.htm b/interface/web/mail/templates/xmpp_domain_edit_modules.htm
index 8efcf50976..f705c495da 100644
--- a/interface/web/mail/templates/xmpp_domain_edit_modules.htm
+++ b/interface/web/mail/templates/xmpp_domain_edit_modules.htm
@@ -1,9 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
 <tmpl_if name="limit_xmpp_anon" value="y">
     <div class="form-group">
         <label class="col-sm-3 control-label">{tmpl_var name='use_anon_host_txt'}</label>
diff --git a/interface/web/mail/templates/xmpp_domain_edit_muc.htm b/interface/web/mail/templates/xmpp_domain_edit_muc.htm
index dd46514cae..5425822352 100644
--- a/interface/web/mail/templates/xmpp_domain_edit_muc.htm
+++ b/interface/web/mail/templates/xmpp_domain_edit_muc.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-
 <div class="form-group">
     <label class="col-sm-3 control-label">{tmpl_var name='use_muc_host_txt'}</label>
     <div class="col-sm-9">
diff --git a/interface/web/mail/templates/xmpp_domain_edit_ssl.htm b/interface/web/mail/templates/xmpp_domain_edit_ssl.htm
index 2bb7d059aa..0ef2e2c962 100644
--- a/interface/web/mail/templates/xmpp_domain_edit_ssl.htm
+++ b/interface/web/mail/templates/xmpp_domain_edit_ssl.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                 <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
@@ -97,4 +92,4 @@
     }
 	</tmpl_if>
 //-->
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/mail/templates/xmpp_user_edit.htm b/interface/web/mail/templates/xmpp_user_edit.htm
index 467b83fb52..c70155d8f5 100644
--- a/interface/web/mail/templates/xmpp_user_edit.htm
+++ b/interface/web/mail/templates/xmpp_user_edit.htm
@@ -1,7 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
 			<div class="form-group">
                 <label class="col-sm-3 control-label"><em>*</em> {tmpl_var name='jid_txt'}</label>
                 <div class="col-sm-9">
-- 
GitLab


From 86e85a33b6a32de0c9b68c0db8ab73ca5d9d0885 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 21:43:34 +0200
Subject: [PATCH 307/571] Removed double / empty titles and descriptions

---
 interface/web/dns/templates/dns_a_edit.htm        | 11 ++---------
 interface/web/dns/templates/dns_aaaa_edit.htm     |  9 +--------
 interface/web/dns/templates/dns_alias_edit.htm    |  9 +--------
 interface/web/dns/templates/dns_caa_edit.htm      |  3 ---
 interface/web/dns/templates/dns_cname_edit.htm    |  9 +--------
 interface/web/dns/templates/dns_dkim_edit.htm     |  4 ----
 interface/web/dns/templates/dns_dmarc_edit.htm    |  7 -------
 interface/web/dns/templates/dns_ds_edit.htm       |  9 +--------
 interface/web/dns/templates/dns_hinfo_edit.htm    |  9 +--------
 interface/web/dns/templates/dns_import.htm        |  2 +-
 interface/web/dns/templates/dns_loc_edit.htm      |  9 +--------
 interface/web/dns/templates/dns_mx_edit.htm       |  9 +--------
 interface/web/dns/templates/dns_ns_edit.htm       |  9 +--------
 interface/web/dns/templates/dns_ptr_edit.htm      |  9 +--------
 interface/web/dns/templates/dns_records_edit.htm  |  7 +------
 interface/web/dns/templates/dns_rp_edit.htm       |  9 +--------
 interface/web/dns/templates/dns_slave_edit.htm    |  7 -------
 interface/web/dns/templates/dns_soa_edit.htm      |  6 ------
 interface/web/dns/templates/dns_spf_edit.htm      |  7 -------
 interface/web/dns/templates/dns_srv_edit.htm      |  9 +--------
 interface/web/dns/templates/dns_template_edit.htm |  7 -------
 interface/web/dns/templates/dns_tlsa_edit.htm     |  9 +--------
 interface/web/dns/templates/dns_txt_edit.htm      |  9 +--------
 interface/web/dns/templates/dns_wizard.htm        |  2 --
 24 files changed, 17 insertions(+), 163 deletions(-)

diff --git a/interface/web/dns/templates/dns_a_edit.htm b/interface/web/dns/templates/dns_a_edit.htm
index 92dfbcd3ae..907d84b0bc 100644
--- a/interface/web/dns/templates/dns_a_edit.htm
+++ b/interface/web/dns/templates/dns_a_edit.htm
@@ -1,11 +1,4 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
-            <div class="form-group">
+                   <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div><p class="formHint">{tmpl_var name='name_hint_txt'}</p>
             </div>
@@ -45,4 +38,4 @@
         searchFieldWatermark: '',
         resultBoxPosition: ''
     });	
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/dns/templates/dns_aaaa_edit.htm b/interface/web/dns/templates/dns_aaaa_edit.htm
index fbbc757cec..13ee0ccaab 100644
--- a/interface/web/dns/templates/dns_aaaa_edit.htm
+++ b/interface/web/dns/templates/dns_aaaa_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div><p class="formHint">{tmpl_var name='name_hint_txt'}</p>
@@ -45,4 +38,4 @@
         searchFieldWatermark: '',
         resultBoxPosition: ''
     });	
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/dns/templates/dns_alias_edit.htm b/interface/web/dns/templates/dns_alias_edit.htm
index 5ab2a3ccaa..ad6c74d863 100644
--- a/interface/web/dns/templates/dns_alias_edit.htm
+++ b/interface/web/dns/templates/dns_alias_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_alias_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_caa_edit.htm b/interface/web/dns/templates/dns_caa_edit.htm
index 3de64818b4..8d4372d9a9 100644
--- a/interface/web/dns/templates/dns_caa_edit.htm
+++ b/interface/web/dns/templates/dns_caa_edit.htm
@@ -1,6 +1,3 @@
-<div class='page-header'><h1><tmpl_var name="list_head_txt"></h1></div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <div class="form-group">
 	<label for="ca_list" class="col-sm-2 control-label">{tmpl_var name='ca_list_txt'}</label>
 	<div class="col-sm-4"><select name="ca_list" id="ca_list" class="form-control">{tmpl_var name='ca_list'}</select></div>
diff --git a/interface/web/dns/templates/dns_cname_edit.htm b/interface/web/dns/templates/dns_cname_edit.htm
index 778279cbd8..3b37e5133d 100644
--- a/interface/web/dns/templates/dns_cname_edit.htm
+++ b/interface/web/dns/templates/dns_cname_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_cname_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_dkim_edit.htm b/interface/web/dns/templates/dns_dkim_edit.htm
index 310dda1c9e..be3bea3dd5 100644
--- a/interface/web/dns/templates/dns_dkim_edit.htm
+++ b/interface/web/dns/templates/dns_dkim_edit.htm
@@ -1,7 +1,3 @@
-<div class='page-header'><h1><tmpl_var name="list_head_txt"></h1></div>
-
-<p><tmpl_var name="list_desc_txt"></p>
-
 <div class="form-group">
 	<label for="data" class="col-sm-3 control-label">{tmpl_var name='public_key_txt'}</label>
 	<tmpl_if name="edit_disabled">
diff --git a/interface/web/dns/templates/dns_dmarc_edit.htm b/interface/web/dns/templates/dns_dmarc_edit.htm
index 4b7646a398..668b29f8df 100644
--- a/interface/web/dns/templates/dns_dmarc_edit.htm
+++ b/interface/web/dns/templates/dns_dmarc_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="domain" class="col-sm-2 control-label">{tmpl_var name='domain_txt'}</label>
 				<div class="col-sm-3">
diff --git a/interface/web/dns/templates/dns_ds_edit.htm b/interface/web/dns/templates/dns_ds_edit.htm
index 56113f0ec0..c7012d9fd9 100644
--- a/interface/web/dns/templates/dns_ds_edit.htm
+++ b/interface/web/dns/templates/dns_ds_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_ds_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_hinfo_edit.htm b/interface/web/dns/templates/dns_hinfo_edit.htm
index 0be975f529..39a02dabbc 100644
--- a/interface/web/dns/templates/dns_hinfo_edit.htm
+++ b/interface/web/dns/templates/dns_hinfo_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_hinfo_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_import.htm b/interface/web/dns/templates/dns_import.htm
index 87d54316f3..dafb9016a0 100644
--- a/interface/web/dns/templates/dns_import.htm
+++ b/interface/web/dns/templates/dns_import.htm
@@ -62,4 +62,4 @@
             jQuery('.positive').trigger('click');
         }
     }
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/dns/templates/dns_loc_edit.htm b/interface/web/dns/templates/dns_loc_edit.htm
index 12cfb6357f..d8e261991c 100644
--- a/interface/web/dns/templates/dns_loc_edit.htm
+++ b/interface/web/dns/templates/dns_loc_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_loc_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_mx_edit.htm b/interface/web/dns/templates/dns_mx_edit.htm
index 290c218faf..3a84cbacb4 100644
--- a/interface/web/dns/templates/dns_mx_edit.htm
+++ b/interface/web/dns/templates/dns_mx_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -32,4 +25,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_mx_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_ns_edit.htm b/interface/web/dns/templates/dns_ns_edit.htm
index 3cafa17daf..6644af152c 100644
--- a/interface/web/dns/templates/dns_ns_edit.htm
+++ b/interface/web/dns/templates/dns_ns_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_ns_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_ptr_edit.htm b/interface/web/dns/templates/dns_ptr_edit.htm
index de59069259..725bbb17fa 100644
--- a/interface/web/dns/templates/dns_ptr_edit.htm
+++ b/interface/web/dns/templates/dns_ptr_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_ptr_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_records_edit.htm b/interface/web/dns/templates/dns_records_edit.htm
index a2a42c3d45..979cebe5fd 100644
--- a/interface/web/dns/templates/dns_records_edit.htm
+++ b/interface/web/dns/templates/dns_records_edit.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <div class="panel panel_dns_soa">
 
     {tmpl_var name='dns_records'}
@@ -11,4 +6,4 @@
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
     </div>
   
-</div>
\ No newline at end of file
+</div>
diff --git a/interface/web/dns/templates/dns_rp_edit.htm b/interface/web/dns/templates/dns_rp_edit.htm
index 3dd04adf1a..9a4b9f4e55 100644
--- a/interface/web/dns/templates/dns_rp_edit.htm
+++ b/interface/web/dns/templates/dns_rp_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_rp_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_slave_edit.htm b/interface/web/dns/templates/dns_slave_edit.htm
index 832fec1abc..1f4f7234d6 100644
--- a/interface/web/dns/templates/dns_slave_edit.htm
+++ b/interface/web/dns/templates/dns_slave_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend><tmpl_var name="secondary_zone_txt"></legend>
             <tmpl_if name="is_admin">
                 <div class="form-group">
                     <tmpl_if name="edit_disabled">
diff --git a/interface/web/dns/templates/dns_soa_edit.htm b/interface/web/dns/templates/dns_soa_edit.htm
index 7a069cb3bf..ce8154c857 100644
--- a/interface/web/dns/templates/dns_soa_edit.htm
+++ b/interface/web/dns/templates/dns_soa_edit.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
 	<p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
@@ -10,7 +5,6 @@
 </div>
 </tmpl_if>
 
-        <legend>DNS Zone</legend>
             <tmpl_if name="is_admin">
                 <div class="form-group">
                     <tmpl_if name="edit_disabled">
diff --git a/interface/web/dns/templates/dns_spf_edit.htm b/interface/web/dns/templates/dns_spf_edit.htm
index fc7400d620..2817d7645b 100644
--- a/interface/web/dns/templates/dns_spf_edit.htm
+++ b/interface/web/dns/templates/dns_spf_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div>
diff --git a/interface/web/dns/templates/dns_srv_edit.htm b/interface/web/dns/templates/dns_srv_edit.htm
index fd9f00d7b4..f142f482d4 100644
--- a/interface/web/dns/templates/dns_srv_edit.htm
+++ b/interface/web/dns/templates/dns_srv_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -38,4 +31,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_srv_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_template_edit.htm b/interface/web/dns/templates/dns_template_edit.htm
index 9de8c93447..db0ee9d925 100644
--- a/interface/web/dns/templates/dns_template_edit.htm
+++ b/interface/web/dns/templates/dns_template_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
diff --git a/interface/web/dns/templates/dns_tlsa_edit.htm b/interface/web/dns/templates/dns_tlsa_edit.htm
index c2cde8be61..297077eecb 100644
--- a/interface/web/dns/templates/dns_tlsa_edit.htm
+++ b/interface/web/dns/templates/dns_tlsa_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_tlsa_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_txt_edit.htm b/interface/web/dns/templates/dns_txt_edit.htm
index f03f6d36c8..de69bc553e 100644
--- a/interface/web/dns/templates/dns_txt_edit.htm
+++ b/interface/web/dns/templates/dns_txt_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_txt_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_wizard.htm b/interface/web/dns/templates/dns_wizard.htm
index 907dedca88..2f4f24b4e0 100644
--- a/interface/web/dns/templates/dns_wizard.htm
+++ b/interface/web/dns/templates/dns_wizard.htm
@@ -1,14 +1,12 @@
 <div class='page-header'>
 	<h1><tmpl_var name="list_head_txt"></h1>
 </div>
-<p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="error">
     <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
 </tmpl_if>
 
 
-        <legend><tmpl_var name="dns_zone_txt"></legend>
             <div class="form-group">
                 <label for="template_id" class="col-sm-3 control-label">{tmpl_var name='template_id_txt'}</label>
                 <div class="col-sm-9"><select name="template_id" id="template_id" class="form-control" onChange="ISPConfig.submitForm('pageForm','dns/dns_wizard.php')">
-- 
GitLab


From d4751a42b4a23372d3270505b5ae1bf98f0dd445 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 21:57:47 +0200
Subject: [PATCH 308/571] Removed double / empty titles and descriptions

---
 interface/web/tools/form/interface_settings.tform.php | 2 +-
 interface/web/tools/form/user_settings.tform.php      | 2 +-
 interface/web/tools/templates/dns_import_tupa.htm     | 1 -
 interface/web/tools/templates/interface_settings.htm  | 9 +--------
 interface/web/tools/templates/resync.htm              | 5 -----
 interface/web/tools/templates/user_settings.htm       | 7 +------
 6 files changed, 4 insertions(+), 22 deletions(-)

diff --git a/interface/web/tools/form/interface_settings.tform.php b/interface/web/tools/form/interface_settings.tform.php
index 9ab49eb0f1..05eaba9416 100644
--- a/interface/web/tools/form/interface_settings.tform.php
+++ b/interface/web/tools/form/interface_settings.tform.php
@@ -61,7 +61,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 $form['title']   = 'interface_head_txt';
-$form['description']  = 'interface_desc_txt';
+//*$form['description']  = 'interface_desc_txt';
 $form['name']   = 'interface';
 $form['action']  = 'interface_settings.php';
 $form['db_table'] = 'sys_user';
diff --git a/interface/web/tools/form/user_settings.tform.php b/interface/web/tools/form/user_settings.tform.php
index f3ad5a2d3d..7daa1a7b84 100644
--- a/interface/web/tools/form/user_settings.tform.php
+++ b/interface/web/tools/form/user_settings.tform.php
@@ -61,7 +61,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 $form['title']    = 'User Settings';
-$form['description']  = 'Form to edit the user password and language.';
+//*$form['description']  = 'Form to edit the user password and language.';
 $form['name']    = 'usersettings';
 $form['action']   = 'user_settings.php';
 $form['db_table']  = 'sys_user';
diff --git a/interface/web/tools/templates/dns_import_tupa.htm b/interface/web/tools/templates/dns_import_tupa.htm
index cd47f431e0..4593fbb800 100644
--- a/interface/web/tools/templates/dns_import_tupa.htm
+++ b/interface/web/tools/templates/dns_import_tupa.htm
@@ -2,7 +2,6 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
 
-        <legend>PowerDNS Tupa import</legend>
             <div class="form-group">
                 <label class="col-sm-3 control-label" for="dbhost">Tupa database hostname</label>
                 <div class="col-sm-9"><input class="form-control" type="text" id="dbhost" value="{tmpl_var name='dbhost'}" name="dbhost" /></div>
diff --git a/interface/web/tools/templates/interface_settings.htm b/interface/web/tools/templates/interface_settings.htm
index ccd5000445..6767287206 100644
--- a/interface/web/tools/templates/interface_settings.htm
+++ b/interface/web/tools/templates/interface_settings.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="page_head_txt"></h1>
-</div>
-<p><tmpl_var name="page_desc_txt"></p>
-
-
-        
             <!-- TODO: If user theme change is activated -->
             <div class="form-group">
                 <label for="app_theme" class="col-sm-3 control-label">{tmpl_var name='app_theme_txt'}</label>
@@ -26,4 +19,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/interface_settings.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/tools/templates/resync.htm b/interface/web/tools/templates/resync.htm
index 3e66290fb0..ef3ac886c8 100644
--- a/interface/web/tools/templates/resync.htm
+++ b/interface/web/tools/templates/resync.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-	
 <div class="form-group">
 	<label for="resync_all" class="col-sm-2 control-label">{tmpl_var name='resync_all_txt'}</label>
 	<div class="col-sm-1"><input type="checkbox" id="resync_all" value="1" name="resync_all"></div>
diff --git a/interface/web/tools/templates/user_settings.htm b/interface/web/tools/templates/user_settings.htm
index 26f9e0c861..4fa1c9de34 100644
--- a/interface/web/tools/templates/user_settings.htm
+++ b/interface/web/tools/templates/user_settings.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 			<div class="form-group">
                 <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
                 <div class="col-sm-9">
@@ -43,4 +38,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/user_settings.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
-- 
GitLab


From 499745fdfa6bf31802a9de05647a538a26408815 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 22:21:59 +0200
Subject: [PATCH 309/571] Removed double / empty titles and descriptions

---
 interface/web/help/templates/faq_edit.htm             | 4 +---
 interface/web/help/templates/faq_sections_edit.htm    | 3 ---
 interface/web/help/templates/support_message_edit.htm | 9 +--------
 interface/web/help/templates/support_message_view.htm | 9 +--------
 4 files changed, 3 insertions(+), 22 deletions(-)

diff --git a/interface/web/help/templates/faq_edit.htm b/interface/web/help/templates/faq_edit.htm
index 3bf9d8a903..d0f9760511 100644
--- a/interface/web/help/templates/faq_edit.htm
+++ b/interface/web/help/templates/faq_edit.htm
@@ -1,5 +1,3 @@
-
-        <legend>{tmpl_var name='faq_faq_txt'}</legend>
             <div class="form-group">
                 <label for="hf_section" class="col-sm-3 control-label">{tmpl_var name='faq_section_txt'}</label>
                 <div class="col-sm-9"><select name="hf_section" id="hf_section" class="form-control">
@@ -20,4 +18,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="help/faq_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="help/faq_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/help/templates/faq_sections_edit.htm b/interface/web/help/templates/faq_sections_edit.htm
index 1380447db8..2ff8354976 100644
--- a/interface/web/help/templates/faq_sections_edit.htm
+++ b/interface/web/help/templates/faq_sections_edit.htm
@@ -1,5 +1,3 @@
-
-        <legend>{tmpl_var name='faq_section_name_txt'}</legend>
             <div class="form-group">
                 <label for="hfs_name" class="col-sm-3 control-label">{tmpl_var name='faq_section_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="hfs_name" id="hfs_name" value="{tmpl_var name='hfs_name'}" class="form-control" /></div></div>
@@ -11,4 +9,3 @@
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="help/faq_sections_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="help/faq_sections_list.php">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
-
diff --git a/interface/web/help/templates/support_message_edit.htm b/interface/web/help/templates/support_message_edit.htm
index fb54578e16..a01cb31076 100644
--- a/interface/web/help/templates/support_message_edit.htm
+++ b/interface/web/help/templates/support_message_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>{tmpl_var name='message_txt'}</legend>
             <div class="form-group">
                 <label for="recipient_id" class="col-sm-3 control-label">{tmpl_var name='recipient_id_txt'}</label>
                 <div class="col-sm-9"><select name="recipient_id" id="recipient_id" class="form-control">
@@ -26,4 +19,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="help/support_message_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="help/support_message_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/help/templates/support_message_view.htm b/interface/web/help/templates/support_message_view.htm
index faaaf859cd..4771a47148 100644
--- a/interface/web/help/templates/support_message_view.htm
+++ b/interface/web/help/templates/support_message_view.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>{tmpl_var name='message_txt'}</legend>
             <div class="form-group">
                 <label for="subject" class="col-sm-3 control-label">{tmpl_var name='subject_txt'}</label>
                 <p>{tmpl_var name='subject'}</p>
@@ -20,4 +13,4 @@
         
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='reply_txt'}" data-load-content="help/support_message_edit.php?reply={tmpl_var name='id'}">{tmpl_var name='reply_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
-- 
GitLab


From 517e507620f6bdd6cb4b4b79d2e5acd18dbf5561 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 23:05:46 +0200
Subject: [PATCH 310/571] Removed double / empty titles and descriptions

---
 interface/web/admin/form/users.tform.php                 | 2 +-
 .../web/admin/templates/directive_snippets_edit.htm      | 7 -------
 interface/web/admin/templates/firewall_edit.htm          | 9 +--------
 interface/web/admin/templates/remote_action_osupdate.htm | 3 +--
 interface/web/admin/templates/remote_user_edit.htm       | 7 -------
 interface/web/admin/templates/server_edit_services.htm   | 7 -------
 interface/web/admin/templates/server_ip_edit.htm         | 7 -------
 interface/web/admin/templates/server_ip_map_edit.htm     | 4 ----
 .../web/admin/templates/server_php_fastcgi_edit.htm      | 9 +--------
 interface/web/admin/templates/server_php_fpm_edit.htm    | 9 +--------
 interface/web/admin/templates/server_php_name_edit.htm   | 7 -------
 interface/web/admin/templates/software_repo_edit.htm     | 9 +--------
 .../web/admin/templates/system_config_mail_edit.htm      | 7 -------
 .../web/admin/templates/system_config_misc_edit.htm      | 4 ----
 .../web/admin/templates/system_config_sites_edit.htm     | 7 -------
 interface/web/admin/templates/users_groups_edit.htm      | 9 +--------
 interface/web/admin/templates/users_user_edit.htm        | 7 -------
 17 files changed, 7 insertions(+), 107 deletions(-)

diff --git a/interface/web/admin/form/users.tform.php b/interface/web/admin/form/users.tform.php
index be77122b10..30c9cbb397 100644
--- a/interface/web/admin/form/users.tform.php
+++ b/interface/web/admin/form/users.tform.php
@@ -61,7 +61,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 $form['title']   = 'Users';
-$form['description']  = 'Form to edit systemusers.';
+//$form['description']  = 'Form to edit systemusers.';
 $form['name']   = 'users';
 $form['action']  = 'users_edit.php';
 $form['db_table'] = 'sys_user';
diff --git a/interface/web/admin/templates/directive_snippets_edit.htm b/interface/web/admin/templates/directive_snippets_edit.htm
index 657d0ad1ef..ee4d2ab3cd 100644
--- a/interface/web/admin/templates/directive_snippets_edit.htm
+++ b/interface/web/admin/templates/directive_snippets_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <tmpl_if name='is_master'><div class="col-sm-9 col-text">{tmpl_var name='name'}</div></tmpl_else><div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></tmpl_if>
diff --git a/interface/web/admin/templates/firewall_edit.htm b/interface/web/admin/templates/firewall_edit.htm
index cd643a8caf..07fe3d0ff5 100644
--- a/interface/web/admin/templates/firewall_edit.htm
+++ b/interface/web/admin/templates/firewall_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
@@ -30,4 +23,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/firewall_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/firewall_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/admin/templates/remote_action_osupdate.htm b/interface/web/admin/templates/remote_action_osupdate.htm
index d5fa2fffd5..55629fc1e9 100644
--- a/interface/web/admin/templates/remote_action_osupdate.htm
+++ b/interface/web/admin/templates/remote_action_osupdate.htm
@@ -4,7 +4,6 @@
 <p><tmpl_var name="do_osupdate_desc"></p>
 
 
-        <legend>{tmpl_var name='do_osupdate_caption'}</legend>
             <div class="form-group">
                 <label for="server_select" class="col-sm-3 control-label">{tmpl_var name='select_server_txt'}</label>
                 <div class="col-sm-9"><select name="server_select" id="server" class="form-control" onchange="$('#OKMsg').hide(); ">
@@ -19,4 +18,4 @@
             
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_do_txt'}" data-submit-form="pageForm" data-form-action="admin/remote_action_osupdate.php">{tmpl_var name='btn_do_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/admin/templates/remote_user_edit.htm b/interface/web/admin/templates/remote_user_edit.htm
index 099af58eb5..723c3e6966 100644
--- a/interface/web/admin/templates/remote_user_edit.htm
+++ b/interface/web/admin/templates/remote_user_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="remote_username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="remote_username" id="username" value="{tmpl_var name='remote_username'}" class="form-control" /></div></div>
diff --git a/interface/web/admin/templates/server_edit_services.htm b/interface/web/admin/templates/server_edit_services.htm
index 2775e029d3..b0aca56b17 100644
--- a/interface/web/admin/templates/server_edit_services.htm
+++ b/interface/web/admin/templates/server_edit_services.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="server_name" class="col-sm-3 control-label">{tmpl_var name='server_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="server_name" id="server_name" value="{tmpl_var name='server_name'}" class="form-control" /></div></div>
diff --git a/interface/web/admin/templates/server_ip_edit.htm b/interface/web/admin/templates/server_ip_edit.htm
index 85f06432e8..f0e0eb78d7 100644
--- a/interface/web/admin/templates/server_ip_edit.htm
+++ b/interface/web/admin/templates/server_ip_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        <legend>{tmpl_var name='server_ip_edit_title'}</legend>
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
diff --git a/interface/web/admin/templates/server_ip_map_edit.htm b/interface/web/admin/templates/server_ip_map_edit.htm
index bba26348ae..6986213742 100644
--- a/interface/web/admin/templates/server_ip_map_edit.htm
+++ b/interface/web/admin/templates/server_ip_map_edit.htm
@@ -1,7 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
 <div class="form-group">
 	<label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
 	<div class="col-sm-9">
diff --git a/interface/web/admin/templates/server_php_fastcgi_edit.htm b/interface/web/admin/templates/server_php_fastcgi_edit.htm
index 99a3eeb09d..e219addde0 100644
--- a/interface/web/admin/templates/server_php_fastcgi_edit.htm
+++ b/interface/web/admin/templates/server_php_fastcgi_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="php_fastcgi_binary" class="col-sm-3 control-label">{tmpl_var name='php_fastcgi_binary_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="php_fastcgi_binary" id="php_fastcgi_binary" value="{tmpl_var name='php_fastcgi_binary'}" class="form-control" /></div></div>
@@ -18,4 +11,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_php_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_php_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/admin/templates/server_php_fpm_edit.htm b/interface/web/admin/templates/server_php_fpm_edit.htm
index 4186584f0f..372b3702fc 100644
--- a/interface/web/admin/templates/server_php_fpm_edit.htm
+++ b/interface/web/admin/templates/server_php_fpm_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="php_fpm_init_script" class="col-sm-3 control-label">{tmpl_var name='php_fpm_init_script_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="php_fpm_init_script" id="php_fpm_init_script" value="{tmpl_var name='php_fpm_init_script'}" class="form-control" /></div></div>
@@ -21,4 +14,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_php_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_php_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/admin/templates/server_php_name_edit.htm b/interface/web/admin/templates/server_php_name_edit.htm
index cfdaab63f9..ab1d889ef9 100644
--- a/interface/web/admin/templates/server_php_name_edit.htm
+++ b/interface/web/admin/templates/server_php_name_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                 <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
diff --git a/interface/web/admin/templates/software_repo_edit.htm b/interface/web/admin/templates/software_repo_edit.htm
index 3aa6c61fc6..a43ea74900 100644
--- a/interface/web/admin/templates/software_repo_edit.htm
+++ b/interface/web/admin/templates/software_repo_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="repo_name" class="col-sm-3 control-label">{tmpl_var name='repo_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="repo_name" id="repo_name" value="{tmpl_var name='repo_name'}" class="form-control" /></div></div>
@@ -30,4 +23,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/software_repo_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/software_repo_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/admin/templates/system_config_mail_edit.htm b/interface/web/admin/templates/system_config_mail_edit.htm
index 526da2502a..af0a7a25ca 100644
--- a/interface/web/admin/templates/system_config_mail_edit.htm
+++ b/interface/web/admin/templates/system_config_mail_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='enable_custom_login_txt'}</label>
                 <div class="col-sm-9">
diff --git a/interface/web/admin/templates/system_config_misc_edit.htm b/interface/web/admin/templates/system_config_misc_edit.htm
index 00debd66dc..95014ab809 100644
--- a/interface/web/admin/templates/system_config_misc_edit.htm
+++ b/interface/web/admin/templates/system_config_misc_edit.htm
@@ -1,7 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
 			<!--
 			<div class="form-group">
                 <label for="file" class="col-sm-3 control-label">{tmpl_var name='logo_txt'}</label>
diff --git a/interface/web/admin/templates/system_config_sites_edit.htm b/interface/web/admin/templates/system_config_sites_edit.htm
index a0f95e479a..09b55fd118 100644
--- a/interface/web/admin/templates/system_config_sites_edit.htm
+++ b/interface/web/admin/templates/system_config_sites_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="dbname_prefix" class="col-sm-3 control-label">{tmpl_var name='dbname_prefix_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="dbname_prefix" id="dbname_prefix" value="{tmpl_var name='dbname_prefix'}" class="form-control" /></div></div>
diff --git a/interface/web/admin/templates/users_groups_edit.htm b/interface/web/admin/templates/users_groups_edit.htm
index 5f09bfa8ea..112791dc4c 100644
--- a/interface/web/admin/templates/users_groups_edit.htm
+++ b/interface/web/admin/templates/users_groups_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="default_group" class="col-sm-3 control-label">{tmpl_var name='default_group_txt'}</label>
                 <div class="col-sm-9"><select name="default_group" id="default_group" class="form-control">
@@ -24,4 +17,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/users_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/admin/templates/users_user_edit.htm b/interface/web/admin/templates/users_user_edit.htm
index fb9658c14b..baf5f58554 100644
--- a/interface/web/admin/templates/users_user_edit.htm
+++ b/interface/web/admin/templates/users_user_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="username" id="username" value="{tmpl_var name='username'}" class="form-control" /></div></div>
-- 
GitLab


From f7e8f09b35b5abb3c6ec456f5658447d9b2567dd Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Wed, 27 May 2020 23:24:34 +0200
Subject: [PATCH 311/571] Added missing lines for title and desc

---
 interface/web/admin/lib/lang/bg_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/br_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/ca_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/cz_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/de_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/dk_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/el_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/en_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/es_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/fi_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/fr_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/hr_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/hu_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/id_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/it_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/ja_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/nl_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/pl_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/pt_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/ro_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/ru_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/se_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/sk_server_ip_map.lng | 2 ++
 interface/web/admin/lib/lang/tr_server_ip_map.lng | 2 ++
 24 files changed, 48 insertions(+)

diff --git a/interface/web/admin/lib/lang/bg_server_ip_map.lng b/interface/web/admin/lib/lang/bg_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/bg_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/bg_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/br_server_ip_map.lng b/interface/web/admin/lib/lang/br_server_ip_map.lng
index 81a2bb4b96..51af1099ab 100644
--- a/interface/web/admin/lib/lang/br_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/br_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Servidor para mapeamento IP';
 $wb['source_txt'] = 'Endereço IP de origem';
 $wb['destination_txt'] = 'Endereço IP de destino';
diff --git a/interface/web/admin/lib/lang/ca_server_ip_map.lng b/interface/web/admin/lib/lang/ca_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/ca_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/ca_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/cz_server_ip_map.lng b/interface/web/admin/lib/lang/cz_server_ip_map.lng
index 683451d1d8..57c5ba0108 100644
--- a/interface/web/admin/lib/lang/cz_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/cz_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Zdrojová IP adresa';
 $wb['destination_txt'] = 'Cílová IP adresa';
diff --git a/interface/web/admin/lib/lang/de_server_ip_map.lng b/interface/web/admin/lib/lang/de_server_ip_map.lng
index 4fdb51be1a..96863c7261 100644
--- a/interface/web/admin/lib/lang/de_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/de_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite auf Server';
 $wb['source_txt'] = 'eigentliche IP';
 $wb['destination_txt'] = 'neue IP';
diff --git a/interface/web/admin/lib/lang/dk_server_ip_map.lng b/interface/web/admin/lib/lang/dk_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/dk_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/dk_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/el_server_ip_map.lng b/interface/web/admin/lib/lang/el_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/el_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/el_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/en_server_ip_map.lng b/interface/web/admin/lib/lang/en_server_ip_map.lng
index 94508abb79..d47d33cf36 100644
--- a/interface/web/admin/lib/lang/en_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/en_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb["server_id_txt"] = 'Rewrite on Server';
 $wb["source_txt"] = 'Source IP';
 $wb["destination_txt"] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/es_server_ip_map.lng b/interface/web/admin/lib/lang/es_server_ip_map.lng
index 4cf57cdc82..c151fb565c 100755
--- a/interface/web/admin/lib/lang/es_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/es_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['active_txt'] = 'Activo';
 $wb['destination_ip_empty'] = 'La IP de destino está vacía.';
 $wb['destination_txt'] = 'IP de destino';
diff --git a/interface/web/admin/lib/lang/fi_server_ip_map.lng b/interface/web/admin/lib/lang/fi_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/fi_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/fi_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/fr_server_ip_map.lng b/interface/web/admin/lib/lang/fr_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/fr_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/fr_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/hr_server_ip_map.lng b/interface/web/admin/lib/lang/hr_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/hr_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/hr_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/hu_server_ip_map.lng b/interface/web/admin/lib/lang/hu_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/hu_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/hu_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/id_server_ip_map.lng b/interface/web/admin/lib/lang/id_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/id_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/id_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/it_server_ip_map.lng b/interface/web/admin/lib/lang/it_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/it_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/it_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/ja_server_ip_map.lng b/interface/web/admin/lib/lang/ja_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/ja_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/ja_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/nl_server_ip_map.lng b/interface/web/admin/lib/lang/nl_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/nl_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/nl_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/pl_server_ip_map.lng b/interface/web/admin/lib/lang/pl_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/pl_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/pl_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/pt_server_ip_map.lng b/interface/web/admin/lib/lang/pt_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/pt_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/pt_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/ro_server_ip_map.lng b/interface/web/admin/lib/lang/ro_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/ro_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/ro_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/ru_server_ip_map.lng b/interface/web/admin/lib/lang/ru_server_ip_map.lng
index 2b284360e5..467edf86e4 100644
--- a/interface/web/admin/lib/lang/ru_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/ru_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite на сервер';
 $wb['source_txt'] = 'IP-адрес источника';
 $wb['destination_txt'] = 'IP-адрес назначения';
diff --git a/interface/web/admin/lib/lang/se_server_ip_map.lng b/interface/web/admin/lib/lang/se_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/se_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/se_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/sk_server_ip_map.lng b/interface/web/admin/lib/lang/sk_server_ip_map.lng
index 68b196fb23..f02bdafd84 100644
--- a/interface/web/admin/lib/lang/sk_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/sk_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Rewrite on Server';
 $wb['source_txt'] = 'Source IP';
 $wb['destination_txt'] = 'Destination IP';
diff --git a/interface/web/admin/lib/lang/tr_server_ip_map.lng b/interface/web/admin/lib/lang/tr_server_ip_map.lng
index c05e19c4b1..e18a243344 100644
--- a/interface/web/admin/lib/lang/tr_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip_map.lng
@@ -1,4 +1,6 @@
 <?php
+$wb['server_ip_map_title'] = 'IPv4 Address mapping';
+$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
 $wb['server_id_txt'] = 'Sunucuda Yeniden Yazma';
 $wb['source_txt'] = 'Kaynak IP';
 $wb['destination_txt'] = 'Hedef IP';
-- 
GitLab


From 8bc6a8c3afa1e19bbf796558b0e8df5e5471aad6 Mon Sep 17 00:00:00 2001
From: Ramil Valitov <ramilvalitov@gmail.com>
Date: Thu, 28 May 2020 16:45:27 +0200
Subject: [PATCH 312/571] New code for backups with lots of new features

---
 .../sql/incremental/upd_dev_collection.sql    |   12 +
 install/sql/ispconfig3.sql                    |    6 +
 .../lib/classes/aps_guicontroller.inc.php     |    2 +
 .../lib/classes/plugin_backuplist.inc.php     |   57 +-
 interface/lib/classes/remote.d/sites.inc.php  |    8 +-
 .../lib/classes/sites_database_plugin.inc.php |    6 +-
 interface/lib/classes/system.inc.php          |   12 +
 .../sites_web_vhost_domain_plugin.inc.php     |    8 +-
 .../web/sites/form/web_vhost_domain.tform.php |   76 +-
 .../web/sites/lib/lang/ar_web_backup_list.lng |   32 +
 .../sites/lib/lang/ar_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/bg_web_backup_list.lng |   32 +
 .../sites/lib/lang/bg_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/br_web_backup_list.lng |   33 +-
 .../sites/lib/lang/br_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/ca_web_backup_list.lng |   32 +
 .../sites/lib/lang/ca_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/cz_web_backup_list.lng |   32 +
 .../sites/lib/lang/cz_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/de_web_backup_list.lng |   32 +
 .../sites/lib/lang/de_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/dk_web_backup_list.lng |   32 +
 .../sites/lib/lang/dk_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/el_web_backup_list.lng |   32 +
 .../sites/lib/lang/el_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/en_web_backup_list.lng |   35 +-
 .../sites/lib/lang/en_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/es_web_backup_list.lng |   32 +
 .../sites/lib/lang/es_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/fi_web_backup_list.lng |   32 +
 .../sites/lib/lang/fi_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/fr_web_backup_list.lng |   32 +
 .../sites/lib/lang/fr_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/hr_web_backup_list.lng |   32 +
 .../sites/lib/lang/hr_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/hu_web_backup_list.lng |   32 +
 .../sites/lib/lang/hu_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/id_web_backup_list.lng |   32 +
 .../sites/lib/lang/id_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/it_web_backup_list.lng |   32 +
 .../sites/lib/lang/it_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/ja_web_backup_list.lng |   32 +
 .../sites/lib/lang/ja_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/nl_web_backup_list.lng |   32 +
 .../sites/lib/lang/nl_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/pl_web_backup_list.lng |   32 +
 .../sites/lib/lang/pl_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/pt_web_backup_list.lng |   32 +
 .../sites/lib/lang/pt_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/ro_web_backup_list.lng |   32 +
 .../sites/lib/lang/ro_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/ru_web_backup_list.lng |   32 +
 .../sites/lib/lang/ru_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/se_web_backup_list.lng |   32 +
 .../sites/lib/lang/se_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/sk_web_backup_list.lng |   32 +
 .../sites/lib/lang/sk_web_vhost_domain.lng    |   27 +
 .../web/sites/lib/lang/tr_web_backup_list.lng |   33 +-
 .../sites/lib/lang/tr_web_vhost_domain.lng    |   27 +
 .../web/sites/templates/web_backup_list.htm   |   18 +-
 .../templates/web_vhost_domain_backup.htm     |   48 +-
 .../API-docs/sites_database_add.html          |    2 +
 .../API-docs/sites_web_aliasdomain_add.html   |    2 +
 .../sites_web_aliasdomain_update.html         |    2 +
 .../API-docs/sites_web_subdomain_add.html     |    2 +
 .../API-docs/sites_web_subdomain_update.html  |    2 +
 .../examples/sites_database_add.php           |    2 +
 .../examples/sites_web_aliasdomain_add.php    |    2 +
 .../examples/sites_web_domain_add.php         |    2 +
 .../examples/sites_web_subdomain_add.php      |    2 +
 server/backup-now.php                         |  108 ++
 server/lib/app.inc.php                        |    4 +
 server/lib/classes/backup.inc.php             | 1452 +++++++++++++++++
 server/lib/classes/cron.d/500-backup.inc.php  |  364 +----
 .../plugins-available/backup_plugin.inc.php   |   78 +-
 75 files changed, 3340 insertions(+), 417 deletions(-)
 create mode 100644 server/backup-now.php
 create mode 100644 server/lib/classes/backup.inc.php

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 29ba602bf8..d07b33d4ba 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -1,3 +1,15 @@
 -- add new proxy_protocol column
 ALTER TABLE `web_domain`
     ADD COLUMN `proxy_protocol` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `log_retention`;
+
+-- backup format
+ALTER TABLE `web_domain` ADD  `backup_format_web` VARCHAR( 255 ) NOT NULL default 'default' AFTER `backup_copies`;
+ALTER TABLE `web_domain` ADD  `backup_format_db` VARCHAR( 255 ) NOT NULL default 'gzip' AFTER `backup_format_web`;
+-- end of backup format
+
+-- backup encryption
+ALTER TABLE `web_domain` ADD  `backup_encrypt` enum('n','y') NOT NULL DEFAULT 'n' AFTER `backup_format_db`;
+ALTER TABLE `web_domain` ADD  `backup_password` VARCHAR( 255 ) NOT NULL DEFAULT '' AFTER `backup_encrypt`;
+ALTER TABLE `web_backup` ADD  `backup_format` VARCHAR( 64 ) NOT NULL DEFAULT '' AFTER `backup_mode`;
+ALTER TABLE `web_backup` ADD  `backup_password` VARCHAR( 255 ) NOT NULL DEFAULT '' AFTER `filesize`;
+-- end of backup encryption
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index bfef9733e5..b64eab94c3 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1922,9 +1922,11 @@ CREATE TABLE `web_backup` (
   `parent_domain_id` int(10) unsigned NOT NULL DEFAULT '0',
   `backup_type` enum('web','mysql','mongodb') NOT NULL DEFAULT 'web',
   `backup_mode` varchar(64) NOT NULL DEFAULT  '',
+  `backup_format` varchar(64) NOT NULL DEFAULT '',
   `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
   `filename` varchar(255) NOT NULL DEFAULT '',
   `filesize` VARCHAR(20) NOT NULL DEFAULT '',
+  `backup_password` VARCHAR(255) NOT NULL DEFAULT '',
   PRIMARY KEY (`backup_id`)
 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
@@ -2055,6 +2057,10 @@ CREATE TABLE `web_domain` (
   `custom_php_ini` mediumtext,
   `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
   `backup_copies` INT NOT NULL DEFAULT '1',
+  `backup_format_web` VARCHAR( 255 ) NOT NULL default 'default',
+  `backup_format_db` VARCHAR( 255 ) NOT NULL default 'gzip',
+  `backup_encrypt` enum('n','y') NOT NULL DEFAULT 'n',
+  `backup_password` VARCHAR( 255 ) NOT NULL DEFAULT '',
   `backup_excludes` mediumtext,
   `active` enum('n','y') NOT NULL default 'y',
   `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
diff --git a/interface/lib/classes/aps_guicontroller.inc.php b/interface/lib/classes/aps_guicontroller.inc.php
index 8e4c17af79..b1ebf9d189 100644
--- a/interface/lib/classes/aps_guicontroller.inc.php
+++ b/interface/lib/classes/aps_guicontroller.inc.php
@@ -340,6 +340,8 @@ class ApsGUIController extends ApsBase
 								 "remote_access" => $mysql_db_remote_access,
 								 "remote_ips" => $mysql_db_remote_ips,
 								 "backup_copies" => $websrv['backup_copies'],
+								 "backup_format_web" => $websrv['backup_format_web'],
+								 "backup_format_db" => $websrv['backup_format_db'],
 								 "active" => 'y', 
 								 "backup_interval" => $websrv['backup_interval']
 								 );
diff --git a/interface/lib/classes/plugin_backuplist.inc.php b/interface/lib/classes/plugin_backuplist.inc.php
index e96be012e3..9e21dc6ba6 100644
--- a/interface/lib/classes/plugin_backuplist.inc.php
+++ b/interface/lib/classes/plugin_backuplist.inc.php
@@ -37,6 +37,34 @@ class plugin_backuplist extends plugin_base {
 	var $formdef;
 	var $options;
 
+	/**
+	 * Process request to make a backup. This request is triggered manually by the user in the ISPConfig interface.
+	 * @param string $message
+	 * @param string $error
+	 * @param string[] $wb language text
+	 * @author Ramil Valitov <ramilvalitov@gmail.com>
+	 * @uses backup_plugin::make_backup_callback() this method is called later in the plugin to run the backup
+	 */
+	protected function makeBackup(&$message, &$error, $wb)
+	{
+		global $app;
+
+		$mode = $_GET['make_backup'];
+		$action_type = ($mode == 'web') ? 'backup_web_files' : 'backup_database';
+		$domain_id = intval($this->form->id);
+
+		$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = ? AND action_param = ?";
+		$tmp = $app->db->queryOneRecord($sql, $action_type, $domain_id);
+		if ($tmp['number'] == 0) {
+			$server_id = $this->form->dataRecord['server_id'];
+			$message .= $wb['backup_info_txt'];
+			$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) VALUES (?, UNIX_TIMESTAMP(), ?, ?, 'pending', '')";
+			$app->db->query($sql, $server_id, $action_type, $domain_id);
+		} else {
+			$error .= $wb['backup_pending_txt'];
+		}
+	}
+
 	function onShow() {
 
 		global $app;
@@ -52,6 +80,10 @@ class plugin_backuplist extends plugin_base {
 		$message = '';
 		$error = '';
 
+		if (isset($_GET['make_backup'])) {
+			$this->makeBackup($message, $error, $wb);
+		}
+
 		if(isset($_GET['backup_action'])) {
 			$backup_id = $app->functions->intval($_GET['backup_id']);
 
@@ -137,7 +169,30 @@ class plugin_backuplist extends plugin_base {
 				$rec["bgcolor"] = $bgcolor;
 
 				$rec['date'] = date($app->lng('conf_format_datetime'), $rec['tstamp']);
-				$rec['backup_type'] = $wb[('backup_type_'.$rec['backup_type'])];
+				$backup_format = $rec['backup_format'];
+				if (empty($backup_format)) {
+					//We have a backup from old version of ISPConfig
+					switch ($rec['backup_type']) {
+						case 'mysql':
+							$backup_format = 'gzip';
+							break;
+						case 'web':
+							$backup_format = ($rec['backup_mode'] == 'userzip') ? 'zip' : 'tar_gzip';
+							break;
+						default:
+							$app->log('Unsupported backup type "' . $rec['backup_type'] . '" for backup id ' . $rec['backup_id'], LOGLEVEL_ERROR);
+							break;
+					}
+				}
+				$rec['backup_type'] = $wb[('backup_type_' . $rec['backup_type'])];
+				$backup_format = (!empty($backup_format)) ? $wb[('backup_format_' . $backup_format . '_txt')] : $wb["backup_format_unknown_txt"];
+				if (empty($backup_format))
+					$backup_format = $wb["backup_format_unknown_txt"];
+
+				$rec['backup_format'] = $backup_format;
+				$rec['backup_encrypted'] = empty($rec['backup_password']) ? $wb["no_txt"] : $wb["yes_txt"];
+				$backup_manual_prefix = 'manual-';
+				$rec['backup_job'] = (substr($rec['filename'], 0, strlen($backup_manual_prefix)) == $backup_manual_prefix) ? $wb["backup_job_manual_txt"] : $wb["backup_job_auto_txt"];
 				
 				$rec['download_available'] = true;
 				if($rec['server_id'] != $web['server_id']) $rec['download_available'] = false;
diff --git a/interface/lib/classes/remote.d/sites.inc.php b/interface/lib/classes/remote.d/sites.inc.php
index d90b90bd89..9efbecc091 100644
--- a/interface/lib/classes/remote.d/sites.inc.php
+++ b/interface/lib/classes/remote.d/sites.inc.php
@@ -132,10 +132,12 @@ class remoting_sites extends remoting {
 			$app->sites_database_plugin->processDatabaseInsert($this);
 			
 			// set correct values for backup_interval and backup_copies
-			if(isset($params['backup_interval']) || isset($params['backup_copies'])){
+			if(isset($params['backup_interval']) || isset($params['backup_copies']) || isset($params['backup_format_web']) || isset($params['backup_format_db'])){
 				$sql_set = array();
 				if(isset($params['backup_interval'])) $sql_set[] = "backup_interval = '".$app->db->quote($params['backup_interval'])."'";
 				if(isset($params['backup_copies'])) $sql_set[] = "backup_copies = ".$app->functions->intval($params['backup_copies']);
+				if(isset($params['backup_format_web'])) $sql_set[] = "backup_format_web = ".$app->functions->intval($params['backup_format_web']);
+				if(isset($params['backup_format_db'])) $sql_set[] = "backup_format_db = ".$app->functions->intval($params['backup_format_db']);
 				$this->updateQueryExecute("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$retval, $retval, $params);
 			}
 			
@@ -165,10 +167,12 @@ class remoting_sites extends remoting {
 			$retval = $this->updateQueryExecute($sql, $primary_id, $params);
 			
 			// set correct values for backup_interval and backup_copies
-			if(isset($params['backup_interval']) || isset($params['backup_copies'])){
+			if(isset($params['backup_interval']) || isset($params['backup_copies']) || isset($params['backup_format_web']) || isset($params['backup_format_db'])){
 				$sql_set = array();
 				if(isset($params['backup_interval'])) $sql_set[] = "backup_interval = '".$app->db->quote($params['backup_interval'])."'";
 				if(isset($params['backup_copies'])) $sql_set[] = "backup_copies = ".$app->functions->intval($params['backup_copies']);
+				if(isset($params['backup_format_web'])) $sql_set[] = "backup_format_web = ".$app->functions->intval($params['backup_format_web']);
+				if(isset($params['backup_format_db'])) $sql_set[] = "backup_format_db = ".$app->functions->intval($params['backup_format_db']);
 				$this->updateQueryExecute("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$primary_id, $primary_id, $params);
 			}
 			
diff --git a/interface/lib/classes/sites_database_plugin.inc.php b/interface/lib/classes/sites_database_plugin.inc.php
index 89cb7ce9c2..faf3fa30f7 100644
--- a/interface/lib/classes/sites_database_plugin.inc.php
+++ b/interface/lib/classes/sites_database_plugin.inc.php
@@ -45,10 +45,12 @@ class sites_database_plugin {
 			//* The Database user shall be owned by the same group then the website
 			$sys_groupid = $app->functions->intval($web['sys_groupid']);
 			$backup_interval = $web['backup_interval'];
+			$backup_format_web = $web['backup_format_web'];
+			$backup_format_db = $web['backup_format_db'];
 			$backup_copies = $app->functions->intval($web['backup_copies']);
 
-			$sql = "UPDATE web_database SET sys_groupid = ?, backup_interval = ?, backup_copies = ? WHERE database_id = ?";
-			$app->db->query($sql, $sys_groupid, $backup_interval, $backup_copies, $form_page->id);
+			$sql = "UPDATE web_database SET sys_groupid = ?, backup_interval = ?, backup_copies = ?, backup_format_web = ?, backup_format_db = ? WHERE database_id = ?";
+			$app->db->query($sql, $sys_groupid, $backup_interval, $backup_copies, $backup_format_web, $backup_format_db, $form_page->id);
 		}
 	}
 
diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index 0be2b6b1e9..b6d3479694 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -97,5 +97,17 @@ class system {
 		call_user_func_array(array($this, 'exec_safe'), func_get_args());
 		return implode("\n", $this->_last_exec_out);
 	}	
+
+    //* Check if a application is installed
+    public function is_installed($appname) {
+        $this->exec_safe('which ? 2> /dev/null', $appname);
+        $out = $this->last_exec_out();
+        $returncode = $this->last_exec_retcode();
+        if(isset($out[0]) && stristr($out[0], $appname) && $returncode == 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
 	
 } //* End Class
diff --git a/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php b/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
index 2d1ce3794a..3f9b0db5b6 100644
--- a/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
+++ b/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
@@ -249,18 +249,22 @@ class sites_web_vhost_domain_plugin {
 				}
 
 				//* Change database backup options when web backup options have been changed
-				if(isset($page_form->dataRecord['backup_interval']) && ($page_form->dataRecord['backup_interval'] != $page_form->oldDataRecord['backup_interval'] || $page_form->dataRecord['backup_copies'] != $page_form->oldDataRecord['backup_copies'])) {
+				if(isset($page_form->dataRecord['backup_interval']) && ($page_form->dataRecord['backup_interval'] != $page_form->oldDataRecord['backup_interval'] || $page_form->dataRecord['backup_copies'] != $page_form->oldDataRecord['backup_copies'] || $page_form->dataRecord['backup_format_web'] != $page_form->oldDataRecord['backup_format_web'] || $page_form->dataRecord['backup_format_db'] != $page_form->oldDataRecord['backup_format_db'])) {
 					//* Update all databases
 					$backup_interval = $page_form->dataRecord['backup_interval'];
 					$backup_copies = $app->functions->intval($page_form->dataRecord['backup_copies']);
+					$backup_format_web = $page_form->dataRecord['backup_format_web'];
+					$backup_format_db = $page_form->dataRecord['backup_format_db'];
 					$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ".$page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('web_database', array("backup_interval" => $backup_interval, "backup_copies" => $backup_copies), 'database_id', $rec['database_id']);
+						$app->db->datalogUpdate('web_database', array("backup_interval" => $backup_interval, "backup_copies" => $backup_copies, "backup_format_web" => $backup_format_web, "backup_format_db" => $backup_format_db), 'database_id', $rec['database_id']);
 					}
 					unset($records);
 					unset($rec);
 					unset($backup_copies);
 					unset($backup_interval);
+                    unset($backup_format_web);
+                    unset($backup_format_db);
 				}
 
 				//* Change vhost subdomain and alias ip/ipv6 if domain ip/ipv6 has changed
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 5c3057f685..24ee6d4e62 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -96,7 +96,7 @@ if(!$app->auth->is_admin()) {
 	if($client['limit_backup'] != 'y') $backup_available = false;
 }
 
-$app->uses('getconf');
+$app->uses('getconf,system');
 $web_config = $app->getconf->get_global_config('sites');
 
 $form["tabs"]['domain'] = array (
@@ -649,6 +649,28 @@ $form["tabs"]['stats'] = array (
 
 //* Backup
 if ($backup_available) {
+	$missing_utils = array();
+	$compressors_list = array(
+		'gzip',
+		'gunzip',
+		'zip',
+		'unzip',
+		'pigz',
+		'tar',
+		'bzip2',
+		'bunzip2',
+		'xz',
+		'unxz',
+		'7z',
+		'rar',
+	);
+	foreach ($compressors_list as $compressor) {
+		if (!$app->system->is_installed($compressor)) {
+			array_push($missing_utils, $compressor);
+		}
+	}
+	$app->tpl->setVar("missing_utils", implode(", ",$missing_utils), true);
+
 	$form["tabs"]['backup'] = array (
 		'title'  => "Backup",
 		'width'  => 100,
@@ -682,6 +704,58 @@ if ($backup_available) {
 				'width'  => '30',
 				'maxlength' => '255'
 			),
+			'backup_format_web' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'SELECT',
+				'default' => '',
+				'value' => array(
+					'default' => 'backup_format_default_txt',
+					'zip' => 'backup_format_zip_txt',
+					'zip_bzip2' => 'backup_format_zip_bzip2_txt',
+					'tar_gzip' => 'backup_format_tar_gzip_txt',
+					'tar_bzip2' => 'backup_format_tar_bzip2_txt',
+					'tar_xz' => 'backup_format_tar_xz_txt',
+					'tar_7z_lzma2' => 'backup_format_tar_7z_lzma2_txt',
+					'tar_7z_lzma' => 'backup_format_tar_7z_lzma_txt',
+					'tar_7z_ppmd' => 'backup_format_tar_7z_ppmd_txt',
+					'tar_7z_bzip2' => 'backup_format_tar_7z_bzip2_txt',
+					'rar' => 'backup_format_rar_txt',
+				)
+			),
+			'backup_format_db' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'SELECT',
+				'default' => '',
+				'value' => array(
+					'zip' => 'backup_format_zip_txt',
+					'zip_bzip2' => 'backup_format_zip_bzip2_txt',
+					'gzip' => 'backup_format_gzip_txt',
+					'bzip2' => 'backup_format_bzip2_txt',
+					'xz' => 'backup_format_xz_txt',
+					'7z_lzma2' => 'backup_format_7z_lzma2_txt',
+					'7z_lzma' => 'backup_format_7z_lzma_txt',
+					'7z_ppmd' => 'backup_format_7z_ppmd_txt',
+					'7z_bzip2' => 'backup_format_7z_bzip2_txt',
+					'rar' => 'backup_format_rar_txt',
+				)
+			),
+			'backup_encrypt' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'CHECKBOX',
+				'default'  => 'n',
+				'value' => array (
+					0 => 'n',
+					1 => 'y'
+				)
+			),
+			'backup_password' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'TEXT',
+				'default' => '',
+				'value'  => '',
+				'width'  => '30',
+				'maxlength' => '255'
+			),
 			//#################################
 			// END Datatable fields
 			//#################################
diff --git a/interface/web/sites/lib/lang/ar_web_backup_list.lng b/interface/web/sites/lib/lang/ar_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/ar_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ar_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index f866aa7b25..f9c396616b 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_web_backup_list.lng b/interface/web/sites/lib/lang/bg_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/bg_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/bg_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index 84b729eda5..1ab6c244cc 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_backup_list.lng b/interface/web/sites/lib/lang/br_web_backup_list.lng
index 82883c1f29..00384c6e15 100644
--- a/interface/web/sites/lib/lang/br_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/br_web_backup_list.lng
@@ -18,5 +18,36 @@ $wb['delete_pending_txt'] = 'Já existe uma remoção de backup em andamento.';
 $wb['backup_type_mongodb'] = 'MongoDB';
 $wb['backup_type_mysql'] = 'MySQL';
 $wb['backup_type_web'] = 'Arquivos do site';
-
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index 7d021d4a32..a074b160a3 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -161,4 +161,31 @@ $wb['log_retention_txt'] = 'Tempo de retenção do log de arquivos';
 $wb['log_retention_error_regex'] = 'Tempo de retenção em dias (valores permitidos: mínimo 0, máximo 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Cota de disco não pode ser configurada para 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/ca_web_backup_list.lng b/interface/web/sites/lib/lang/ca_web_backup_list.lng
index 97b04a0c05..89d40ddb05 100644
--- a/interface/web/sites/lib/lang/ca_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ca_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['delete_info_txt'] = 'Delete of the backup has been started. This action tak
 $wb['delete_confirm_txt'] = 'Really delete this backup?';
 $wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index 40fda06d11..d0a5a58bd3 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_backup_list.lng b/interface/web/sites/lib/lang/cz_web_backup_list.lng
index d30e41d961..e881afca12 100644
--- a/interface/web/sites/lib/lang/cz_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/cz_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['delete_info_txt'] = 'Bylo zahájeno odstranění zálohy. Tato akce může
 $wb['delete_confirm_txt'] = 'Opravdu chcete smazat tuto zálohu ?';
 $wb['delete_pending_txt'] = 'Již existuje čekající úloha pro odstranění zálohy.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index 5e6ed3e756..250f98c890 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_backup_list.lng b/interface/web/sites/lib/lang/de_web_backup_list.lng
index 63b27051bb..3c38207b76 100644
--- a/interface/web/sites/lib/lang/de_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/de_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['delete_pending_txt'] = 'Es liegt bereits ein Backup-Lösch-Job an.';
 $wb['backup_type_mysql'] = 'MySQL-Datenbank';
 $wb['backup_type_web'] = 'Webseiten-Dateien';
 $wb['filesize_txt'] = 'Filesize';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index b5fef5aa15..e4424799a6 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Log-Dateien Aufbewahrungszeit';
 $wb['log_retention_error_regex'] = 'Aufbewahrungszeit in Tagen (Erlaubte Werte: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota kann nicht 0 sein.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/dk_web_backup_list.lng b/interface/web/sites/lib/lang/dk_web_backup_list.lng
index eb45c4e89b..fb9f0e997f 100644
--- a/interface/web/sites/lib/lang/dk_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/dk_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['delete_info_txt'] = 'Delete of the backup has been started. This action tak
 $wb['delete_confirm_txt'] = 'Really delete this backup?';
 $wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index 40fda06d11..d0a5a58bd3 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/el_web_backup_list.lng b/interface/web/sites/lib/lang/el_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/el_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/el_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index 4fc9e15107..d4cb988a17 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_backup_list.lng b/interface/web/sites/lib/lang/en_web_backup_list.lng
index 6ec5f5f3c7..f541108807 100644
--- a/interface/web/sites/lib/lang/en_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/en_web_backup_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'Existing backups';
 $wb['date_txt'] = 'Date';
 $wb['backup_type_txt'] = 'Type';
 $wb['filename_txt'] = 'Backup file';
-$wb['filesize_txt'] = 'Filesize';
+$wb['filesize_txt'] = 'File size';
 $wb['restore_backup_txt'] = 'Restore';
 $wb['download_backup_txt'] = 'Download';
 $wb['download_info_txt'] = 'The backup file will be available for download in the backup folder of the website in a few minutes.';
@@ -18,5 +18,36 @@ $wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
 $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
-
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index 985a1abcf2..66bfd1ca19 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -161,4 +161,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/es_web_backup_list.lng b/interface/web/sites/lib/lang/es_web_backup_list.lng
index 04896d9eba..931ada712b 100644
--- a/interface/web/sites/lib/lang/es_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/es_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'Base de datos MySQL';
 $wb['backup_type_web'] = 'Archivos del sitio web';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index d6de7b8088..504bea2aa6 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_web_backup_list.lng b/interface/web/sites/lib/lang/fi_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/fi_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/fi_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index 3c9dfc5578..460fbadff7 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_backup_list.lng b/interface/web/sites/lib/lang/fr_web_backup_list.lng
index 6f1c5e1348..92e44845ae 100644
--- a/interface/web/sites/lib/lang/fr_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/fr_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['delete_info_txt'] = 'Delete of the backup has been started. This action tak
 $wb['delete_confirm_txt'] = 'Really delete this backup?';
 $wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 91a806f870..306a48aedc 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_web_backup_list.lng b/interface/web/sites/lib/lang/hr_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/hr_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/hr_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index 3874c876f1..d883532397 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_web_backup_list.lng b/interface/web/sites/lib/lang/hu_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/hu_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/hu_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index d14356efef..4d54b0a4c7 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/id_web_backup_list.lng b/interface/web/sites/lib/lang/id_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/id_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/id_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 0d7d7285ab..3aa65982cd 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_backup_list.lng b/interface/web/sites/lib/lang/it_web_backup_list.lng
index 9aa7b0c175..d81039ea1a 100644
--- a/interface/web/sites/lib/lang/it_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/it_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['delete_info_txt'] = 'Delete of the backup has been started. This action tak
 $wb['delete_confirm_txt'] = 'Really delete this backup?';
 $wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index 4613d2e14e..cc890d855e 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_web_backup_list.lng b/interface/web/sites/lib/lang/ja_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/ja_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ja_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index f4eabe51de..bfb5e8b137 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_web_backup_list.lng b/interface/web/sites/lib/lang/nl_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/nl_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/nl_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index fbd13b159d..d67cde421a 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_web_backup_list.lng b/interface/web/sites/lib/lang/pl_web_backup_list.lng
index b9fdf3d632..a04c0bacd2 100644
--- a/interface/web/sites/lib/lang/pl_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/pl_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'Baza MySQL';
 $wb['backup_type_web'] = 'Pliki strony';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index ce4cdaceaf..c24c319fe5 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_web_backup_list.lng b/interface/web/sites/lib/lang/pt_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/pt_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/pt_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index 8c1e76af38..dc6895c3e1 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_web_backup_list.lng b/interface/web/sites/lib/lang/ro_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/ro_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ro_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index 00a9c247fc..8e27105a6a 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_web_backup_list.lng b/interface/web/sites/lib/lang/ru_web_backup_list.lng
index 8d5b7b757b..8943d94750 100644
--- a/interface/web/sites/lib/lang/ru_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ru_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'База данных MySQL';
 $wb['backup_type_web'] = 'Файлы Web сайта';
 $wb['filesize_txt'] = 'Размер файла';
 $wb['backup_type_mongodb'] = 'База данных MongoDB';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index 8e596defa3..c9a2a0a4ba 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/se_web_backup_list.lng b/interface/web/sites/lib/lang/se_web_backup_list.lng
index 1f9073ab6d..702a46e8d2 100644
--- a/interface/web/sites/lib/lang/se_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/se_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL-databaser';
 $wb['backup_type_web'] = 'Webbsidefiler';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index 01db60b572..ec509b333a 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_web_backup_list.lng b/interface/web/sites/lib/lang/sk_web_backup_list.lng
index d1133334f0..056c7576ae 100644
--- a/interface/web/sites/lib/lang/sk_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/sk_web_backup_list.lng
@@ -18,4 +18,36 @@ $wb['backup_type_mysql'] = 'MySQL Database';
 $wb['backup_type_web'] = 'Website files';
 $wb['filesize_txt'] = 'Filesize';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index 7d52d3edf1..0509b1a3bb 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -156,4 +156,31 @@ $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min.
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 $wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_backup_list.lng b/interface/web/sites/lib/lang/tr_web_backup_list.lng
index 31aea494ca..e304290f61 100644
--- a/interface/web/sites/lib/lang/tr_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_backup_list.lng
@@ -18,5 +18,36 @@ $wb['delete_pending_txt'] = 'Bekleyen bir yedek silme iÅŸlemi var.';
 $wb['backup_type_mongodb'] = 'MongoDB Veritabanı';
 $wb['backup_type_mysql'] = 'MySQL Veritabanı';
 $wb['backup_type_web'] = 'Web sitesi dosyaları';
-
+$wb['backup_pending_txt'] = 'There is already a pending backup job.';
+$wb['error_txt'] = 'Error';
+$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
+$wb["backup_format_txt"] = 'Backup format';
+$wb["backup_format_unknown_txt"] = 'Unknown';
+$wb["backup_job_txt"] = 'Scheduler';
+$wb["backup_job_manual_txt"] = 'Manual';
+$wb["backup_job_auto_txt"] = 'Auto';
+$wb["manual_backup_title_txt"] = 'Manual backup';
+$wb["make_backup_web_txt"] = 'Make backup of web files';
+$wb["make_backup_database_txt"] = 'Make backup of databases';
+$wb["make_backup_confirm_txt"] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb["yes_txt"] = 'Yes';
+$wb["no_txt"] = 'No';
+$wb["backup_is_encrypted_txt"] = "Encrypted";
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
+$wb["backup_format_rar_txt"] = 'RAR';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index a190375c37..071df396e4 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -158,4 +158,31 @@ $wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
 $wb['enable_pagespeed_txt'] = 'PageSpeed Kullanılsın';
 $wb['log_retention_txt'] = 'Günlük Dosyalarının Silinme Sıklığı';
 $wb['log_retention_error_regex'] = 'Gün cinsinden günlük dosyalarının silinme sıklığı (En küçük: 0 - En büyük: 9999)';
+$wb["backup_format_web_txt"] = 'Backup format for web files';
+$wb["backup_format_db_txt"] = 'Backup format for database';
+$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
+$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$wb["backup_compression_options_txt"] = 'Compression options';
+$wb["backup_encryption_note_txt"] = "Encryption is available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$wb["backup_encryption_options_txt"] = 'Encryption options';
+$wb["backup_enable_encryption_txt"] = 'Enable encryption';
+$wb["backup_password_txt"] = 'Password';
+$wb["backup_format_default_txt"] = 'Default: zip (deflate) or tar (gzip)';
+$wb["backup_format_zip_txt"] = 'zip (deflate)';
+$wb["backup_format_gzip_txt"] = 'gzip';
+$wb["backup_format_bzip2_txt"] = 'bzip2';
+$wb["backup_format_xz_txt"] = 'xz';
+$wb["backup_format_zip_bzip2_txt"] = 'zip (bzip2)';
+$wb["backup_format_7z_lzma_txt"] = '7z (LZMA)';
+$wb["backup_format_7z_lzma2_txt"] = '7z (LZMA2)';
+$wb["backup_format_7z_ppmd_txt"] = '7z (PPMd)';
+$wb["backup_format_7z_bzip2_txt"] = '7z (BZip2)';
+$wb["backup_format_tar_gzip_txt"] = 'tar (gzip)';
+$wb["backup_format_tar_bzip2_txt"] = 'tar (bzip2)';
+$wb["backup_format_tar_xz_txt"] = 'tar (xz)';
+$wb["backup_format_rar_txt"] = 'RAR';
+$wb["backup_format_tar_7z_lzma_txt"] = 'tar + 7z (LZMA)';
+$wb["backup_format_tar_7z_lzma2_txt"] = 'tar + 7z (LZMA2)';
+$wb["backup_format_tar_7z_ppmd_txt"] = 'tar + 7z (PPMd)';
+$wb["backup_format_tar_7z_bzip2_txt"] = 'tar + 7z (BZip2)';
 ?>
diff --git a/interface/web/sites/templates/web_backup_list.htm b/interface/web/sites/templates/web_backup_list.htm
index 31028a703c..95c51d0c15 100644
--- a/interface/web/sites/templates/web_backup_list.htm
+++ b/interface/web/sites/templates/web_backup_list.htm
@@ -1,12 +1,18 @@
+<h3><tmpl_var name="manual_backup_title_txt"></h3>
+<button class="btn btn-default formbutton-default" type="button" onclick="ISPConfig.confirm_action('sites/web_vhost_domain_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&make_backup=database&','{tmpl_var name='make_backup_confirm_txt'}');">{tmpl_var name="make_backup_database_txt"}</button>
+<button class="btn btn-default formbutton-default" type="button" onclick="ISPConfig.confirm_action('sites/web_vhost_domain_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&make_backup=web&','{tmpl_var name='make_backup_confirm_txt'}');">{tmpl_var name="make_backup_web_txt"}</button>
+
 <tmpl_if name="msg">
-    <div id="OKMsg"><p><tmpl_var name="msg"></p></div>
+    <div id="OKMsg" class="tab-content bg-success text-success text-center"><p><tmpl_var name="msg"></p></div>
 </tmpl_if>
 <tmpl_if name="error">
-    <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
+    <div id="errorMsg" class="tab-content bg-danger text-danger text-center">
+        <h4><tmpl_var name="error_txt"></h4>
+        <p><tmpl_var name="error"></p>
+    </div>
 </tmpl_if>
 <h3><tmpl_var name="list_head_txt"></h3>
 
-
         <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
             <div class="table-wrapper marginTop15">
 <table class="table table-auto table-striped" style="padding: 5px;">
@@ -14,6 +20,9 @@
                     <tr>
                         <th data-column="date"><tmpl_var name="date_txt"></th>
                         <th data-column="backup_type"><tmpl_var name="backup_type_txt"></th>
+                        <th data-column="backup_format"><tmpl_var name="backup_format_txt"></th>
+                        <th data-column="backup_job"><tmpl_var name="backup_job_txt"></th>
+                        <th data-column="backup_encrypted"><tmpl_var name="backup_is_encrypted_txt"></th>
                         <th data-column="filename"><tmpl_var name="filename_txt"></th>
                         <th data-column="filesize"><tmpl_var name="filesize_txt"></th>
                         <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
@@ -24,6 +33,9 @@
                         <tr>
                             <td>{tmpl_var name="date"}</td>
                             <td>{tmpl_var name="backup_type"}</td>
+                            <td>{tmpl_var name="backup_format"}</td>
+                            <td>{tmpl_var name="backup_job"}</td>
+                            <td>{tmpl_var name="backup_encrypted"}</td>
                             <td>{tmpl_var name="filename"}</td>
                             <td>{tmpl_var name="filesize"}</td>
                             <td class="text-center">
diff --git a/interface/web/sites/templates/web_vhost_domain_backup.htm b/interface/web/sites/templates/web_vhost_domain_backup.htm
index c31a579fc2..b28b830188 100644
--- a/interface/web/sites/templates/web_vhost_domain_backup.htm
+++ b/interface/web/sites/templates/web_vhost_domain_backup.htm
@@ -29,7 +29,53 @@
                 <label for="backup_excludes" class="col-sm-3 control-label">{tmpl_var name='backup_excludes_txt'}</label>
                 <div class="col-sm-6"><input type="text" name="backup_excludes" id="backup_excludes" value="{tmpl_var name='backup_excludes'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='backup_excludes_note_txt'}
             </div></div>
-        
+
+            <legend>{tmpl_var name='backup_compression_options_txt'}</legend>
+            <div class="tab-content">
+                {tmpl_var name='backup_format_web_note_txt'}
+            </div>
+            <tmpl_if name="missing_utils">
+                <div class="tab-content bg-warning text-warning">
+                    {tmpl_var name='backup_missing_utils_txt'} {tmpl_var name='missing_utils'}
+                </div>
+            </tmpl_if>
+            <div class="form-group">
+                <label for="backup_format_web" class="col-sm-3 control-label">{tmpl_var name='backup_format_web_txt'}</label>
+                <div class="col-sm-9">
+                    <select name="backup_format_web" id="backup_format_web" class="form-control">
+                        {tmpl_var name='backup_format_web'}
+                    </select>
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="backup_format_db" class="col-sm-3 control-label">{tmpl_var name='backup_format_db_txt'}</label>
+                <div class="col-sm-9">
+                    <select name="backup_format_db" id="backup_format_db" class="form-control">
+                        {tmpl_var name='backup_format_db'}
+                    </select>
+                </div>
+            </div>
+
+            <legend>{tmpl_var name='backup_encryption_options_txt'}</legend>
+            <div class="tab-content">
+                {tmpl_var name='backup_encryption_note_txt'}
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">
+                    {tmpl_var name='backup_enable_encryption_txt'}
+                </label>
+                <div class="col-sm-9">
+                    {tmpl_var name="backup_encrypt"}
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="backup_password" class="col-sm-3 control-label">
+                    {tmpl_var name='backup_password_txt'}
+                </label>
+                <div class="col-sm-9">
+                    <input type="text" name="backup_password" id="backup_password" value="{tmpl_var name='backup_password'}" class="form-control" />
+                </div>
+            </div>
 
         {tmpl_var name='backup_records'}
 
diff --git a/remoting_client/API-docs/sites_database_add.html b/remoting_client/API-docs/sites_database_add.html
index acf53e7bc0..143d034721 100644
--- a/remoting_client/API-docs/sites_database_add.html
+++ b/remoting_client/API-docs/sites_database_add.html
@@ -31,6 +31,8 @@
 <p class="margin"> remote_ips&nbsp;&nbsp;(<span class="paratype">text</span>)</p>
 <p class="margin"> backup_interval&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> backup_copies&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> backup_format_web&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> backup_format_db&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="headgrp">Output: </p> 
 <p class="margin"> Returns the ID of the newly added database.</p>
diff --git a/remoting_client/API-docs/sites_web_aliasdomain_add.html b/remoting_client/API-docs/sites_web_aliasdomain_add.html
index 12e313efcc..688b6cd139 100644
--- a/remoting_client/API-docs/sites_web_aliasdomain_add.html
+++ b/remoting_client/API-docs/sites_web_aliasdomain_add.html
@@ -59,6 +59,8 @@
 <p class="margin"> custom_php_ini&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> backup_interval&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> backup_copies&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> backup_format_web&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> backup_format_db&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> traffic_quota_lock&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="headgrp">Output: </p> 
diff --git a/remoting_client/API-docs/sites_web_aliasdomain_update.html b/remoting_client/API-docs/sites_web_aliasdomain_update.html
index 53daaa2b2b..52b118f58b 100644
--- a/remoting_client/API-docs/sites_web_aliasdomain_update.html
+++ b/remoting_client/API-docs/sites_web_aliasdomain_update.html
@@ -60,6 +60,8 @@
 <p class="margin"> custom_php_ini&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> backup_interval&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> backup_copies&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> backup_format_web&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> backup_format_db&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> traffic_quota_lock&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <b>Output: </b> 
diff --git a/remoting_client/API-docs/sites_web_subdomain_add.html b/remoting_client/API-docs/sites_web_subdomain_add.html
index 3e884f4ec7..b2c5404a04 100644
--- a/remoting_client/API-docs/sites_web_subdomain_add.html
+++ b/remoting_client/API-docs/sites_web_subdomain_add.html
@@ -59,6 +59,8 @@
 <p class="margin"> custom_php_ini&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> backup_interval&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> backup_copies&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> backup_format_web&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> backup_format_db&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> traffic_quota_lock&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="headgrp">Output: </p> 
diff --git a/remoting_client/API-docs/sites_web_subdomain_update.html b/remoting_client/API-docs/sites_web_subdomain_update.html
index 4563912b59..a6b47245d6 100644
--- a/remoting_client/API-docs/sites_web_subdomain_update.html
+++ b/remoting_client/API-docs/sites_web_subdomain_update.html
@@ -59,6 +59,8 @@
 <p class="margin"> custom_php_ini&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> backup_interval&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> backup_copies&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> backup_format_web&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> backup_format_db&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> traffic_quota_lock&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <b>Output: </b> 
diff --git a/remoting_client/examples/sites_database_add.php b/remoting_client/examples/sites_database_add.php
index c63ad551eb..9de1e6674b 100644
--- a/remoting_client/examples/sites_database_add.php
+++ b/remoting_client/examples/sites_database_add.php
@@ -28,6 +28,8 @@ try {
 		'remote_ips' => '',
 		'backup_interval' => 'none',
 		'backup_copies' => 1,
+		'backup_format_web' => 'default',
+		'backup_format_db' => 'gzip',
 		'active' => 'y'
 	);
 
diff --git a/remoting_client/examples/sites_web_aliasdomain_add.php b/remoting_client/examples/sites_web_aliasdomain_add.php
index c459e47b87..602b273dd1 100644
--- a/remoting_client/examples/sites_web_aliasdomain_add.php
+++ b/remoting_client/examples/sites_web_aliasdomain_add.php
@@ -57,6 +57,8 @@ try {
 		'custom_php_ini' => '',
 		'backup_interval' => '',
 		'backup_copies' => 1,
+		'backup_format_web' => 'default',
+		'backup_format_db' => 'gzip',
 		'active' => 'y',
 		'traffic_quota_lock' => 'n'
 	);
diff --git a/remoting_client/examples/sites_web_domain_add.php b/remoting_client/examples/sites_web_domain_add.php
index 1ddd21e136..0ee462ab7a 100644
--- a/remoting_client/examples/sites_web_domain_add.php
+++ b/remoting_client/examples/sites_web_domain_add.php
@@ -58,6 +58,8 @@ try {
 		'custom_php_ini' => '',
 		'backup_interval' => '',
 		'backup_copies' => 1,
+		'backup_format_web' => 'default',
+		'backup_format_db' => 'gzip',
 		'active' => 'y',
 		'traffic_quota_lock' => 'n',
 		'http_port' => '80',
diff --git a/remoting_client/examples/sites_web_subdomain_add.php b/remoting_client/examples/sites_web_subdomain_add.php
index ac319388f0..c5a92b4703 100644
--- a/remoting_client/examples/sites_web_subdomain_add.php
+++ b/remoting_client/examples/sites_web_subdomain_add.php
@@ -57,6 +57,8 @@ try {
 		'custom_php_ini' => '',
 		'backup_interval' => '',
 		'backup_copies' => 1,
+		'backup_format_web' => 'default',
+		'backup_format_db' => 'gzip',
 		'active' => 'y',
 		'traffic_quota_lock' => 'n'
 	);
diff --git a/server/backup-now.php b/server/backup-now.php
new file mode 100644
index 0000000000..aa73a84369
--- /dev/null
+++ b/server/backup-now.php
@@ -0,0 +1,108 @@
+<?php
+
+/*
+Copyright (c) 2007-2016, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"]));
+require SCRIPT_PATH."/lib/config.inc.php";
+require SCRIPT_PATH."/lib/app.inc.php";
+
+set_time_limit(0);
+ini_set('error_reporting', E_ALL & ~E_NOTICE);
+
+/**
+ * Prints usage info
+ * @author Ramil Valitov <ramilvalitov@gmail.com>
+ */
+function printUsageInfo(){
+    echo <<<EOT
+Usage:
+	php backup-now.php --id=<4> [--type=<all>]
+Options:
+	--id		id of the website to backup.
+	--type		backup type: all, web or mysql. Default is all.
+
+EOT;
+}
+
+/**
+ * Makes a backup
+ * @param int $domain_id id of the domain
+ * @param string $type type: mysql, web or all
+ * @return bool true if success
+ * @uses backup::run_backup() to make backups
+ * @author Ramil Valitov <ramilvalitov@gmail.com>
+ */
+function makeBackup($domain_id, $type)
+{
+    global $app;
+
+    echo "Making backup of website id=" . $domain_id . ", type=" . $type . ", please wait...\n";
+
+    // Load required class
+    $app->load('backup');
+
+    switch ($type) {
+        case "all":
+            $success = backup::run_backup($domain_id, "web", "manual");
+            $success = $success && backup::run_backup($domain_id, "mysql", "manual");
+            break;
+        case "mysql":
+            $success = backup::run_backup($domain_id, "mysql", "manual");
+            break;
+        case "web":
+            $success = backup::run_backup($domain_id, "web", "manual");
+            break;
+        default:
+            echo "Unknown format=" . $type . "\n";
+            printUsageInfo();
+            $success = false;
+    }
+    return $success;
+}
+
+//** Get commandline options
+$cmd_opt = getopt('', array('id::', 'type::'));
+$id = filter_var($cmd_opt['id'], FILTER_VALIDATE_INT);;
+if (!isset($cmd_opt['id']) || !is_int($id)) {
+    printUsageInfo();
+    exit(1);
+}
+
+if (isset($cmd_opt['type']) && !empty($cmd_opt['type'])) {
+    $type = $cmd_opt['type'];
+} else
+    $type = "all";
+
+$success = makeBackup($id, $type);
+
+echo "All operations finished, status " . ($success ? "success" : "failed") . ".\n";
+
+exit($success ? 0 : 2);
+
+?>
diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php
index 146f2465c0..ec8b1668d1 100644
--- a/server/lib/app.inc.php
+++ b/server/lib/app.inc.php
@@ -36,6 +36,10 @@ class app {
 	var $loaded_modules = array();
 	var $loaded_plugins = array();
 	var $_calling_script = '';
+	/**
+	 * @var db
+	 */
+	public $db;
 
 	function __construct() {
 
diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php
new file mode 100644
index 0000000000..ea959a2f9c
--- /dev/null
+++ b/server/lib/classes/backup.inc.php
@@ -0,0 +1,1452 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/**
+ * Class backup
+ * All code that makes actual backup and restore of web files and database is here.
+ * @author Ramil Valitov <ramilvalitov@gmail.com>
+ * @see backup::run_backup() to run a single backup
+ * @see backup::run_all_backups() to run all backups
+ * @see backup::restoreBackupDatabase() to restore a database
+ * @see backup::restoreBackupWebFiles() to restore web files
+ */
+class backup
+{
+    /**
+     * Returns file extension for specified backup format
+     * @param string $format backup format
+     * @return string|null
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function getBackupDbExtension($format)
+    {
+        $prefix = '.sql';
+        switch ($format) {
+            case 'gzip':
+                return $prefix . '.gz';
+            case 'bzip2':
+                return $prefix . '.bz2';
+            case 'xz':
+                return $prefix . '.xz';
+            case 'zip':
+            case 'zip_bzip2':
+                return '.zip';
+            case 'rar':
+                return '.rar';
+        }
+        if (strpos($format, "7z_") === 0) {
+            return $prefix . '.7z';
+        }
+        return null;
+    }
+
+    /**
+     * Returns file extension for specified backup format
+     * @param string $format backup format
+     * @return string|null
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function getBackupWebExtension($format)
+    {
+        switch ($format) {
+            case 'tar_gzip':
+                return '.tar.gz';
+            case 'tar_bzip2':
+                return '.tar.bz2';
+            case 'tar_xz':
+                return '.tar.xz';
+            case 'zip':
+            case 'zip_bzip2':
+                return '.zip';
+            case 'rar':
+                return '.rar';
+        }
+        if (strpos($format, "tar_7z_") === 0) {
+            return '.tar.7z';
+        }
+        return null;
+    }
+
+    /**
+     * Sets file ownership to $web_user for all files and folders except log, ssl and web/stats
+     * @param string $web_document_root
+     * @param string $web_user
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function restoreFileOwnership($web_document_root, $web_user)
+    {
+        global $app;
+
+        $app->log('Restoring permissions for ' . $web_document_root, LOGLEVEL_DEBUG);
+        $app->system->exec_safe('cd ? && find . -not -path "./web/stats/*" -and -not -path "./log" -and -not -path "./log/*" -and -not -path "./ssl" -and -not -path "./ssl/*" -and -not -path "." -exec chown ?:? {} \;', $web_document_root, $web_user, $web_user);
+    }
+
+    /**
+     * Returns default backup format used in previous versions of ISPConfig
+     * @param string $backup_mode
+     * @param string $backup_type
+     * @return string
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function getDefaultBackupFormat($backup_mode, $backup_type)
+    {
+        //We have a backup from old version of ISPConfig
+        switch ($backup_type) {
+            case 'mysql':
+                return 'gzip';
+            case 'web':
+                return ($backup_mode == 'userzip') ? 'zip' : 'tar_gzip';
+        }
+        return "";
+    }
+
+    /**
+     * Restores a database backup.
+     * The backup directory must be mounted before calling this method.
+     * @param string $backup_format
+     * @param string $password password for encrypted backup or empty string if archive is not encrypted
+     * @param string $backup_dir
+     * @param string $filename
+     * @param string $backup_mode
+     * @param string $backup_type
+     * @return bool true if succeeded
+     * @see backup_plugin::mount_backup_dir()
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    public static function restoreBackupDatabase($backup_format, $password, $backup_dir, $filename, $backup_mode, $backup_type)
+    {
+        global $app;
+
+        //* Load sql dump into db
+        include 'lib/mysql_clientdb.conf';
+
+        if (empty($backup_format)) {
+            $backup_format = self::getDefaultBackupFormat($backup_mode, $backup_type);
+        }
+        $extension = self::getBackupDbExtension($backup_format);
+        if (!empty($extension)) {
+            //Replace dots for preg_match search
+            $extension = str_replace('.', '\.', $extension);
+        }
+        $success = false;
+        $full_filename = $backup_dir . '/' . $filename;
+
+        $app->log('Restoring MySQL backup ' . $full_filename . ', backup format "' . $backup_format . '", backup mode "' . $backup_mode . '"', LOGLEVEL_DEBUG);
+
+        if (file_exists($full_filename) && !empty($extension)) {
+            preg_match('@^(manual-)?db_(?P<db>.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}' . $extension . '$@', $filename, $matches);
+            if (!isset($matches['db']) || empty($matches['db'])) {
+                $app->log('Failed to detect database name during restore of ' . $full_filename, LOGLEVEL_ERROR);
+                return false;
+            }
+            $db_name = $matches['db'];
+            switch ($backup_format) {
+                case "gzip":
+                    $command = "gunzip --stdout ? | mysql -h ? -u ? -p? ?";
+                    break;
+                case "zip":
+                case "zip_bzip2":
+                    $command = "unzip -qq -p -P " . escapeshellarg($password) . " ? | mysql -h ? -u ? -p? ?";
+                    break;
+                case "bzip2":
+                    $command = "bunzip2 -q -c ? | mysql -h ? -u ? -p? ?";
+                    break;
+                case "xz":
+                    $command = "unxz -q -q -c ? | mysql -h ? -u ? -p? ?";
+                    break;
+                case "rar":
+                    //First, test that the archive is correct and we have a correct password
+                    $options = self::getUnrarOptions($password);
+                    $app->system->exec_safe("rar t " . $options . " ?", $full_filename);
+                    if ($app->system->last_exec_retcode() == 0) {
+                        $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
+                        $command = "rar x " . $options. " ? | mysql -h ? -u ? -p? ?";
+                    }
+                    break;
+            }
+            if (strpos($backup_format, "7z_") === 0) {
+                $options = self::get7zDecompressOptions($password);
+                //First, test that the archive is correct and we have a correct password
+                $app->system->exec_safe("7z t " . $options . " ?", $full_filename);
+                if ($app->system->last_exec_retcode() == 0) {
+                    $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
+                    $command = "7z x " . $options . " -so ? | mysql -h ? -u ? -p? ?";
+                } else
+                    $command = null;
+            }
+            if (!empty($command)) {
+                /** @var string $clientdb_host */
+                /** @var string $clientdb_user */
+                /** @var string $clientdb_password */
+                $app->system->exec_safe($command, $full_filename, $clientdb_host, $clientdb_user, $clientdb_password, $db_name);
+                $retval = $app->system->last_exec_retcode();
+                if ($retval == 0) {
+                    $app->log('Restored MySQL backup ' . $full_filename, LOGLEVEL_DEBUG);
+                    $success = true;
+                } else {
+                    $app->log('Failed to restore web backup ' . $full_filename . ', exit code ' . $retval, LOGLEVEL_ERROR);
+                }
+            } else {
+                $app->log('Archive test failed for ' . $full_filename, LOGLEVEL_DEBUG);
+            }
+        } else {
+            $app->log('Failed to process MySQL backup ' . $full_filename, LOGLEVEL_ERROR);
+        }
+        unset($clientdb_host);
+        unset($clientdb_user);
+        unset($clientdb_password);
+
+        return $success;
+    }
+
+    /**
+     * Restores web files backup.
+     * The backup directory must be mounted before calling this method.
+     * @param string $backup_format
+     * @param string $password password for encrypted backup or empty string if archive is not encrypted
+     * @param string $backup_dir
+     * @param string $filename
+     * @param string $backup_mode
+     * @param string $backup_type
+     * @param string $web_root
+     * @param string $web_user
+     * @param string $web_group
+     * @return bool true if succeed
+     * @see backup_plugin::mount_backup_dir()
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    public static function restoreBackupWebFiles($backup_format, $password, $backup_dir, $filename, $backup_mode, $backup_type, $web_root, $web_user, $web_group)
+    {
+        global $app;
+
+        if (empty($backup_format)) {
+            $backup_format = self::getDefaultBackupFormat($backup_mode, $backup_type);
+        }
+        $full_filename = $backup_dir . '/' . $filename;
+        $result = false;
+
+        $app->log('Restoring web backup ' . $full_filename . ', backup format "' . $backup_format . '", backup mode "' . $backup_mode . '"', LOGLEVEL_DEBUG);
+
+        if (!empty($backup_format)) {
+            $app->system->web_folder_protection($web_root, false);
+            if ($backup_mode == 'userzip' || $backup_mode == 'rootgz') {
+                $user_mode = $backup_mode == 'userzip';
+                $filename = $user_mode ? ($web_root . '/backup/' . $filename) : $full_filename;
+
+                if (file_exists($full_filename) && $web_root != '' && $web_root != '/' && !stristr($full_filename, '..') && !stristr($full_filename, 'etc')) {
+                    if ($user_mode) {
+                        if (file_exists($filename)) rename($filename, $filename . '.bak');
+                        copy($full_filename, $filename);
+                        chgrp($filename, $web_group);
+                    }
+                    $user_prefix_cmd = $user_mode ? 'sudo -u ' . escapeshellarg($web_user) : '';
+                    $success = false;
+                    $retval = 0;
+                    switch ($backup_format) {
+                        case "tar_gzip":
+                        case "tar_bzip2":
+                        case "tar_xz":
+                            $command = $user_prefix_cmd . ' tar xf ? --directory ?';
+                            $app->system->exec_safe($command, $filename, $web_root);
+                            $retval = $app->system->last_exec_retcode();
+                            $success = ($retval == 0 || $retval == 2);
+                            break;
+                        case "zip":
+                        case "zip_bzip2":
+                            $command = $user_prefix_cmd . ' unzip -qq -P ' . escapeshellarg($password) . ' -o ? -d ? 2> /dev/null';
+                            $app->system->exec_safe($command, $filename, $web_root);
+                            $retval = $app->system->last_exec_retcode();
+                            /*
+                             * Exit code 50 can happen when zip fails to overwrite files that do not
+                             * belong to selected user, so we can consider this situation as success
+                             * with warnings.
+                             */
+                            $success = ($retval == 0 || $retval == 50);
+                            if ($success) {
+                                self::restoreFileOwnership($web_root, $web_user);
+                            }
+                            break;
+                        case 'rar':
+                            $options = self::getUnRarOptions($password);
+                            //First, test that the archive is correct and we have a correct password
+                            $command = $user_prefix_cmd . " rar t " . $options . " ? ?";
+                            //Rar requires trailing slash
+                            $app->system->exec_safe($command, $filename, $web_root . '/');
+                            $success = ($app->system->last_exec_retcode() == 0);
+                            if ($success) {
+                                //All good, now we can extract
+                                $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
+                                $command = $user_prefix_cmd . " rar x " . $options . " ? ?";
+                                //Rar requires trailing slash
+                                $app->system->exec_safe($command, $filename, $web_root . '/');
+                                $retval = $app->system->last_exec_retcode();
+                                //Exit code 9 can happen when we have file permission errors, in this case some
+                                //files will be skipped during extraction.
+                                $success = ($retval == 0 || $retval == 1 || $retval == 9);
+                            } else {
+                                $app->log('Archive test failed for ' . $full_filename, LOGLEVEL_DEBUG);
+                            }
+                            break;
+                    }
+                    if (strpos($backup_format, "tar_7z_") === 0) {
+                        $options = self::get7zDecompressOptions($password);
+                        //First, test that the archive is correct and we have a correct password
+                        $command = $user_prefix_cmd . " 7z t " . $options . " ?";
+                        $app->system->exec_safe($command, $filename);
+                        $success = ($app->system->last_exec_retcode() == 0);
+                        if ($success) {
+                            //All good, now we can extract
+                            $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
+                            $command = $user_prefix_cmd . " 7z x " . $options . " -so ? | tar xf - --directory ?";
+                            $app->system->exec_safe($command, $filename, $web_root);
+                            $retval = $app->system->last_exec_retcode();
+                            $success = ($retval == 0 || $retval == 2);
+                        } else {
+                            $app->log('Archive test failed for ' . $full_filename, LOGLEVEL_DEBUG);
+                        }
+                    }
+                    if ($user_mode) {
+                        unlink($filename);
+                        if (file_exists($filename . '.bak')) rename($filename . '.bak', $filename);
+                    }
+                    if ($success) {
+                        $app->log('Restored web backup ' . $full_filename, LOGLEVEL_DEBUG);
+                        $result = true;
+                    } else {
+                        $app->log('Failed to restore web backup ' . $full_filename . ', exit code ' . $retval, LOGLEVEL_ERROR);
+                    }
+                }
+            } else {
+                $app->log('Failed to restore web backup ' . $full_filename . ', backup mode "' . $backup_mode . '" not recognized.', LOGLEVEL_DEBUG);
+            }
+            $app->system->web_folder_protection($web_root, true);
+        } else {
+            $app->log('Failed to restore web backup ' . $full_filename . ', backup format not recognized.', LOGLEVEL_DEBUG);
+        }
+        return $result;
+    }
+
+    /**
+     * Returns a compression method, for example returns bzip2 for tar_7z_bzip2
+     * @param string $format
+     * @return false|string
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function getCompressionMethod($format)
+    {
+        $pos = strrpos($format, "_");
+        return substr($format, $pos + 1);
+    }
+
+    /**
+     * Returns default options for compressing rar
+     * @param string $backup_tmp temporary directory that rar can use
+     * @param string|null $password backup password if any
+     * @return string options for rar
+     */
+    protected static function getRarOptions($backup_tmp, $password)
+    {
+        /**
+         * All rar options are listed here:
+         * https://documentation.help/WinRAR/HELPCommands.htm
+         * https://documentation.help/WinRAR/HELPSwitches.htm
+         * Some compression profiles and different versions of rar may use different default values, so it's better
+         * to specify everything explicitly.
+         * The difference between compression methods is not big in terms of file size, but is huge in terms of
+         * CPU and RAM consumption. Therefore it makes sense only to use fastest the compression method.
+         */
+        $options = array(
+            /**
+             * Start with fastest compression method (least compressive)
+             */
+            '-m1',
+
+            /**
+             * Disable solid archiving.
+             * Never use solid archive: it's very slow and requires to read and sort all files first
+             */
+            '-S-',
+
+            /**
+             * Ignore default profile and environment variables
+             * https://documentation.help/WinRAR/HELPSwCFGm.htm
+             */
+            '-CFG-',
+
+            /**
+             *  Disable error messages output
+             * https://documentation.help/WinRAR/HELPSwINUL.htm
+             */
+            '-inul',
+
+            /**
+             * Lock archive: this switch prevents any further archive modifications by rar
+             * https://documentation.help/WinRAR/HELPSwK.htm
+             */
+            '-k',
+
+            /**
+             * Create archive in RAR 5.0 format
+             * https://documentation.help/WinRAR/HELPSwMA.htm
+             */
+            '-ma',
+
+            /**
+             * Set dictionary size to 16Mb.
+             * When archiving, rar needs about 6x memory of specified dictionary size.
+             * https://documentation.help/WinRAR/HELPSwMD.htm
+             */
+            '-md16m',
+
+            /**
+             * Use only one CPU thread
+             * https://documentation.help/WinRAR/HELPSwMT.htm
+             */
+            '-mt1',
+
+            /**
+             * Use this switch when archiving to save file security information and when extracting to restore it.
+             * It stores file owner, group, file permissions and audit information.
+             * https://documentation.help/WinRAR/HELPSwOW.htm
+             */
+            '-ow',
+
+            /**
+             * Overwrite all
+             * https://documentation.help/WinRAR/HELPSwO.htm
+             */
+            '-o+',
+
+            /**
+             * Exclude base folder from names.
+             * Required for correct directory structure inside archive
+             * https://documentation.help/WinRAR/HELPSwEP1.htm
+             */
+            '-ep1',
+
+            /**
+             * Never add quick open information.
+             * This information is useful only if you want to read the contents of archive (list of files).
+             * Besides it can increase the archive size. As we need the archive only for future complete extraction,
+             * there's no need to use this information at all.
+             * https://documentation.help/WinRAR/HELPSwQO.htm
+             */
+            '-qo-',
+
+            /**
+             * Set lowest task priority (1) and 10ms sleep time between read/write operations.
+             * https://documentation.help/WinRAR/HELPSwRI.htm
+             */
+            '-ri1:10',
+
+            /**
+             * Temporary folder
+             * https://documentation.help/WinRAR/HELPSwW.htm
+             */
+            '-w' . escapeshellarg($backup_tmp),
+
+            /**
+             * Assume Yes on all queries
+             * https://documentation.help/WinRAR/HELPSwY.htm
+             */
+            '-y',
+        );
+
+        $options = implode(" ", $options);
+
+        if (!empty($password)) {
+            /**
+             * Encrypt both file data and headers
+             * https://documentation.help/WinRAR/HELPSwHP.htm
+             */
+            $options .= ' -HP' . escapeshellarg($password);
+        }
+        return $options;
+    }
+
+    /**
+     * Returns default options for decompressing rar
+     * @param string|null $password backup password if any
+     * @return string options for rar
+     */
+    protected static function getUnRarOptions($password)
+    {
+        /**
+         * All rar options are listed here:
+         * https://documentation.help/WinRAR/HELPCommands.htm
+         * https://documentation.help/WinRAR/HELPSwitches.htm
+         * Some compression profiles and different versions of rar may use different default values, so it's better
+         * to specify everything explicitly.
+         * The difference between compression methods is not big in terms of file size, but is huge in terms of
+         * CPU and RAM consumption. Therefore it makes sense only to use fastest the compression method.
+         */
+        $options = array(
+            /**
+             * Ignore default profile and environment variables
+             * https://documentation.help/WinRAR/HELPSwCFGm.htm
+             */
+            '-CFG-',
+
+            /**
+             *  Disable error messages output
+             * https://documentation.help/WinRAR/HELPSwINUL.htm
+             */
+            '-inul',
+
+            /**
+             * Use only one CPU thread
+             * https://documentation.help/WinRAR/HELPSwMT.htm
+             */
+            '-mt1',
+
+            /**
+             * Use this switch when archiving to save file security information and when extracting to restore it.
+             * It stores file owner, group, file permissions and audit information.
+             * https://documentation.help/WinRAR/HELPSwOW.htm
+             */
+            '-ow',
+
+            /**
+             * Overwrite all
+             * https://documentation.help/WinRAR/HELPSwO.htm
+             */
+            '-o+',
+
+            /**
+             * Set lowest task priority (1) and 10ms sleep time between read/write operations.
+             * https://documentation.help/WinRAR/HELPSwRI.htm
+             */
+            '-ri1:10',
+
+            /**
+             * Assume Yes on all queries
+             * https://documentation.help/WinRAR/HELPSwY.htm
+             */
+            '-y',
+        );
+
+        $options = implode(" ", $options);
+
+        if (!empty($password)) {
+            $options .= ' -P' . escapeshellarg($password);
+        }
+        return $options;
+    }
+
+    /**
+     * Returns compression options for 7z
+     * @param string $format compression format used in 7z
+     * @param string $password password if any
+     * @return string
+     */
+    protected static function get7zCompressOptions($format, $password)
+    {
+        $method = self::getCompressionMethod($format);
+        /**
+         * List of 7z options is here:
+         * https://linux.die.net/man/1/7z
+         * https://sevenzip.osdn.jp/chm/cmdline/syntax.htm
+         * https://sevenzip.osdn.jp/chm/cmdline/switches/
+         */
+        $options = array(
+            /**
+             * Use 7z format (container)
+             */
+            '-t7z',
+
+            /**
+             * Compression method (LZMA, LZMA2, etc.)
+             * https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm
+             */
+            '-m0=' . $method,
+
+            /**
+             * Fastest compression method
+             */
+            '-mx=1',
+
+            /**
+             * Disable solid mode
+             */
+            '-ms=off',
+
+            /**
+             * Disable multithread mode, use less CPU
+             */
+            '-mmt=off',
+
+            /**
+             * Disable multithread mode for filters, use less CPU
+             */
+            '-mmtf=off',
+
+            /**
+             * Disable progress indicator
+             */
+            '-bd',
+
+            /**
+             * Assume yes on all queries
+             * https://sevenzip.osdn.jp/chm/cmdline/switches/yes.htm
+             */
+            '-y',
+        );
+        $options = implode(" ", $options);
+        switch (strtoupper($method)) {
+            case 'LZMA':
+            case 'LZMA2':
+                /**
+                 * Dictionary size is 5Mb.
+                 * 7z can use 12 times more RAM
+                 */
+                $options .= ' -md=5m';
+                break;
+            case 'PPMD':
+                /**
+                 * Dictionary size is 64Mb.
+                 * It's the maximum RAM that 7z is allowed to use.
+                 */
+                $options .= ' -mmem=64m';
+                break;
+        }
+        if (!empty($password)) {
+            $options .= ' -mhe=on -p' . escapeshellarg($password);
+        }
+        return $options;
+    }
+
+    /**
+     * Returns decompression options for 7z
+     * @param string $password password if any
+     * @return string
+     */
+    protected static function get7zDecompressOptions($password)
+    {
+        /**
+         * List of 7z options is here:
+         * https://linux.die.net/man/1/7z
+         * https://sevenzip.osdn.jp/chm/cmdline/syntax.htm
+         * https://sevenzip.osdn.jp/chm/cmdline/switches/
+         */
+        $options = array(
+            /**
+             * Disable multithread mode, use less CPU
+             */
+            '-mmt=off',
+
+            /**
+             * Disable progress indicator
+             */
+            '-bd',
+
+            /**
+             * Assume yes on all queries
+             * https://sevenzip.osdn.jp/chm/cmdline/switches/yes.htm
+             */
+            '-y',
+        );
+        $options = implode(" ", $options);
+        if (!empty($password)) {
+            $options .= ' -p' . escapeshellarg($password);
+        }
+        return $options;
+    }
+
+    /**
+     * Clears expired backups.
+     * The backup directory must be mounted before calling this method.
+     * @param integer $server_id
+     * @param integer $web_id id of the website
+     * @param integer $max_backup_copies number of backup copies to keep, all files beyond the limit will be erased
+     * @param string $backup_dir directory to scan
+     * @return bool
+     * @see backup_plugin::backups_garbage_collection() call this method first
+     * @see backup_plugin::mount_backup_dir()
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function clearBackups($server_id, $web_id, $max_backup_copies, $backup_dir)
+    {
+        global $app;
+
+        $files = self::get_files($backup_dir);
+        usort($files, function ($a, $b) use ($backup_dir) {
+            $time_a = filemtime($backup_dir . '/' . $a);
+            $time_b = filemtime($backup_dir . '/' . $b);
+            return ($time_a > $time_b) ? -1 : 1;
+        });
+
+        $db_list = array($app->db);
+        if ($app->db->dbHost != $app->dbmaster->dbHost)
+            array_push($db_list, $app->dbmaster);
+
+        //Delete old files that are beyond the limit
+        for ($n = $max_backup_copies; $n < sizeof($files); $n++) {
+            $filename = $files[$n];
+            $full_filename = $backup_dir . '/' . $filename;
+            $app->log('Backup file ' . $full_filename . ' is beyond the limit of ' . $max_backup_copies . " copies and will be deleted from disk and database", LOGLEVEL_DEBUG);
+            $sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+            foreach ($db_list as $db) {
+                $db->query($sql, $server_id, $web_id, $filename);
+            }
+            @unlink($full_filename);
+        }
+        return true;
+    }
+
+    /**
+     * Garbage collection: deletes records from database about files that do not exist and deletes untracked files.
+     * The backup directory must be mounted before calling this method.
+     * @param int $server_id
+     * @param string|null $backup_type if defined then process only backups of this type
+     * @param string|null $domain_id if defined then process only backups that belong to this domain
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @see backup_plugin::mount_backup_dir()
+     */
+    protected static function backups_garbage_collection($server_id, $backup_type = null, $domain_id = null)
+    {
+        global $app;
+
+        //First check that all records in database have related files and delete records without files on disk
+        $args = array();
+        $args_domains = array();
+        $server_config = $app->getconf->get_server_config($server_id, 'server');
+        $backup_dir = trim($server_config['backup_dir']);
+        $sql = "SELECT * FROM web_backup WHERE server_id = ?";
+        $sql_domains = "SELECT domain_id,system_user,system_group,backup_interval FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')";
+        array_push($args, $server_id);
+        array_push($args_domains, $server_id);
+        if (!empty($backup_type)) {
+            $sql .= " AND backup_type = ?";
+            array_push($args, $backup_type);
+        }
+        if (!empty($domain_id)) {
+            $sql .= " AND parent_domain_id = ?";
+            $sql_domains .= " AND domain_id = ?";
+            array_push($args, $domain_id);
+            array_push($args_domains, $domain_id);
+        }
+        array_unshift($args, $sql);
+        array_unshift($args_domains, $sql_domains);
+
+        $db_list = array($app->db);
+        if ($app->db->dbHost != $app->dbmaster->dbHost)
+            array_push($db_list, $app->dbmaster);
+
+        foreach ($db_list as $db) {
+            $backups = call_user_func_array(array($db, "queryAllRecords"), $args);
+            foreach ($backups as $backup) {
+                $backup_file = $backup_dir . '/web' . $backup['parent_domain_id'] . '/' . $backup['filename'];
+                if (!is_file($backup_file)) {
+                    $app->log('Backup file ' . $backup_file . ' does not exist on disk, deleting this entry from database', LOGLEVEL_DEBUG);
+                    $sql = "DELETE FROM web_backup WHERE backup_id = ?";
+                    $db->query($sql, $backup['backup_id']);
+                }
+            }
+        }
+
+        foreach ($db_list as $db) {
+            $domains = call_user_func_array(array($db, "queryAllRecords"), $args_domains);
+            foreach ($domains as $rec) {
+                $domain_id = $rec['domain_id'];
+                $domain_backup_dir = $backup_dir . '/web' . $domain_id;
+                $files = self::get_files($domain_backup_dir);
+
+                //Delete files that are in backup directory, but do not exist in database
+                if (!empty($files)) {
+                    $sql = "SELECT backup_id,filename FROM web_backup WHERE server_id = ? AND parent_domain_id = ?";
+                    $backups = $db->queryAllRecords($sql, $server_id, $domain_id);
+                    foreach ($backups as $backup) {
+                        if (!in_array($backup['filename'],$files)) {
+                            $backup_file = $backup_dir . '/web' . $domain_id . '/' . $backup['filename'];
+                            $app->log('Backup file ' . $backup_file . ' is not contained in database, deleting this file from disk', LOGLEVEL_DEBUG);
+                            @unlink($backup_file);
+                        }
+                    }
+                }
+
+                //Remove backupdir symlink and create as directory instead
+                $web_path = $rec['document_root'];
+                $app->system->web_folder_protection($web_path, false);
+
+                $backup_download_dir = $web_path . '/backup';
+                if (is_link($backup_download_dir)) {
+                    unlink($backup_download_dir);
+                }
+                if (!is_dir($backup_download_dir)) {
+                    mkdir($backup_download_dir);
+                    chown($backup_download_dir, $rec['system_user']);
+                    chgrp($backup_download_dir, $rec['system_group']);
+                }
+
+                $app->system->web_folder_protection($web_path, true);
+
+                // delete old files from backup download dir (/var/www/example.com/backup)
+                if (is_dir($backup_download_dir)) {
+                    $dir_handle = dir($backup_download_dir);
+                    $now = time();
+                    while (false !== ($entry = $dir_handle->read())) {
+                        $full_filename = $backup_download_dir . '/' . $entry;
+                        if ($entry != '.' && $entry != '..' && is_file($full_filename)) {
+                            // delete files older than 3 days
+                            if ($now - filemtime($full_filename) >= 60 * 60 * 24 * 3) {
+                                $app->log('Backup file ' . $full_filename . ' is too old, deleting this file from disk', LOGLEVEL_DEBUG);
+                                @unlink($full_filename);
+                            }
+                        }
+                    }
+                    $dir_handle->close();
+                }
+            }
+        }
+    }
+
+    /**
+     * Gets list of files in directory
+     * @param string $directory
+     * @param string[]|null $prefix_list filter files that have one of the prefixes. Use null for default filtering.
+     * @param string[]|null $endings_list filter files that have one of the endings. Use null for default filtering.
+     * @return string[]
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function get_files($directory, $prefix_list = null, $endings_list = null)
+    {
+        $default_prefix_list = array(
+            'web',
+            'manual-web',
+            'db_',
+            'manual-db_',
+        );
+        $default_endings_list = array(
+            '.gz',
+            '.7z',
+            '.rar',
+            '.zip',
+            '.xz',
+            '.bz2',
+        );
+        if (is_null($prefix_list))
+            $prefix_list = $default_prefix_list;
+        if (is_null($endings_list))
+            $endings_list = $default_endings_list;
+
+        $dir_handle = dir($directory);
+        $files = array();
+        while (false !== ($entry = $dir_handle->read())) {
+            $full_filename = $directory . '/' . $entry;
+            if ($entry != '.' && $entry != '..' && is_file($full_filename)) {
+                if (!empty($prefix_list)) {
+                    $add = false;
+                    foreach ($prefix_list as $prefix) {
+                        if (substr($entry, 0, strlen($prefix)) == $prefix) {
+                            $add = true;
+                            break;
+                        }
+                    }
+                } else
+                    $add = true;
+                if ($add && !empty($endings_list)) {
+                    $add = false;
+                    foreach ($endings_list as $ending) {
+                        if (substr($entry, -strlen($ending)) == $ending) {
+                            $add = true;
+                            break;
+                        }
+                    }
+                }
+                if ($add)
+                    array_push($files, $entry);
+            }
+        }
+        $dir_handle->close();
+
+        return $files;
+    }
+
+    /**
+     * Generates excludes list for compressors
+     * @param string[] $backup_excludes
+     * @param string $arg
+     * @return string
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function generateExcludeList($backup_excludes, $arg)
+    {
+        $excludes = implode(" " . $arg, $backup_excludes);
+        if (!empty($excludes)) {
+            $excludes = $arg . $excludes;
+        }
+        return $excludes;
+    }
+
+    /**
+     * Runs a web compression routine
+     * @param string $format
+     * @param string[] $backup_excludes
+     * @param string $backup_mode
+     * @param string $web_path
+     * @param string $web_backup_dir
+     * @param string $web_backup_file
+     * @param string $web_user
+     * @param string $web_group
+     * @param string $http_server_user
+     * @param string $backup_tmp
+     * @param string|null $password
+     * @return bool true if success
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function runWebCompression($format, $backup_excludes, $backup_mode, $web_path, $web_backup_dir, $web_backup_file, $web_user, $web_group, $http_server_user, $backup_tmp, $password)
+    {
+        global $app;
+
+        $find_user_files = 'cd ? && sudo -u ? find . -group ? -or -user ? -print 2> /dev/null';
+        $excludes = self::generateExcludeList($backup_excludes, '--exclude=');
+        $tar_dir = 'tar pcf - ' . $excludes . ' --directory ? .';
+        $tar_input = 'tar pcf --null -T -';
+
+        $app->log('Performing web files backup of ' . $web_path . ' in format ' . $format . ', mode ' . $backup_mode, LOGLEVEL_DEBUG);
+        switch ($format) {
+            case 'tar_gzip':
+                if ($app->system->is_installed('pigz')) {
+                    //use pigz
+                    if ($backup_mode == 'user_zip') {
+                        $app->system->exec_safe($find_user_files . ' | ' . $tar_input . ' | pigz > ?', $web_path, $web_user, $web_group, $http_server_user, $web_path, $web_backup_dir . '/' . $web_backup_file);
+                    } else {
+                        //Standard casual behaviour of ISPConfig
+                        $app->system->exec_safe($tar_dir . ' | pigz > ?', $web_path, $web_backup_dir . '/' . $web_backup_file);
+                    }
+                    $exit_code = $app->system->last_exec_retcode();
+                    return $exit_code == 0;
+                } else {
+                    //use gzip
+                    if ($backup_mode == 'user_zip') {
+                        $app->system->exec_safe($find_user_files . ' | tar pczf ? --null -T -', $web_path, $web_user, $web_group, $http_server_user, $web_backup_dir . '/' . $web_backup_file);
+                    } else {
+                        //Standard casual behaviour of ISPConfig
+                        $app->system->exec_safe('tar pczf ? ' . $excludes . ' --directory ? .', $web_backup_dir . '/' . $web_backup_file, $web_path);
+                    }
+                    $exit_code = $app->system->last_exec_retcode();
+                    // tar can return 1 and still create valid backups
+                    return ($exit_code == 0 || $exit_code == 1);
+                }
+            case 'zip':
+            case 'zip_bzip2':
+                $zip_options = ($format === 'zip_bzip2') ? ' -Z bzip2 ' : '';
+                if (!empty($password)) {
+                    $zip_options .= ' --password ' . escapeshellarg($password);
+                }
+                if ($backup_mode == 'user_zip') {
+                    //Standard casual behaviour of ISPConfig
+                    $app->system->exec_safe($find_user_files . ' | zip ' . $zip_options . ' -b ? ' . $excludes . ' --symlinks ? -@', $web_path, $web_user, $web_group, $http_server_user, $backup_tmp, $web_backup_dir . '/' . $web_backup_file);
+                } else {
+                    //Use cd to have a correct directory structure inside the archive, extra options to zip hidden (dot) files
+                    $app->system->exec_safe('cd ? && zip ' . $zip_options . ' -b ? ' . $excludes . ' --symlinks -r ? * .* -x "../*"', $web_path, $backup_tmp, $web_backup_dir . '/' . $web_backup_file);
+                }
+                $exit_code = $app->system->last_exec_retcode();
+                // zip can return 12(due to harmless warnings) and still create valid backups
+                return ($exit_code == 0 || $exit_code == 12);
+            case 'tar_bzip2':
+                if ($backup_mode == 'user_zip') {
+                    $app->system->exec_safe($find_user_files . ' | tar pcjf ? --null -T -', $web_path, $web_user, $web_group, $http_server_user, $web_backup_dir . '/' . $web_backup_file);
+                } else {
+                    $app->system->exec_safe('tar pcjf ? ' . $excludes . ' --directory ? .', $web_backup_dir . '/' . $web_backup_file, $web_path);
+                }
+                $exit_code = $app->system->last_exec_retcode();
+                // tar can return 1 and still create valid backups
+                return ($exit_code == 0 || $exit_code == 1);
+            case 'tar_xz':
+                if ($backup_mode == 'user_zip') {
+                    $app->system->exec_safe($find_user_files . ' | tar pcJf ? --null -T -', $web_path, $web_user, $web_group, $http_server_user, $web_backup_dir . '/' . $web_backup_file);
+                } else {
+                    $app->system->exec_safe('tar pcJf ? ' . $excludes . ' --directory ? .', $web_backup_dir . '/' . $web_backup_file, $web_path);
+                }
+                $exit_code = $app->system->last_exec_retcode();
+                // tar can return 1 and still create valid backups
+                return ($exit_code == 0 || $exit_code == 1);
+            case 'rar':
+                $options = self::getRarOptions($backup_tmp,$password);
+                if ($backup_mode != 'user_zip') {
+                    //Recurse subfolders, otherwise we will pass a list of files to compress
+                    $options .= ' -r';
+                }
+                $excludes = self::generateExcludeList($backup_excludes, '-x');
+                $zip_command = 'rar a ' . $options . ' '.$excludes.' ?';
+                if ($backup_mode == 'user_zip') {
+                    $app->system->exec_safe($find_user_files . ' | ' . $zip_command . ' ? @', $web_path, $web_user, $web_group, $http_server_user, $web_path, $web_backup_dir . '/' . $web_backup_file);
+                } else {
+                    $app->system->exec_safe('cd ? && ' . $zip_command . ' .', $web_path, $web_backup_dir . '/' . $web_backup_file);
+                }
+                $exit_code = $app->system->last_exec_retcode();
+                return ($exit_code == 0 || $exit_code == 1);
+        }
+        if (strpos($format, "tar_7z_") === 0) {
+            $options = self::get7zCompressOptions($format, $password);
+            $zip_command = '7z a ' . $options . ' -si ?';
+            if ($backup_mode == 'user_zip') {
+                $app->system->exec_safe($find_user_files . ' | ' . $tar_input . ' | '. $zip_command, $web_path, $web_user, $web_group, $http_server_user, $web_path, $web_backup_dir . '/' . $web_backup_file);
+            } else {
+                $app->system->exec_safe($tar_dir . ' | ' . $zip_command, $web_path, $web_backup_dir . '/' . $web_backup_file);
+            }
+            $exit_code = $app->system->last_exec_retcode();
+            return $exit_code == 0;
+        }
+        return false;
+    }
+
+    /**
+     * Runs a database compression routine
+     * @param string $format
+     * @param string $db_backup_dir
+     * @param string $db_backup_file
+     * @param string $compressed_backup_file
+     * @param string $backup_tmp
+     * @param string|null $password
+     * @return bool true if success
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function runDatabaseCompression($format, $db_backup_dir, $db_backup_file, $compressed_backup_file, $backup_tmp, $password)
+    {
+        global $app;
+
+        $app->log('Performing database backup to file ' . $compressed_backup_file . ' in format ' . $format, LOGLEVEL_DEBUG);
+        switch ($format) {
+            case 'gzip':
+                if ($app->system->is_installed('pigz')) {
+                    //use pigz
+                    $zip_cmd = 'pigz';
+                } else {
+                    //use gzip
+                    $zip_cmd = 'gzip';
+                }
+                $app->system->exec_safe($zip_cmd . " -c ? > ?", $db_backup_dir . '/' . $db_backup_file, $db_backup_dir . '/' . $compressed_backup_file);
+                $exit_code = $app->system->last_exec_retcode();
+                return $exit_code == 0;
+            case 'zip':
+            case 'zip_bzip2':
+                $zip_options = ($format === 'zip_bzip2') ? ' -Z bzip2 ' : '';
+                if (!empty($password)) {
+                    $zip_options .= ' --password ' . escapeshellarg($password);
+                }
+                $app->system->exec_safe('zip ' . $zip_options . ' -j -b ? ? ?', $backup_tmp, $db_backup_dir . '/' . $compressed_backup_file, $db_backup_dir . '/' . $db_backup_file);
+                $exit_code = $app->system->last_exec_retcode();
+                // zip can return 12(due to harmless warnings) and still create valid backups
+                return ($exit_code == 0 || $exit_code == 12);
+            case 'bzip2':
+                $app->system->exec_safe("bzip2 -q -c ? > ?", $db_backup_dir . '/' . $db_backup_file, $db_backup_dir . '/' . $compressed_backup_file);
+                $exit_code = $app->system->last_exec_retcode();
+                return $exit_code == 0;
+            case 'xz':
+                $app->system->exec_safe("xz -q -q -c ? > ?", $db_backup_dir . '/' . $db_backup_file, $db_backup_dir . '/' . $compressed_backup_file);
+                $exit_code = $app->system->last_exec_retcode();
+                return $exit_code == 0;
+            case 'rar':
+                $options = self::getRarOptions($backup_tmp, $password);
+                $zip_command = 'rar a ' . $options . ' ? ?';
+                $app->system->exec_safe($zip_command, $db_backup_dir . '/' . $compressed_backup_file, $db_backup_dir . '/' . $db_backup_file);
+                $exit_code = $app->system->last_exec_retcode();
+                return ($exit_code == 0 || $exit_code == 1);
+        }
+        if (strpos($format, "7z_") === 0) {
+            $options = self::get7zCompressOptions($format, $password);
+            $zip_command = '7z a ' . $options . ' ? ?';
+            $app->system->exec_safe($zip_command, $db_backup_dir . '/' . $compressed_backup_file, $db_backup_dir . '/' . $db_backup_file);
+            $exit_code = $app->system->last_exec_retcode();
+            return $exit_code == 0;
+        }
+        return false;
+    }
+
+    /**
+     * Mounts the backup directory if required
+     * @param int $server_id
+     * @return bool true if success
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @see backup_plugin::unmount_backup_dir()
+     */
+    public static function mount_backup_dir($server_id)
+    {
+        global $app;
+
+        $server_config = $app->getconf->get_server_config($server_id, 'server');
+        if ($server_config['backup_dir_is_mount'] == 'y')
+            return $app->system->mount_backup_dir($server_config['backup_dir']);
+        return true;
+    }
+
+    /**
+     * Unmounts the backup directory if required
+     * @param int $server_id
+     * @return bool true if success
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @see backup_plugin::mount_backup_dir()
+     */
+    public static function unmount_backup_dir($server_id)
+    {
+        global $app;
+
+        $server_config = $app->getconf->get_server_config($server_id, 'server');
+        if ($server_config['backup_dir_is_mount'] == 'y')
+            return $app->system->umount_backup_dir($server_config['backup_dir']);
+        return true;
+    }
+
+    /**
+     * Makes backup of database.
+     * The backup directory must be mounted before calling this method.
+     * This method is for private use only, don't call this method unless you know what you're doing.
+     * @param array $web_domain
+     * @param string $backup_job type of backup job: manual or auto
+     * @return bool true if success
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @see backup_plugin::run_backup() recommeneded to use if you need to make backups
+     */
+    protected static function make_database_backup($web_domain, $backup_job)
+    {
+        global $app;
+
+        $server_id = intval($web_domain['server_id']);
+        $domain_id = intval($web_domain['domain_id']);
+        $server_config = $app->getconf->get_server_config($server_id, 'server');
+        $backup_dir = trim($server_config['backup_dir']);
+        $backup_tmp = trim($server_config['backup_tmp']);
+        $db_backup_dir = $backup_dir . '/web' . $domain_id;
+        $success = false;
+
+        if (empty($backup_job))
+            $backup_job = "auto";
+
+        $records = $app->db->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ?", $server_id, $domain_id);
+        if (empty($records)){
+            $app->log('Skipping database backup for domain ' . $web_domain['domain_id'] . ', because no related databases found.', LOGLEVEL_ERROR);
+            return true;
+        }
+
+        self::prepare_backup_dir($server_id, $web_domain);
+
+        include '/usr/local/ispconfig/server/lib/mysql_clientdb.conf';
+
+        //* Check mysqldump capabilities
+        exec('mysqldump --help', $tmp);
+        $mysqldump_routines = (strpos(implode($tmp), '--routines') !== false) ? '--routines' : '';
+        unset($tmp);
+
+        foreach ($records as $rec) {
+            $password = ($web_domain['backup_encrypt'] == 'y') ? trim($web_domain['backup_password']) : '';
+            $backup_format_db = $web_domain['backup_format_db'];
+            if (empty($backup_format_db)) {
+                $backup_format_db = 'gzip';
+            }
+            $backup_extension_db = self::getBackupDbExtension($backup_format_db);
+
+            if (!empty($backup_extension_db)) {
+                //* Do the mysql database backup with mysqldump
+                $db_name = $rec['database_name'];
+                $db_file_prefix = 'db_' . $db_name . '_' . date('Y-m-d_H-i');
+                $db_backup_file = $db_file_prefix . '.sql';
+                $db_compressed_file = ($backup_job == 'manual' ? 'manual-' : '') . $db_file_prefix . $backup_extension_db;
+                $command = "mysqldump -h ? -u ? -p? -c --add-drop-table --create-options --quick --max_allowed_packet=512M " . $mysqldump_routines . " --result-file=? ?";
+                /** @var string $clientdb_host */
+                /** @var string $clientdb_user */
+                /** @var string $clientdb_password */
+                $app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $db_backup_dir . '/' . $db_backup_file, $db_name);
+                $exit_code = $app->system->last_exec_retcode();
+
+                //* Compress the backup
+                if ($exit_code == 0) {
+                    $exit_code = self::runDatabaseCompression($backup_format_db, $db_backup_dir, $db_backup_file, $db_compressed_file, $backup_tmp, $password) ? 0 : 1;
+                    if ($exit_code !== 0)
+                        $app->log('Failed to make backup of database ' . $rec['database_name'], LOGLEVEL_ERROR);
+                } else {
+                    $app->log('Failed to make backup of database ' . $rec['database_name'] . ', because mysqldump failed', LOGLEVEL_ERROR);
+                }
+
+                if ($exit_code == 0) {
+                    if (is_file($db_backup_dir . '/' . $db_compressed_file)) {
+                        chmod($db_backup_dir . '/' . $db_compressed_file, 0750);
+                        chown($db_backup_dir . '/' . $db_compressed_file, fileowner($db_backup_dir));
+                        chgrp($db_backup_dir . '/' . $db_compressed_file, filegroup($db_backup_dir));
+
+                        //* Insert web backup record in database
+                        $file_size = filesize($db_backup_dir . '/' . $db_compressed_file);
+                        $sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, backup_format, tstamp, filename, filesize, backup_password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
+                        //Making compatible with previous versions of ISPConfig:
+                        $sql_mode = ($backup_format_db == 'gzip') ? 'sqlgz' : ('sql' . $backup_format_db);
+                        $app->db->query($sql, $server_id, $domain_id, 'mysql', $sql_mode, $backup_format_db, time(), $db_compressed_file, $file_size, $password);
+                        if ($app->db->dbHost != $app->dbmaster->dbHost)
+                            $app->dbmaster->query($sql, $server_id, $domain_id, 'mysql', $sql_mode, $backup_format_db, time(), $db_compressed_file, $file_size, $password);
+                        $success = true;
+                    }
+                } else {
+                    if (is_file($db_backup_dir . '/' . $db_compressed_file)) unlink($db_backup_dir . '/' . $db_compressed_file);
+                }
+                //* Remove the uncompressed file
+                if (is_file($db_backup_dir . '/' . $db_backup_file)) unlink($db_backup_dir . '/' . $db_backup_file);
+
+                //* Remove old backups
+                self::backups_garbage_collection($server_id, 'mysql', $domain_id);
+                self::clearBackups($server_id, $domain_id, intval($rec['backup_copies']), $db_backup_dir);
+            } else {
+                $app->log('Failed to process mysql backup format ' . $backup_format_db . ' for database ' . $rec['database_name'], LOGLEVEL_ERROR);
+            }
+        }
+
+        unset($clientdb_host);
+        unset($clientdb_user);
+        unset($clientdb_password);
+
+        return $success;
+    }
+
+    /**
+     * Makes backup of web files.
+     * The backup directory must be mounted before calling this method.
+     * This method is for private use only, don't call this method unless you know what you're doing
+     * @param array $web_domain info about domain to backup, SQL record of table 'web_domain'
+     * @param string $backup_job type of backup job: manual or auto
+     * @return bool true if success
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @see backup_plugin::mount_backup_dir()
+     * @see backup_plugin::run_backup() recommeneded to use if you need to make backups
+     */
+    protected static function make_web_backup($web_domain, $backup_job)
+    {
+        global $app;
+
+        $server_id = intval($web_domain['server_id']);
+        $domain_id = intval($web_domain['domain_id']);
+        $server_config = $app->getconf->get_server_config($server_id, 'server');
+        $global_config = $app->getconf->get_global_config('sites');
+        $backup_dir = trim($server_config['backup_dir']);
+        $backup_mode = $server_config['backup_mode'];
+        $backup_tmp = trim($server_config['backup_tmp']);
+        if (empty($backup_mode))
+            $backup_mode = 'userzip';
+
+        $web_config = $app->getconf->get_server_config($server_id, 'web');
+        $http_server_user = $web_config['user'];
+
+        if (empty($backup_dir)) {
+            $app->log('Failed to make backup of web files for domain id ' . $domain_id . ' on server id ' . $server_id . ', because backup directory is not defined', LOGLEVEL_ERROR);
+            return false;
+        }
+        if (empty($backup_job))
+            $backup_job = "auto";
+
+        $backup_format_web = $web_domain['backup_format_web'];
+        //Check if we're working with data saved in old version of ISPConfig
+        if (empty($backup_format_web)) {
+            $backup_format_web = 'default';
+        }
+        if ($backup_format_web == 'default') {
+            if ($backup_mode == 'userzip')
+                $backup_format_web = 'zip';
+            else
+                $backup_format_web = 'gzip';
+        }
+        $password = ($web_domain['backup_encrypt'] == 'y') ? trim($web_domain['backup_password']) : '';
+        $backup_extension_web = self::getBackupWebExtension($backup_format_web);
+        if (empty($backup_extension_web)) {
+            $app->log('Failed to make backup of web files, because of unknown backup format ' . $backup_format_web . ' for website ' . $web_domain['domain'], LOGLEVEL_ERROR);
+            return false;
+        }
+
+        $web_path = $web_domain['document_root'];
+        $web_user = $web_domain['system_user'];
+        $web_group = $web_domain['system_group'];
+        $web_id = $web_domain['domain_id'];
+
+        self::prepare_backup_dir($server_id, $web_domain);
+        $web_backup_dir = $backup_dir . '/web' . $web_id;
+
+        $backup_excludes = array(escapeshellarg('./backup\*'));
+        $b_excludes = explode(',', trim($web_domain['backup_excludes']));
+        if (is_array($b_excludes) && !empty($b_excludes)) {
+            foreach ($b_excludes as $b_exclude) {
+                $b_exclude = trim($b_exclude);
+                if ($b_exclude != '') {
+                    array_push($backup_excludes, escapeshellarg($b_exclude));
+                }
+            }
+        }
+
+        $web_backup_file = ($backup_job == 'manual' ? 'manual-' : '') . 'web' . $web_id . '_' . date('Y-m-d_H-i') . $backup_extension_web;
+        $full_filename = $web_backup_dir . '/' . $web_backup_file;
+        if (self::runWebCompression($backup_format_web, $backup_excludes, $backup_mode, $web_path, $web_backup_dir, $web_backup_file, $web_user, $web_group, $http_server_user, $backup_tmp, $password)) {
+            if (is_file($full_filename)) {
+                $backup_username = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_user : 'root';
+                $backup_group = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_group : 'root';
+                chown($full_filename, $backup_username);
+                chgrp($full_filename, $backup_group);
+                chmod($full_filename, 0750);
+
+                //Insert web backup record in database
+                $file_size = filesize($full_filename);
+                $sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, backup_format, tstamp, filename, filesize, backup_password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
+                $app->db->query($sql, $server_id, $web_id, 'web', $backup_mode, $backup_format_web, time(), $web_backup_file, $file_size, $password);
+                if ($app->db->dbHost != $app->dbmaster->dbHost)
+                    $app->dbmaster->query($sql, $server_id, $web_id, 'web', $backup_mode, $backup_format_web, time(), $web_backup_file, $file_size, $password);
+                unset($file_size);
+                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' completed successfully to file ' . $full_filename, LOGLEVEL_DEBUG);
+            } else {
+                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' reported success, but the resulting file ' . $full_filename . ' not found.', LOGLEVEL_ERROR);
+            }
+
+        } else {
+            if (is_file($full_filename))
+                unlink($full_filename);
+            $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' failed using path ' . $web_path . ' failed.', LOGLEVEL_ERROR);
+        }
+
+        self::clearBackups($server_id, $web_id, intval($web_domain['backup_copies']), $web_backup_dir);
+        return true;
+    }
+
+    /**
+     * Creates and prepares a backup dir
+     * @param int $server_id
+     * @param array $domain_data
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function prepare_backup_dir($server_id, $domain_data)
+    {
+        global $app;
+
+        $server_config = $app->getconf->get_server_config($server_id, 'server');
+        $global_config = $app->getconf->get_global_config('sites');
+
+        if (isset($server_config['backup_dir_ftpread']) && $server_config['backup_dir_ftpread'] == 'y') {
+            $backup_dir_permissions = 0755;
+        } else {
+            $backup_dir_permissions = 0750;
+        }
+
+        $backup_dir = $server_config['backup_dir'];
+
+        if (!is_dir($backup_dir)) {
+            mkdir($backup_dir, $backup_dir_permissions, true);
+        } else {
+            chmod($backup_dir, $backup_dir_permissions);
+        }
+
+        $web_backup_dir = $backup_dir . '/web' . $domain_data['domain_id'];
+        if (!is_dir($web_backup_dir))
+            mkdir($web_backup_dir, 0750);
+        chmod($web_backup_dir, 0750);
+
+        $backup_username = 'root';
+        $backup_group = 'root';
+
+        if ($global_config['backups_include_into_web_quota'] == 'y') {
+            $backup_username = $domain_data['system_user'];
+            $backup_group = $domain_data['system_group'];
+        }
+        chown($web_backup_dir, $backup_username);
+        chgrp($web_backup_dir, $backup_group);
+    }
+
+    /**
+     * Makes a backup of website files or database.
+     * @param string|int $domain_id
+     * @param string $type backup type: web or mysql
+     * @param string $backup_job how the backup is initiated: manual or auto
+     * @param bool $mount if true, then the backup dir will be mounted and unmounted automatically
+     * @return bool returns true if success
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    public static function run_backup($domain_id, $type, $backup_job, $mount = true)
+    {
+        global $app;
+
+        $domain_id = intval($domain_id);
+
+        $sql = "SELECT * FROM web_domain WHERE (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND domain_id = ?";
+        $rec = $app->db->queryOneRecord($sql, $domain_id);
+        if (empty($rec)) {
+            $app->log('Failed to make backup of type ' . $type . ', because no information present about requested domain id ' . $domain_id, LOGLEVEL_ERROR);
+            return false;
+        }
+        $server_id = intval($rec['server_id']);
+
+        if ($mount && !self::mount_backup_dir($server_id)) {
+            $app->log('Failed to make backup of type ' . $type . ' for domain id ' . $domain_id . ', because failed to mount backup directory', LOGLEVEL_ERROR);
+            return false;
+        }
+        $ok = false;
+
+        switch ($type) {
+            case 'web':
+                $ok = self::make_web_backup($rec, $backup_job);
+                break;
+            case 'mysql':
+                $ok = self::make_database_backup($rec, $backup_job);
+                break;
+            default:
+                $app->log('Failed to make backup, because backup type is unknown: ' . $type, LOGLEVEL_ERROR);
+                break;
+        }
+        if ($mount)
+            self::unmount_backup_dir($server_id);
+        return $ok;
+    }
+
+    /**
+     * Runs backups of all websites that have backups enabled with respect to their backup interval settings
+     * @param int $server_id
+     * @param string $backup_job backup tupe: auto or manual
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    public static function run_all_backups($server_id, $backup_job = "auto")
+    {
+        global $app;
+
+        $server_id = intval($server_id);
+
+        $sql = "SELECT * FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y' AND backup_interval != 'none' AND backup_interval != ''";
+        $domains = $app->db->queryAllRecords($sql, $server_id);
+
+        if (!self::mount_backup_dir($server_id)) {
+            $app->log('Failed to run regular backups routine because failed to mount backup directory', LOGLEVEL_ERROR);
+            return;
+        }
+        self::backups_garbage_collection($server_id);
+
+        $date_of_week = date('w');
+        $date_of_month = date('d');
+        foreach ($domains as $domain) {
+            if (($domain['backup_interval'] == 'daily' or ($domain['backup_interval'] == 'weekly' && $date_of_week == 0) or ($domain['backup_interval'] == 'monthly' && $date_of_month == '01'))) {
+                self::run_backup($domain['domain_id'], 'web', $backup_job, false);
+                self::run_backup($domain['domain_id'], 'mysql', $backup_job, false);
+            }
+        }
+        self::unmount_backup_dir($server_id);
+    }
+}
+
+?>
+
diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index 9329be7c2e..cf4272991e 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -33,11 +33,6 @@ class cronjob_backup extends cronjob {
 	// job schedule
 	protected $_schedule = '0 0 * * *';
 
-	/**
-	 * The maximum number of backups that ISPConfig can store.
-	 */
-	const max_backups = 30;
-
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
 		global $app;
@@ -55,363 +50,8 @@ class cronjob_backup extends cronjob {
 	public function onRunJob() {
 		global $app, $conf;
 
-		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-		$global_config = $app->getconf->get_global_config('sites');
-		$backup_dir = trim($server_config['backup_dir']);
-		$backup_mode = $server_config['backup_mode'];
-		$backup_tmp = trim($server_config['backup_tmp']);
-		if($backup_mode == '') $backup_mode = 'userzip';
-
-		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
-		$http_server_user = $web_config['user'];
-
-		if($backup_dir != '') {
-
-			if(isset($server_config['backup_dir_ftpread']) && $server_config['backup_dir_ftpread'] == 'y') {
-				$backup_dir_permissions = 0755;
-			} else {
-				$backup_dir_permissions = 0750;
-			}
-
-			if(!is_dir($backup_dir)) {
-				mkdir($backup_dir, $backup_dir_permissions, true);
-			} else {
-				chmod($backup_dir, $backup_dir_permissions);
-			}
-            $run_backups = true;
-            //* mount backup directory, if necessary
-            if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $run_backups = false;
-			if($run_backups){
-				$web_array = array();
-
-				system('which pigz > /dev/null', $ret);
-				if($ret === 0) {
-					$use_pigz = true;
-					$zip_cmd = 'pigz'; // db-backups
-				} else {
-					$use_pigz = false;
-					$zip_cmd = 'gzip'; // db-backups
-				}
-				
-				//* backup only active domains
-				$sql = "SELECT * FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y'";
-				$records = $app->db->queryAllRecords($sql, $conf['server_id']);
-				if(is_array($records)) {
-					foreach($records as $rec) {
-
-						//* Do the website backup
-						if($rec['backup_interval'] == 'daily' or ($rec['backup_interval'] == 'weekly' && date('w') == 0) or ($rec['backup_interval'] == 'monthly' && date('d') == '01')) {
-
-							$web_path = $rec['document_root'];
-							$web_user = $rec['system_user'];
-							$web_group = $rec['system_group'];
-							$web_id = $rec['domain_id'];
-							if(!in_array($web_id, $web_array)) $web_array[] = $web_id;
-							$web_backup_dir = $backup_dir.'/web'.$web_id;
-							if(!is_dir($web_backup_dir)) mkdir($web_backup_dir, 0750);
-							chmod($web_backup_dir, 0750);
-							//if(isset($server_config['backup_dir_ftpread']) && $server_config['backup_dir_ftpread'] == 'y') {
-							chown($web_backup_dir, $rec['system_user']);
-							chgrp($web_backup_dir, $rec['system_group']);
-							/*} else {
-								chown($web_backup_dir, 'root');
-								chgrp($web_backup_dir, 'root');
-							}*/
-						
-							$backup_excludes = '';
-							$b_excludes = explode(',', trim($rec['backup_excludes']));
-							if(is_array($b_excludes) && !empty($b_excludes)){
-								foreach($b_excludes as $b_exclude){
-									$b_exclude = trim($b_exclude);
-									if($b_exclude != ''){
-										$backup_excludes .= ' --exclude='.escapeshellarg($b_exclude);
-									}
-								}
-							}
-						
-							if($backup_mode == 'userzip') {
-								//* Create a .zip backup as web user and include also files owned by apache / nginx user
-								$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.zip';
-								$app->system->exec_safe('cd ? && sudo -u ? find . -group ? -or -user ? -print 2> /dev/null | zip -b ? --exclude=./backup\*'.$backup_excludes.' --symlinks ? -@', $web_path, $web_user, $web_group, $http_server_user, $backup_tmp, $web_backup_dir.'/'.$web_backup_file);
-								$retval = $app->system->last_exec_retcode();
-							} else {
-								//* Create a tar.gz backup as root user
-								$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.tar.gz';
-								if ($use_pigz) {
-									$app->system->exec_safe('tar pcf - --exclude=./backup\*'.$backup_excludes.' --directory ? . | pigz > ?', $web_path, $web_backup_dir.'/'.$web_backup_file);
-									$retval = $app->system->last_exec_retcode();
-								} else {
-									$app->system->exec_safe('tar pczf ? --exclude=./backup\*'.$backup_excludes.' --directory ? .', $web_backup_dir.'/'.$web_backup_file, $web_path);
-									$retval = $app->system->last_exec_retcode();
-								}
-							}
-							if($retval == 0 || ($backup_mode != 'userzip' && $retval == 1) || ($backup_mode == 'userzip' && $retval == 12)) { // tar can return 1, zip can return 12(due to harmless warings) and still create valid backups  
-								if(is_file($web_backup_dir.'/'.$web_backup_file)){
-									$backupusername = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_user : 'root';
-									$backupgroup = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_group : 'root';
-									chown($web_backup_dir.'/'.$web_backup_file, $backupusername);
-									chgrp($web_backup_dir.'/'.$web_backup_file, $backupgroup);
-									chmod($web_backup_dir.'/'.$web_backup_file, 0750);
-
-									//* Insert web backup record in database
-									$filesize = filesize($web_backup_dir.'/'.$web_backup_file);
-									$sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, tstamp, filename, filesize) VALUES (?, ?, ?, ?, ?, ?, ?)";
-									$app->db->query($sql, $conf['server_id'], $web_id, 'web', $backup_mode, time(), $web_backup_file, $filesize);
-									if($app->db->dbHost != $app->dbmaster->dbHost) 
-										$app->dbmaster->query($sql, $conf['server_id'], $web_id, 'web', $backup_mode, time(), $web_backup_file, $filesize);
-									unset($filesize);
-								}
-							} else {
-								if(is_file($web_backup_dir.'/'.$web_backup_file)) unlink($web_backup_dir.'/'.$web_backup_file);
-								$app->log('Backup of '.$web_path.' failed.', LOGLEVEL_WARN);
-							}
-
-							//* Remove old backups
-							$backup_copies = intval($rec['backup_copies']);
-
-							$dir_handle = dir($web_backup_dir);
-							$files = array();
-							while (false !== ($entry = $dir_handle->read())) {
-								if($entry != '.' && $entry != '..' && substr($entry, 0, 3) == 'web' && is_file($web_backup_dir.'/'.$entry)) {
-									$files[] = $entry;
-								}
-							}
-							$dir_handle->close();
-
-							rsort($files);
-
-							for ($n = $backup_copies; $n <= self::max_backups; $n++) {
-								if(isset($files[$n]) && is_file($web_backup_dir.'/'.$files[$n])) {
-									$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-									$app->db->query($sql, $conf['server_id'], $web_id, $files[$n]);
-									if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'],  $web_id, $files[$n]);
-									@unlink($web_backup_dir.'/'.$files[$n]);
-								}
-							}
-
-							unset($files);
-							unset($dir_handle);
-
-							//* Remove backupdir symlink and create as directory instead
-							$app->system->web_folder_protection($web_path, false);
-
-							if(is_link($web_path.'/backup')) {
-								unlink($web_path.'/backup');
-							}
-							if(!is_dir($web_path.'/backup')) {
-								mkdir($web_path.'/backup');
-								chown($web_path.'/backup', $rec['system_user']);
-								chgrp($web_path.'/backup', $rec['system_group']);
-							}
-
-							$app->system->web_folder_protection($web_path, true);
-						}
-
-						/* If backup_interval is set to none and we have a
-						backup directory for the website, then remove the backups */
-						if($rec['backup_interval'] == 'none' || $rec['backup_interval'] == '') {
-							$web_id = $rec['domain_id'];
-							$web_user = $rec['system_user'];
-							$web_backup_dir = realpath($backup_dir.'/web'.$web_id);
-							if(is_dir($web_backup_dir)) {
-								$dir_handle = opendir($web_backup_dir.'/');
-								while ($file = readdir($dir_handle)) {
-									if(!is_dir($file)) {
-										unlink ("$web_backup_dir/"."$file");
-									}
-								}
-							}
-							$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ?";
-							$app->db->query($sql, $conf['server_id'], $web_id);
-							if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $web_id);
-						}
-					}
-				}
-
-				$records = $app->db->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND backup_interval != 'none' AND backup_interval != ''", $conf['server_id']);
-				if(is_array($records)) {
-
-					include '/usr/local/ispconfig/server/lib/mysql_clientdb.conf';
-					
-					//* Check mysqldump capabilities
-					exec('mysqldump --help',$tmp);
-					$mysqldump_routines = (strpos(implode($tmp),'--routines') !== false)?'--routines':'';
-					unset($tmp);
-
-					foreach($records as $rec) {
-
-						//* Do the database backup
-						if($rec['backup_interval'] == 'daily' or ($rec['backup_interval'] == 'weekly' && date('w') == 0) or ($rec['backup_interval'] == 'monthly' && date('d') == '01')) {
-
-							$web_id = $rec['parent_domain_id'];
-							if(!in_array($web_id, $web_array)) $web_array[] = $web_id;
-							$db_backup_dir = $backup_dir.'/web'.$web_id;
-							if(!is_dir($db_backup_dir)) mkdir($db_backup_dir, 0750);
-							chmod($db_backup_dir, 0750);
-							$backupusername = 'root';
-							$backupgroup = 'root';
-							if ($global_config['backups_include_into_web_quota'] == 'y') {
-								$sql = "SELECT * FROM web_domain WHERE domain_id = ".$rec['parent_domain_id'];
-								$webdomain = $app->db->queryOneRecord($sql);
-								$backupusername = $webdomain['system_user'];
-								$backupgroup = $webdomain['system_group'];
-							}
-							chown($db_backup_dir, $backupusername);
-							chgrp($db_backup_dir, $backupgroup);
-
-							//* Do the mysql database backup with mysqldump
-							$db_id = $rec['database_id'];
-							$db_name = $rec['database_name'];
-							$db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql';
-							$command = "mysqldump -h ? -u ? -p? -c --add-drop-table --create-options --quick --max_allowed_packet=512M ".$mysqldump_routines." --result-file=? ?";
-							$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $db_backup_dir.'/'.$db_backup_file, $db_name);
-							$retval = $app->system->last_exec_retcode();
-							
-							//* Compress the backup with gzip / pigz
-							if($retval == 0) {
-								$app->system->exec_safe("$zip_cmd -c ? > ?", $db_backup_dir.'/'.$db_backup_file, $db_backup_dir.'/'.$db_backup_file . '.gz');
-								$retval = $app->system->last_exec_retcode();
-							}
-							
-							if($retval == 0){
-								if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')){
-									chmod($db_backup_dir.'/'.$db_backup_file.'.gz', 0750);
-									chown($db_backup_dir.'/'.$db_backup_file.'.gz', fileowner($db_backup_dir));
-									chgrp($db_backup_dir.'/'.$db_backup_file.'.gz', filegroup($db_backup_dir));
-
-									//* Insert web backup record in database
-									$filesize = filesize($db_backup_dir.'/'.$db_backup_file.'.gz');
-									$sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, tstamp, filename, filesize) VALUES (?, ?, ?, ?, ?, ?, ?)";
-									$app->db->query($sql, $conf['server_id'], $web_id, 'mysql', 'sqlgz', time(), $db_backup_file.'.gz', $filesize);
-									if($app->db->dbHost != $app->dbmaster->dbHost) 
-										$app->dbmaster->query($sql, $conf['server_id'], $web_id, 'mysql', 'sqlgz', time(), $db_backup_file.'.gz', $filesize);
-									unset($filesize);
-								}
-							} else {
-								if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')) unlink($db_backup_dir.'/'.$db_backup_file.'.gz');
-							}
-							//* Remove the uncompressed file
-							if(is_file($db_backup_dir.'/'.$db_backup_file)) unlink($db_backup_dir.'/'.$db_backup_file);
-
-							//* Remove old backups
-							$backup_copies = intval($rec['backup_copies']);
-
-							$dir_handle = dir($db_backup_dir);
-							$files = array();
-							while (false !== ($entry = $dir_handle->read())) {
-								if($entry != '.' && $entry != '..' && preg_match('/^db_('.$db_name.')_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) && is_file($db_backup_dir.'/'.$entry)) {
-									if(array_key_exists($matches[1], $files) == false) $files[$matches[1]] = array();
-									$files[$matches[1]][] = $entry;
-								}
-							}
-							$dir_handle->close();
-
-							reset($files);
-							foreach($files as $db_name => $filelist) {
-								rsort($filelist);
-								for ($n = $backup_copies; $n <= self::max_backups; $n++) {
-									if(isset($filelist[$n]) && is_file($db_backup_dir.'/'.$filelist[$n])) {
-										$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-										$app->db->query($sql, $conf['server_id'], $web_id, $filelist[$n]);
-										if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $web_id, $filelist[$n]);
-										@unlink($db_backup_dir.'/'.$filelist[$n]);
-									}
-								}
-							}
-
-							unset($files);
-							unset($dir_handle);
-						}
-					}
-
-					unset($clientdb_host);
-					unset($clientdb_user);
-					unset($clientdb_password);
-
-				}
-
-				// remove non-existing backups from database
-				$backups = $app->db->queryAllRecords("SELECT * FROM web_backup WHERE server_id = ?", $conf['server_id']);
-				if(is_array($backups) && !empty($backups)){
-					foreach($backups as $backup){
-						$backup_file = $backup_dir.'/web'.$backup['parent_domain_id'].'/'.$backup['filename'];
-						if(!is_file($backup_file)){
-							$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-							$app->db->query($sql, $conf['server_id'], $backup['parent_domain_id'], $backup['filename']);
-						}
-					}
-				}
-				if($app->db->dbHost != $app->dbmaster->dbHost){
-					$backups = $app->dbmaster->queryAllRecords("SELECT * FROM web_backup WHERE server_id = ?", $conf['server_id']);
-					if(is_array($backups) && !empty($backups)){
-						foreach($backups as $backup){
-							$backup_file = $backup_dir.'/web'.$backup['parent_domain_id'].'/'.$backup['filename'];
-							if(!is_file($backup_file)){
-								$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-								$app->dbmaster->query($sql, $conf['server_id'], $backup['parent_domain_id'], $backup['filename']);
-							}
-						}
-					}
-				}
-				
-				// garbage collection (non-existing databases)
-				if(is_array($web_array) && !empty($web_array)){
-					foreach($web_array as $tmp_web_id){
-						$tmp_backup_dir = $backup_dir.'/web'.$tmp_web_id;
-						if(is_dir($tmp_backup_dir)){
-							$dir_handle = dir($tmp_backup_dir);
-							$files = array();
-							while (false !== ($entry = $dir_handle->read())) {
-								if($entry != '.' && $entry != '..' && preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) && is_file($tmp_backup_dir.'/'.$entry)) {
-
-									$tmp_db_name = $matches[1];
-									$tmp_database = $app->db->queryOneRecord("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ? AND database_name = ?", $conf['server_id'], $tmp_web_id, $tmp_db_name);
-
-									if(is_array($tmp_database) && !empty($tmp_database)){
-										if($tmp_database['backup_interval'] == 'none' || intval($tmp_database['backup_copies']) == 0){
-											@unlink($tmp_backup_dir.'/'.$entry);
-											$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-											$app->db->query($sql, $conf['server_id'], $tmp_web_id, $entry);
-											if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $tmp_web_id, $entry);
-										}
-									} else {
-										@unlink($tmp_backup_dir.'/'.$entry);
-										$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-										$app->db->query($sql, $conf['server_id'], $tmp_web_id, $entry);
-										if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $tmp_web_id, $entry);
-									}
-								}
-							}
-							$dir_handle->close();
-						}
-					}
-				}
-				//* end run_backups
-				if( $server_config['backup_dir_is_mount'] == 'y' ) $app->system->umount_backup_dir($backup_dir);
-			} 
-		}
-		
-		// delete files from backup download dir (/var/www/example.com/backup)
-		unset($records, $entry, $files);
-		$sql = "SELECT * FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y'";
-		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
-		if(is_array($records)) {
-			foreach($records as $rec) {
-				$backup_download_dir = $rec['document_root'].'/backup';
-				if(is_dir($backup_download_dir)){
-					$dir_handle = dir($backup_download_dir);
-					$files = array();
-					while (false !== ($entry = $dir_handle->read())) {
-						if($entry != '.' && $entry != '..' && is_file($backup_download_dir.'/'.$entry)) {
-							// delete files older than 3 days
-							if(time() - filemtime($backup_download_dir.'/'.$entry) >= 60*60*24*3) @unlink($backup_download_dir.'/'.$entry);
-						}
-					}
-					$dir_handle->close();
-				}
-			}
-		}
-
+		$app->load("backup");
+		backup::run_all_backups($conf['server_id'], "auto");
 		parent::onRunJob();
 	}
 
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index 3308289d41..607491216d 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -54,6 +54,8 @@ class backup_plugin {
 		$app->plugins->registerAction('backup_download', $this->plugin_name, 'backup_action');
 		$app->plugins->registerAction('backup_restore', $this->plugin_name, 'backup_action');
 		$app->plugins->registerAction('backup_delete', $this->plugin_name, 'backup_action');
+		$app->plugins->registerAction('backup_web_files', $this->plugin_name, 'make_backup_callback');
+		$app->plugins->registerAction('backup_database', $this->plugin_name, 'make_backup_callback');
 		//$app->plugins->registerAction('backup_download_mail', $this->plugin_name, 'backup_action_mail');
 		$app->plugins->registerAction('backup_restore_mail', $this->plugin_name, 'backup_action_mail');
 		$app->plugins->registerAction('backup_delete_mail', $this->plugin_name, 'backup_action_mail');
@@ -69,6 +71,7 @@ class backup_plugin {
 		if(is_array($backup)) {
 
 			$app->uses('ini_parser,file,getconf,system');
+			$app->load("backup");
 
 			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $backup['parent_domain_id']);
 			$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
@@ -78,7 +81,8 @@ class backup_plugin {
 			
 			$backup_dir_is_ready = true;
             //* mount backup directory, if necessary
-            if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($server_config['backup_dir']) ) $backup_dir_is_ready = false;
+			if (!backup::mount_backup_dir($conf['server_id']))
+				$backup_dir_is_ready = false;
 
 			if($backup_dir_is_ready){
 				//* Make backup available for download
@@ -121,47 +125,12 @@ class backup_plugin {
 
 				//* Restore a mysql backup
 				if($action_name == 'backup_restore' && $backup['backup_type'] == 'mysql') {
-					//* Load sql dump into db
-					include 'lib/mysql_clientdb.conf';
-
-					if(file_exists($backup_dir.'/'.$backup['filename'])) {
-						//$parts = explode('_',$backup['filename']);
-						//$db_name = $parts[1];
-						preg_match('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql\.gz$@', $backup['filename'], $matches);
-						$db_name = $matches[1];
-						$command = "gunzip --stdout ? | mysql -h ? -u ? -p? ?";
-						$app->system->exec_safe($command, $backup_dir.'/'.$backup['filename'], $clientdb_host, $clientdb_user, $clientdb_password, $db_name);
-					}
-					unset($clientdb_host);
-					unset($clientdb_user);
-					unset($clientdb_password);
-					$app->log('Restored MySQL backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
+					backup::restoreBackupDatabase($backup['backup_format'], trim($backup['backup_password']), $backup_dir, $backup['filename'], $backup['backup_mode'], $backup['backup_type']);
 				}
 
 				//* Restore a web backup
 				if($action_name == 'backup_restore' && $backup['backup_type'] == 'web') {
-					$app->system->web_folder_protection($web['document_root'], false);
-					if($backup['backup_mode'] == 'userzip') {
-						if(file_exists($backup_dir.'/'.$backup['filename']) && $web['document_root'] != '' && $web['document_root'] != '/' && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-							if(file_exists($web['document_root'].'/backup/'.$backup['filename'])) rename($web['document_root'].'/backup/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename'].'.bak');
-							copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']);
-							chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']);
-							//chown($web['document_root'].'/backup/'.$backup['filename'],$web['system_user']);
-							$command = 'sudo -u ? unzip -qq -o ? -d ? 2> /dev/null';
-							$app->system->exec_safe($command, $web['system_user'], $web['document_root'].'/backup/'.$backup['filename'], $web['document_root']);
-							unlink($web['document_root'].'/backup/'.$backup['filename']);
-							if(file_exists($web['document_root'].'/backup/'.$backup['filename'].'.bak')) rename($web['document_root'].'/backup/'.$backup['filename'].'.bak', $web['document_root'].'/backup/'.$backup['filename']);
-							$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
-						}
-					}
-					if($backup['backup_mode'] == 'rootgz') {
-						if(file_exists($backup_dir.'/'.$backup['filename']) && $web['document_root'] != '' && $web['document_root'] != '/' && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-							$command = 'tar xzf ? --directory ?';
-							$app->system->exec_safe($command, $backup_dir.'/'.$backup['filename'], $web['document_root']);
-							$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
-						}
-					}
-					$app->system->web_folder_protection($web['document_root'], true);
+					backup::restoreBackupWebFiles($backup['backup_format'], trim($backup['backup_password']), $backup_dir, $backup['filename'], $backup['backup_mode'], $backup['backup_type'], $web['document_root'], $web['system_user'], $web['system_group']);
 				}
 				
 				if($action_name == 'backup_delete') {
@@ -175,7 +144,7 @@ class backup_plugin {
 					}
 				}
 
-				if( $server_config['backup_dir_is_mount'] == 'y' ) $app->system->umount_backup_dir($backup_dir);
+				backup::unmount_backup_dir($conf['server_id']);
 			} else {
 				$app->log('Backup directory not ready.', LOGLEVEL_DEBUG);
 			}
@@ -186,6 +155,37 @@ class backup_plugin {
 		return 'ok';
 	}
 
+	/**
+	 * Makes a backup of website files or database, it's triggered by action and required for the plugin to work.
+	 * Please, don't call this function directly unless you know what you're doing.
+	 * @param string $action_name is the backup source: web files or database
+	 * @param string|int $domain_id
+	 * @return string
+	 * @author Ramil Valitov <ramilvalitov@gmail.com>
+	 * @uses backup_plugin::run_backup() recommended to use if you need to make backups
+	 */
+	public function make_backup_callback($action_name, $domain_id)
+	{
+		global $app;
+
+		//Load backup class
+		$app->load('backup');
+		$app->log('Triggered backup routine for domain id ' . $domain_id . ', action name ' . $action_name, LOGLEVEL_DEBUG);
+
+		switch ($action_name) {
+			case 'backup_web_files':
+				backup::run_backup($domain_id, 'web', "manual");
+				break;
+			case 'backup_database':
+				backup::run_backup($domain_id, 'mysql', "manual");
+				break;
+			default:
+				$app->log('Unknown backup action name: ' . $action_name, LOGLEVEL_ERROR);
+				break;
+		}
+		return 'ok';
+	}
+
 	//* Restore a mail backup - florian@schaal-24.de
 	public function backup_action_mail($action_name, $data) {
 		global $app, $conf;
-- 
GitLab


From 0fb97725700fa1facb5006566f9b283e160650d1 Mon Sep 17 00:00:00 2001
From: Ramil Valitov <ramilvalitov@gmail.com>
Date: Fri, 29 May 2020 12:18:28 +0300
Subject: [PATCH 313/571] [fix] correct default format detection

---
 server/lib/classes/backup.inc.php | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php
index ea959a2f9c..f996340bd5 100644
--- a/server/lib/classes/backup.inc.php
+++ b/server/lib/classes/backup.inc.php
@@ -110,8 +110,8 @@ class backup
 
     /**
      * Returns default backup format used in previous versions of ISPConfig
-     * @param string $backup_mode
-     * @param string $backup_type
+     * @param string $backup_mode can be 'userzip' or 'rootgz'
+     * @param string $backup_type can be 'web' or 'mysql'
      * @return string
      * @author Ramil Valitov <ramilvalitov@gmail.com>
      */
@@ -1264,10 +1264,7 @@ class backup
             $backup_format_web = 'default';
         }
         if ($backup_format_web == 'default') {
-            if ($backup_mode == 'userzip')
-                $backup_format_web = 'zip';
-            else
-                $backup_format_web = 'gzip';
+            $backup_format_web = self::getDefaultBackupFormat($backup_mode, 'web');
         }
         $password = ($web_domain['backup_encrypt'] == 'y') ? trim($web_domain['backup_password']) : '';
         $backup_extension_web = self::getBackupWebExtension($backup_format_web);
-- 
GitLab


From 86811506b27c0d2191d29fe8235a51def9963f09 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 3 Apr 2020 16:29:55 -0600
Subject: [PATCH 314/571] dns import:  improvements in handling dns zone file
 syntax

---
 interface/web/dns/dns_import.php             | 476 ++++++++++---------
 interface/web/dns/lib/lang/ar_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/bg_dns_import.lng |   9 +
 interface/web/dns/lib/lang/br_dns_import.lng |   9 +
 interface/web/dns/lib/lang/ca_dns_import.lng |   9 +
 interface/web/dns/lib/lang/cz_dns_import.lng |   9 +
 interface/web/dns/lib/lang/de_dns_import.lng |   9 +
 interface/web/dns/lib/lang/dk_dns_import.lng |   9 +
 interface/web/dns/lib/lang/el_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/en_dns_import.lng |  19 +-
 interface/web/dns/lib/lang/es_dns_import.lng |   9 +
 interface/web/dns/lib/lang/fi_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/fr_dns_import.lng |   9 +
 interface/web/dns/lib/lang/hr_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/hu_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/id_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/it_dns_import.lng |   9 +
 interface/web/dns/lib/lang/ja_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/nl_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/pl_dns_import.lng |   9 +
 interface/web/dns/lib/lang/pt_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/ro_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/ru_dns_import.lng |   9 +
 interface/web/dns/lib/lang/se_dns_import.lng |  11 +-
 interface/web/dns/lib/lang/sk_dns_import.lng |  15 +-
 interface/web/dns/lib/lang/tr_dns_import.lng |   9 +
 26 files changed, 517 insertions(+), 262 deletions(-)

diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php
index 540a731ba2..143d9248a3 100644
--- a/interface/web/dns/dns_import.php
+++ b/interface/web/dns/dns_import.php
@@ -34,8 +34,9 @@ require_once '../../lib/app.inc.php';
 //* Check permissions for module
 $app->auth->check_module_permissions('dns');
 
-$msg = '';
-$error = '';
+$msg = [];
+$warn = [];
+$error = [];
 
 // Loading the template
 $app->uses('tform,tpl,validate_dns');
@@ -208,6 +209,40 @@ $lng_file = 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language
 include $lng_file;
 $app->tpl->setVar($wb);
 
+/** Returns shortest name for an owner with giving $origin in effect */
+function origin_name( $owner, $origin ) {
+	if ($owner == "@") { return ''; }
+	if ($owner == "*") { return $owner; }
+	if ($owner == "") { return $origin; }
+	if ($origin == "") { return $owner; }
+	if (substr($owner, -1) == ".") {
+		if (substr($origin, -1) == ".") {
+			return substr_replace( $owner, '', 0 - (strlen($origin) + 1) );
+		} else {
+			return $owner;
+		}
+	}
+	if ($origin == ".") {
+		return "${owner}.";
+	}
+	if (substr($origin, -1) != ".") {
+		// should be an erorr,
+		// only "." terminated $origin can be handled determinately
+		return "${owner}.${origin}";
+	}
+	return $owner;
+
+}
+
+/** Returns full name for an owner with given $origin in effect */
+function fqdn_name( $owner, $origin ) {
+	if (substr($owner, -1) == ".") {
+		return $owner;
+	}
+	$name = origin_name( $owner, $origin );
+	return $name . (strlen($name) > 0 ? "." : "") . $origin;
+}
+
 // Import the zone-file
 //if(1=="1")
 if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])){
@@ -227,25 +262,32 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 	// Remove empty lines, comments, whitespace, tabs, etc.
 	$new_lines = array();
 	foreach($lines as $line){
-		$line = trim($line);
+		$line = rtrim($line);
+		$line = preg_replace('/^\s+/', ' ', $line);
 		if ($line != '' && substr($line, 0, 1) != ';'){
-			if(strpos($line, ";") !== FALSE) {
-				if(!preg_match("/\"[^\"]+;[^\"]*\"/", $line)) {
-					$line = substr($line, 0, strpos($line, ";"));
+			if(preg_match("/\sNAPTR\s/i", $line)) {
+				// NAPTR contains regex strings, there's not much we can safely clean up.
+				// remove a comment if found after the ending period (and comment doesn't contain period)
+				$line = preg_replace( '/^(.+\.)(\s*;[^\.]*)$/', '\1', $line );
+			} else {
+				if(strpos($line, ";") !== FALSE) {
+					if(!preg_match("/\"[^\"]+;[^\"]*\"/", $line)) {
+						$line = substr($line, 0, strpos($line, ";"));
+					}
 				}
-			}
-			if(strpos($line, "(") !== FALSE ) {
-				if (!preg_match("/v=DKIM/",$line)) {
-					$line = substr($line, 0, strpos($line, "("));
+				if(strpos($line, "(") !== FALSE ) {
+					if (!preg_match("/v=DKIM/",$line)) {
+						$line = substr($line, 0, strpos($line, "("));
+					}
 				}
-			}
-			if(strpos($line, ")") !== FALSE ) {
-				if (!preg_match("/v=DKIM/",$line)) {
-					$line = substr($line, 0, strpos($line, ")"));
+				if(strpos($line, ")") !== FALSE ) {
+					if (!preg_match("/v=DKIM/",$line)) {
+						$line = substr($line, 0, strpos($line, ")"));
+					}
 				}
 			}
 			
-			$line = trim($line);
+			$line = rtrim($line);
 			if ($line != ''){
 				$sPattern = '/\s+/m';
 				$sReplace = ' ';
@@ -257,29 +299,42 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 	$lines = $new_lines;
 	unset($new_lines);
 
-	//$lines = file("apriqot.se.txt");
-	$name = str_replace("txt", "", $_FILES['file']['name']);
-	$name = str_replace("zone", "", $name);
-
 	if ($domain !== NULL){
-		$name = $domain;
-	}
-
-	if (substr($name, -1) != "."){
-		$name .= ".";
+		// SOA name will be the specified domain
+		$name = origin_name( $domain, '.' );
+	} else {
+		// SOA name will be read from SOA record
+		$name = '.';
 	}
 
 	$i = 0;
-	$origin_exists = FALSE;
+	$ttl = 3600;
+	$soa_ttl = '86400';
 	$soa_array_key = -1;
 	$soa = array();
 	$soa['name'] = $name;
+	$origin = $name;
+	$owner = $name;
 	$r = 0;
 	$dns_rr = array();
+	$add_default_ns = TRUE;
+	$found_soa = FALSE;
 	foreach($lines as $line){
 
 		$parts = explode(' ', $line);
 
+		// leading whitespace means same owner as previous record
+		if ($parts[0] == '') {
+			// SOA is (only) read from multiple lines
+			if($i > ($soa_array_key) && $i <= ($soa_array_key + 5)) {
+				array_shift($parts);
+			} else {
+				$parts[0] = $owner;
+			}
+		} elseif (strpos( $parts[0], '$' ) !== 0) {
+			$owner = fqdn_name( $parts[0], $origin );
+		}
+
 		// make elements lowercase
 		$new_parts = array();
 		foreach($parts as $part){
@@ -297,46 +352,75 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 		$parts = $new_parts;
 		unset($new_parts);
 
-		// if ORIGIN exists, overwrite $soa['name']
+		// Set current $ORIGIN (note: value in file can be a name relative to current origin)
 		if($parts[0] == '$origin'){
-			$soa['name'] = $parts[1];
-			$origin_exists = TRUE;
+			$origin = fqdn_name( $parts[1], $origin );
 		}
 		// TTL
 		if($parts[0] == '$ttl'){
 			$time_format = strtolower(substr($parts[1], -1));
 			switch ($time_format) {
 			case 's':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1));
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1));
 				break;
 			case 'm':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 60;
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1)) * 60;
 				break;
 			case 'h':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 3600;
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1)) * 3600;
 				break;
 			case 'd':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 86400;
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1)) * 86400;
 				break;
 			case 'w':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 604800;
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1)) * 604800;
 				break;
 			default:
-				$soa['ttl'] = $app->functions->intval($parts[1]);
+				$ttl = $app->functions->intval($parts[1]);
 			}
+			$soa_ttl = $ttl;
 			unset($time_format);
 		}
 		// SOA
 		if(in_array("soa", $parts)){
-			$soa['mbox'] = array_pop($parts);
-			//$soa['ns'] = array_pop($parts);
-			$soa['ns'] = $servers[0]['server_name'];
-			// if domain is part of SOA, overwrite $soa['name']
-			if($parts[0] != '@' && $parts[0] != 'in' && $parts[0] != 'soa' && $origin_exists === FALSE){
-				$soa['name'] = $parts[0];
+			// Check for multiple SOA records in file
+			if($found_soa && $soa_array_key != -1){
+				// we could just skip any SOA which doesn't match the domain name,
+				// which would allow concating zone files (sub1.d.tld, sub2.d.tld, d.tld) together for import
+				$error[] = $wb['zone_file_multiple_soa'];
+				$valid_zone_file = FALSE;
+			} else {
+				$soa['mbox'] = array_pop($parts);
+
+				//$soa['ns'] = array_pop($parts);
+				$soa['ns'] = $servers[0]['server_name'];
+
+				// $parts[0] will always be owner name
+				$soa_domain = fqdn_name( $parts[0], $origin );
+
+				if ($domain !== NULL){
+					// domain was given, check that domain and SOA domain share some root
+					if (    ( strpos( $soa_domain, origin_name( $domain, '.' ) ) !== FALSE )
+					     || ( strpos( origin_name( $domain, '.' ), $soa_domain ) !== FALSE ) ) {
+						$valid_zone_file = TRUE;
+					}
+				} else {
+					// domain not given, use domain from SOA
+					if($soa_domain != ".") {
+						$soa['name'] = $soa_domain;
+						$valid_zone_file = TRUE;
+					}
+				}
+
+				if(is_numeric($parts[1])){
+					$soa['ttl'] = $app->functions->intval($parts[1]);
+				} else {
+					$soa['ttl'] = $soa_ttl;
+				}
+
+				$found_soa = TRUE;
+				$soa_array_key = $i;
 			}
-			$soa_array_key = $i;
-			$valid_zone_file = TRUE;
 		}
 		// SERIAL
 		if($i == ($soa_array_key + 1)) $soa['serial'] = $app->functions->intval($parts[0]);
@@ -438,197 +522,120 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 		}
 		// RESOURCE RECORDS
 		if($i > ($soa_array_key + 5)){
-			if(substr($parts[0], -1) == '.' || $parts[0] == '@' || ($parts[0] != 'a' && $parts[0] != 'aaaa' && $parts[0] != 'ns' && $parts[0] != 'cname' && $parts[0] != 'hinfo' && $parts[0] != 'mx' && $parts[0] != 'naptr' && $parts[0] != 'ptr' && $parts[0] != 'rp' && $parts[0] != 'srv' && $parts[0] != 'txt')){
-				if(is_numeric($parts[1])){
-					if($parts[2] == 'in'){
-						$resource_type = $parts[3];
-						$pkey = 3;
-					} else {
-						$resource_type = $parts[2];
-						$pkey = 2;
-					}
-				} else {
-					if($parts[1] == 'in'){
-						$resource_type = $parts[2];
-						$pkey = 2;
-					} else {
-						$resource_type = $parts[1];
-						$pkey = 1;
-					}
-				}
-				$dns_rr[$r]['type'] = $resource_type;
-				if($parts[0] == '@' || $parts[0] == '.'){
-					$dns_rr[$r]['name'] = $soa['name'];
-				} else {
-					$dns_rr[$r]['name'] = $parts[0];
-				}
-				if(is_numeric($parts[1])){
-					$dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
-				} else {
-					$dns_rr[$r]['ttl'] = $soa['ttl'];
-				}
-				switch ($resource_type) {
-				case 'mx':
-				case 'srv':
-					$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-					$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-					break;
-				case 'txt':
-					$dns_rr[$r]['aux'] = 0;
-					$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-					if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-					break;
-				default:
-					$dns_rr[$r]['aux'] = 0;
-					$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-				}
+
+			$dns_rr[$r]['name'] = fqdn_name( $owner, $soa['name'] );
+			array_shift($parts);  // shift record owner from $parts[0]
+
+			if(is_numeric($parts[0])) {
+				$dns_rr[$r]['ttl'] = $app->functions->intval($parts[0]);
+				array_shift($parts);  // shift ttl from $parts[0]
 			} else {
-				// a 3600 IN A 1.2.3.4
-				if(is_numeric($parts[1]) && $parts[2] == 'in' && ($parts[3] == 'a' || $parts[3] == 'aaaa' || $parts[3] == 'ns'|| $parts[3] == 'cname' || $parts[3] == 'hinfo' || $parts[3] == 'mx' || $parts[3] == 'naptr' || $parts[3] == 'ptr' || $parts[3] == 'rp' || $parts[3] == 'srv' || $parts[3] == 'txt')){
-					$resource_type = $parts[3];
-					$pkey = 3;
-					$dns_rr[$r]['type'] = $resource_type;
-					$dns_rr[$r]['name'] = $parts[0];
-					$dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
-					switch ($resource_type) {
-					case 'mx':
-					case 'srv':
-						$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-						break;
-					case 'txt':
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-						if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-						if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-						break;
-					default:
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					}
-				}
-				// a IN A 1.2.3.4
-				elseif($parts[1] == 'in' && ($parts[2] == 'a' || $parts[2] == 'aaaa' || $parts[2] == 'ns'|| $parts[2] == 'cname' || $parts[2] == 'hinfo' || $parts[2] == 'mx' || $parts[2] == 'naptr' || $parts[2] == 'ptr' || $parts[2] == 'rp' || $parts[2] == 'srv' || $parts[2] == 'txt')){
-					$resource_type = $parts[2];
-					$pkey = 2;
-					$dns_rr[$r]['type'] = $resource_type;
-					$dns_rr[$r]['name'] = $parts[0];
-					$dns_rr[$r]['ttl'] = $soa['ttl'];
-					switch ($resource_type) {
-					case 'mx':
-					case 'srv':
-						$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-						break;
-					case 'txt':
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-						if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-						if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-						break;
-					default:
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					}
-				}
-				// a 3600 A 1.2.3.4
-				elseif(is_numeric($parts[1]) && ($parts[2] == 'a' || $parts[2] == 'aaaa' || $parts[2] == 'ns'|| $parts[2] == 'cname' || $parts[2] == 'hinfo' || $parts[2] == 'mx' || $parts[2] == 'naptr' || $parts[2] == 'ptr' || $parts[2] == 'rp' || $parts[2] == 'srv' || $parts[2] == 'txt')){
-					$resource_type = $parts[2];
-					$pkey = 2;
-					$dns_rr[$r]['type'] = $resource_type;
-					$dns_rr[$r]['name'] = $parts[0];
-					$dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
-					switch ($resource_type) {
-					case 'mx':
-					case 'srv':
-						$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-						break;
-					case 'txt':
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-						if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-						if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-						break;
-					default:
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					}
-				}
-				// A 1.2.3.4
-				// MX 10 mail
-				// TXT "v=spf1 a mx ptr -all"
-				else {
-					$resource_type = $parts[0];
-					$pkey = 0;
-					$dns_rr[$r]['type'] = $resource_type;
-					$dns_rr[$r]['name'] = $soa['name'];
-					$dns_rr[$r]['ttl'] = $soa['ttl'];
-					switch ($resource_type) {
-					case 'mx':
-					case 'srv':
-						$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-						break;
-					case 'txt':
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-						if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-						if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-						break;
-					default:
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					}
-				}
+				$dns_rr[$r]['ttl'] = $ttl;
 			}
-			$dns_rr[$r]['type'] = strtoupper($dns_rr[$r]['type']);
-			if($dns_rr[$r]['type'] == 'NS' && $dns_rr[$r]['name'] == $soa['name']){
+
+			if($parts[0] == 'in'){
+				array_shift($parts);  // shift class from $parts[0]
+			} elseif (in_array( $parts[0], [ 'ch', 'hs', ] )) {
+				$warn[] = $wb['ignore_record_not_class_in'] . "  ($owner " . strtoupper($parts[0]) . ")";
 				unset($dns_rr[$r]);
+				continue;
 			}
-			
-			$valid = true;
+
+			// A 1.2.3.4
+			// MX 10 mail
+			// TXT "v=spf1 a mx ptr -all"
+			$resource_type = array_shift($parts);
+			switch ($resource_type) {
+			case 'mx':
+			case 'srv':
+			case 'naptr':
+				$dns_rr[$r]['aux'] = $app->functions->intval(array_shift($parts));
+				$dns_rr[$r]['data'] = implode(' ', $parts);
+				break;
+			case 'txt':
+				$dns_rr[$r]['aux'] = 0;
+				$dns_rr[$r]['data'] = implode(' ', $parts);
+				$dns_rr[$r]['data'] = preg_replace( [ '/^\"/', '/\"$/' ], '', $dns_rr[$r]['data']);
+				break;
+			default:
+				$dns_rr[$r]['aux'] = 0;
+				$dns_rr[$r]['data'] = implode(' ', $parts);
+			}
+
+			$dns_rr[$r]['type'] = strtoupper($resource_type);
+
+			if($dns_rr[$r]['type'] == 'NS' && fqdn_name( $dns_rr[$r]['name'], $soa['name'] ) == $soa['name']){
+				$add_default_ns = FALSE;
+			}
+
 			$dns_rr[$r]['ttl'] = $app->functions->intval($dns_rr[$r]['ttl']);
 			$dns_rr[$r]['aux'] = $app->functions->intval($dns_rr[$r]['aux']);
-			$dns_rr[$r]['data'] = strip_tags($dns_rr[$r]['data']);
-			if(!preg_match('/^[a-zA-Z0-9\.\-\*]{0,64}$/',$dns_rr[$r]['name'])) $valid == false;
-			if(!in_array(strtoupper($dns_rr[$r]['type']),array('A','AAAA','ALIAS','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY'))) $valid == false;
-			if($valid == false) unset($dns_rr[$r]);
+
+			// this really breaks NAPTR .. conceivably TXT, too.
+			// just make sure data is encoded when saved and escaped when displayed/used
+			if(!in_array($dns_rr[$r]['type'],array('NAPTR','TXT',))) {
+				$dns_rr[$r]['data'] = strip_tags($dns_rr[$r]['data']);
+			}
+
+			// regex based on https://stackoverflow.com/questions/3026957/how-to-validate-a-domain-name-using-regex-php
+			// probably should find something better that covers valid syntax, moreso than just valid hostnames
+			if(!preg_match('/^(|@|\*|(?!\-)(?:(\*|(?:[a-zA-Z\d_][a-zA-Z\d\-_]{0,61})?[a-zA-Z\d_])\.){1,126}(?!\d+)[a-zA-Z\d_]{1,63}\.?)$/',$dns_rr[$r]['name'])) {
+				$error[] = $wb['ignore_record_invalid_owner'] . " (" . htmlspecialchars($dns_rr[$r]['name']) . ")";
+				unset( $dns_rr[$r] );
+				continue;
+			}
+
+			if(!in_array($dns_rr[$r]['type'],array('A','AAAA','ALIAS','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY'))) {
+				$error[] = $wb['ignore_record_unknown_type'] . " (" . htmlspecialchars($dns_rr[$r]['type']) . ")";
+				unset( $dns_rr[$r] );
+				continue;
+			}
 			
 			$r++;
 		}
 		$i++;
 	}
 
-	foreach ($servers as $server){
-		$dns_rr[$r]['name'] = $soa['name'];
-		$dns_rr[$r]['type'] = 'NS';
-		$dns_rr[$r]['data'] = $server['server_name'];
-		$dns_rr[$r]['aux'] = 0;
-		$dns_rr[$r]['ttl'] = $soa['ttl'];
-		$r++;
+	if ( $add_default_ns ) {
+		foreach ($servers as $server){
+			$dns_rr[$r]['name'] = $soa['name'];
+			$dns_rr[$r]['type'] = 'NS';
+			$dns_rr[$r]['data'] = $server['server_name'];
+			$dns_rr[$r]['aux'] = 0;
+			$dns_rr[$r]['ttl'] = $soa['ttl'];
+			$r++;
+		}
 	}
 	//print('<pre>');
 	//print_r($dns_rr);
 	//print('</pre>');
 
+	if (!$found_soa) {
+		$valid_zone_file = false;
+		$error[] = $wb['zone_file_missing_soa'];
+	}
+	if (intval($soa['serial']) == 0
+		|| (intval($soa['refresh']) == 0 && intval($soa['retry']) == 0 && intval($soa['expire']) == 0 && intval($soa['minimum']) == 0 )
+	) {
+		$valid_zone_file = false;
+		$error[] = $wb['zone_file_soa_parser'];
+$error[] = print_r( $soa, true );
+	}
+	if ($settings['use_domain_module'] == 'y' && ! $app->tools_sites->checkDomainModuleDomain($soa['name']) ) {
+		$valid_zone_file = false;
+		$error[] = $wb['zone_not_allowed'];
+	}
 
 	// Insert the soa record
 	$sys_userid = $_SESSION['s']['user']['userid'];
-	$origin = $soa['name'];
-	$ns = $soa['ns'];
-	$mbox = $soa['mbox'];
-	$refresh = $soa['refresh'];
-	$retry = $soa['retry'];
-	$expire = $soa['expire'];
-	$minimum = $soa['minimum'];
-	$ttl = isset($soa['ttl']) ? $soa['ttl'] : '86400';
 	$xfer = '';
 	$serial = $app->functions->intval($soa['serial']+1);
 	//print_r($soa);
 	//die();
-	if($valid_zone_file){
+	$records = $app->db->queryAllRecords("SELECT id FROM dns_soa WHERE origin = ?", $soa['name']);
+	if (count($records) > 0) {
+		$error[] = $wb['zone_already_exists'];
+	} elseif ($valid_zone_file) {
 		$insert_data = array(
 			"sys_userid" => $sys_userid,
 			"sys_groupid" => $sys_groupid,
@@ -636,15 +643,15 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 			"sys_perm_group" => 'riud',
 			"sys_perm_other" => '',
 			"server_id" => $server_id,
-			"origin" => $origin,
-			"ns" => $ns,
-			"mbox" => $mbox,
+			"origin" => $soa['name'],
+			"ns" => $soa['ns'],
+			"mbox" => $soa['mbox'],
 			"serial" => $serial,
-			"refresh" => $refresh,
-			"retry" => $retry,
-			"expire" => $expire,
-			"minimum" => $minimum,
-			"ttl" => $ttl,
+			"refresh" => $soa['refresh'],
+			"retry" => $soa['retry'],
+			"expire" => $soa['expire'],
+			"minimum" => $soa['minimum'],
+			"ttl" => $soa['ttl'],
 			"active" => 'Y',
 			"xfer" => $xfer
 		);
@@ -655,6 +662,11 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 		{
 			foreach($dns_rr as $rr)
 			{
+				// ensure record name is within $soa['name'] zone
+				if(fqdn_name( $rr['name'], $soa['name'] ) != $soa['name']
+				   && (strpos( fqdn_name( $rr['name'], $soa['name'] ), ".".$soa['name'] ) === FALSE ) ){
+					continue;
+				}
 				$insert_data = array(
 					"sys_userid" => $sys_userid,
 					"sys_groupid" => $sys_groupid,
@@ -663,7 +675,7 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 					"sys_perm_other" => '',
 					"server_id" => $server_id,
 					"zone" => $dns_soa_id,
-					"name" => $rr['name'],
+					"name" => origin_name( $rr['name'], $soa['name'] ),
 					"type" => $rr['type'],
 					"data" => $rr['data'],
 					"aux" => $rr['aux'],
@@ -672,21 +684,39 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 				);
 				$dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
 			}
+
+			$msg[] = $wb['zone_file_successfully_imported_txt'];
+		} elseif (is_array($dns_rr)) {
+			$error[] = $wb['zone_file_import_fail'];
+		} else {
+			$msg[] = $wb['zone_file_successfully_imported_txt'];
 		}
-		$msg .= $wb['zone_file_successfully_imported_txt'];
 	} else {
-		$error .= $wb['error_no_valid_zone_file_txt'];
+		$error[] = $wb['error_no_valid_zone_file_txt'];
 	}
 	//header('Location: /dns/dns_soa_edit.php?id='.$dns_soa_id);
 } else {
 	if(isset($_FILES['file']['name'])) {
-		$error = $wb['no_file_uploaded_error'];
+		$error[] = $wb['no_file_uploaded_error'];
 	}
 }
 
+$_error='';
+if (count($error) > 0) {
+	// this markup should really be moved to ispconfig.js
+	$_error = '<div class="alert alert-danger clear">' . implode( '<br />', $error) . '</div>';
+}
+if (count($warn) > 0) {
+	// and add a 'warn' variable to templates and ispconfig.js
+	$_error = '<div class="alert alert-warning clear">' . implode( '<br />', $warn) . '</div>';
+}
+$app->tpl->setVar('error', $_error);
 
-$app->tpl->setVar('msg', $msg);
-$app->tpl->setVar('error', $error);
+$_msg='';
+if (count($msg) > 0) {
+	$_msg = '<div class="alert alert-success clear">' . implode( '<br />', $msg) . '</div>';
+}
+$app->tpl->setVar('msg', $_msg);
 
 $app->tpl_defaults();
 $app->tpl->pparse();
diff --git a/interface/web/dns/lib/lang/ar_dns_import.lng b/interface/web/dns/lib/lang/ar_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/ar_dns_import.lng
+++ b/interface/web/dns/lib/lang/ar_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_import.lng b/interface/web/dns/lib/lang/bg_dns_import.lng
index 848a4f933b..7ff3498c44 100644
--- a/interface/web/dns/lib/lang/bg_dns_import.lng
+++ b/interface/web/dns/lib/lang/bg_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Не е качен файла с зоната';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_import.lng b/interface/web/dns/lib/lang/br_dns_import.lng
index ffcef7d743..8bcc0ddff4 100644
--- a/interface/web/dns/lib/lang/br_dns_import.lng
+++ b/interface/web/dns/lib/lang/br_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Importar arquivo de zona';
 $wb['no_file_uploaded_error'] = 'Nenhum arquivo de zona dns foi carregado.';
 $wb['error_no_server_id'] = 'Nenhum servidor foi informado.';
 $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido nesta conta.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_import.lng b/interface/web/dns/lib/lang/ca_dns_import.lng
index feb0ba7919..78c2edbf80 100644
--- a/interface/web/dns/lib/lang/ca_dns_import.lng
+++ b/interface/web/dns/lib/lang/ca_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Aucun fichier de Zone téléchargé';
 $wb['zone_file_import_txt'] = 'Importer un fichier de Zone';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_import.lng b/interface/web/dns/lib/lang/cz_dns_import.lng
index fc90d3cf3c..ed254338a5 100644
--- a/interface/web/dns/lib/lang/cz_dns_import.lng
+++ b/interface/web/dns/lib/lang/cz_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Nelze odeslat DNS zonový soubor';
 $wb['zone_file_import_txt'] = 'Importovat DNS zonový soubor';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_import.lng b/interface/web/dns/lib/lang/de_dns_import.lng
index f33d304a0d..31db13932e 100644
--- a/interface/web/dns/lib/lang/de_dns_import.lng
+++ b/interface/web/dns/lib/lang/de_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Zonen Datei importieren';
 $wb['no_file_uploaded_error'] = 'Keine Datei hochgeladen';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_import.lng b/interface/web/dns/lib/lang/dk_dns_import.lng
index 9edbe20009..93357e1194 100644
--- a/interface/web/dns/lib/lang/dk_dns_import.lng
+++ b/interface/web/dns/lib/lang/dk_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Importer Zone Filer';
 $wb['no_file_uploaded_error'] = 'Ingen zone-fil overført';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_import.lng b/interface/web/dns/lib/lang/el_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/el_dns_import.lng
+++ b/interface/web/dns/lib/lang/el_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_import.lng b/interface/web/dns/lib/lang/en_dns_import.lng
index c80722c3c1..89227b15a5 100644
--- a/interface/web/dns/lib/lang/en_dns_import.lng
+++ b/interface/web/dns/lib/lang/en_dns_import.lng
@@ -5,12 +5,21 @@ $wb['client_txt'] = 'Client';
 $wb["btn_save_txt"] = 'Import Zonefile';
 $wb["btn_cancel_txt"] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
-$wb['no_file_uploaded_error'] = 'No zonefile uploaded';
+$wb['no_file_uploaded_error'] = 'No zonefile uploaded.';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
-?>
\ No newline at end of file
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_import.lng b/interface/web/dns/lib/lang/es_dns_import.lng
index 80b5eb463b..db73b69e33 100644
--- a/interface/web/dns/lib/lang/es_dns_import.lng
+++ b/interface/web/dns/lib/lang/es_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Importar Archivo de Zona';
 $wb['zone_file_import_txt'] = 'Importar archivo de zona';
 $wb['zone_file_successfully_imported_txt'] = 'El archivo de zona se ha importado correctamente!';
 $wb['zonefile_to_import_txt'] = 'Archivo de Zona';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_import.lng b/interface/web/dns/lib/lang/fi_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/fi_dns_import.lng
+++ b/interface/web/dns/lib/lang/fi_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_import.lng b/interface/web/dns/lib/lang/fr_dns_import.lng
index 73bc88f824..c367f542bb 100644
--- a/interface/web/dns/lib/lang/fr_dns_import.lng
+++ b/interface/web/dns/lib/lang/fr_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Aucun fichier de Zone téléchargé';
 $wb['zone_file_import_txt'] = 'Importer un fichier de Zone';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_import.lng b/interface/web/dns/lib/lang/hr_dns_import.lng
index 09c178e5bb..59632ed64e 100644
--- a/interface/web/dns/lib/lang/hr_dns_import.lng
+++ b/interface/web/dns/lib/lang/hr_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Klijent';
 $wb['btn_save_txt'] = 'Importiraj zonsku datoteku';
 $wb['btn_cancel_txt'] = 'Odustani';
 $wb['domain_txt'] = 'Domena';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zonska datoteka';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Importiraj zonske datoteka';
 $wb['no_file_uploaded_error'] = 'Nije prenešena zonska datoteka';
 $wb['zone_file_import_txt'] = 'Importiraj zonsku datoteku';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_import.lng b/interface/web/dns/lib/lang/hu_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/hu_dns_import.lng
+++ b/interface/web/dns/lib/lang/hu_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_import.lng b/interface/web/dns/lib/lang/id_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/id_dns_import.lng
+++ b/interface/web/dns/lib/lang/id_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_import.lng b/interface/web/dns/lib/lang/it_dns_import.lng
index 4ccee92b65..1d734ab4b0 100644
--- a/interface/web/dns/lib/lang/it_dns_import.lng
+++ b/interface/web/dns/lib/lang/it_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Nessun file di zona selezionato';
 $wb['zone_file_import_txt'] = 'Importa file di zona';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_import.lng b/interface/web/dns/lib/lang/ja_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/ja_dns_import.lng
+++ b/interface/web/dns/lib/lang/ja_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_import.lng b/interface/web/dns/lib/lang/nl_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/nl_dns_import.lng
+++ b/interface/web/dns/lib/lang/nl_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_import.lng b/interface/web/dns/lib/lang/pl_dns_import.lng
index d622e03985..f6b618c87b 100644
--- a/interface/web/dns/lib/lang/pl_dns_import.lng
+++ b/interface/web/dns/lib/lang/pl_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Nie załadowany żaden plik';
 $wb['zone_file_import_txt'] = 'Import pliku strefy';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_import.lng b/interface/web/dns/lib/lang/pt_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/pt_dns_import.lng
+++ b/interface/web/dns/lib/lang/pt_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_import.lng b/interface/web/dns/lib/lang/ro_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/ro_dns_import.lng
+++ b/interface/web/dns/lib/lang/ro_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_import.lng b/interface/web/dns/lib/lang/ru_dns_import.lng
index 752e02cc6c..95cf32c935 100644
--- a/interface/web/dns/lib/lang/ru_dns_import.lng
+++ b/interface/web/dns/lib/lang/ru_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Файл зоны не загружен.';
 $wb['zone_file_import_txt'] = 'Импорт файла зоны';
 $wb['error_no_server_id'] = 'Не указан сервер.';
 $wb['error_not_allowed_server_id'] = 'Выбранный сервер не доступен для этой учетной записи.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_import.lng b/interface/web/dns/lib/lang/se_dns_import.lng
index 801dd473f7..1c94966002 100644
--- a/interface/web/dns/lib/lang/se_dns_import.lng
+++ b/interface/web/dns/lib/lang/se_dns_import.lng
@@ -7,10 +7,19 @@ $wb['domain_txt'] = 'Domän';
 $wb['zone_file_successfully_imported_txt'] = 'Zonfilimporten har lyckats!';
 $wb['error_no_valid_zone_file_txt'] = 'Detta verkar inte vara en giltig zonfil';
 $wb['zonefile_to_import_txt'] = 'Zonfil';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Importera zonfiler';
 $wb['no_file_uploaded_error'] = 'Ingen zonfil uppladdad';
 $wb['zone_file_import_txt'] = 'Zonfilsimport';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_import.lng b/interface/web/dns/lib/lang/sk_dns_import.lng
index 8f67eba14c..3fc63992ed 100644
--- a/interface/web/dns/lib/lang/sk_dns_import.lng
+++ b/interface/web/dns/lib/lang/sk_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_import.lng b/interface/web/dns/lib/lang/tr_dns_import.lng
index 0f95a3131f..8aa42a51e3 100644
--- a/interface/web/dns/lib/lang/tr_dns_import.lng
+++ b/interface/web/dns/lib/lang/tr_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Bölge Dosyalarını İçe Aktar';
 $wb['no_file_uploaded_error'] = 'Hiçbir bölge dosyası yüklenmedi';
 $wb['error_no_server_id'] = 'Sunucu belirtilmemiÅŸ.';
 $wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
-- 
GitLab


From e68fbf8426bb5848eb4d8c6cf09a8468b2b69227 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 9 Apr 2020 17:38:23 -0600
Subject: [PATCH 315/571] NAPTR dns record editor/support

---
 interface/web/dns/dns_dkim_edit.php           |   1 +
 interface/web/dns/dns_edit_base.php           |  23 +++
 interface/web/dns/dns_import.php              |   1 +
 interface/web/dns/dns_naptr_edit.php          | 100 ++++++++++
 interface/web/dns/form/dns_naptr.tform.php    | 174 ++++++++++++++++++
 interface/web/dns/lib/lang/en_dns_naptr.lng   |  21 +++
 interface/web/dns/list/dns_a.list.php         |   2 +-
 interface/web/dns/templates/dns_a_list.htm    |   1 +
 .../web/dns/templates/dns_naptr_edit.htm      |  46 +++++
 server/conf/bind_pri.domain.master            |  26 +--
 10 files changed, 381 insertions(+), 14 deletions(-)
 create mode 100644 interface/web/dns/dns_naptr_edit.php
 create mode 100644 interface/web/dns/form/dns_naptr.tform.php
 create mode 100644 interface/web/dns/lib/lang/en_dns_naptr.lng
 create mode 100644 interface/web/dns/templates/dns_naptr_edit.htm

diff --git a/interface/web/dns/dns_dkim_edit.php b/interface/web/dns/dns_dkim_edit.php
index 5c95b2033d..520d382281 100644
--- a/interface/web/dns/dns_dkim_edit.php
+++ b/interface/web/dns/dns_dkim_edit.php
@@ -126,6 +126,7 @@ class page_action extends tform_actions {
 		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
 
 		// check for duplicate entry
+		// Should NOT include data in this check?  it must be unique for zone/name (selector)/type, regardless of data
 		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data = ? AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord["data"], $this->dataRecord['name']);
 		if ($check!='') $app->tform->errorMessage .= $app->tform->wordbook["record_exists_txt"];
 		if (empty($this->dataRecord['data'])) $app->tform->errorMessage .= $app->tform->wordbook["dkim_disabled_txt"];
diff --git a/interface/web/dns/dns_edit_base.php b/interface/web/dns/dns_edit_base.php
index 9cea8b6ae2..4f61b71ce5 100644
--- a/interface/web/dns/dns_edit_base.php
+++ b/interface/web/dns/dns_edit_base.php
@@ -44,6 +44,29 @@ class dns_page_action extends tform_actions {
 		return false;
 	}
 
+	protected function zoneFileEscape( $str ) {
+		// escape backslash and double quotes
+		$ret = str_replace( '\\', '\\\\', $str );
+		$ret = str_replace( '"', '\\"', $ret );
+		return $ret;
+	}
+
+	protected function zoneFileUnescape( $str ) {
+		// escape sequence can be rfc 1035 '\DDD' (backslash, 3 digits) or '\X' (backslash, non-digit char)
+		return preg_replace_callback(  '/\\\\(\d\d\d|\D)/',
+			function( $Matches ) {
+				if (preg_match( '/\d{3}/', $Matches[1] )) {
+					return chr( $Matches[1] );
+				} elseif (preg_match( '/\D/', $Matches[1])) {
+					return $Matches[1];
+				} else {
+					return $Matches[0];
+				}
+			},
+			$str
+		);
+	}
+
 	function onShowNew() {
 		global $app, $conf;
 
diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php
index 143d9248a3..b0c19bfff0 100644
--- a/interface/web/dns/dns_import.php
+++ b/interface/web/dns/dns_import.php
@@ -289,6 +289,7 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 			
 			$line = rtrim($line);
 			if ($line != ''){
+				// this of course breaks TXT when it includes whitespace
 				$sPattern = '/\s+/m';
 				$sReplace = ' ';
 				$new_lines[] = preg_replace($sPattern, $sReplace, $line);
diff --git a/interface/web/dns/dns_naptr_edit.php b/interface/web/dns/dns_naptr_edit.php
new file mode 100644
index 0000000000..99001ac8c5
--- /dev/null
+++ b/interface/web/dns/dns_naptr_edit.php
@@ -0,0 +1,100 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/dns_naptr.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+require_once './dns_edit_base.php';
+
+// Loading classes
+class page_action extends dns_page_action {
+
+	function onSubmit() {
+		// Combine and escape/format fields into the data to be saved
+		$this->dataRecord['data'] = $this->dataRecord['pref'] .' '.
+			'"'. $this->zoneFileEscape( $this->dataRecord['flags'] ) .'" '.
+			'"'. $this->zoneFileEscape( $this->dataRecord['service'] ) .'" '.
+			'"'. $this->zoneFileEscape( $this->dataRecord['regexp'] ) .'" '.
+			$this->dataRecord['replacement'] . (substr( $this->dataRecord['replacement'], -1 ) == '.' ? '' : '.');
+
+		$this->dataRecord['aux'] = $this->dataRecord['order'];
+
+		parent::onSubmit();
+	}
+
+
+	function onShowEnd() {
+		global $app, $conf;
+
+		// Split the parts of NAPTR record, unescape (backslashes), and unquote to edit.
+		//
+		// Examples:
+		// ;;       order pref flags service        regexp           replacement
+		// IN NAPTR 100   10   ""    ""  "!^cid:.+@([^\.]+\.)(.*)$!\2!i"    .
+		//
+		// ;;       order pref flags   service  regexp     replacement
+		// IN NAPTR 100  100  "s"   "thttp+L2R"   ""    thttp.example.com.
+		// IN NAPTR 100  100  "s"   "ftp+L2R"    ""     ftp.example.com.
+		//
+		// 'order' in stored in 'aux' column,
+		// all of 'pref "flags" "service" "regexp" replacement.' is here in 'data'
+		//
+		$matched = preg_match('/^\s*(\d+)\s+"([a-zA-Z0-9]*)"\s+"([^"]*)"\s+"(.*)"\s+([^\s]*\.)\s*$/', $this->dataRecord['data'], $matches);
+
+		if ($matched === FALSE || is_array($matches) && count($matches) == 0) {
+			if ( isset($app->tform->errorMessage) ) {
+				$app->tform->errorMessage .= '<br/>' . $app->tform->wordbook["record_parse_error"];
+			}
+		} else {
+			$app->tpl->setVar('pref',        $matches[1], true);
+			$app->tpl->setVar('flags',       $this->zoneFileUnescape($matches[2]), true);
+			$app->tpl->setVar('service',     $this->zoneFileUnescape($matches[3]), true);
+			$app->tpl->setVar('regexp',      $this->zoneFileUnescape($matches[4]), true);
+			$app->tpl->setVar('replacement', $matches[5], true);
+		}
+
+		parent::onShowEnd();
+	}
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/dns/form/dns_naptr.tform.php b/interface/web/dns/form/dns_naptr.tform.php
new file mode 100644
index 0000000000..24531dba2c
--- /dev/null
+++ b/interface/web/dns/form/dns_naptr.tform.php
@@ -0,0 +1,174 @@
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+global $app;
+
+$form["title"]    = "DNS NAPTR";
+$form["description"]  = "";
+$form["name"]    = "dns_naptr";
+$form["action"]   = "dns_naptr_edit.php";
+$form["db_table"]  = "dns_rr";
+$form["db_table_idx"] = "id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "dns";
+$form["list_default"] = "dns_a_list.php";
+$form["auth"]   = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['dns'] = array (
+	'title'  => "DNS NAPTR",
+	'width'  => 100,
+	'template'  => "templates/dns_naptr_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'zone' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => @$app->functions->intval($_REQUEST["zone"]),
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+				0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '/^((\*|[a-zA-Z0-9\-_]{1,255})(\.[a-zA-Z0-9\-_]{1,255})*\.?)?$/',
+					'errmsg'=> 'name_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '1024'
+		),
+		'type' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'NAPTR',
+			'value'  => '',
+			'width'  => '5',
+			'maxlength' => '5'
+		),
+		'data' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array (
+				0 => array (
+					'type' => 'NOTEMPTY',
+					'errmsg'=> 'data_error_empty'),
+				1 => array (
+					'type' => 'REGEX',
+					// matching:  'pref "flags" "service" "regexp" replacement.'
+					'regex' => '/^\s*(\d+)\s+"([a-zA-Z0-9]*)"\s+"([^"]*)"\s+"(.*)"\s+([^\s]*\.)\s*$/',
+					'errmsg'=> 'naptr_error_regex'),
+			),
+			'default' => '100 "" "" "" .',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '1024'
+		),
+		'aux' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '100',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'ttl' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'validators' => array (  0 => array ( 'type' => 'RANGE',
+					'range' => '60:',
+					'errmsg'=> 'ttl_range_error'),
+			),
+			'default' => '3600',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'Y',
+			'value'  => array(0 => 'N', 1 => 'Y')
+		),
+		'stamp' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'serial' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+
+
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_naptr.lng b/interface/web/dns/lib/lang/en_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/list/dns_a.list.php b/interface/web/dns/list/dns_a.list.php
index 1c6999511d..b6363b7d24 100644
--- a/interface/web/dns/list/dns_a.list.php
+++ b/interface/web/dns/list/dns_a.list.php
@@ -132,7 +132,7 @@ $liste["item"][] = array( 'field'  => "type",
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
+	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NAPTR'=>'NAPTR', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
 
 
 ?>
diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm
index 5a4a5eeb68..b6b21f18b6 100644
--- a/interface/web/dns/templates/dns_a_list.htm
+++ b/interface/web/dns/templates/dns_a_list.htm
@@ -28,6 +28,7 @@
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_hinfo_edit.php?zone={tmpl_var name='parent_id'}">HINFO</button>
 			<button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_loc_edit.php?zone={tmpl_var name='parent_id'}">LOC</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_mx_edit.php?zone={tmpl_var name='parent_id'}">MX</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_naptr_edit.php?zone={tmpl_var name='parent_id'}">NAPTR</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_ns_edit.php?zone={tmpl_var name='parent_id'}">NS</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_ptr_edit.php?zone={tmpl_var name='parent_id'}">PTR</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_rp_edit.php?zone={tmpl_var name='parent_id'}">RP</button>
diff --git a/interface/web/dns/templates/dns_naptr_edit.htm b/interface/web/dns/templates/dns_naptr_edit.htm
new file mode 100644
index 0000000000..8fd928c3de
--- /dev/null
+++ b/interface/web/dns/templates/dns_naptr_edit.htm
@@ -0,0 +1,46 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="order" class="col-sm-3 control-label">{tmpl_var name='order_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="order" id="order" value="{tmpl_var name='aux'}" class="form-control" placeholder="100" /></div></div>
+            <div class="form-group">
+                <label for="pref" class="col-sm-3 control-label">{tmpl_var name='pref_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="pref" id="pref" value="{tmpl_var name='pref'}" class="form-control" placeholder="100" /></div></div>
+            <div class="form-group">
+                <label for="flags" class="col-sm-3 control-label">{tmpl_var name='flags_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="flags" id="flags" value="{tmpl_var name='flags'}" class="form-control" placeholder="s" /></div></div>
+            <div class="form-group">
+                <label for="service" class="col-sm-3 control-label">{tmpl_var name='service_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="service" id="service" value="{tmpl_var name='service'}" class="form-control" placeholder="http+I2R" /></div></div>
+            <div class="form-group">
+                <label for="regexp" class="col-sm-3 control-label">{tmpl_var name='regexp_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="regexp" id="regexp" value="{tmpl_var name='regexp'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="replacement" class="col-sm-3 control-label">{tmpl_var name='replacement_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="replacement" id="replacement" value="{tmpl_var name='replacement'}" class="form-control" placeholder="_http._tcp.foo.com." /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='active'}
+                </div>
+            </div>
+
+
+	<input type="hidden" name="id" value="{tmpl_var name='id'}">
+	<input type="hidden" name="zone" value="{tmpl_var name='zone'}">
+	<input type="hidden" name="type" value="{tmpl_var name='type'}">
+
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_naptr_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/server/conf/bind_pri.domain.master b/server/conf/bind_pri.domain.master
index fb867901dc..379d80c8df 100644
--- a/server/conf/bind_pri.domain.master
+++ b/server/conf/bind_pri.domain.master
@@ -9,46 +9,46 @@ $TTL        {tmpl_var name='ttl'}
 
 <tmpl_loop name='zones'>
 <tmpl_if name="type" op='==' value='NS'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      NS        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      NS         {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='A'>
-{tmpl_var name='name'} {tmpl_var name='ttl'} A        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      A          {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='AAAA'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      AAAA        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      AAAA       {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='ALIAS'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME      {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='CAA'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      CAA       {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      CAA        {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='CNAME'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME      {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='DS'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      DS        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      DS         {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='HINFO'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      HINFO        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      HINFO      {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='LOC'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      LOC        {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='MX'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      MX    {tmpl_var name='aux'}   {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      MX     {tmpl_var name='aux'}  {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='NAPTR'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      NAPTR        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      NAPTR  {tmpl_var name='aux'} {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='PTR'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      PTR        {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='RP'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      RP        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      RP         {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='SRV'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      SRV        {tmpl_var name='aux'} {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      SRV    {tmpl_var name='aux'} {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='TLSA'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      TLSA       {tmpl_var name='data'}
@@ -57,7 +57,7 @@ $TTL        {tmpl_var name='ttl'}
 {tmpl_var name='name'} {tmpl_var name='ttl'}      TXT        "{tmpl_var name='data'}"
 </tmpl_if>
 <tmpl_if name="type" op='==' value='TYPE257'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      TYPE257        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      TYPE257    {tmpl_var name='data'}
 </tmpl_if>
 </tmpl_loop>
 
-- 
GitLab


From dade9b71e76b7e0fb35ed6be5a2ce983e72f968f Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 10 Apr 2020 09:50:49 -0600
Subject: [PATCH 316/571] add naptr lang files

---
 interface/web/dns/lib/lang/ar_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/bg_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/br_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/ca_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/cz_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/de_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/dk_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/el_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/es_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/fi_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/fr_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/hr_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/hu_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/id_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/it_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/ja_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/nl_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/pl_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/pt_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/ro_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/ru_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/se_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/sk_dns_naptr.lng | 21 +++++++++++++++++++++
 interface/web/dns/lib/lang/tr_dns_naptr.lng | 21 +++++++++++++++++++++
 24 files changed, 504 insertions(+)
 create mode 100644 interface/web/dns/lib/lang/ar_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/bg_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/br_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/ca_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/cz_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/de_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/dk_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/el_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/es_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/fi_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/fr_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/hr_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/hu_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/id_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/it_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/ja_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/nl_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/pl_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/pt_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/ro_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/ru_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/se_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/sk_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/tr_dns_naptr.lng

diff --git a/interface/web/dns/lib/lang/ar_dns_naptr.lng b/interface/web/dns/lib/lang/ar_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_naptr.lng b/interface/web/dns/lib/lang/bg_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_naptr.lng b/interface/web/dns/lib/lang/br_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ca_dns_naptr.lng b/interface/web/dns/lib/lang/ca_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/ca_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_naptr.lng b/interface/web/dns/lib/lang/cz_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_naptr.lng b/interface/web/dns/lib/lang/de_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/dk_dns_naptr.lng b/interface/web/dns/lib/lang/dk_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/dk_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_naptr.lng b/interface/web/dns/lib/lang/el_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_naptr.lng b/interface/web/dns/lib/lang/es_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_naptr.lng b/interface/web/dns/lib/lang/fi_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_naptr.lng b/interface/web/dns/lib/lang/fr_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_naptr.lng b/interface/web/dns/lib/lang/hr_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_naptr.lng b/interface/web/dns/lib/lang/hu_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_naptr.lng b/interface/web/dns/lib/lang/id_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_naptr.lng b/interface/web/dns/lib/lang/it_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_naptr.lng b/interface/web/dns/lib/lang/ja_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_naptr.lng b/interface/web/dns/lib/lang/nl_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_naptr.lng b/interface/web/dns/lib/lang/pl_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_naptr.lng b/interface/web/dns/lib/lang/pt_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_naptr.lng b/interface/web/dns/lib/lang/ro_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_naptr.lng b/interface/web/dns/lib/lang/ru_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_naptr.lng b/interface/web/dns/lib/lang/se_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_naptr.lng b/interface/web/dns/lib/lang/sk_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_naptr.lng b/interface/web/dns/lib/lang/tr_dns_naptr.lng
new file mode 100644
index 0000000000..c63e695a86
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
-- 
GitLab


From bf382abfba59cf380f1c77f3d88774b51adf4922 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 10 Apr 2020 10:16:17 -0600
Subject: [PATCH 317/571] clarify purpose of Minimum field (negative cache TTL)

---
 interface/web/dns/lib/lang/ar_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/ca_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/cz_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/de_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/dk_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/en_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/fr_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/hu_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/id_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/it_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/ja_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/nl_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/pl_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/pt_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/ro_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/ru_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/se_dns_soa.lng | 2 +-
 interface/web/dns/lib/lang/sk_dns_soa.lng | 2 +-
 18 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/interface/web/dns/lib/lang/ar_dns_soa.lng b/interface/web/dns/lib/lang/ar_dns_soa.lng
index 4e93c5b41c..c9721cebc0 100644
--- a/interface/web/dns/lib/lang/ar_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list)';
 $wb['active_txt'] = 'Active';
diff --git a/interface/web/dns/lib/lang/ca_dns_soa.lng b/interface/web/dns/lib/lang/ca_dns_soa.lng
index aaf07a0b99..0b6759f073 100644
--- a/interface/web/dns/lib/lang/ca_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Autoriser les transfers de zones vers <br />ces IP (liste séparée par des virgules)';
 $wb['active_txt'] = 'Actif';
diff --git a/interface/web/dns/lib/lang/cz_dns_soa.lng b/interface/web/dns/lib/lang/cz_dns_soa.lng
index 5e4a0c2bb3..cb35f0ef3b 100644
--- a/interface/web/dns/lib/lang/cz_dns_soa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Povolot přenos zóny do <br />těchto IP adres (položky oddělené čárkami)';
 $wb['active_txt'] = 'Aktivní';
diff --git a/interface/web/dns/lib/lang/de_dns_soa.lng b/interface/web/dns/lib/lang/de_dns_soa.lng
index 35d0e54ccd..76d139391d 100644
--- a/interface/web/dns/lib/lang/de_dns_soa.lng
+++ b/interface/web/dns/lib/lang/de_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Seriennummer';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Zonentransfer zu diesen IP Adressen erlauben (mit Komma getrennte Liste)';
 $wb['active_txt'] = 'Aktiv';
diff --git a/interface/web/dns/lib/lang/dk_dns_soa.lng b/interface/web/dns/lib/lang/dk_dns_soa.lng
index 1c8c5cc53c..6a3d71d973 100644
--- a/interface/web/dns/lib/lang/dk_dns_soa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Opfriske';
 $wb['retry_txt'] = 'Prøv igen';
 $wb['expire_txt'] = 'Udløber';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Tillad zone overførsler til <br />disse IP-adresser (kommasepareret liste)';
 $wb['active_txt'] = 'Aktiv';
diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng
index 03dd6834c9..1729a4d0cb 100644
--- a/interface/web/dns/lib/lang/en_dns_soa.lng
+++ b/interface/web/dns/lib/lang/en_dns_soa.lng
@@ -7,7 +7,7 @@ $wb["serial_txt"] = 'Serial';
 $wb["refresh_txt"] = 'Refresh';
 $wb["retry_txt"] = 'Retry';
 $wb["expire_txt"] = 'Expire';
-$wb["minimum_txt"] = 'Minimum';
+$wb["minimum_txt"] = 'Minimum (negative cache ttl)';
 $wb["ttl_txt"] = 'TTL';
 $wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
 $wb["active_txt"] = 'Active';
diff --git a/interface/web/dns/lib/lang/fr_dns_soa.lng b/interface/web/dns/lib/lang/fr_dns_soa.lng
index fa5a5202f6..da63faadbd 100644
--- a/interface/web/dns/lib/lang/fr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Autoriser les transfers de zones vers <br />ces IP (liste séparée par des virgules)';
 $wb['active_txt'] = 'Actif';
diff --git a/interface/web/dns/lib/lang/hu_dns_soa.lng b/interface/web/dns/lib/lang/hu_dns_soa.lng
index 80388e4056..4019614088 100644
--- a/interface/web/dns/lib/lang/hu_dns_soa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list)';
 $wb['active_txt'] = 'Aktív';
diff --git a/interface/web/dns/lib/lang/id_dns_soa.lng b/interface/web/dns/lib/lang/id_dns_soa.lng
index a8b9df0d59..c42890b71c 100644
--- a/interface/web/dns/lib/lang/id_dns_soa.lng
+++ b/interface/web/dns/lib/lang/id_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Izinkan transfer zona ke <br />IP ini (daftar dipisahkan dengan koma)';
 $wb['active_txt'] = 'Aktif';
diff --git a/interface/web/dns/lib/lang/it_dns_soa.lng b/interface/web/dns/lib/lang/it_dns_soa.lng
index 48ba33d550..7ca3cb1cb1 100644
--- a/interface/web/dns/lib/lang/it_dns_soa.lng
+++ b/interface/web/dns/lib/lang/it_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Seriale';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Consenti trasferimento zone a <br />questi IP (elenco separato da virgola)';
 $wb['active_txt'] = 'Attivo';
diff --git a/interface/web/dns/lib/lang/ja_dns_soa.lng b/interface/web/dns/lib/lang/ja_dns_soa.lng
index 2e0fd5515f..3964f3fcdb 100644
--- a/interface/web/dns/lib/lang/ja_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'ゾーン転送を許可するIPアドレス<br />(, で区切ってください)';
 $wb['active_txt'] = '有効';
diff --git a/interface/web/dns/lib/lang/nl_dns_soa.lng b/interface/web/dns/lib/lang/nl_dns_soa.lng
index b29c040df8..121339c00c 100644
--- a/interface/web/dns/lib/lang/nl_dns_soa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serieel';
 $wb['refresh_txt'] = 'Ververs';
 $wb['retry_txt'] = 'Opnieuw proberen';
 $wb['expire_txt'] = 'Verlopen';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Sta zone transfers toe naar <br />deze IPs (komma gescheiden waarden)';
 $wb['active_txt'] = 'Actief';
diff --git a/interface/web/dns/lib/lang/pl_dns_soa.lng b/interface/web/dns/lib/lang/pl_dns_soa.lng
index f2d7e1ad87..1724c4c141 100644
--- a/interface/web/dns/lib/lang/pl_dns_soa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Klucz';
 $wb['refresh_txt'] = 'Odśwież';
 $wb['retry_txt'] = 'Ponów';
 $wb['expire_txt'] = 'Wygasł';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Zezwól na przeniesienie stref do <br />tych adresów IP (adresy rozdzielaj przecinkiem)';
 $wb['active_txt'] = 'Aktywny';
diff --git a/interface/web/dns/lib/lang/pt_dns_soa.lng b/interface/web/dns/lib/lang/pt_dns_soa.lng
index 61ff07f0cb..bdcc1660ff 100644
--- a/interface/web/dns/lib/lang/pt_dns_soa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Permitir transferências de zona para <br />estes IPs (lista separada por ponto e vírgula)';
 $wb['active_txt'] = 'Activo';
diff --git a/interface/web/dns/lib/lang/ro_dns_soa.lng b/interface/web/dns/lib/lang/ro_dns_soa.lng
index 134758f95e..40607318f7 100644
--- a/interface/web/dns/lib/lang/ro_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Reincarca';
 $wb['retry_txt'] = 'Reincearca';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Accepta transfer zone catre <br />aceste  IP-uri (comma separated list)';
 $wb['active_txt'] = 'Active';
diff --git a/interface/web/dns/lib/lang/ru_dns_soa.lng b/interface/web/dns/lib/lang/ru_dns_soa.lng
index fe716cdc1b..7bd15cd638 100644
--- a/interface/web/dns/lib/lang/ru_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Серийный номер';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Повтор';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Xfer (IP)';
 $wb['active_txt'] = 'Активно';
diff --git a/interface/web/dns/lib/lang/se_dns_soa.lng b/interface/web/dns/lib/lang/se_dns_soa.lng
index 034d3235a7..cfeb2f9fde 100644
--- a/interface/web/dns/lib/lang/se_dns_soa.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serienummer';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list)';
 $wb['active_txt'] = 'Aktiv';
diff --git a/interface/web/dns/lib/lang/sk_dns_soa.lng b/interface/web/dns/lib/lang/sk_dns_soa.lng
index ac1f116243..79d49eee92 100644
--- a/interface/web/dns/lib/lang/sk_dns_soa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Seriové čislo';
 $wb['refresh_txt'] = 'Obnoviť';
 $wb['retry_txt'] = 'Opakovať';
 $wb['expire_txt'] = 'Expirovať';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Povoliť prenosy zóny na <br />tieto IP (comma separated list)';
 $wb['active_txt'] = 'Aktivovať';
-- 
GitLab


From 16359a85f6fc7ae563d26c8c86cb31c2ee9a61ee Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 28 Apr 2020 15:49:39 -0600
Subject: [PATCH 318/571] add 'DNS naptr function' to remote api

---
 interface/lib/classes/remote.d/dns.inc.php    | 32 ++++++++++++++++---
 .../web/admin/lib/lang/ar_remote_user.lng     |  1 +
 .../web/admin/lib/lang/bg_remote_user.lng     |  1 +
 .../web/admin/lib/lang/br_remote_user.lng     |  1 +
 .../web/admin/lib/lang/ca_remote_user.lng     |  1 +
 .../web/admin/lib/lang/cz_remote_user.lng     |  1 +
 .../web/admin/lib/lang/de_remote_user.lng     |  1 +
 .../web/admin/lib/lang/dk_remote_user.lng     |  1 +
 .../web/admin/lib/lang/el_remote_user.lng     |  1 +
 .../web/admin/lib/lang/en_remote_user.lng     |  1 +
 .../web/admin/lib/lang/es_remote_user.lng     |  1 +
 .../web/admin/lib/lang/fi_remote_user.lng     |  1 +
 .../web/admin/lib/lang/fr_remote_user.lng     |  1 +
 .../web/admin/lib/lang/hr_remote_user.lng     |  1 +
 .../web/admin/lib/lang/hu_remote_user.lng     |  1 +
 .../web/admin/lib/lang/id_remote_user.lng     |  1 +
 .../web/admin/lib/lang/it_remote_user.lng     |  1 +
 .../web/admin/lib/lang/ja_remote_user.lng     |  1 +
 .../web/admin/lib/lang/nl_remote_user.lng     |  1 +
 .../web/admin/lib/lang/pl_remote_user.lng     |  1 +
 .../web/admin/lib/lang/pt_remote_user.lng     |  1 +
 .../web/admin/lib/lang/ro_remote_user.lng     |  1 +
 .../web/admin/lib/lang/ru_remote_user.lng     |  1 +
 .../web/admin/lib/lang/se_remote_user.lng     |  1 +
 .../web/admin/lib/lang/sk_remote_user.lng     |  1 +
 .../web/admin/lib/lang/tr_remote_user.lng     |  1 +
 interface/web/dns/lib/remote.conf.php         |  3 +-
 27 files changed, 54 insertions(+), 6 deletions(-)

diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 434af6a983..98589f55c4 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -213,13 +213,13 @@ class remoting_dns extends remoting {
 
 	
 	//* Add a slave zone
-    public function dns_slave_add($session_id, $client_id, $params) {
+	public function dns_slave_add($session_id, $client_id, $params) {
 		if(!$this->checkPerm($session_id, 'dns_zone_add')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
 		return $this->insertQuery('../dns/form/dns_slave.tform.php', $client_id, $params);
-    }
+	}
 	
 	//* Update a slave zone
 	public function dns_slave_update($session_id, $client_id, $primary_id, $params) {
@@ -231,14 +231,14 @@ class remoting_dns extends remoting {
 		return $affected_rows;
 	}
 
-    //* Delete a slave zone
-    public function dns_slave_delete($session_id, $primary_id) {
+	//* Delete a slave zone
+	public function dns_slave_delete($session_id, $primary_id) {
 		if(!$this->checkPerm($session_id, 'dns_zone_delete')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
 		return $this->deleteQuery('../dns/form/dns_slave.tform.php', $primary_id);
-    }
+	}
 
 	//* Get record id by origin
 	public function dns_zone_get_id($session_id, $origin) {
@@ -494,6 +494,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_naptr_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'NAPTR');
+	}
+
+	//* Add a record
+	public function dns_naptr_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'NAPTR');
+	}
+
+	//* Update a record
+	public function dns_naptr_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'NAPTR');
+	}
+
+	//* Delete a record
+	public function dns_naptr_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'NAPTR');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_ns_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'NS');
diff --git a/interface/web/admin/lib/lang/ar_remote_user.lng b/interface/web/admin/lib/lang/ar_remote_user.lng
index d0504005e3..7ab3696dcb 100644
--- a/interface/web/admin/lib/lang/ar_remote_user.lng
+++ b/interface/web/admin/lib/lang/ar_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/bg_remote_user.lng b/interface/web/admin/lib/lang/bg_remote_user.lng
index 6eac31e4fe..5f106fa85d 100644
--- a/interface/web/admin/lib/lang/bg_remote_user.lng
+++ b/interface/web/admin/lib/lang/bg_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias функции';
 $wb['DNS cname functions'] = 'DNS cname функции';
 $wb['DNS hinfo functions'] = 'DNS hinfo функции';
 $wb['DNS mx functions'] = 'DNS mx функции';
+$wb['DNS naptr functions'] = 'DNS naptr функции';
 $wb['DNS ns functions'] = 'DNS ns функции';
 $wb['DNS ptr functions'] = 'DNS ptr функции';
 $wb['DNS rp functions'] = 'DNS rp функции';
diff --git a/interface/web/admin/lib/lang/br_remote_user.lng b/interface/web/admin/lib/lang/br_remote_user.lng
index fcaa6732c8..68ea3fbd20 100644
--- a/interface/web/admin/lib/lang/br_remote_user.lng
+++ b/interface/web/admin/lib/lang/br_remote_user.lng
@@ -50,6 +50,7 @@ $wb['DNS cname functions'] = 'Funções de CNAME dns';
 $wb['DNS hinfo functions'] = 'Funções de HINFO dns';
 $wb['DNS mx functions'] = 'Funções de MX dns';
 $wb['DNS ns functions'] = 'Funções de NS dns';
+$wb['DNS naptr functions'] = 'Funções de NAPTR dns';
 $wb['DNS ptr functions'] = 'Funções de PTR dns';
 $wb['DNS rp functions'] = 'Funções de RP dns';
 $wb['DNS srv functions'] = 'Funções de SVR dns';
diff --git a/interface/web/admin/lib/lang/ca_remote_user.lng b/interface/web/admin/lib/lang/ca_remote_user.lng
index 2fc633b555..fb135d7555 100644
--- a/interface/web/admin/lib/lang/ca_remote_user.lng
+++ b/interface/web/admin/lib/lang/ca_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/cz_remote_user.lng b/interface/web/admin/lib/lang/cz_remote_user.lng
index aeacc442ca..e76e6d03dc 100644
--- a/interface/web/admin/lib/lang/cz_remote_user.lng
+++ b/interface/web/admin/lib/lang/cz_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'Funkce DNS ALIAS';
 $wb['DNS cname functions'] = 'Funkce DNS CNAME';
 $wb['DNS hinfo functions'] = 'Funkce DNS HINFO';
 $wb['DNS mx functions'] = 'Funkce DNS MX';
+$wb['DNS naptr functions'] = 'Funkce DNS NAPTR';
 $wb['DNS ns functions'] = 'Funkce DNS NS';
 $wb['DNS ptr functions'] = 'Funkce DNS PTR';
 $wb['DNS rp functions'] = 'Funkce DNS RP';
diff --git a/interface/web/admin/lib/lang/de_remote_user.lng b/interface/web/admin/lib/lang/de_remote_user.lng
index 164a0fb81a..b40cc5c0e0 100644
--- a/interface/web/admin/lib/lang/de_remote_user.lng
+++ b/interface/web/admin/lib/lang/de_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS Alias Funktionen';
 $wb['DNS cname functions'] = 'DNS cname Funktionen';
 $wb['DNS hinfo functions'] = 'DNS hinfo Funktionen';
 $wb['DNS mx functions'] = 'DNS mx Funktionen';
+$wb['DNS naptr functions'] = 'DNS NAPTR Funktionen';
 $wb['DNS ns functions'] = 'DNS ns Funktionen';
 $wb['DNS ptr functions'] = 'DNS ptr Funktionen';
 $wb['DNS rp functions'] = 'DNS rp Funktionen';
diff --git a/interface/web/admin/lib/lang/dk_remote_user.lng b/interface/web/admin/lib/lang/dk_remote_user.lng
index 80f61c8929..2d89300d5b 100644
--- a/interface/web/admin/lib/lang/dk_remote_user.lng
+++ b/interface/web/admin/lib/lang/dk_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias funktioner';
 $wb['DNS cname functions'] = 'DNS cname funktioner';
 $wb['DNS hinfo functions'] = 'DNS hinfo funktioner';
 $wb['DNS mx functions'] = 'DNS mx funktioner';
+$wb['DNS naptr functions'] = 'DNS naptr funktioner';
 $wb['DNS ns functions'] = 'DNS ns funktioner';
 $wb['DNS ptr functions'] = 'DNS ptr funktioner';
 $wb['DNS rp functions'] = 'DNS rp funktioner';
diff --git a/interface/web/admin/lib/lang/el_remote_user.lng b/interface/web/admin/lib/lang/el_remote_user.lng
index c38f1de2f0..ca20ee81f2 100644
--- a/interface/web/admin/lib/lang/el_remote_user.lng
+++ b/interface/web/admin/lib/lang/el_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'Ενέργειες εγγραφών alias του D
 $wb['DNS cname functions'] = 'Ενέργειες εγγραφών cname του DNS';
 $wb['DNS hinfo functions'] = 'Ενέργειες εγγραφών hinfo του DNS';
 $wb['DNS mx functions'] = 'Ενέργειες εγγραφών mx του DNS';
+$wb['DNS naptr functions'] = 'Ενέργειες εγγραφών naptr του DNS';
 $wb['DNS ns functions'] = 'Ενέργειες εγγραφών ns του DNS';
 $wb['DNS ptr functions'] = 'Ενέργειες εγγραφών ptr του DNS';
 $wb['DNS rp functions'] = 'Ενέργειες εγγραφών rp του DNS';
diff --git a/interface/web/admin/lib/lang/en_remote_user.lng b/interface/web/admin/lib/lang/en_remote_user.lng
index 2fc633b555..fb135d7555 100644
--- a/interface/web/admin/lib/lang/en_remote_user.lng
+++ b/interface/web/admin/lib/lang/en_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/es_remote_user.lng b/interface/web/admin/lib/lang/es_remote_user.lng
index 7cefa1e5db..79a1cd3f52 100644
--- a/interface/web/admin/lib/lang/es_remote_user.lng
+++ b/interface/web/admin/lib/lang/es_remote_user.lng
@@ -6,6 +6,7 @@ $wb['DNS alias functions'] = 'Funciones DNS para registro ALIAS';
 $wb['DNS cname functions'] = 'Funciones DNS para registro CNAME';
 $wb['DNS hinfo functions'] = 'Funciones DNS para registro HINFO';
 $wb['DNS mx functions'] = 'Funciones DNS para registro MX';
+$wb['DNS naptr functions'] = 'Funciones DNS para registro NAPTR';
 $wb['DNS ns functions'] = 'Funciones DNS para registro NS';
 $wb['DNS ptr functions'] = 'Funciones DNS para registro PTR';
 $wb['DNS rp functions'] = 'Funciones DNS para registro RP';
diff --git a/interface/web/admin/lib/lang/fi_remote_user.lng b/interface/web/admin/lib/lang/fi_remote_user.lng
index 2ae3420d62..b87d663635 100644
--- a/interface/web/admin/lib/lang/fi_remote_user.lng
+++ b/interface/web/admin/lib/lang/fi_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias-tietuetoiminnot';
 $wb['DNS cname functions'] = 'DNS cname-tietuetoiminnot';
 $wb['DNS hinfo functions'] = 'DNS hinfo-tietuetoiminnot';
 $wb['DNS mx functions'] = 'DNS mx-tietuetoiminnot';
+$wb['DNS naptr functions'] = 'DNS naptr-tietuetoiminnot';
 $wb['DNS ns functions'] = 'DNS ns-tietuetoiminnot';
 $wb['DNS ptr functions'] = 'DNS ptr-tietuetoiminnot';
 $wb['DNS rp functions'] = 'DNS rp-tietuetoiminnot';
diff --git a/interface/web/admin/lib/lang/fr_remote_user.lng b/interface/web/admin/lib/lang/fr_remote_user.lng
index 1594e60fb4..943e0bb2ef 100644
--- a/interface/web/admin/lib/lang/fr_remote_user.lng
+++ b/interface/web/admin/lib/lang/fr_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'Fonction alias DNS';
 $wb['DNS cname functions'] = 'Fonctions CNAME DNS';
 $wb['DNS hinfo functions'] = 'Fonctions HINFO DNS';
 $wb['DNS mx functions'] = 'Fonctions MX DNS';
+$wb['DNS naptr functions'] = 'Fonctions NAPTR DNS';
 $wb['DNS ns functions'] = 'Fonctions NS DNS';
 $wb['DNS ptr functions'] = 'Fonctions PTR DNS';
 $wb['DNS rp functions'] = 'Fonctions RP DNS';
diff --git a/interface/web/admin/lib/lang/hr_remote_user.lng b/interface/web/admin/lib/lang/hr_remote_user.lng
index 069177e5ed..e92ae26ed4 100644
--- a/interface/web/admin/lib/lang/hr_remote_user.lng
+++ b/interface/web/admin/lib/lang/hr_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias funkcije';
 $wb['DNS cname functions'] = 'DNS cname funkcije';
 $wb['DNS hinfo functions'] = 'DNS hinfo funkcije';
 $wb['DNS mx functions'] = 'DNS mx funkcije';
+$wb['DNS naptr functions'] = 'DNS naptr funkcije';
 $wb['DNS ns functions'] = 'DNS ns funkcije';
 $wb['DNS ptr functions'] = 'DNS ptr funkcije';
 $wb['DNS rp functions'] = 'DNS rp funkcije';
diff --git a/interface/web/admin/lib/lang/hu_remote_user.lng b/interface/web/admin/lib/lang/hu_remote_user.lng
index bae9d82f53..81560e3aa0 100644
--- a/interface/web/admin/lib/lang/hu_remote_user.lng
+++ b/interface/web/admin/lib/lang/hu_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/id_remote_user.lng b/interface/web/admin/lib/lang/id_remote_user.lng
index cc6efb627a..839b5fa15d 100644
--- a/interface/web/admin/lib/lang/id_remote_user.lng
+++ b/interface/web/admin/lib/lang/id_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'Fungsi-fungsi Alias DNS';
 $wb['DNS cname functions'] = 'Fungsi-fungsi CNAME DNS';
 $wb['DNS hinfo functions'] = 'Fungsi-fungsi HINFO DNS';
 $wb['DNS mx functions'] = 'Fungsi-fungsi MX DNS';
+$wb['DNS naptr functions'] = 'Fungsi-fungsi NAPTR DNS';
 $wb['DNS ns functions'] = 'Fungsi-fungsi NS DNS';
 $wb['DNS ptr functions'] = 'Fungsi-fungsi PTR DNS';
 $wb['DNS rp functions'] = 'Fungsi-fungsi RP DNS';
diff --git a/interface/web/admin/lib/lang/it_remote_user.lng b/interface/web/admin/lib/lang/it_remote_user.lng
index caef58a8c6..efbe416a41 100644
--- a/interface/web/admin/lib/lang/it_remote_user.lng
+++ b/interface/web/admin/lib/lang/it_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/ja_remote_user.lng b/interface/web/admin/lib/lang/ja_remote_user.lng
index 2b9ce2bbf0..fb4d27007e 100644
--- a/interface/web/admin/lib/lang/ja_remote_user.lng
+++ b/interface/web/admin/lib/lang/ja_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/nl_remote_user.lng b/interface/web/admin/lib/lang/nl_remote_user.lng
index f049116094..601574583c 100644
--- a/interface/web/admin/lib/lang/nl_remote_user.lng
+++ b/interface/web/admin/lib/lang/nl_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias functies';
 $wb['DNS cname functions'] = 'DNS cname functies';
 $wb['DNS hinfo functions'] = 'DNS hinfo functies';
 $wb['DNS mx functions'] = 'DNS mx functies';
+$wb['DNS naptr functions'] = 'DNS naptr functies';
 $wb['DNS ns functions'] = 'DNS ns functies';
 $wb['DNS ptr functions'] = 'DNS ptr functies';
 $wb['DNS rp functions'] = 'DNS rp functies';
diff --git a/interface/web/admin/lib/lang/pl_remote_user.lng b/interface/web/admin/lib/lang/pl_remote_user.lng
index 5df48fb29b..f73fd19a0c 100644
--- a/interface/web/admin/lib/lang/pl_remote_user.lng
+++ b/interface/web/admin/lib/lang/pl_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'Funkcje aliasów DNS';
 $wb['DNS cname functions'] = 'Funkcje rekordu CNAME DNS';
 $wb['DNS hinfo functions'] = 'Funkcje rekordu HINFO DNS';
 $wb['DNS mx functions'] = 'Funkcje rekordu MX DNS';
+$wb['DNS naptr functions'] = 'Funkcje rekordu NAPTR DNS';
 $wb['DNS ns functions'] = 'Funkcje rekordu NS DNS';
 $wb['DNS ptr functions'] = 'Funkcje rekordu PTR DNS';
 $wb['DNS rp functions'] = 'Funkcje rekordu RP DNS';
diff --git a/interface/web/admin/lib/lang/pt_remote_user.lng b/interface/web/admin/lib/lang/pt_remote_user.lng
index f23a6abd5c..a4d1ce5c1e 100644
--- a/interface/web/admin/lib/lang/pt_remote_user.lng
+++ b/interface/web/admin/lib/lang/pt_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'Funções de alias DNS';
 $wb['DNS cname functions'] = 'Funções de cname DNS';
 $wb['DNS hinfo functions'] = 'Funções de hinfo DNS';
 $wb['DNS mx functions'] = 'Funções de mx DNS';
+$wb['DNS naptr functions'] = 'Funções de naptr DNS';
 $wb['DNS ns functions'] = 'Funções de ns DNS';
 $wb['DNS ptr functions'] = 'Funções de ptr DNS';
 $wb['DNS rp functions'] = 'Funções de rp DNS';
diff --git a/interface/web/admin/lib/lang/ro_remote_user.lng b/interface/web/admin/lib/lang/ro_remote_user.lng
index d0504005e3..7ab3696dcb 100644
--- a/interface/web/admin/lib/lang/ro_remote_user.lng
+++ b/interface/web/admin/lib/lang/ro_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/ru_remote_user.lng b/interface/web/admin/lib/lang/ru_remote_user.lng
index 2d556b0800..f12fce5d64 100644
--- a/interface/web/admin/lib/lang/ru_remote_user.lng
+++ b/interface/web/admin/lib/lang/ru_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'Функции DNS ALIAS';
 $wb['DNS cname functions'] = 'Функции DNS CNAME';
 $wb['DNS hinfo functions'] = 'Функции DNS hinfo';
 $wb['DNS mx functions'] = 'Функции DNS mx';
+$wb['DNS naptr functions'] = 'Функции DNS naptr';
 $wb['DNS ns functions'] = 'Функции DNS ns';
 $wb['DNS ptr functions'] = 'Функции DNS ptr';
 $wb['DNS rp functions'] = 'Функции DNS rp';
diff --git a/interface/web/admin/lib/lang/se_remote_user.lng b/interface/web/admin/lib/lang/se_remote_user.lng
index 657e5878f1..f983c1c5c8 100644
--- a/interface/web/admin/lib/lang/se_remote_user.lng
+++ b/interface/web/admin/lib/lang/se_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/sk_remote_user.lng b/interface/web/admin/lib/lang/sk_remote_user.lng
index 200cd28861..2ec21c3900 100644
--- a/interface/web/admin/lib/lang/sk_remote_user.lng
+++ b/interface/web/admin/lib/lang/sk_remote_user.lng
@@ -34,6 +34,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/tr_remote_user.lng b/interface/web/admin/lib/lang/tr_remote_user.lng
index a713cad0d4..8d946bb97b 100644
--- a/interface/web/admin/lib/lang/tr_remote_user.lng
+++ b/interface/web/admin/lib/lang/tr_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias iÅŸlevleri';
 $wb['DNS cname functions'] = 'DNS cname iÅŸlevleri';
 $wb['DNS hinfo functions'] = 'DNS hinfo iÅŸlevleri';
 $wb['DNS mx functions'] = 'DNS mx iÅŸlevleri';
+$wb['DNS naptr functions'] = 'DNS naptr iÅŸlevleri';
 $wb['DNS ns functions'] = 'DNS ns iÅŸlevleri';
 $wb['DNS ptr functions'] = 'DNS ptr iÅŸlevleri';
 $wb['DNS rp functions'] = 'DNS rp iÅŸlevleri';
diff --git a/interface/web/dns/lib/remote.conf.php b/interface/web/dns/lib/remote.conf.php
index 0ca556926b..376d65df7e 100644
--- a/interface/web/dns/lib/remote.conf.php
+++ b/interface/web/dns/lib/remote.conf.php
@@ -9,11 +9,12 @@ $function_list['dns_ds_get,dns_ds_add,dns_ds_update,dns_ds_delete'] = 'DNS ds fu
 $function_list['dns_hinfo_get,dns_hinfo_add,dns_hinfo_update,dns_hinfo_delete'] = 'DNS hinfo functions';
 $function_list['dns_loc_get,dns_loc_add,dns_loc_update,dns_loc_delete'] = 'DNS loc functions';
 $function_list['dns_mx_get,dns_mx_add,dns_mx_update,dns_mx_delete'] = 'DNS mx functions';
-$function_list['dns_tlsa_get,dns_tlsa_add,dns_tlsa_update,dns_tlsa_delete'] = 'DNS tlsa functions';
+$function_list['dns_naptr_get,dns_naptr_add,dns_naptr_update,dns_naptr_delete'] = 'DNS naptr functions';
 $function_list['dns_ns_get,dns_ns_add,dns_ns_update,dns_ns_delete'] = 'DNS ns functions';
 $function_list['dns_ptr_get,dns_ptr_add,dns_ptr_update,dns_ptr_delete'] = 'DNS ptr functions';
 $function_list['dns_rp_get,dns_rp_add,dns_rp_update,dns_rp_delete'] = 'DNS rp functions';
 $function_list['dns_srv_get,dns_srv_add,dns_srv_update,dns_srv_delete'] = 'DNS srv functions';
+$function_list['dns_tlsa_get,dns_tlsa_add,dns_tlsa_update,dns_tlsa_delete'] = 'DNS tlsa functions';
 $function_list['dns_txt_get,dns_txt_add,dns_txt_update,dns_txt_delete'] = 'DNS txt functions';
 
 ?>
-- 
GitLab


From 8d2f2ec7a3bd159fb085abefae2557a3ddaf7420 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 28 Apr 2020 15:50:17 -0600
Subject: [PATCH 319/571] add DNS naptr functions to API docs

---
 remoting_client/API-docs/dns_naptr_add.html   | 38 +++++++++++++++++++
 .../API-docs/dns_naptr_delete.html            | 29 ++++++++++++++
 remoting_client/API-docs/dns_naptr_get.html   | 29 ++++++++++++++
 .../API-docs/dns_naptr_update.html            | 38 +++++++++++++++++++
 remoting_client/API-docs/navigation.html      |  4 ++
 5 files changed, 138 insertions(+)
 create mode 100644 remoting_client/API-docs/dns_naptr_add.html
 create mode 100644 remoting_client/API-docs/dns_naptr_delete.html
 create mode 100644 remoting_client/API-docs/dns_naptr_get.html
 create mode 100644 remoting_client/API-docs/dns_naptr_update.html

diff --git a/remoting_client/API-docs/dns_naptr_add.html b/remoting_client/API-docs/dns_naptr_add.html
new file mode 100644
index 0000000000..d691d65b3a
--- /dev/null
+++ b/remoting_client/API-docs/dns_naptr_add.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>dns_naptr_add(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Adds a dns server location record if <em>type</em> is <em>naptr</em>.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$params</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> stamp&nbsp;&nbsp;(<span class="paratype">timestamp</span>)</p>
+<p class="margin"> serial&nbsp;&nbsp;(<span class="paratype">int(10)</span>)</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns the ID of the newly added naptr resource record.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_naptr_delete.html b/remoting_client/API-docs/dns_naptr_delete.html
new file mode 100644
index 0000000000..376bd18aa2
--- /dev/null
+++ b/remoting_client/API-docs/dns_naptr_delete.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>dns_naptr_delete(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Deletes target dns naptr resource record.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns the number of deleted records.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_naptr_get.html b/remoting_client/API-docs/dns_naptr_get.html
new file mode 100644
index 0000000000..eb3d6b0eda
--- /dev/null
+++ b/remoting_client/API-docs/dns_naptr_get.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>dns_naptr_get(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Retrieves information about target dns naptr resource record.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns all fields and values of the chosen dns naptr resource record.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_naptr_update.html b/remoting_client/API-docs/dns_naptr_update.html
new file mode 100644
index 0000000000..97f40f056f
--- /dev/null
+++ b/remoting_client/API-docs/dns_naptr_update.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>dns_naptr_update(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<b>Description: </b>
+<p class="margin"> Updates a dns server location record if <em>type</em> is <em>naptr</em>.</p><br>
+<b>Input Variables: </b> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
+<b>Parameters (in <span style= "color:#A17FFF">$params</span>): </b>
+<p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> stamp&nbsp;&nbsp;(<span class="paratype">timestamp</span>)</p>
+<p class="margin"> serial&nbsp;&nbsp;(<span class="paratype">int(10)</span>)</p>
+<b>Output: </b> 
+<p class="margin"> Returns the number of affected rows.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/navigation.html b/remoting_client/API-docs/navigation.html
index 02b5876b3d..89ef7bc8e4 100644
--- a/remoting_client/API-docs/navigation.html
+++ b/remoting_client/API-docs/navigation.html
@@ -75,6 +75,10 @@
 <p><a href="dns_mx_delete.html" target="content">dns_mx_delete</a></p>
 <p><a href="dns_mx_get.html" target="content">dns_mx_get</a></p>
 <p><a href="dns_mx_update.html" target="content">dns_mx_update</a></p>
+<p><a href="dns_naptr_add.html" target="content">dns_naptr_add</a></p>
+<p><a href="dns_naptr_delete.html" target="content">dns_naptr_delete</a></p>
+<p><a href="dns_naptr_get.html" target="content">dns_naptr_get</a></p>
+<p><a href="dns_naptr_update.html" target="content">dns_naptr_update</a></p>
 <p><a href="dns_ns_add.html" target="content">dns_ns_add</a></p>
 <p><a href="dns_ns_delete.html" target="content">dns_ns_delete</a></p>
 <p><a href="dns_ns_get.html" target="content">dns_ns_get</a></p>
-- 
GitLab


From c169e5846574b946f72d498447830ee3bde0c564 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 28 Apr 2020 16:01:57 -0600
Subject: [PATCH 320/571] add dns_naptr_* api examples

---
 remoting_client/examples/dns_naptr_add.php    | 58 +++++++++++++++++++
 remoting_client/examples/dns_naptr_delete.php | 45 ++++++++++++++
 remoting_client/examples/dns_naptr_get.php    | 45 ++++++++++++++
 remoting_client/examples/dns_naptr_update.php | 53 +++++++++++++++++
 4 files changed, 201 insertions(+)
 create mode 100644 remoting_client/examples/dns_naptr_add.php
 create mode 100644 remoting_client/examples/dns_naptr_delete.php
 create mode 100644 remoting_client/examples/dns_naptr_get.php
 create mode 100644 remoting_client/examples/dns_naptr_update.php

diff --git a/remoting_client/examples/dns_naptr_add.php b/remoting_client/examples/dns_naptr_add.php
new file mode 100644
index 0000000000..5abd220d1b
--- /dev/null
+++ b/remoting_client/examples/dns_naptr_add.php
@@ -0,0 +1,58 @@
+<?php
+
+require 'soap_config.php';
+
+$context = stream_context_create([
+	'ssl' => [
+		// set some SSL/TLS specific options
+		'verify_peer' => false,
+		'verify_peer_name' => false,
+		'allow_self_signed' => true
+	]
+]);
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	$timestamp = date("Y-m-d H:i:s");
+
+	//* Set the function parameters.
+	$client_id = 1;
+	$params = array(
+		'server_id' => 1,
+		'zone' => 10,
+		'name' => 'server',
+		'type' => 'naptr',
+		'data' => '100 "s" "thttp+L2R" "" thttp.example.com.',
+		'aux' => '100',
+		'ttl' => '3600',
+		'active' => 'y',
+		'stamp' => $timestamp,
+		'serial' => '1',
+	);
+
+	$id = $client->dns_naptr_add($session_id, $client_id, $params);
+
+	echo "ID: ".$id."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_naptr_delete.php b/remoting_client/examples/dns_naptr_delete.php
new file mode 100644
index 0000000000..ca252132f0
--- /dev/null
+++ b/remoting_client/examples/dns_naptr_delete.php
@@ -0,0 +1,45 @@
+<?php
+
+require 'soap_config.php';
+
+$context = stream_context_create([
+	'ssl' => [
+		// set some SSL/TLS specific options
+		'verify_peer' => false,
+		'verify_peer_name' => false,
+		'allow_self_signed' => true
+	]
+]);
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Parameters
+	$id = 11;
+
+
+	$affected_rows = $client->dns_naptr_delete($session_id, $id);
+
+	echo "Number of records that have been deleted: ".$affected_rows."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_naptr_get.php b/remoting_client/examples/dns_naptr_get.php
new file mode 100644
index 0000000000..db9dffde9b
--- /dev/null
+++ b/remoting_client/examples/dns_naptr_get.php
@@ -0,0 +1,45 @@
+<?php
+
+require 'soap_config.php';
+
+
+$context = stream_context_create([
+	'ssl' => [
+		// set some SSL/TLS specific options
+		'verify_peer' => false,
+		'verify_peer_name' => false,
+		'allow_self_signed' => true
+	]
+]);
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Set the function parameters.
+	$id = 11;
+
+	$dns_record = $client->dns_naptr_get($session_id, $id);
+
+	print_r($dns_record);
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_naptr_update.php b/remoting_client/examples/dns_naptr_update.php
new file mode 100644
index 0000000000..9b0784a69d
--- /dev/null
+++ b/remoting_client/examples/dns_naptr_update.php
@@ -0,0 +1,53 @@
+<?php
+
+require 'soap_config.php';
+
+
+$context = stream_context_create([
+	'ssl' => [
+		// set some SSL/TLS specific options
+		'verify_peer' => false,
+		'verify_peer_name' => false,
+		'allow_self_signed' => true
+	]
+]);
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Parameters
+	$id = 11;
+	$client_id = 1;
+
+
+	//* Get the dns record
+	$dns_record = $client->dns_naptr_get($session_id, $id);
+
+	//* Change active to inactive
+	$dns_record['active'] = 'n';
+
+	$affected_rows = $client->dns_naptr_update($session_id, $client_id, $id, $dns_record);
+
+	echo "Number of records that have been changed in the database: ".$affected_rows."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
-- 
GitLab


From 8e0dbf86b4d2d2dc718b318d0b8ba9597d7f7cc2 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 27 May 2020 12:24:42 -0600
Subject: [PATCH 321/571] change to long array syntax

---
 remoting_client/examples/dns_naptr_add.php    | 8 ++++----
 remoting_client/examples/dns_naptr_delete.php | 8 ++++----
 remoting_client/examples/dns_naptr_get.php    | 8 ++++----
 remoting_client/examples/dns_naptr_update.php | 8 ++++----
 4 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/remoting_client/examples/dns_naptr_add.php b/remoting_client/examples/dns_naptr_add.php
index 5abd220d1b..e6665a5c4b 100644
--- a/remoting_client/examples/dns_naptr_add.php
+++ b/remoting_client/examples/dns_naptr_add.php
@@ -2,14 +2,14 @@
 
 require 'soap_config.php';
 
-$context = stream_context_create([
-	'ssl' => [
+$context = stream_context_create( array(
+	'ssl' => array(
 		// set some SSL/TLS specific options
 		'verify_peer' => false,
 		'verify_peer_name' => false,
 		'allow_self_signed' => true
-	]
-]);
+	),
+));
 
 
 $client = new SoapClient(null, array('location' => $soap_location,
diff --git a/remoting_client/examples/dns_naptr_delete.php b/remoting_client/examples/dns_naptr_delete.php
index ca252132f0..1d794ccea7 100644
--- a/remoting_client/examples/dns_naptr_delete.php
+++ b/remoting_client/examples/dns_naptr_delete.php
@@ -2,14 +2,14 @@
 
 require 'soap_config.php';
 
-$context = stream_context_create([
-	'ssl' => [
+$context = stream_context_create( array(
+	'ssl' => array(
 		// set some SSL/TLS specific options
 		'verify_peer' => false,
 		'verify_peer_name' => false,
 		'allow_self_signed' => true
-	]
-]);
+	),
+));
 
 
 $client = new SoapClient(null, array('location' => $soap_location,
diff --git a/remoting_client/examples/dns_naptr_get.php b/remoting_client/examples/dns_naptr_get.php
index db9dffde9b..b9beec45f4 100644
--- a/remoting_client/examples/dns_naptr_get.php
+++ b/remoting_client/examples/dns_naptr_get.php
@@ -3,14 +3,14 @@
 require 'soap_config.php';
 
 
-$context = stream_context_create([
-	'ssl' => [
+$context = stream_context_create( array(
+	'ssl' => array(
 		// set some SSL/TLS specific options
 		'verify_peer' => false,
 		'verify_peer_name' => false,
 		'allow_self_signed' => true
-	]
-]);
+	),
+));
 
 
 $client = new SoapClient(null, array('location' => $soap_location,
diff --git a/remoting_client/examples/dns_naptr_update.php b/remoting_client/examples/dns_naptr_update.php
index 9b0784a69d..1f97464687 100644
--- a/remoting_client/examples/dns_naptr_update.php
+++ b/remoting_client/examples/dns_naptr_update.php
@@ -3,14 +3,14 @@
 require 'soap_config.php';
 
 
-$context = stream_context_create([
-	'ssl' => [
+$context = stream_context_create( array(
+	'ssl' => array(
 		// set some SSL/TLS specific options
 		'verify_peer' => false,
 		'verify_peer_name' => false,
 		'allow_self_signed' => true
-	]
-]);
+	),
+));
 
 
 $client = new SoapClient(null, array('location' => $soap_location,
-- 
GitLab


From eb3c7baafd7848210ba82fa75eae2e9fa8d59b98 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 27 May 2020 12:30:08 -0600
Subject: [PATCH 322/571] add dns_tlsa_* remote api functions.  fixes #4360

---
 interface/lib/classes/remote.d/dns.inc.php | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 98589f55c4..1d9ec35f54 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -604,6 +604,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_tlsa_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'TLSA');
+	}
+
+	//* Add a record
+	public function dns_tlsa_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'TLSA');
+	}
+
+	//* Update a record
+	public function dns_tlsa_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'TLSA');
+	}
+
+	//* Delete a record
+	public function dns_tlsa_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'TLSA');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_txt_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'TXT');
-- 
GitLab


From 4c0c99a37ac8a7d78db906b784db6dfce2c263cc Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 27 May 2020 12:36:23 -0600
Subject: [PATCH 323/571] add dns_caa_* remote api functions.  fixes #5559

---
 interface/lib/classes/remote.d/dns.inc.php | 22 ++++++++++++++++++++++
 interface/web/dns/lib/remote.conf.php      |  1 +
 2 files changed, 23 insertions(+)

diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 1d9ec35f54..36180ace3e 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -428,6 +428,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_cname_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'CAA');
+	}
+
+	//* Add a record
+	public function dns_cname_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'CAA');
+	}
+
+	//* Update a record
+	public function dns_cname_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'CAA');
+	}
+
+	//* Delete a record
+	public function dns_cname_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'CAA');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_cname_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'CNAME');
diff --git a/interface/web/dns/lib/remote.conf.php b/interface/web/dns/lib/remote.conf.php
index 376d65df7e..ea725de8a4 100644
--- a/interface/web/dns/lib/remote.conf.php
+++ b/interface/web/dns/lib/remote.conf.php
@@ -4,6 +4,7 @@ $function_list['dns_zone_get,dns_zone_get_id,dns_zone_add,dns_zone_update,dns_zo
 $function_list['dns_a_get,dns_a_add,dns_a_update,dns_a_delete'] = 'DNS a functions';
 $function_list['dns_aaaa_get,dns_aaaa_add,dns_aaaa_update,dns_aaaa_delete'] = 'DNS aaaa functions';
 $function_list['dns_alias_get,dns_alias_add,dns_alias_update,dns_alias_delete'] = 'DNS alias functions';
+$function_list['dns_caa_get,dns_caa_add,dns_caa_update,dns_caa_delete'] = 'DNS caa functions';
 $function_list['dns_cname_get,dns_cname_add,dns_cname_update,dns_cname_delete'] = 'DNS cname functions';
 $function_list['dns_ds_get,dns_ds_add,dns_ds_update,dns_ds_delete'] = 'DNS ds functions';
 $function_list['dns_hinfo_get,dns_hinfo_add,dns_hinfo_update,dns_hinfo_delete'] = 'DNS hinfo functions';
-- 
GitLab


From 050e0333b8b00d85240a2b721003d451f9536232 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 29 May 2020 10:33:50 -0600
Subject: [PATCH 324/571] check AAAA and CNAME for duplicate records.  fixes
 #5623

---
 interface/web/dns/dns_aaaa_edit.php        | 8 ++++++++
 interface/web/dns/dns_cname_edit.php       | 2 +-
 interface/web/dns/lib/lang/ar_dns_a.lng    | 2 +-
 interface/web/dns/lib/lang/ar_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/bg_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/br_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/ca_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/cz_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/de_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/dk_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/el_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/en_dns_a.lng    | 4 ++--
 interface/web/dns/lib/lang/en_dns_aaaa.lng | 3 ++-
 interface/web/dns/lib/lang/es_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/fi_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/fr_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/hr_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/hu_dns_a.lng    | 2 +-
 interface/web/dns/lib/lang/hu_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/id_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/it_dns_a.lng    | 2 +-
 interface/web/dns/lib/lang/it_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/ja_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/nl_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/pl_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/pt_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/ro_dns_a.lng    | 2 +-
 interface/web/dns/lib/lang/ro_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/ru_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/se_dns_a.lng    | 2 +-
 interface/web/dns/lib/lang/se_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/sk_dns_aaaa.lng | 1 +
 interface/web/dns/lib/lang/tr_dns_aaaa.lng | 1 +
 33 files changed, 42 insertions(+), 9 deletions(-)

diff --git a/interface/web/dns/dns_aaaa_edit.php b/interface/web/dns/dns_aaaa_edit.php
index 006e71cf4c..780fbcc80e 100644
--- a/interface/web/dns/dns_aaaa_edit.php
+++ b/interface/web/dns/dns_aaaa_edit.php
@@ -45,6 +45,14 @@ require_once './dns_edit_base.php';
 // Loading classes
 class page_action extends dns_page_action {
 
+	protected function checkDuplicate() {
+		global $app;
+		//* Check for duplicates where IP and hostname are the same
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'AAAA' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		if($tmp['number'] > 0) return true;
+		return false;
+	}
+
 }
 
 $page = new page_action;
diff --git a/interface/web/dns/dns_cname_edit.php b/interface/web/dns/dns_cname_edit.php
index 403650c1c4..1f17169e60 100644
--- a/interface/web/dns/dns_cname_edit.php
+++ b/interface/web/dns/dns_cname_edit.php
@@ -48,7 +48,7 @@ class page_action extends dns_page_action {
 	protected function checkDuplicate() {
 		global $app;
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'AAAA' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
 		if($tmp['number'] > 0) return true;
 		return false;
 	}
diff --git a/interface/web/dns/lib/lang/ar_dns_a.lng b/interface/web/dns/lib/lang/ar_dns_a.lng
index 7543672a94..68e40da5e7 100644
--- a/interface/web/dns/lib/lang/ar_dns_a.lng
+++ b/interface/web/dns/lib/lang/ar_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_aaaa.lng b/interface/web/dns/lib/lang/ar_dns_aaaa.lng
index 0b7e38ac65..3d634780f1 100644
--- a/interface/web/dns/lib/lang/ar_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_aaaa.lng b/interface/web/dns/lib/lang/bg_dns_aaaa.lng
index 37ad45726f..d4efae73db 100644
--- a/interface/web/dns/lib/lang/bg_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/bg_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Вие нямате право да добавяте за
 $wb['name_error_empty'] = 'Полето с имейла е празно.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_aaaa.lng b/interface/web/dns/lib/lang/br_dns_aaaa.lng
index 1a3cfb2d27..2f81a52a0c 100644
--- a/interface/web/dns/lib/lang/br_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/br_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns ne
 $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'Endereço IPv6 está em branco.';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'O endereço IPv6 possui formato inválido.';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_aaaa.lng b/interface/web/dns/lib/lang/ca_dns_aaaa.lng
index e29a5cbf0d..c06b153dc2 100644
--- a/interface/web/dns/lib/lang/ca_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Vous n\'avez pas la permission d\'ajouter un enregistreme
 $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'L\'adresse IP est vide.';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_aaaa.lng b/interface/web/dns/lib/lang/cz_dns_aaaa.lng
index e28e9a8b73..9c59cea715 100644
--- a/interface/web/dns/lib/lang/cz_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'IP adresa je prázdná';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 $wb['ip_error_wrong'] = 'IP - formát adresy neplatný';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_aaaa.lng b/interface/web/dns/lib/lang/de_dns_aaaa.lng
index 4fe054d367..a225723f89 100644
--- a/interface/web/dns/lib/lang/de_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/de_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser
 $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'IPv6 Adresse ist leer';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IPv6 Adressen Format ist ungültig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_aaaa.lng b/interface/web/dns/lib/lang/dk_dns_aaaa.lng
index 664d63b41c..27a7fae538 100644
--- a/interface/web/dns/lib/lang/dk_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Du har ikke tilladelse til at tilføje en post til denne
 $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'IP-Adressen er tom';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_aaaa.lng b/interface/web/dns/lib/lang/el_dns_aaaa.lng
index 5ca896c732..faced402b1 100644
--- a/interface/web/dns/lib/lang/el_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/el_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Δεν έχετε δικαίωμα να προσθέσε
 $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Διεύθυνση IP κενή';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Διεύθυνση IP με μη έγκυρη μορφοποίηση';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_a.lng b/interface/web/dns/lib/lang/en_dns_a.lng
index dbba7fb6e8..510d04f34d 100644
--- a/interface/web/dns/lib/lang/en_dns_a.lng
+++ b/interface/web/dns/lib/lang/en_dns_a.lng
@@ -12,6 +12,6 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
 $wb["ip_error_wrong"] = 'IP-Address format invalid';
-$wb["data_error_duplicate"] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_aaaa.lng b/interface/web/dns/lib/lang/en_dns_aaaa.lng
index 201a4d9584..1272fb8587 100644
--- a/interface/web/dns/lib/lang/en_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/en_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb["no_zone_perm"] = 'You do not have the permission to add a record to this DN
 $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb["ip_error_wrong"] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_aaaa.lng b/interface/web/dns/lib/lang/es_dns_aaaa.lng
index 8851ef84ff..957feabdb5 100644
--- a/interface/web/dns/lib/lang/es_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/es_dns_aaaa.lng
@@ -1,6 +1,7 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
 $wb['data_error_empty'] = 'Dirección IP vacía';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['data_txt'] = 'Dirección IPv6';
 $wb['ip_error_wrong'] = 'La dirección IP tiene un formato incorrecto';
 $wb['limit_dns_record_txt'] = 'Ha alcanzado el número máx. de registros DNS permitidos para su cuenta.';
diff --git a/interface/web/dns/lib/lang/fi_dns_aaaa.lng b/interface/web/dns/lib/lang/fi_dns_aaaa.lng
index 78c65575fd..f6f99f324b 100644
--- a/interface/web/dns/lib/lang/fi_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/fi_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Käyttäjätunnuksella ei ole oikeuksia lisätä tietueit
 $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on väärän muotoinen.';
 $wb['data_error_empty'] = 'Tekstikenttä on tyhjä';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Tekstikenttä on vääränlainen';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_aaaa.lng b/interface/web/dns/lib/lang/fr_dns_aaaa.lng
index 1cc3722de5..280acdcea4 100644
--- a/interface/web/dns/lib/lang/fr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Vous n’avez pas la permission d’ajouter un enregistre
 $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'L’adresse IP est vide.';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_aaaa.lng b/interface/web/dns/lib/lang/hr_dns_aaaa.lng
index d8a3419309..76fc600703 100644
--- a/interface/web/dns/lib/lang/hr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/hr_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Nemate dozvolu za dodavanja zapisa ovoj domeni.';
 $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje IPv6 adresa je prazno';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Neispravan format IPv6 adrese';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_a.lng b/interface/web/dns/lib/lang/hu_dns_a.lng
index 3e52e94b9f..4820079b53 100644
--- a/interface/web/dns/lib/lang/hu_dns_a.lng
+++ b/interface/web/dns/lib/lang/hu_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_aaaa.lng b/interface/web/dns/lib/lang/hu_dns_aaaa.lng
index f78f42d186..5f261eeb5f 100644
--- a/interface/web/dns/lib/lang/hu_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_aaaa.lng b/interface/web/dns/lib/lang/id_dns_aaaa.lng
index 68cab83271..3257ba193f 100644
--- a/interface/web/dns/lib/lang/id_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/id_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Anda tidak memiliki hak untuk menambah record ke zona DNS
 $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Alamat IP kosong';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Format Alamat IP tidak valid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_a.lng b/interface/web/dns/lib/lang/it_dns_a.lng
index 122560b487..9aa9e1186f 100644
--- a/interface/web/dns/lib/lang/it_dns_a.lng
+++ b/interface/web/dns/lib/lang/it_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname  vuoto.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_aaaa.lng b/interface/web/dns/lib/lang/it_dns_aaaa.lng
index 2746bb887d..e82ada0166 100644
--- a/interface/web/dns/lib/lang/it_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/it_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DN
 $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
 $wb['data_error_empty'] = 'Indirizzo Ip vuoto';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_aaaa.lng b/interface/web/dns/lib/lang/ja_dns_aaaa.lng
index 2c859b7416..3f10406659 100644
--- a/interface/web/dns/lib/lang/ja_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'このDNSゾーンにレコードを追加する権限が
 $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'IPアドレスを入力してください。';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IPアドレスの形式が不正です。';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_aaaa.lng b/interface/web/dns/lib/lang/nl_dns_aaaa.lng
index 298193c1e8..139cc71ded 100644
--- a/interface/web/dns/lib/lang/nl_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'U heeft geen toestemming om een record toe te voegen aan
 $wb['name_error_empty'] = 'De hostnaam is niet ingvuld';
 $wb['name_error_regex'] = 'De hostnaam heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'IP-adres is niet ingevuld';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-adres formaat ongeldig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_aaaa.lng b/interface/web/dns/lib/lang/pl_dns_aaaa.lng
index 867d73ab97..86d93fe71f 100644
--- a/interface/web/dns/lib/lang/pl_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Nie masz uprawnień, aby dodać nowy wpis w tej strefie D
 $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Adres IP jest pusty.';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Adres IP ma niepoprawny format.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_aaaa.lng b/interface/web/dns/lib/lang/pt_dns_aaaa.lng
index 04698ced19..9fc3798dc8 100644
--- a/interface/web/dns/lib/lang/pt_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Não tem permissão para adicionar registos a está zona
 $wb['name_error_empty'] = 'O Hostname está em branco.';
 $wb['name_error_regex'] = 'O Hostname está com formato inválido.';
 $wb['data_error_empty'] = 'Endereço-IP em branco';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Endereço-IP com formato inválido';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_a.lng b/interface/web/dns/lib/lang/ro_dns_a.lng
index f2f6a46c43..b8c2522432 100644
--- a/interface/web/dns/lib/lang/ro_dns_a.lng
+++ b/interface/web/dns/lib/lang/ro_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname necompletat';
 $wb['name_error_regex'] = 'Hostname format gresit';
 $wb['data_error_empty'] = 'IP-Adresa vid';
 $wb['ip_error_wrong'] = 'IP-Adresa format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_aaaa.lng b/interface/web/dns/lib/lang/ro_dns_aaaa.lng
index 0b7e38ac65..3d634780f1 100644
--- a/interface/web/dns/lib/lang/ro_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_aaaa.lng b/interface/web/dns/lib/lang/ru_dns_aaaa.lng
index 4620b53eaa..e8a02443d3 100644
--- a/interface/web/dns/lib/lang/ru_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту за
 $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Неправильный формат имени хоста.';
 $wb['data_error_empty'] = 'Пустой IP-адрес';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Неправильный формат IP-адреса';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_a.lng b/interface/web/dns/lib/lang/se_dns_a.lng
index 7543672a94..68e40da5e7 100644
--- a/interface/web/dns/lib/lang/se_dns_a.lng
+++ b/interface/web/dns/lib/lang/se_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_aaaa.lng b/interface/web/dns/lib/lang/se_dns_aaaa.lng
index 0b7e38ac65..3d634780f1 100644
--- a/interface/web/dns/lib/lang/se_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/se_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_aaaa.lng b/interface/web/dns/lib/lang/sk_dns_aaaa.lng
index 78d5cc6c4c..246ac1dd23 100644
--- a/interface/web/dns/lib/lang/sk_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnenie Pridať záznam do tejto zóny DNS.';
 $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'IP-Adresa prázdna';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Adresa má zlý formát';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_aaaa.lng b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
index 1726f80a8f..d75ff802bb 100644
--- a/interface/web/dns/lib/lang/tr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adının biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP adresinin biçimi geçersiz';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
-- 
GitLab


From b36e2a011b5add564f39ebbcc41ccfefe98dd23d Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Mon, 1 Jun 2020 22:47:18 +0200
Subject: [PATCH 325/571] Removed double/empty titles and descriptions

---
 interface/web/mailuser/templates/index.htm           |  3 +--
 .../templates/mail_user_autoresponder_edit.htm       | 12 +++---------
 .../web/mailuser/templates/mail_user_cc_edit.htm     |  9 +--------
 .../web/mailuser/templates/mail_user_filter_edit.htm |  9 +--------
 .../mailuser/templates/mail_user_password_edit.htm   |  9 +--------
 .../mailuser/templates/mail_user_spamfilter_edit.htm |  9 +--------
 6 files changed, 8 insertions(+), 43 deletions(-)

diff --git a/interface/web/mailuser/templates/index.htm b/interface/web/mailuser/templates/index.htm
index 8f87035562..5f065f9fa4 100644
--- a/interface/web/mailuser/templates/index.htm
+++ b/interface/web/mailuser/templates/index.htm
@@ -1,7 +1,6 @@
 <div class='page-header'>
 	<h1><tmpl_var name="page_head_txt"></h1>
 </div>
-<p><tmpl_var name="page_desc_txt"></p>
 
 <div class="panel panel_mailuser">
 
@@ -33,4 +32,4 @@
     
   </div>
   
-</div>
\ No newline at end of file
+</div>
diff --git a/interface/web/mailuser/templates/mail_user_autoresponder_edit.htm b/interface/web/mailuser/templates/mail_user_autoresponder_edit.htm
index 98b28cebf8..898f285e53 100644
--- a/interface/web/mailuser/templates/mail_user_autoresponder_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_autoresponder_edit.htm
@@ -1,13 +1,7 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="autoresponder_subject" class="col-sm-3 control-label">{tmpl_var name='autoresponder_subject_txt'}</label>
-                <div class="col-sm-9"><input class="form-control" type="text" name="autoresponder_subject" id="autoresponder_subject" value="{tmpl_var name='autoresponder_subject'}" /></div></div>
+                <div class="col-sm-9"><input class="form-control" type="text" name="autoresponder_subject" id="autoresponder_subject" value="{tmpl_var name='autoresponder_subject'}" /></div>
+            </div>
             <div class="form-group">
                 <label for="autoresponder_text" class="col-sm-3 control-label">{tmpl_var name='autoresponder_text_txt'}</label>
                 <div class="col-sm-9"><textarea class="form-control" name="autoresponder_text" id="autoresponder_text" rows='15' cols='30'>{tmpl_var name='autoresponder_text'}</textarea></div>
@@ -30,4 +24,4 @@
             <button class="btn btn-default formbutton-success" type="button"
                     value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_autoresponder_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mailuser/templates/mail_user_cc_edit.htm b/interface/web/mailuser/templates/mail_user_cc_edit.htm
index 7c59fadf11..914f74ae3f 100644
--- a/interface/web/mailuser/templates/mail_user_cc_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_cc_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
                 <div class="col-sm-9"><div class="checkbox">{tmpl_var name='email'}</div></div>
@@ -20,4 +13,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_cc_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mailuser/templates/mail_user_filter_edit.htm b/interface/web/mailuser/templates/mail_user_filter_edit.htm
index b09874263b..441ffba484 100644
--- a/interface/web/mailuser/templates/mail_user_filter_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_filter_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label for="rulename" class="col-sm-3 control-label">{tmpl_var name='rulename_txt'}</label>
                 <div class="col-sm-9"><input type="text" id="rulename" name="rulename" value="{tmpl_var name='rulename'}" class="form-control"></div></div>
@@ -29,4 +22,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_filter_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/mail_user_filter_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mailuser/templates/mail_user_password_edit.htm b/interface/web/mailuser/templates/mail_user_password_edit.htm
index b487a1e9b2..c7a28dc48e 100644
--- a/interface/web/mailuser/templates/mail_user_password_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_password_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
                 <div class="col-sm-9">
@@ -44,4 +37,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_password_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/mailuser/templates/mail_user_spamfilter_edit.htm b/interface/web/mailuser/templates/mail_user_spamfilter_edit.htm
index 3528daead1..6675846769 100644
--- a/interface/web/mailuser/templates/mail_user_spamfilter_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_spamfilter_edit.htm
@@ -1,10 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
                 <div class="col-sm-9">
@@ -24,4 +17,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_spamfilter_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
-- 
GitLab


From 09cf5d6507c0aea27edefe0c1e2ea17c9f7b3719 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 2 Jun 2020 17:28:23 -0600
Subject: [PATCH 326/571] update sql patch instructions.  fixes #5630

---
 install/sql/README.txt | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/install/sql/README.txt b/install/sql/README.txt
index fe15ce5403..d1294363c1 100644
--- a/install/sql/README.txt
+++ b/install/sql/README.txt
@@ -9,18 +9,24 @@ then follow these steps:
 1) Add the field or table in the ispconfig3.sql file. This file contains the
    complete database dump which is used when ISPConfig gets installed.
    
-2) Create a new file in the "incremental" subfolder wich contains the alter 
-   table, or if it is a complete new table then the add table, statement(s) in 
-   MySQL syntax which is/are required to modify the current ispconfig database 
-   during update. The naming scheme of the sql patch update files is 
-   upd_0001.sql, upd_0002.sql, upd_0003.sql etc. Ensure that the number that 
-   you choose for the new file is a +1 increment of the number of the last
-   existing file and that the number is formatted with 4 digits.
+2) Edit the file "incremental/upd_dev_collection.sql" which contains the SQL
+   statements (alter table, add table, update, etc.) in MySQL syntax which
+   are required to modify the current ispconfig database during update.
+
+   The upd_dev_collection.sql file contains all db schema modifications
+   for changes made since the last ISPConfig release.  If SQL statements
+   are already present in the file when you make your additions, add yours
+   to the end of the file, and do not remove any existing statements.
+
+   When a new ISPConfig update is released, the contents of
+   upd_dev_collections.sql will move to an sql patch file, using the naming
+   scheme upd_0001.sql, upd_0002.sql, upd_0003.sql etc.
    
-   A patch file may contain one or more alter table statements. Every patch file
-   gets executed once in the database, so do not modify older (already released) 
+   A patch file may contain one or more SQL modification statements. Every patch
+   file gets executed once in the database, so do not modify older (already released)
    patch files, they will not get executed again if the update was already run 
-   once on a system.
+   once on a system, and will result in missing updates on any system where they
+   have not run yet.
    
    After a patch has been executed, the dbversion field in the server table gets
    increeased to the version number of the last installed patch.
-- 
GitLab


From 8e584ee86a155a02cb29a478ef3f298af744f8ec Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 3 Jun 2020 09:10:14 +0200
Subject: [PATCH 327/571] - updated README for incremental sql files

---
 install/sql/README.txt | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/install/sql/README.txt b/install/sql/README.txt
index fe15ce5403..97a07a4863 100644
--- a/install/sql/README.txt
+++ b/install/sql/README.txt
@@ -9,18 +9,15 @@ then follow these steps:
 1) Add the field or table in the ispconfig3.sql file. This file contains the
    complete database dump which is used when ISPConfig gets installed.
    
-2) Create a new file in the "incremental" subfolder wich contains the alter 
-   table, or if it is a complete new table then the add table, statement(s) in 
-   MySQL syntax which is/are required to modify the current ispconfig database 
-   during update. The naming scheme of the sql patch update files is 
-   upd_0001.sql, upd_0002.sql, upd_0003.sql etc. Ensure that the number that 
-   you choose for the new file is a +1 increment of the number of the last
-   existing file and that the number is formatted with 4 digits.
+2) Add your ALTER TABLE, or if it is a complete new table then the add table,
+   statement(s) in MySQL syntax which is/are required to modify the current
+   ispconfig database during update to the file upd_dev_collection.sql in the
+   sql/incremental subfolder.
    
-   A patch file may contain one or more alter table statements. Every patch file
-   gets executed once in the database, so do not modify older (already released) 
-   patch files, they will not get executed again if the update was already run 
-   once on a system.
+   Please do not create new patch sql files as those will be generated on
+   new releases from the upd_dev_collection.sql file. Also please do not
+   modify older (already released) patch files, they will not get executed
+   again if the update was already run once on a system.
    
    After a patch has been executed, the dbversion field in the server table gets
    increeased to the version number of the last installed patch.
-- 
GitLab


From b34b1ad5bbc8d75db927116b517e6a23761e42bb Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 4 Jun 2020 13:53:35 +0200
Subject: [PATCH 328/571] Improved cron debug script

---
 server/cron_debug.php | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/server/cron_debug.php b/server/cron_debug.php
index 74065f02c4..fbf59ebc26 100644
--- a/server/cron_debug.php
+++ b/server/cron_debug.php
@@ -39,20 +39,25 @@ ini_set('error_reporting', E_ALL & ~E_NOTICE);
 $conf['server_id'] = intval($conf['server_id']);
 
 // Load required base-classes
-$app->uses('modules,plugins,ini_parser,file,services,getconf,system,cron,functions');
+$app->uses('ini_parser,file,services,getconf,system,cron,functions');
 $app->load('libdatetime,cronjob');
 
 // Path settings
 $path = SCRIPT_PATH . '/lib/classes/cron.d';
 
 //** Get commandline options
-$cmd_opt = getopt('', array('cronjob::'));
+$cmd_opt = getopt('', array('cronjob::', 'force', 'firstrun'));
 
 if(isset($cmd_opt['cronjob']) && is_file($path.'/'.$cmd_opt['cronjob'])) {
 	// Cronjob that shell be run
 	$cronjob_file = $cmd_opt['cronjob'];
 } else {
-	die('Usage example: php cron_debug.php --cronjob=100-mailbox_stats.inc.php');
+	echo "Usage example: php cron_debug.php --cronjob=100-mailbox_stats.inc.php [--force] [--firstrun]\n" ;
+	echo "Available cronjobs:\n";
+	foreach(glob($path.'/*-*.inc.php') as $cronjob) {
+		echo basename($cronjob)."\n";
+	}
+	die();
 }
 
 // Load and run the cronjob
@@ -61,8 +66,20 @@ if(preg_match('/^\d+\-(.*)$/', $name, $match)) $name = $match[1]; // strip numer
 include $path . '/' . $cronjob_file;
 $class_name = 'cronjob_' . $name;
 $cronjob = new $class_name();
-$cronjob->run(true);
+
+if(isset($cmd_opt['force'])) {
+	$app->db->query("UPDATE `sys_cron` SET `running` = 0 WHERE `name` = ?", $class_name);
+}
+
+$cronjob->onPrepare();
+$cronjob->onBeforeRun(isset($cmd_opt['firstrun']));
+if(!$cronjob->isRunning()) {
+	$app->db->query("UPDATE `sys_cron` SET `running` = ? WHERE `name` = ?", ($cronjob->canBeRunInParallel() !== true ? "1" : "0"), $class_name);
+	$cronjob->onRunJob();
+	$cronjob->onAfterRun();
+	$cronjob->onCompleted();
+}
 
 die("finished.\n");
 
-?>
+?>
\ No newline at end of file
-- 
GitLab


From c798155c8fe85e102ef00e7b939ffa5bade22fd5 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sat, 6 Jun 2020 21:23:27 +0200
Subject: [PATCH 329/571] Added translations from #5477

---
 interface/web/mail/lib/lang/de_mail_user.lng | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index 2c230e34ff..b60a756b09 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -57,9 +57,9 @@ $wb['daily_backup_txt'] = 'taeglich';
 $wb['weekly_backup_txt'] = 'woechentlich';
 $wb['monthly_backup_txt'] = 'monatlich';
 $wb['cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
-$wb['sender_cc_txt'] = 'Send outgoing BCC to';
-$wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['autoresponder_start_date_is_required'] = 'Startdatum muss angegeben werden.';
+$wb['sender_cc_txt'] = 'Kopie ausgehender Emails senden an (BCC)';
+$wb['sender_cc_error_isemail'] = '-Kopie ausgehender Emails senden an- Feld enthält keine gültige Emailadresse';
+$wb['sender_cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 ?>
-- 
GitLab


From 39c195b86a60fb1892d2836a59afe5495b434051 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sat, 6 Jun 2020 21:26:23 +0200
Subject: [PATCH 330/571] Added translations from #4962

---
 interface/web/sites/lib/lang/de_web_childdomain_list.lng | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/sites/lib/lang/de_web_childdomain_list.lng b/interface/web/sites/lib/lang/de_web_childdomain_list.lng
index a9bdf2861a..3ba596cbcd 100644
--- a/interface/web/sites/lib/lang/de_web_childdomain_list.lng
+++ b/interface/web/sites/lib/lang/de_web_childdomain_list.lng
@@ -10,8 +10,8 @@ $wb['domain_error_regex'] = 'Domain Name ist ungültig.';
 $wb['no_redirect_txt'] = 'Keine Weiterleitung';
 $wb['no_flag_txt'] = 'Keine Optionen';
 $wb['none_txt'] = 'Keine';
-$wb['add_new_subdomain_txt'] = 'Add new Subdomain';
-$wb['add_new_aliasdomain_txt'] = 'Add new Aliasdomain';
+$wb['add_new_subdomain_txt'] = 'Neue Subdomain hinzufügen';
+$wb['add_new_aliasdomain_txt'] = 'Neue Aliasdomain hinzufügen';
 $wb['aliasdomain_list_head_txt'] = 'Aliasdomains';
 $wb['subdomain_list_head_txt'] = 'Subdomains';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
-- 
GitLab


From 413bc63b61f5d382d1a0c888b4002bc8e54d4236 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sat, 6 Jun 2020 22:26:58 +0200
Subject: [PATCH 331/571] Add translation for Zone File Import (#4311)

---
 interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/br_dns_soa_list.lng       | 1 +
 interface/web/dns/lib/lang/ca_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/de_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/dk_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/el_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/en_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/es_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/id_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/it_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/se_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng | 1 +
 interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng | 1 +
 interface/web/dns/templates/dns_soa_admin_list.htm   | 2 +-
 26 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa_list.lng b/interface/web/dns/lib/lang/br_dns_soa_list.lng
index 969df1d2a9..d9fb674b87 100644
--- a/interface/web/dns/lib/lang/br_dns_soa_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa_list.lng
@@ -7,4 +7,5 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'e-Mail';
 $wb['add_new_record_wizard_txt'] = 'Adicionar nova zona dns através do assistente';
 $wb['add_new_record_txt'] = 'Adicionar nova zona dns manualmente';
+$wb['zone_file_import_txt'] = 'Importar arquivo de zona';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ca_dns_soa_admin_list.lng
index ff6fe695ae..0f477a473a 100644
--- a/interface/web/dns/lib/lang/ca_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/ca_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Courriel';
 $wb['add_new_record_wizard_txt'] = 'Assistant de création de zone';
 $wb['add_new_record_txt'] = 'Création manuel de zone';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng
index 0ec5de4f6d..a4f27d2472 100644
--- a/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'E-mail';
 $wb['add_new_record_wizard_txt'] = 'Vytvořit DNS zónu pomocí průvodce';
 $wb['add_new_record_txt'] = 'Vytvořit DNS zónu manuálně';
+$wb['import_zone_file_txt'] = 'Importovat DNS zonový soubor';
 $wb['sys_groupid_txt'] = 'Klient';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng
index 363369c65b..294cd3b128 100644
--- a/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'E-Mail';
 $wb['add_new_record_txt'] = 'Neue DNS Zone (SOA) hinzufügen';
 $wb['add_new_record_wizard_txt'] = 'Neue DNS Zone per Assistent hinzufügen';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Kunde';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/dk_dns_soa_admin_list.lng
index 32728405bb..f25d33ee67 100644
--- a/interface/web/dns/lib/lang/dk_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/dk_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'E-mail';
 $wb['add_new_record_wizard_txt'] = 'Tilføj ny DNS Zone med Guide';
 $wb['add_new_record_txt'] = 'Tilføj ny DNS Zone manuelt';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Kunde';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng
index 44cec900b9..f7f815079d 100644
--- a/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb["ns_txt"] = 'NS';
 $wb["mbox_txt"] = 'Email';
 $wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
 $wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb["sys_groupid_txt"] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
index aeb2618de3..087ebd80ed 100755
--- a/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
@@ -2,6 +2,7 @@
 $wb['active_txt'] = 'Habilitado';
 $wb['add_new_record_txt'] = 'Añadir nueva Zona DNS manualmente';
 $wb['add_new_record_wizard_txt'] = 'Añadir nueva Zona DNS usando el asistente';
+$wb['import_zone_file_txt'] = 'Importar archivo de zona';
 $wb['list_head_txt'] = 'Zonas DNS';
 $wb['mbox_txt'] = 'Email';
 $wb['ns_txt'] = 'NS';
diff --git a/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng
index e4d52ffee5..0e5779a0a2 100644
--- a/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'E-mail';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng
index 1dc2853bcf..f8753a3465 100644
--- a/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Dodaj novu DNS zonu sa čarobnjakom';
 $wb['add_new_record_txt'] = 'Dodaj novu DNS zonu ručno';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Klijent';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
index 5f0c730599..a7cce01001 100644
--- a/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Aggiungi un nuovo  DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Aggiungi un nuovo  DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng
index 2ac184dd91..5231e47e22 100644
--- a/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'E-mail';
 $wb['add_new_record_wizard_txt'] = 'DNS Zone via wizard toevoegen';
 $wb['add_new_record_txt'] = 'DNS Zone manueel toevoegen';
+$wb['import_zone_file_txt'] = 'Importeer zone bestand';
 $wb['sys_groupid_txt'] = 'Klant';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng
index 47940f9e8d..d3d7be7183 100644
--- a/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Адрес эл. почты';
 $wb['add_new_record_wizard_txt'] = 'Добавить новую DNS-зону с помощью мастера';
 $wb['add_new_record_txt'] = 'Добавить новую DNS-зону вручную';
+$wb['import_zone_file_txt'] = 'Импорт файла зоны';
 $wb['sys_groupid_txt'] = 'Клиент';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng
index 183d1a8349..74ba785900 100644
--- a/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 $wb['add_new_record_txt'] = 'Add new DNS Zone manually';
+$wb['import_zone_file_txt'] = 'Import Zone File';
 $wb['sys_groupid_txt'] = 'Client';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
index 490cdc7b4f..6f0bc7f985 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
@@ -7,5 +7,6 @@ $wb['ns_txt'] = 'Ad Sunucusu';
 $wb['mbox_txt'] = 'E-posta';
 $wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS Bölgesi Ekle';
 $wb['add_new_record_txt'] = 'El ile DNS Bölgesi Ekle';
+$wb['import_zone_file_txt'] = 'Bölge Dosyasını İçe Aktar';
 $wb['sys_groupid_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
index 79faa645fe..646b129578 100644
--- a/interface/web/dns/templates/dns_soa_admin_list.htm
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -24,7 +24,7 @@
             
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_wizard.php">{tmpl_var name="add_new_record_wizard_txt"}</button>
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_soa_edit.php">{tmpl_var name="add_new_record_txt"}</button>
-                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_import.php">Import Zone File</button>
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_import.php">{tmpl_var name="import_zone_file_txt"}</button>
             
         
 
-- 
GitLab


From cab126e67f196e4c26794007d95637811ea711a2 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sat, 6 Jun 2020 23:11:55 +0200
Subject: [PATCH 332/571] Added translation function for Server Config (#2410)

---
 interface/web/admin/form/server_config.tform.php  | 4 ++--
 interface/web/admin/lib/lang/ar_server_config.lng | 1 +
 interface/web/admin/lib/lang/bg_server_config.lng | 1 +
 interface/web/admin/lib/lang/br_server_config.lng | 1 +
 interface/web/admin/lib/lang/ca_server_config.lng | 1 +
 interface/web/admin/lib/lang/cz_server_config.lng | 1 +
 interface/web/admin/lib/lang/de_server_config.lng | 1 +
 interface/web/admin/lib/lang/dk_server_config.lng | 1 +
 interface/web/admin/lib/lang/el_server_config.lng | 1 +
 interface/web/admin/lib/lang/en_server_config.lng | 1 +
 interface/web/admin/lib/lang/es_server_config.lng | 1 +
 interface/web/admin/lib/lang/fi_server_config.lng | 1 +
 interface/web/admin/lib/lang/fr_server_config.lng | 1 +
 interface/web/admin/lib/lang/hr_server_config.lng | 1 +
 interface/web/admin/lib/lang/hu_server_config.lng | 1 +
 interface/web/admin/lib/lang/id_server_config.lng | 1 +
 interface/web/admin/lib/lang/it_server_config.lng | 1 +
 interface/web/admin/lib/lang/ja_server_config.lng | 1 +
 interface/web/admin/lib/lang/nl_server_config.lng | 1 +
 interface/web/admin/lib/lang/pl_server_config.lng | 1 +
 interface/web/admin/lib/lang/pt_server_config.lng | 1 +
 interface/web/admin/lib/lang/ro_server_config.lng | 1 +
 interface/web/admin/lib/lang/ru_server_config.lng | 1 +
 interface/web/admin/lib/lang/se_server_config.lng | 1 +
 interface/web/admin/lib/lang/sk_server_config.lng | 1 +
 interface/web/admin/lib/lang/tr_server_config.lng | 1 +
 26 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 945e422da2..bbd6899761 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -33,7 +33,7 @@
 
  */
 
-$form["title"] = "Server Config";
+$form["title"] = "server_config";
 $form["description"] = "";
 $form["name"] = "server_config";
 $form["action"] = "server_config_edit.php";
@@ -2022,4 +2022,4 @@ if(!isset($mail_config['rspamd_available']) || $mail_config['rspamd_available']
 	$form['tabs']['mail']['fields']['content_filter']['default'] = 'amavisd';
 	unset($form['tabs']['mail']['fields']['content_filter']['value']['rspamd']);
 	unset($form['tabs']['mail']['fields']['rspamd_password']);
-}*/
\ No newline at end of file
+}*/
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 520fdb1028..bfefeec22c 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 1ca873fd2d..2003a6476d 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 79a956cfad..4fc1e043fa 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['ufw_enable_txt'] = 'Habilitar';
 $wb['ufw_manage_builtins_txt'] = 'Gerenciar regras embutidas';
 $wb['ufw_ipv6_txt'] = 'Habilitar IPv6';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index b1ac3545e7..e016135c8d 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Manage Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index a4219cafa3..2a91f3af6e 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot adresář';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sekce';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrootované aplikace';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index aa7818f9ad..9159198579 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit Chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit Chroot Anwendungsbereiche';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit Chrooted Anwendungen';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 0020d5347a..3a5f00b7af 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Administrer Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 29ad1bf454..cd40efc993 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 9093ac6baa..e66864c846 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb["ufw_enable_txt"] = 'Enable';
 $wb["ufw_manage_builtins_txt"] = 'Manage Builtin Rules';
 $wb["ufw_ipv6_txt"] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 2b1ca0a221..014a3879da 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Añadir usuarios web al grupo -sshusers-';
 $wb['admin_notify_events_txt'] = 'Enviar correo al administrador a partir de siguiente nivel';
 $wb['apache_group_error_empty'] = 'El grupo de Apache está vacío.';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 6724ea0e85..8aa91fdd8f 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot-kotikansio';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot-ohjelmaosiot';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted-ohjelmat';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index a505ceef37..7f8f48374e 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Accueil du chroot Jailkit';
 $wb['jailkit_chroot_app_sections_txt'] = 'Sections des applications chrootées Jailkit';
 $wb['jailkit_chroot_app_programs_txt'] = 'Applications chrootées Jailkit';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index a390c29e6c..1559a484b2 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot direktorij';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sekcije';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrootane aplikacije';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 3da2d0ad4e..46c1e11f2a 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index c79b296072..28cf2d2eb8 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Home chroot Jailkit';
 $wb['jailkit_chroot_app_sections_txt'] = 'Bagian app chroot';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit aplikasi yang ter-chroot';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 89491ae497..53e0c8f7e8 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 6569591233..0a8650b755 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'chroot ホーム';
 $wb['jailkit_chroot_app_sections_txt'] = '利用可能アプリケーションセクション';
 $wb['jailkit_chroot_app_programs_txt'] = '利用可能アプリケーション';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 1e398f9bdc..0fc75f7c6e 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app secties';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applicaties';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 87ec7fc285..3bcd924c80 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Adres roota Jailkit';
 $wb['jailkit_chroot_app_sections_txt'] = 'Sekcje aplikacji roota Jailkit';
 $wb['jailkit_chroot_app_programs_txt'] = 'Ścieżki aplikacji roota Jailkit';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index e1df35f548..4f548697b8 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Raiz do Chroot Jailkit';
 $wb['jailkit_chroot_app_sections_txt'] = 'Aplicações Jailkit chroot (Sessões)';
 $wb['jailkit_chroot_app_programs_txt'] = 'Aplicações Jailkit em ambiente chroot';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 6d7dc3d8ca..40cfd9caa3 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 027e41c13e..902803ea36 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Путь к домашней папке Jailkit chroot';
 $wb['jailkit_chroot_app_sections_txt'] = 'Пакеты программ Jailkit chroot';
 $wb['jailkit_chroot_app_programs_txt'] = 'Программы Jailkit chrooted';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index be8742f80c..6afbe56978 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 659a83e7d4..12fda6bb81 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot domov';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sekcia';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted aplikácia';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 76812dd90d..92e7c2dcc9 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['server_config'] = 'Server Config';
 $wb['ufw_enable_txt'] = 'Etkin';
 $wb['ufw_manage_builtins_txt'] = 'İç Kural Yönetimi';
 $wb['ufw_ipv6_txt'] = 'IPv6 Kullanılsın';
-- 
GitLab


From 63e091f12c22df2baeb6095bfc4c6f848478026f Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sat, 6 Jun 2020 23:13:43 +0200
Subject: [PATCH 333/571] Changed Server Config translation

---
 interface/web/admin/lib/lang/nl_server_config.lng | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 0fc75f7c6e..8cb0a1e140 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['server_config'] = 'Server Config';
+$wb['server_config'] = 'Server Configuratie';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app secties';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applicaties';
-- 
GitLab


From 870f610bfc75c329581bbaeb72b7a9a40ab11e18 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 7 Jun 2020 00:03:05 +0200
Subject: [PATCH 334/571] Added translation function for User (#2410)

---
 interface/web/admin/form/remote_user.tform.php  | 4 ++--
 interface/web/admin/form/users.tform.php        | 4 ++--
 interface/web/admin/lib/lang/ar_remote_user.lng | 1 +
 interface/web/admin/lib/lang/ar_users.lng       | 1 +
 interface/web/admin/lib/lang/bg_remote_user.lng | 1 +
 interface/web/admin/lib/lang/bg_users.lng       | 1 +
 interface/web/admin/lib/lang/br_remote_user.lng | 1 +
 interface/web/admin/lib/lang/br_users.lng       | 1 +
 interface/web/admin/lib/lang/ca_remote_user.lng | 1 +
 interface/web/admin/lib/lang/ca_users.lng       | 1 +
 interface/web/admin/lib/lang/cz_remote_user.lng | 1 +
 interface/web/admin/lib/lang/cz_users.lng       | 1 +
 interface/web/admin/lib/lang/de_remote_user.lng | 1 +
 interface/web/admin/lib/lang/de_users.lng       | 1 +
 interface/web/admin/lib/lang/dk_remote_user.lng | 1 +
 interface/web/admin/lib/lang/dk_users.lng       | 1 +
 interface/web/admin/lib/lang/el_remote_user.lng | 1 +
 interface/web/admin/lib/lang/el_users.lng       | 1 +
 interface/web/admin/lib/lang/en_remote_user.lng | 1 +
 interface/web/admin/lib/lang/en_users.lng       | 1 +
 interface/web/admin/lib/lang/es_remote_user.lng | 1 +
 interface/web/admin/lib/lang/es_users.lng       | 1 +
 interface/web/admin/lib/lang/fi_remote_user.lng | 1 +
 interface/web/admin/lib/lang/fi_users.lng       | 1 +
 interface/web/admin/lib/lang/fr_remote_user.lng | 1 +
 interface/web/admin/lib/lang/fr_users.lng       | 1 +
 interface/web/admin/lib/lang/hr_remote_user.lng | 1 +
 interface/web/admin/lib/lang/hr_users.lng       | 1 +
 interface/web/admin/lib/lang/hu_remote_user.lng | 1 +
 interface/web/admin/lib/lang/hu_users.lng       | 1 +
 interface/web/admin/lib/lang/id_remote_user.lng | 1 +
 interface/web/admin/lib/lang/id_users.lng       | 1 +
 interface/web/admin/lib/lang/it_remote_user.lng | 1 +
 interface/web/admin/lib/lang/it_users.lng       | 1 +
 interface/web/admin/lib/lang/ja_remote_user.lng | 1 +
 interface/web/admin/lib/lang/ja_users.lng       | 1 +
 interface/web/admin/lib/lang/nl_remote_user.lng | 1 +
 interface/web/admin/lib/lang/nl_users.lng       | 1 +
 interface/web/admin/lib/lang/pl_remote_user.lng | 1 +
 interface/web/admin/lib/lang/pl_users.lng       | 1 +
 interface/web/admin/lib/lang/pt_remote_user.lng | 1 +
 interface/web/admin/lib/lang/pt_users.lng       | 1 +
 interface/web/admin/lib/lang/ro_remote_user.lng | 1 +
 interface/web/admin/lib/lang/ro_users.lng       | 1 +
 interface/web/admin/lib/lang/ru_remote_user.lng | 1 +
 interface/web/admin/lib/lang/ru_users.lng       | 1 +
 interface/web/admin/lib/lang/se_remote_user.lng | 1 +
 interface/web/admin/lib/lang/se_users.lng       | 1 +
 interface/web/admin/lib/lang/sk_remote_user.lng | 1 +
 interface/web/admin/lib/lang/sk_users.lng       | 1 +
 interface/web/admin/lib/lang/tr_remote_user.lng | 1 +
 interface/web/admin/lib/lang/tr_users.lng       | 1 +
 52 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/interface/web/admin/form/remote_user.tform.php b/interface/web/admin/form/remote_user.tform.php
index 3b920ccb4a..9263266a27 100644
--- a/interface/web/admin/form/remote_user.tform.php
+++ b/interface/web/admin/form/remote_user.tform.php
@@ -45,7 +45,7 @@ if(is_array($modules)) {
 	}
 }
 
-$form["title"]    = "Remote user";
+$form["title"]    = "remote_user_txt";
 $form["description"]  = "";
 $form["name"]    = "remote_user";
 $form["action"]   = "remote_user_edit.php";
@@ -63,7 +63,7 @@ $form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update,
 $form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
 
 $form["tabs"]['remote_user'] = array (
-	'title'  => "Remote User",
+	'title'  => "remote_user_txt",
 	'width'  => 100,
 	'template'  => "templates/remote_user_edit.htm",
 	'fields'  => array (
diff --git a/interface/web/admin/form/users.tform.php b/interface/web/admin/form/users.tform.php
index be77122b10..4f08de4098 100644
--- a/interface/web/admin/form/users.tform.php
+++ b/interface/web/admin/form/users.tform.php
@@ -60,7 +60,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 */
 
-$form['title']   = 'Users';
+$form['title']   = 'users_txt';
 $form['description']  = 'Form to edit systemusers.';
 $form['name']   = 'users';
 $form['action']  = 'users_edit.php';
@@ -129,7 +129,7 @@ if(is_array($tmp_records)) {
 }
 
 $form['tabs']['users'] = array (
-	'title'  => 'Users',
+	'title'  => 'users_txt',
 	'width'  => 80,
 	'template'  => 'templates/users_user_edit.htm',
 	'fields'  => array (
diff --git a/interface/web/admin/lib/lang/ar_remote_user.lng b/interface/web/admin/lib/lang/ar_remote_user.lng
index d0504005e3..8c70904102 100644
--- a/interface/web/admin/lib/lang/ar_remote_user.lng
+++ b/interface/web/admin/lib/lang/ar_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/ar_users.lng b/interface/web/admin/lib/lang/ar_users.lng
index dcbc4f4727..dd4ef0143d 100644
--- a/interface/web/admin/lib/lang/ar_users.lng
+++ b/interface/web/admin/lib/lang/ar_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Username';
 $wb['username_err'] = 'The username is too long or contains invalid characters.';
 $wb['username_empty'] = 'The username is empty.';
diff --git a/interface/web/admin/lib/lang/bg_remote_user.lng b/interface/web/admin/lib/lang/bg_remote_user.lng
index 6eac31e4fe..35132ab452 100644
--- a/interface/web/admin/lib/lang/bg_remote_user.lng
+++ b/interface/web/admin/lib/lang/bg_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Потребителско име';
 $wb['password_txt'] = 'Парола';
 $wb['function_txt'] = 'Функции';
diff --git a/interface/web/admin/lib/lang/bg_users.lng b/interface/web/admin/lib/lang/bg_users.lng
index e8dc631a59..801d9e70a6 100644
--- a/interface/web/admin/lib/lang/bg_users.lng
+++ b/interface/web/admin/lib/lang/bg_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Потребителско име';
 $wb['username_err'] = 'Потребителското име е твърде дълго или съдържа непозволени символи.';
 $wb['username_empty'] = 'Полето с потребителското име е празно.';
diff --git a/interface/web/admin/lib/lang/br_remote_user.lng b/interface/web/admin/lib/lang/br_remote_user.lng
index fcaa6732c8..b698af128d 100644
--- a/interface/web/admin/lib/lang/br_remote_user.lng
+++ b/interface/web/admin/lib/lang/br_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['function_txt'] = 'Funções';
diff --git a/interface/web/admin/lib/lang/br_users.lng b/interface/web/admin/lib/lang/br_users.lng
index 6d71a39e4c..18e6085b83 100644
--- a/interface/web/admin/lib/lang/br_users.lng
+++ b/interface/web/admin/lib/lang/br_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Usuário';
 $wb['username_err'] = 'O nome do usuário é muito longo ou contém caracteres inválidos.';
 $wb['username_empty'] = 'O nome do usuário está em branco.';
diff --git a/interface/web/admin/lib/lang/ca_remote_user.lng b/interface/web/admin/lib/lang/ca_remote_user.lng
index 2fc633b555..dc39a8e798 100644
--- a/interface/web/admin/lib/lang/ca_remote_user.lng
+++ b/interface/web/admin/lib/lang/ca_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/ca_users.lng b/interface/web/admin/lib/lang/ca_users.lng
index dcbc4f4727..dd4ef0143d 100644
--- a/interface/web/admin/lib/lang/ca_users.lng
+++ b/interface/web/admin/lib/lang/ca_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Username';
 $wb['username_err'] = 'The username is too long or contains invalid characters.';
 $wb['username_empty'] = 'The username is empty.';
diff --git a/interface/web/admin/lib/lang/cz_remote_user.lng b/interface/web/admin/lib/lang/cz_remote_user.lng
index aeacc442ca..f8d0f3d5e5 100644
--- a/interface/web/admin/lib/lang/cz_remote_user.lng
+++ b/interface/web/admin/lib/lang/cz_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Uživatelské jméno:';
 $wb['password_txt'] = 'Heslo:';
 $wb['function_txt'] = 'Funkce:';
diff --git a/interface/web/admin/lib/lang/cz_users.lng b/interface/web/admin/lib/lang/cz_users.lng
index b517d73290..9aa92402f0 100644
--- a/interface/web/admin/lib/lang/cz_users.lng
+++ b/interface/web/admin/lib/lang/cz_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Uživatelské jméno';
 $wb['username_err'] = 'Uživatelské jméno je příliš dlouhé nebo obsahuje neplatné znaky.';
 $wb['username_empty'] = 'Uživatelské jméno je prázdné.';
diff --git a/interface/web/admin/lib/lang/de_remote_user.lng b/interface/web/admin/lib/lang/de_remote_user.lng
index 164a0fb81a..e1f932a904 100644
--- a/interface/web/admin/lib/lang/de_remote_user.lng
+++ b/interface/web/admin/lib/lang/de_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Benutzername';
 $wb['password_txt'] = 'Passwort';
 $wb['function_txt'] = 'Funktionen';
diff --git a/interface/web/admin/lib/lang/de_users.lng b/interface/web/admin/lib/lang/de_users.lng
index 255e7bca0b..9bc13061c0 100644
--- a/interface/web/admin/lib/lang/de_users.lng
+++ b/interface/web/admin/lib/lang/de_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Benutzername';
 $wb['username_err'] = 'Der Benutzername enthält ungültige Zeichen.';
 $wb['passwort_txt'] = 'Passwort';
diff --git a/interface/web/admin/lib/lang/dk_remote_user.lng b/interface/web/admin/lib/lang/dk_remote_user.lng
index 80f61c8929..e7f020e411 100644
--- a/interface/web/admin/lib/lang/dk_remote_user.lng
+++ b/interface/web/admin/lib/lang/dk_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Brugernavn:';
 $wb['password_txt'] = 'Adgangskode:';
 $wb['function_txt'] = 'Funktioner:';
diff --git a/interface/web/admin/lib/lang/dk_users.lng b/interface/web/admin/lib/lang/dk_users.lng
index 2e86ab4ca9..f5811d771d 100644
--- a/interface/web/admin/lib/lang/dk_users.lng
+++ b/interface/web/admin/lib/lang/dk_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Brugernavn';
 $wb['username_err'] = 'Brugernavnet er for langt eller indeholder ugyldige karaktere.';
 $wb['username_empty'] = 'Brugernavnet er tomt.';
diff --git a/interface/web/admin/lib/lang/el_remote_user.lng b/interface/web/admin/lib/lang/el_remote_user.lng
index c38f1de2f0..72d9eb29dd 100644
--- a/interface/web/admin/lib/lang/el_remote_user.lng
+++ b/interface/web/admin/lib/lang/el_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Όνομα Χρήστη:';
 $wb['password_txt'] = 'Συνθηματικό:';
 $wb['function_txt'] = 'Ενέργειες:';
diff --git a/interface/web/admin/lib/lang/el_users.lng b/interface/web/admin/lib/lang/el_users.lng
index f0307b95ec..e25fbe17fa 100644
--- a/interface/web/admin/lib/lang/el_users.lng
+++ b/interface/web/admin/lib/lang/el_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Όνομα Χρήστη';
 $wb['username_err'] = 'Το όνομα χρήστη είναι πολύ μεγάλο ή περιέχει μη επιτρεπόμενους χαρακτήρες';
 $wb['username_empty'] = 'Το όνομα χρήστη δεν έχει οριστεί.';
diff --git a/interface/web/admin/lib/lang/en_remote_user.lng b/interface/web/admin/lib/lang/en_remote_user.lng
index 2fc633b555..dc39a8e798 100644
--- a/interface/web/admin/lib/lang/en_remote_user.lng
+++ b/interface/web/admin/lib/lang/en_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/en_users.lng b/interface/web/admin/lib/lang/en_users.lng
index 931c73e8eb..72d93eb4d2 100644
--- a/interface/web/admin/lib/lang/en_users.lng
+++ b/interface/web/admin/lib/lang/en_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb["username_txt"] = 'Username';
 $wb["username_err"] = 'The username is too long or contains invalid characters.';
 $wb["username_empty"] = 'The username is empty.';
diff --git a/interface/web/admin/lib/lang/es_remote_user.lng b/interface/web/admin/lib/lang/es_remote_user.lng
index 7cefa1e5db..b14c4b408b 100755
--- a/interface/web/admin/lib/lang/es_remote_user.lng
+++ b/interface/web/admin/lib/lang/es_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['Client functions'] = 'Funciones para clientes';
 $wb['DNS a functions'] = 'Funciones DNS para registro A';
 $wb['DNS aaaa functions'] = 'Funciones DNS para registro AAAA';
diff --git a/interface/web/admin/lib/lang/es_users.lng b/interface/web/admin/lib/lang/es_users.lng
index 65baeb666f..127d5431e2 100755
--- a/interface/web/admin/lib/lang/es_users.lng
+++ b/interface/web/admin/lib/lang/es_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['active_txt'] = 'Habilitado';
 $wb['app_theme_txt'] = 'Diseño';
 $wb['client_not_admin_err'] = 'Un usuario que pertenece a un cliente no puede ser del tipo: admin';
diff --git a/interface/web/admin/lib/lang/fi_remote_user.lng b/interface/web/admin/lib/lang/fi_remote_user.lng
index 2ae3420d62..8b943d3e52 100644
--- a/interface/web/admin/lib/lang/fi_remote_user.lng
+++ b/interface/web/admin/lib/lang/fi_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Käyttäjätunnus';
 $wb['password_txt'] = 'Salasana';
 $wb['function_txt'] = 'Toiminnot';
diff --git a/interface/web/admin/lib/lang/fi_users.lng b/interface/web/admin/lib/lang/fi_users.lng
index 199601f520..3e44e56678 100755
--- a/interface/web/admin/lib/lang/fi_users.lng
+++ b/interface/web/admin/lib/lang/fi_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Käyttäjätunnus';
 $wb['username_err'] = 'Käyttäjätunnus on liian pitkä tai sisältää kiellettyjä merkkejä.';
 $wb['username_empty'] = 'Käyttäjätunnus on tyhjä.';
diff --git a/interface/web/admin/lib/lang/fr_remote_user.lng b/interface/web/admin/lib/lang/fr_remote_user.lng
index 1594e60fb4..f2f8098945 100644
--- a/interface/web/admin/lib/lang/fr_remote_user.lng
+++ b/interface/web/admin/lib/lang/fr_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Identifiant';
 $wb['password_txt'] = 'Mot de passe';
 $wb['function_txt'] = 'Fonctions';
diff --git a/interface/web/admin/lib/lang/fr_users.lng b/interface/web/admin/lib/lang/fr_users.lng
index 6cc3e116b4..2f91cab83a 100644
--- a/interface/web/admin/lib/lang/fr_users.lng
+++ b/interface/web/admin/lib/lang/fr_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Nom d’utilisateur';
 $wb['username_err'] = 'Le nom d’utilisateur est trop long ou contient des caractères invalides.';
 $wb['passwort_txt'] = 'Mot de passe';
diff --git a/interface/web/admin/lib/lang/hr_remote_user.lng b/interface/web/admin/lib/lang/hr_remote_user.lng
index 069177e5ed..200e15544b 100644
--- a/interface/web/admin/lib/lang/hr_remote_user.lng
+++ b/interface/web/admin/lib/lang/hr_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Korisničko ime';
 $wb['password_txt'] = 'Å ifra';
 $wb['function_txt'] = 'Funkcije';
diff --git a/interface/web/admin/lib/lang/hr_users.lng b/interface/web/admin/lib/lang/hr_users.lng
index 7be3f968f2..c274a9498d 100644
--- a/interface/web/admin/lib/lang/hr_users.lng
+++ b/interface/web/admin/lib/lang/hr_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Korisničko ime';
 $wb['username_err'] = 'Korisničko ime je predugačko ili sadrži nedozvoljene znakove.';
 $wb['username_empty'] = 'Korisničko ime je prazno.';
diff --git a/interface/web/admin/lib/lang/hu_remote_user.lng b/interface/web/admin/lib/lang/hu_remote_user.lng
index bae9d82f53..278d2d0434 100644
--- a/interface/web/admin/lib/lang/hu_remote_user.lng
+++ b/interface/web/admin/lib/lang/hu_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Felhasználónév';
 $wb['password_txt'] = 'Jelszó';
 $wb['function_txt'] = 'Funkciók';
diff --git a/interface/web/admin/lib/lang/hu_users.lng b/interface/web/admin/lib/lang/hu_users.lng
index e2cf25fb79..5cb86c850a 100644
--- a/interface/web/admin/lib/lang/hu_users.lng
+++ b/interface/web/admin/lib/lang/hu_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Felhasználónév';
 $wb['username_err'] = 'A Felhasználónév túl hosszú vagy érvénytelen karaktereket tartalmaz';
 $wb['username_empty'] = 'A Felhasználónév üres.';
diff --git a/interface/web/admin/lib/lang/id_remote_user.lng b/interface/web/admin/lib/lang/id_remote_user.lng
index cc6efb627a..740ed6fe71 100644
--- a/interface/web/admin/lib/lang/id_remote_user.lng
+++ b/interface/web/admin/lib/lang/id_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Nama pengguna';
 $wb['password_txt'] = 'Kata Sandi';
 $wb['function_txt'] = 'Fungsi';
diff --git a/interface/web/admin/lib/lang/id_users.lng b/interface/web/admin/lib/lang/id_users.lng
index f9e961192c..e6ed3d5bef 100644
--- a/interface/web/admin/lib/lang/id_users.lng
+++ b/interface/web/admin/lib/lang/id_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Nama Pengguna';
 $wb['username_err'] = 'Nama pengguna terlalu panjang atau mengandung karakter yang tidak valid.';
 $wb['username_empty'] = 'Nama pengguna kosong.';
diff --git a/interface/web/admin/lib/lang/it_remote_user.lng b/interface/web/admin/lib/lang/it_remote_user.lng
index caef58a8c6..0d5e550d05 100644
--- a/interface/web/admin/lib/lang/it_remote_user.lng
+++ b/interface/web/admin/lib/lang/it_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Nome Utente';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Funzioni';
diff --git a/interface/web/admin/lib/lang/it_users.lng b/interface/web/admin/lib/lang/it_users.lng
index 1bde73a67b..60c80063f4 100644
--- a/interface/web/admin/lib/lang/it_users.lng
+++ b/interface/web/admin/lib/lang/it_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Nome utente';
 $wb['username_err'] = 'Nome utente troppo lungo o avente caratteri non validi.';
 $wb['username_empty'] = 'Nome utente mancante.';
diff --git a/interface/web/admin/lib/lang/ja_remote_user.lng b/interface/web/admin/lib/lang/ja_remote_user.lng
index 2b9ce2bbf0..adaaf54688 100644
--- a/interface/web/admin/lib/lang/ja_remote_user.lng
+++ b/interface/web/admin/lib/lang/ja_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'ユーザー名';
 $wb['password_txt'] = 'パスワード';
 $wb['function_txt'] = '機能';
diff --git a/interface/web/admin/lib/lang/ja_users.lng b/interface/web/admin/lib/lang/ja_users.lng
index 64f8339ffa..7d77bb8ac0 100644
--- a/interface/web/admin/lib/lang/ja_users.lng
+++ b/interface/web/admin/lib/lang/ja_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'ユーザー名';
 $wb['username_err'] = 'ユーザー名が長すぎるか、または不正な文字を含んでいます。';
 $wb['username_empty'] = 'ユーザー名を入力してください。';
diff --git a/interface/web/admin/lib/lang/nl_remote_user.lng b/interface/web/admin/lib/lang/nl_remote_user.lng
index f049116094..3d2baac1fd 100644
--- a/interface/web/admin/lib/lang/nl_remote_user.lng
+++ b/interface/web/admin/lib/lang/nl_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Externe Gebruiker'
 $wb['username_txt'] = 'Gebruikersnaam';
 $wb['password_txt'] = 'Wachtwoord';
 $wb['function_txt'] = 'Funties';
diff --git a/interface/web/admin/lib/lang/nl_users.lng b/interface/web/admin/lib/lang/nl_users.lng
index 1e6d4ef586..53611ff56e 100644
--- a/interface/web/admin/lib/lang/nl_users.lng
+++ b/interface/web/admin/lib/lang/nl_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Gebruikers';
 $wb['username_txt'] = 'Gebruikersnaam';
 $wb['username_err'] = 'De gebruikersnaam is te lang of bevat ongeldige karakters.';
 $wb['username_empty'] = 'De gebruikersnaam is niet ingvuld.';
diff --git a/interface/web/admin/lib/lang/pl_remote_user.lng b/interface/web/admin/lib/lang/pl_remote_user.lng
index 5df48fb29b..2a6a726bcb 100644
--- a/interface/web/admin/lib/lang/pl_remote_user.lng
+++ b/interface/web/admin/lib/lang/pl_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Nazwa użytkownika';
 $wb['password_txt'] = 'Hasło';
 $wb['function_txt'] = 'Funkcje';
diff --git a/interface/web/admin/lib/lang/pl_users.lng b/interface/web/admin/lib/lang/pl_users.lng
index e6dfcb57b2..c303b1ab1e 100644
--- a/interface/web/admin/lib/lang/pl_users.lng
+++ b/interface/web/admin/lib/lang/pl_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Nazwa użytkownika';
 $wb['username_err'] = 'Nazwa użytkownika jest za długa lub zawiera niedozwolone znaki.';
 $wb['username_empty'] = 'Nazwa użytkownika jest pusta.';
diff --git a/interface/web/admin/lib/lang/pt_remote_user.lng b/interface/web/admin/lib/lang/pt_remote_user.lng
index f23a6abd5c..b521beb5e4 100644
--- a/interface/web/admin/lib/lang/pt_remote_user.lng
+++ b/interface/web/admin/lib/lang/pt_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Nome do utilizador';
 $wb['password_txt'] = 'Senha';
 $wb['function_txt'] = 'Funções';
diff --git a/interface/web/admin/lib/lang/pt_users.lng b/interface/web/admin/lib/lang/pt_users.lng
index 67cfe4f572..3e620e02cd 100644
--- a/interface/web/admin/lib/lang/pt_users.lng
+++ b/interface/web/admin/lib/lang/pt_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Utilizador ';
 $wb['username_err'] = 'O Nome do utilizador é muito longo ou contém caracteres inválidos!';
 $wb['username_empty'] = 'Por favor, entre com um nome de utilizador .';
diff --git a/interface/web/admin/lib/lang/ro_remote_user.lng b/interface/web/admin/lib/lang/ro_remote_user.lng
index d0504005e3..8c70904102 100644
--- a/interface/web/admin/lib/lang/ro_remote_user.lng
+++ b/interface/web/admin/lib/lang/ro_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/ro_users.lng b/interface/web/admin/lib/lang/ro_users.lng
index dcbc4f4727..dd4ef0143d 100644
--- a/interface/web/admin/lib/lang/ro_users.lng
+++ b/interface/web/admin/lib/lang/ro_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Username';
 $wb['username_err'] = 'The username is too long or contains invalid characters.';
 $wb['username_empty'] = 'The username is empty.';
diff --git a/interface/web/admin/lib/lang/ru_remote_user.lng b/interface/web/admin/lib/lang/ru_remote_user.lng
index 2d556b0800..38eb3a3c33 100644
--- a/interface/web/admin/lib/lang/ru_remote_user.lng
+++ b/interface/web/admin/lib/lang/ru_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Логин';
 $wb['password_txt'] = 'Пароль';
 $wb['function_txt'] = 'Функции';
diff --git a/interface/web/admin/lib/lang/ru_users.lng b/interface/web/admin/lib/lang/ru_users.lng
index 63f081f917..9ed98ca021 100644
--- a/interface/web/admin/lib/lang/ru_users.lng
+++ b/interface/web/admin/lib/lang/ru_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Логин';
 $wb['username_err'] = 'Ошибка в логине';
 $wb['passwort_txt'] = 'Пароль';
diff --git a/interface/web/admin/lib/lang/se_remote_user.lng b/interface/web/admin/lib/lang/se_remote_user.lng
index 657e5878f1..39ae0ed375 100644
--- a/interface/web/admin/lib/lang/se_remote_user.lng
+++ b/interface/web/admin/lib/lang/se_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Användarnamn';
 $wb['password_txt'] = 'Lösenord';
 $wb['function_txt'] = 'Funktioner';
diff --git a/interface/web/admin/lib/lang/se_users.lng b/interface/web/admin/lib/lang/se_users.lng
index ac56cdf083..4f8814842c 100644
--- a/interface/web/admin/lib/lang/se_users.lng
+++ b/interface/web/admin/lib/lang/se_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Användarnamn';
 $wb['username_err'] = 'användarnamn_fel';
 $wb['passwort_txt'] = 'Lösenord';
diff --git a/interface/web/admin/lib/lang/sk_remote_user.lng b/interface/web/admin/lib/lang/sk_remote_user.lng
index 200cd28861..e8fac2a0b9 100644
--- a/interface/web/admin/lib/lang/sk_remote_user.lng
+++ b/interface/web/admin/lib/lang/sk_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Uživateľ';
 $wb['password_txt'] = 'Heslo';
 $wb['function_txt'] = 'Funkcia';
diff --git a/interface/web/admin/lib/lang/sk_users.lng b/interface/web/admin/lib/lang/sk_users.lng
index d71952fa3e..b037e307c0 100644
--- a/interface/web/admin/lib/lang/sk_users.lng
+++ b/interface/web/admin/lib/lang/sk_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Užívateľské meno';
 $wb['username_err'] = 'Užívateľské meno je príliš dlhá alebo obsahuje neplatné znaky.';
 $wb['username_empty'] = 'Užívateľské meno je prázdne.';
diff --git a/interface/web/admin/lib/lang/tr_remote_user.lng b/interface/web/admin/lib/lang/tr_remote_user.lng
index a713cad0d4..24fc6497f2 100644
--- a/interface/web/admin/lib/lang/tr_remote_user.lng
+++ b/interface/web/admin/lib/lang/tr_remote_user.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['remote_user_txt'] = 'Remote User'
 $wb['username_txt'] = 'Kullanıcı Adı:';
 $wb['password_txt'] = 'Parola:';
 $wb['function_txt'] = 'Ä°ÅŸlevler:';
diff --git a/interface/web/admin/lib/lang/tr_users.lng b/interface/web/admin/lib/lang/tr_users.lng
index 72aa9d1813..307cdd37b2 100644
--- a/interface/web/admin/lib/lang/tr_users.lng
+++ b/interface/web/admin/lib/lang/tr_users.lng
@@ -1,4 +1,5 @@
 <?php
+$wb['users_txt'] = 'Users';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['username_err'] = 'Kullanıcı adı çok uzun ya da geçersiz karakterler içeriyor.';
 $wb['username_empty'] = 'Kullanıcı adı boş olamaz.';
-- 
GitLab


From fab638d96b6fd31e160df66ff02dc0281f9debb4 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sun, 7 Jun 2020 22:26:50 +0200
Subject: [PATCH 335/571] - migrated changes from interface to server

---
 server/lib/classes/ispcmail.inc.php | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/server/lib/classes/ispcmail.inc.php b/server/lib/classes/ispcmail.inc.php
index cc83c74137..fbf5f84dca 100644
--- a/server/lib/classes/ispcmail.inc.php
+++ b/server/lib/classes/ispcmail.inc.php
@@ -169,7 +169,7 @@ class ispcmail {
 			$this->smtp_host = $value;
 			break;
 		case 'smtp_port':
-			$this->smtp_port = $value;
+			if(intval($value) > 0) $this->smtp_port = $value;
 			break;
 		case 'smtp_user':
 			$this->smtp_user = $value;
@@ -586,8 +586,8 @@ class ispcmail {
 	 */
 	private function _smtp_login() {
 		$this->_smtp_conn = fsockopen(($this->smtp_crypt == 'ssl' ? 'tls://' : '') . $this->smtp_host, $this->smtp_port, $errno, $errstr, 30);
-		$response = fgets($this->_smtp_conn, 515);
 		if(empty($this->_smtp_conn)) return false;
+		$response = fgets($this->_smtp_conn, 515);
 
 		//Say Hello to SMTP
 		if($this->smtp_helo == '') $this->detectHelo();
@@ -598,13 +598,20 @@ class ispcmail {
 		if($this->smtp_crypt == 'tls') {
 			fputs($this->_smtp_conn, 'STARTTLS' . $this->_crlf);
 			fgets($this->_smtp_conn, 515);
+			
 			$crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
 
 			if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
 				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
 				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
 			}
-			stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method);
+			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_host', false);
+			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_peer', false);
+			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_peer_name', false);
+			stream_context_set_option($this->_smtp_conn, 'ssl', 'allow_self_signed', true);
+			if (stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method) != true) {
+				return false;
+			}
 		}
 
 		//AUTH LOGIN
-- 
GitLab


From d4b1707086848838da7151c7bf34031f27aaad0a Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Sun, 7 Jun 2020 23:14:22 +0200
Subject: [PATCH 336/571] New translations

---
 interface/web/admin/lib/lang/nl.lng                | 14 +++++++-------
 .../web/admin/lib/lang/nl_directive_snippets.lng   | 12 ++++++------
 .../admin/lib/lang/nl_directive_snippets_list.lng  |  8 ++++----
 interface/web/admin/lib/lang/nl_firewall.lng       |  4 ++--
 interface/web/admin/lib/lang/nl_firewall_list.lng  |  2 +-
 interface/web/admin/lib/lang/nl_groups.lng         |  2 +-
 interface/web/admin/lib/lang/nl_language_add.lng   |  8 ++++----
 .../web/admin/lib/lang/nl_language_import.lng      |  2 +-
 8 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/interface/web/admin/lib/lang/nl.lng b/interface/web/admin/lib/lang/nl.lng
index 26d231ffcd..99a4b53da1 100644
--- a/interface/web/admin/lib/lang/nl.lng
+++ b/interface/web/admin/lib/lang/nl.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['1001'] = 'Username or password is empty.';
-$wb['1002'] = 'Username or password is wrong.';
+$wb['1001'] = 'Gebruikersnaam of wachtwoord is leeg.';
+$wb['1002'] = 'Gebruikersnaam of wachtwoord is incorrect.';
 $wb['Groups'] = 'Groepen';
 $wb['groups_description'] = 'Formulier om systeemgebruiker groepen te wijzigen.';
 $wb['Servers'] = 'Servers';
@@ -12,13 +12,13 @@ $wb['Edit group'] = 'Wijzigen groep';
 $wb['Edit server'] = 'Wijzigen server';
 $wb['Sync. Now'] = 'Sync. nu';
 $wb['DB Sync.'] = 'DB Sync.';
-$wb['User Management'] = 'User Management';
+$wb['User Management'] = 'Gebruikers beheren';
 $wb['CP Users'] = 'CP Gebruikers';
 $wb['Remote Users'] = 'Remote gebruikers';
-$wb['System'] = 'System';
+$wb['System'] = 'Systeem';
 $wb['Server Services'] = 'Server Services';
 $wb['Services'] = 'Services';
-$wb['Server Config'] = 'Server Config';
+$wb['Server Config'] = 'Server Configuratie';
 $wb['Server'] = 'Server';
 $wb['Mail'] = 'Mail';
 $wb['Getmail'] = 'Getmail';
@@ -27,10 +27,10 @@ $wb['FastCGI'] = 'FastCGI';
 $wb['Jailkit'] = 'Jailkit';
 $wb['Rescue'] = 'Rescue';
 $wb['Server IP addresses'] = 'Server IP adressen';
-$wb['Additional PHP Versions'] = 'Additional PHP Versions';
+$wb['Additional PHP Versions'] = 'Additionele PHP Versies';
 $wb['Firewall'] = 'Firewall';
 $wb['Interface'] = 'Interface';
-$wb['Interface Config'] = 'Main Config';
+$wb['Interface Config'] = 'Interface configuratie';
 $wb['Domains'] = 'Domains';
 $wb['Misc'] = 'Misc';
 $wb['Software'] = 'Apps & addons';
diff --git a/interface/web/admin/lib/lang/nl_directive_snippets.lng b/interface/web/admin/lib/lang/nl_directive_snippets.lng
index 0616afad8b..a4f610634e 100644
--- a/interface/web/admin/lib/lang/nl_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/nl_directive_snippets.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['Directive Snippets'] = 'Directive Snippets';
-$wb['name_txt'] = 'Name of Snippet';
+$wb['name_txt'] = 'Naam van de Snippet';
 $wb['type_txt'] = 'Type';
 $wb['snippet_txt'] = 'Snippet';
 $wb['active_txt'] = 'Active';
-$wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.';
-$wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.';
-$wb['variables_txt'] = 'Variables';
-$wb['customer_viewable_txt'] = 'Customer viewable';
-$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['directive_snippets_name_empty'] = 'Geef de Directive Snippet een naam.';
+$wb['directive_snippets_name_error_unique'] = 'Er is al een Directive Snippet met deze naam.';
+$wb['variables_txt'] = 'Variabelen';
+$wb['customer_viewable_txt'] = 'Zichtbaar voor klanten';
+$wb['required_php_snippets_txt'] = 'Vereiste PHP Snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_directive_snippets_list.lng b/interface/web/admin/lib/lang/nl_directive_snippets_list.lng
index 8e189f9f79..5c12ac4808 100644
--- a/interface/web/admin/lib/lang/nl_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/nl_directive_snippets_list.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['list_head_txt'] = 'Directive Snippets';
-$wb['active_txt'] = 'Active';
-$wb['name_txt'] = 'Name of Snippet';
+$wb['active_txt'] = 'Actief';
+$wb['name_txt'] = 'Naam';
 $wb['type_txt'] = 'Type';
-$wb['add_new_record_txt'] = 'Add Directive Snippet';
-$wb['customer_viewable_txt'] = 'Customer viewable';
+$wb['add_new_record_txt'] = 'Directive Snippet toevoegen';
+$wb['customer_viewable_txt'] = 'Zichtbaar voor klanten';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_firewall.lng b/interface/web/admin/lib/lang/nl_firewall.lng
index 443aca29e6..284af5c435 100644
--- a/interface/web/admin/lib/lang/nl_firewall.lng
+++ b/interface/web/admin/lib/lang/nl_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Gescheiden door komma';
 $wb['udp_port_help_txt'] = 'Gescheiden door komma';
 $wb['active_txt'] = 'Actief';
 $wb['firewall_error_unique'] = 'Er is al een firewall record voor deze server.';
-$wb['tcp_ports_error_regex'] = 'Karakter niet toegestaan in tcp port definitie. Toegestane karakters zijn nummers, : en ,.';
-$wb['udp_ports_error_regex'] = 'Karakter niet toegestaan in udp port definitie. Toegestane karakters zijn nummers, : en ,.';
+$wb['tcp_ports_error_regex'] = 'Karakter niet toegestaan in TCP port definitie. Toegestane karakters zijn nummers, : en ,.';
+$wb['udp_ports_error_regex'] = 'Karakter niet toegestaan in UDP port definitie. Toegestane karakters zijn nummers, : en ,.';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_firewall_list.lng b/interface/web/admin/lib/lang/nl_firewall_list.lng
index 394d093493..11746c6e5b 100644
--- a/interface/web/admin/lib/lang/nl_firewall_list.lng
+++ b/interface/web/admin/lib/lang/nl_firewall_list.lng
@@ -4,5 +4,5 @@ $wb['active_txt'] = 'Actief';
 $wb['server_id_txt'] = 'Server';
 $wb['tcp_port_txt'] = 'Open TCP poorten';
 $wb['udp_port_txt'] = 'Open UDP poorten';
-$wb['add_new_record_txt'] = 'Toevoegen Firewall record';
+$wb['add_new_record_txt'] = 'Firewall regel toevoegen';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_groups.lng b/interface/web/admin/lib/lang/nl_groups.lng
index e3ec317a4e..cdc75880ce 100644
--- a/interface/web/admin/lib/lang/nl_groups.lng
+++ b/interface/web/admin/lib/lang/nl_groups.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['description_txt'] = 'Omschrijving';
 $wb['name_txt'] = 'Groep';
-$wb['name_err'] = 'Groep moet min. 1, max. 30 karakters zijn.';
+$wb['name_err'] = 'Groepsnaam moet uit minimaal 1, en maximaal 30 karakters bestaan.';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_language_add.lng b/interface/web/admin/lib/lang/nl_language_add.lng
index c746351827..f1541093e6 100644
--- a/interface/web/admin/lib/lang/nl_language_add.lng
+++ b/interface/web/admin/lib/lang/nl_language_add.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Toevoegen nieuwe taal';
-$wb['language_select_txt'] = 'Selecteer taal basis';
+$wb['list_head_txt'] = 'Nieuwe taal toevoegen';
+$wb['language_select_txt'] = 'Selecteer basistaal';
 $wb['language_new_txt'] = 'Nieuwe taal';
-$wb['language_new_hint_txt'] = '2 karakters ISO 639-1 language-code (See http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
-$wb['btn_save_txt'] = 'Aanmaken nieuwe nieuw taalbestand set';
+$wb['language_new_hint_txt'] = '2 karakters ISO 639-1 taal-code (Zie http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
+$wb['btn_save_txt'] = 'Maak nieuwe taalbestanden aan';
 $wb['btn_cancel_txt'] = 'Terug';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_language_import.lng b/interface/web/admin/lib/lang/nl_language_import.lng
index ae407efecb..bec27a9528 100644
--- a/interface/web/admin/lib/lang/nl_language_import.lng
+++ b/interface/web/admin/lib/lang/nl_language_import.lng
@@ -5,5 +5,5 @@ $wb['btn_save_txt'] = 'Importeer het geselecteerde taalbestand';
 $wb['language_overwrite_txt'] = 'Overschrijf bestand, als dit bestaat.';
 $wb['btn_cancel_txt'] = 'Terug';
 $wb['ignore_version_txt'] = 'Sla ISPConfig versie controle over';
-$wb['list_desc_txt'] = 'WARNING: Do not import language files from untrustworthy sources.';
+$wb['list_desc_txt'] = 'Waarschuwing: Importeer geen taalbestanden van onvertrouwde bronnen.';
 ?>
-- 
GitLab


From 58102c14632b827b8609056fea306f11ffdaf1e1 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Mon, 8 Jun 2020 01:09:23 +0200
Subject: [PATCH 337/571] Remove description

---
 interface/web/admin/form/users.tform.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/admin/form/users.tform.php b/interface/web/admin/form/users.tform.php
index 4f08de4098..1aab0a4298 100644
--- a/interface/web/admin/form/users.tform.php
+++ b/interface/web/admin/form/users.tform.php
@@ -61,7 +61,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 $form['title']   = 'users_txt';
-$form['description']  = 'Form to edit systemusers.';
+//$form['description']  = 'Form to edit systemusers.';
 $form['name']   = 'users';
 $form['action']  = 'users_edit.php';
 $form['db_table'] = 'sys_user';
-- 
GitLab


From 857b4eaa316a22dce7d8ac4a93593c68649f7f90 Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Mon, 8 Jun 2020 13:03:08 +0200
Subject: [PATCH 338/571] Rename Comodo to "Sectigo / Comodo CA"

---
 install/sql/incremental/upd_dev_collection.sql | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index d07b33d4ba..1acc274a99 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -13,3 +13,6 @@ ALTER TABLE `web_domain` ADD  `backup_password` VARCHAR( 255 ) NOT NULL DEFAULT
 ALTER TABLE `web_backup` ADD  `backup_format` VARCHAR( 64 ) NOT NULL DEFAULT '' AFTER `backup_mode`;
 ALTER TABLE `web_backup` ADD  `backup_password` VARCHAR( 255 ) NOT NULL DEFAULT '' AFTER `filesize`;
 -- end of backup encryption
+
+-- rename Comodo to "Sectigo / Comodo CA"
+UPDATE `dns_ssl_ca` SET `ca_name` = 'Sectigo / Comodo CA' WHERE `ca_issue` = 'comodoca.com';
-- 
GitLab


From c3f4ffccc70141e979187af510b59539e4fde439 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 8 Jun 2020 14:28:35 -0600
Subject: [PATCH 339/571] default php-fpm to use ondemand mode

---
 install/sql/incremental/upd_dev_collection.sql      | 3 +++
 install/sql/ispconfig3.sql                          | 2 +-
 interface/web/sites/form/web_vhost_domain.tform.php | 2 +-
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 1acc274a99..c53f31b307 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -16,3 +16,6 @@ ALTER TABLE `web_backup` ADD  `backup_password` VARCHAR( 255 ) NOT NULL DEFAULT
 
 -- rename Comodo to "Sectigo / Comodo CA"
 UPDATE `dns_ssl_ca` SET `ca_name` = 'Sectigo / Comodo CA' WHERE `ca_issue` = 'comodoca.com';
+
+-- default php-fpm to ondemand mode
+ALTER TABLE `web_domain` ALTER pm SET DEFAULT 'ondemand';
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index b64eab94c3..3908cf382b 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2046,7 +2046,7 @@ CREATE TABLE `web_domain` (
   `nginx_directives` mediumtext,
   `php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'y',
   `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n',
-  `pm` enum('static','dynamic','ondemand') NOT NULL DEFAULT 'dynamic',
+  `pm` enum('static','dynamic','ondemand') NOT NULL DEFAULT 'ondemand',
   `pm_max_children` int(11) NOT NULL DEFAULT '10',
   `pm_start_servers` int(11) NOT NULL DEFAULT '2',
   `pm_min_spare_servers` int(11) NOT NULL DEFAULT '1',
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 24ee6d4e62..beb952bfe6 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -861,7 +861,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin'
 			'pm' => array (
 				'datatype' => 'VARCHAR',
 				'formtype' => 'SELECT',
-				'default' => 'dynamic',
+				'default' => 'ondemand',
 				'value'  => array('static' => 'static', 'dynamic' => 'dynamic', 'ondemand' => 'ondemand (PHP Version >= 5.3.9)')
 			),
 			'pm_max_children' => array (
-- 
GitLab


From 663531068b0d44ac98884435b35a7d77909333c4 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 07:42:14 +0200
Subject: [PATCH 340/571] - add checker for mr

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2ee654e1f2..cdcc6edb29 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,6 +13,7 @@ syntax:lint:
   only:
     - schedules
     - web
+    - merge_requests
 
   script:
     - composer require overtrue/phplint
-- 
GitLab


From cbc92c24b3a6ae3be640aadb6351d5d17e3b4e6b Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 07:46:17 +0200
Subject: [PATCH 341/571] - fixed language syntax errors from !1010

---
 interface/web/admin/lib/lang/ar_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/bg_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/br_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/ca_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/cz_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/de_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/dk_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/el_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/en_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/es_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/fi_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/fr_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/hr_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/hu_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/id_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/it_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/ja_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/pl_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/pt_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/ro_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/ru_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/se_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/sk_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/tr_remote_user.lng | 2 +-
 24 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/interface/web/admin/lib/lang/ar_remote_user.lng b/interface/web/admin/lib/lang/ar_remote_user.lng
index 8c70904102..b1db64e8e6 100644
--- a/interface/web/admin/lib/lang/ar_remote_user.lng
+++ b/interface/web/admin/lib/lang/ar_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/bg_remote_user.lng b/interface/web/admin/lib/lang/bg_remote_user.lng
index 35132ab452..2ad534da45 100644
--- a/interface/web/admin/lib/lang/bg_remote_user.lng
+++ b/interface/web/admin/lib/lang/bg_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Потребителско име';
 $wb['password_txt'] = 'Парола';
 $wb['function_txt'] = 'Функции';
diff --git a/interface/web/admin/lib/lang/br_remote_user.lng b/interface/web/admin/lib/lang/br_remote_user.lng
index b698af128d..7fbcbdf372 100644
--- a/interface/web/admin/lib/lang/br_remote_user.lng
+++ b/interface/web/admin/lib/lang/br_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['function_txt'] = 'Funções';
diff --git a/interface/web/admin/lib/lang/ca_remote_user.lng b/interface/web/admin/lib/lang/ca_remote_user.lng
index dc39a8e798..638882de55 100644
--- a/interface/web/admin/lib/lang/ca_remote_user.lng
+++ b/interface/web/admin/lib/lang/ca_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/cz_remote_user.lng b/interface/web/admin/lib/lang/cz_remote_user.lng
index f8d0f3d5e5..1c53a5c5b7 100644
--- a/interface/web/admin/lib/lang/cz_remote_user.lng
+++ b/interface/web/admin/lib/lang/cz_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Uživatelské jméno:';
 $wb['password_txt'] = 'Heslo:';
 $wb['function_txt'] = 'Funkce:';
diff --git a/interface/web/admin/lib/lang/de_remote_user.lng b/interface/web/admin/lib/lang/de_remote_user.lng
index e1f932a904..9bfb9c43a0 100644
--- a/interface/web/admin/lib/lang/de_remote_user.lng
+++ b/interface/web/admin/lib/lang/de_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Benutzername';
 $wb['password_txt'] = 'Passwort';
 $wb['function_txt'] = 'Funktionen';
diff --git a/interface/web/admin/lib/lang/dk_remote_user.lng b/interface/web/admin/lib/lang/dk_remote_user.lng
index e7f020e411..c592247b83 100644
--- a/interface/web/admin/lib/lang/dk_remote_user.lng
+++ b/interface/web/admin/lib/lang/dk_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Brugernavn:';
 $wb['password_txt'] = 'Adgangskode:';
 $wb['function_txt'] = 'Funktioner:';
diff --git a/interface/web/admin/lib/lang/el_remote_user.lng b/interface/web/admin/lib/lang/el_remote_user.lng
index 72d9eb29dd..43d04d0e02 100644
--- a/interface/web/admin/lib/lang/el_remote_user.lng
+++ b/interface/web/admin/lib/lang/el_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Όνομα Χρήστη:';
 $wb['password_txt'] = 'Συνθηματικό:';
 $wb['function_txt'] = 'Ενέργειες:';
diff --git a/interface/web/admin/lib/lang/en_remote_user.lng b/interface/web/admin/lib/lang/en_remote_user.lng
index dc39a8e798..638882de55 100644
--- a/interface/web/admin/lib/lang/en_remote_user.lng
+++ b/interface/web/admin/lib/lang/en_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/es_remote_user.lng b/interface/web/admin/lib/lang/es_remote_user.lng
index b14c4b408b..2bd9c6f2ce 100644
--- a/interface/web/admin/lib/lang/es_remote_user.lng
+++ b/interface/web/admin/lib/lang/es_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['Client functions'] = 'Funciones para clientes';
 $wb['DNS a functions'] = 'Funciones DNS para registro A';
 $wb['DNS aaaa functions'] = 'Funciones DNS para registro AAAA';
diff --git a/interface/web/admin/lib/lang/fi_remote_user.lng b/interface/web/admin/lib/lang/fi_remote_user.lng
index 8b943d3e52..f225bb8416 100644
--- a/interface/web/admin/lib/lang/fi_remote_user.lng
+++ b/interface/web/admin/lib/lang/fi_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Käyttäjätunnus';
 $wb['password_txt'] = 'Salasana';
 $wb['function_txt'] = 'Toiminnot';
diff --git a/interface/web/admin/lib/lang/fr_remote_user.lng b/interface/web/admin/lib/lang/fr_remote_user.lng
index f2f8098945..99a8f2e4f9 100644
--- a/interface/web/admin/lib/lang/fr_remote_user.lng
+++ b/interface/web/admin/lib/lang/fr_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Identifiant';
 $wb['password_txt'] = 'Mot de passe';
 $wb['function_txt'] = 'Fonctions';
diff --git a/interface/web/admin/lib/lang/hr_remote_user.lng b/interface/web/admin/lib/lang/hr_remote_user.lng
index 200e15544b..e5cef6a179 100644
--- a/interface/web/admin/lib/lang/hr_remote_user.lng
+++ b/interface/web/admin/lib/lang/hr_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Korisničko ime';
 $wb['password_txt'] = 'Å ifra';
 $wb['function_txt'] = 'Funkcije';
diff --git a/interface/web/admin/lib/lang/hu_remote_user.lng b/interface/web/admin/lib/lang/hu_remote_user.lng
index 278d2d0434..ad34bf0823 100644
--- a/interface/web/admin/lib/lang/hu_remote_user.lng
+++ b/interface/web/admin/lib/lang/hu_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Felhasználónév';
 $wb['password_txt'] = 'Jelszó';
 $wb['function_txt'] = 'Funkciók';
diff --git a/interface/web/admin/lib/lang/id_remote_user.lng b/interface/web/admin/lib/lang/id_remote_user.lng
index 740ed6fe71..1a31ae3274 100644
--- a/interface/web/admin/lib/lang/id_remote_user.lng
+++ b/interface/web/admin/lib/lang/id_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Nama pengguna';
 $wb['password_txt'] = 'Kata Sandi';
 $wb['function_txt'] = 'Fungsi';
diff --git a/interface/web/admin/lib/lang/it_remote_user.lng b/interface/web/admin/lib/lang/it_remote_user.lng
index 0d5e550d05..967270222b 100644
--- a/interface/web/admin/lib/lang/it_remote_user.lng
+++ b/interface/web/admin/lib/lang/it_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Nome Utente';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Funzioni';
diff --git a/interface/web/admin/lib/lang/ja_remote_user.lng b/interface/web/admin/lib/lang/ja_remote_user.lng
index adaaf54688..5ffbecd22a 100644
--- a/interface/web/admin/lib/lang/ja_remote_user.lng
+++ b/interface/web/admin/lib/lang/ja_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'ユーザー名';
 $wb['password_txt'] = 'パスワード';
 $wb['function_txt'] = '機能';
diff --git a/interface/web/admin/lib/lang/pl_remote_user.lng b/interface/web/admin/lib/lang/pl_remote_user.lng
index 2a6a726bcb..1e611ffbe1 100644
--- a/interface/web/admin/lib/lang/pl_remote_user.lng
+++ b/interface/web/admin/lib/lang/pl_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Nazwa użytkownika';
 $wb['password_txt'] = 'Hasło';
 $wb['function_txt'] = 'Funkcje';
diff --git a/interface/web/admin/lib/lang/pt_remote_user.lng b/interface/web/admin/lib/lang/pt_remote_user.lng
index b521beb5e4..b1e8e08899 100644
--- a/interface/web/admin/lib/lang/pt_remote_user.lng
+++ b/interface/web/admin/lib/lang/pt_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Nome do utilizador';
 $wb['password_txt'] = 'Senha';
 $wb['function_txt'] = 'Funções';
diff --git a/interface/web/admin/lib/lang/ro_remote_user.lng b/interface/web/admin/lib/lang/ro_remote_user.lng
index 8c70904102..b1db64e8e6 100644
--- a/interface/web/admin/lib/lang/ro_remote_user.lng
+++ b/interface/web/admin/lib/lang/ro_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/ru_remote_user.lng b/interface/web/admin/lib/lang/ru_remote_user.lng
index 38eb3a3c33..e1266951aa 100644
--- a/interface/web/admin/lib/lang/ru_remote_user.lng
+++ b/interface/web/admin/lib/lang/ru_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Логин';
 $wb['password_txt'] = 'Пароль';
 $wb['function_txt'] = 'Функции';
diff --git a/interface/web/admin/lib/lang/se_remote_user.lng b/interface/web/admin/lib/lang/se_remote_user.lng
index 39ae0ed375..c71d09f54f 100644
--- a/interface/web/admin/lib/lang/se_remote_user.lng
+++ b/interface/web/admin/lib/lang/se_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Användarnamn';
 $wb['password_txt'] = 'Lösenord';
 $wb['function_txt'] = 'Funktioner';
diff --git a/interface/web/admin/lib/lang/sk_remote_user.lng b/interface/web/admin/lib/lang/sk_remote_user.lng
index e8fac2a0b9..4e867066c7 100644
--- a/interface/web/admin/lib/lang/sk_remote_user.lng
+++ b/interface/web/admin/lib/lang/sk_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Uživateľ';
 $wb['password_txt'] = 'Heslo';
 $wb['function_txt'] = 'Funkcia';
diff --git a/interface/web/admin/lib/lang/tr_remote_user.lng b/interface/web/admin/lib/lang/tr_remote_user.lng
index 24fc6497f2..aacb7f4c35 100644
--- a/interface/web/admin/lib/lang/tr_remote_user.lng
+++ b/interface/web/admin/lib/lang/tr_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Kullanıcı Adı:';
 $wb['password_txt'] = 'Parola:';
 $wb['function_txt'] = 'Ä°ÅŸlevler:';
-- 
GitLab


From 6083f0f3ef019de211888d195955791894f85abe Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 08:19:39 +0200
Subject: [PATCH 342/571] Update upd_dev_collection.sql

---
 install/sql/incremental/upd_dev_collection.sql | 1 +
 1 file changed, 1 insertion(+)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index c53f31b307..259035db1e 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -19,3 +19,4 @@ UPDATE `dns_ssl_ca` SET `ca_name` = 'Sectigo / Comodo CA' WHERE `ca_issue` = 'co
 
 -- default php-fpm to ondemand mode
 ALTER TABLE `web_domain` ALTER pm SET DEFAULT 'ondemand';
+
-- 
GitLab


From d19d4a7f5ca68c7b3b2217afca87c469c9470dad Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 08:38:41 +0200
Subject: [PATCH 343/571] Update .gitlab-ci.yml

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2ee654e1f2..cdcc6edb29 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,6 +13,7 @@ syntax:lint:
   only:
     - schedules
     - web
+    - merge_requests
 
   script:
     - composer require overtrue/phplint
-- 
GitLab


From e3586dea7ead3dc7e205415d1df818bc12e2fbcc Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 09:56:06 +0200
Subject: [PATCH 344/571] - backport for MR !925

---
 .../web/themes/default/assets/stylesheets/ispconfig.css     | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css
index f5e8c46abf..fb1c8e8d18 100644
--- a/interface/web/themes/default/assets/stylesheets/ispconfig.css
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -794,4 +794,8 @@ span.notification_text {
 	color: red;
 	background: #fdd;
 	text-decoration: none;
-}
\ No newline at end of file
+}
+#apache_directives, #nginx_directives, #proxy_directives {
+	font-family: Consolas, "Courier New", Courier, monospace;
+}
+
-- 
GitLab


From b84d1a66b841f686db9d3b1a1fbf108e40b9f8bb Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 09:58:56 +0200
Subject: [PATCH 345/571] - missing fix for !1010

---
 interface/web/admin/lib/lang/nl_remote_user.lng | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/admin/lib/lang/nl_remote_user.lng b/interface/web/admin/lib/lang/nl_remote_user.lng
index 3d2baac1fd..884331daa0 100644
--- a/interface/web/admin/lib/lang/nl_remote_user.lng
+++ b/interface/web/admin/lib/lang/nl_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Externe Gebruiker'
+$wb['remote_user_txt'] = 'Externe Gebruiker';
 $wb['username_txt'] = 'Gebruikersnaam';
 $wb['password_txt'] = 'Wachtwoord';
 $wb['function_txt'] = 'Funties';
-- 
GitLab


From e58600a64e953fb8cd5906f0829f2712f5ce5753 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 11:54:20 +0200
Subject: [PATCH 346/571] - change phplint settings

---
 .phplint.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.phplint.yml b/.phplint.yml
index 10fd2a25af..800c8d4e5e 100644
--- a/.phplint.yml
+++ b/.phplint.yml
@@ -1,5 +1,5 @@
 path: ./
-jobs: 10
+jobs: 2
 cache: .phplint-cache
 extensions:
   - php
-- 
GitLab


From 20e52c33c00019840fe5f4828ec2152ad11e2ac0 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 12:05:07 +0200
Subject: [PATCH 347/571] - changed settings for phplint

---
 .phplint.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.phplint.yml b/.phplint.yml
index 800c8d4e5e..438e3c238d 100644
--- a/.phplint.yml
+++ b/.phplint.yml
@@ -1,5 +1,5 @@
 path: ./
-jobs: 2
+jobs: 5
 cache: .phplint-cache
 extensions:
   - php
-- 
GitLab


From c40524c469969866fa6c01face2b4be975ed5fd0 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Tue, 9 Jun 2020 13:13:59 +0200
Subject: [PATCH 348/571] purge trash and junk (Implements #5634)

---
 .../sql/incremental/upd_dev_collection.sql    |  3 +
 install/sql/ispconfig3.sql                    |  2 +
 interface/web/mail/form/mail_user.tform.php   | 14 +++
 interface/web/mail/lib/lang/ar_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/bg_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/br_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/ca_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/cz_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/de_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/dk_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/el_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/en_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/es_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/fi_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/fr_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/hr_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/hu_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/id_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/it_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/ja_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/nl_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/pl_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/pt_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/ro_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/ru_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/se_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/sk_mail_user.lng  |  4 +
 interface/web/mail/lib/lang/tr_mail_user.lng  |  4 +
 .../templates/mail_user_mailfilter_edit.htm   | 49 +++++++---
 .../cron.d/500-clean_mailboxes.inc.php        | 95 +++++++++++++++++++
 30 files changed, 250 insertions(+), 13 deletions(-)
 create mode 100755 server/lib/classes/cron.d/500-clean_mailboxes.inc.php

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 259035db1e..efd0f4082b 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -20,3 +20,6 @@ UPDATE `dns_ssl_ca` SET `ca_name` = 'Sectigo / Comodo CA' WHERE `ca_issue` = 'co
 -- default php-fpm to ondemand mode
 ALTER TABLE `web_domain` ALTER pm SET DEFAULT 'ondemand';
 
+ALTER TABLE `mail_user` 
+  ADD `purge_trash_days` INT NOT NULL DEFAULT '0' AFTER `move_junk`,
+  ADD `purge_junk_days` INT NOT NULL DEFAULT '0' AFTER `purge_trash_days`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 3908cf382b..4965358bc6 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1047,6 +1047,8 @@ CREATE TABLE `mail_user` (
   `autoresponder_subject` varchar(255) NOT NULL default 'Out of office reply',
   `autoresponder_text` mediumtext NULL,
   `move_junk` enum('n','y') NOT NULL default 'n',
+  `purge_trash_days` INT NOT NULL DEFAULT '0',
+  `purge_junk_days` INT NOT NULL DEFAULT '0',
   `custom_mailfilter` mediumtext,
   `postfix` enum('n','y') NOT NULL default 'y',
   `greylisting` enum('n','y' ) NOT NULL DEFAULT 'n',
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 0efc7f3d6b..83142f8a85 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -406,6 +406,20 @@ if ($global_config['mail']['mailbox_show_mail_filter_tab'] === 'y') {
 				'default' => 'n',
 				'value'  => array(0 => 'n', 1 => 'y')
 			),
+			'purge_trash_days' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'TEXT',
+				'validators' => array (
+				),
+				'default' => '0',
+			),
+			'purge_junk_days' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'TEXT',
+				'validators' => array (
+				),
+				'default' => '0',
+			),
 			//#################################
 			// END Datatable fields
 			//#################################
diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index c68becf335..a67a83c07a 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -62,4 +62,8 @@ $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 000377077b..3b9a27390e 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -62,4 +62,8 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index ed6e35ef61..2aca5c3736 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -62,4 +62,8 @@ $wb['monthly_backup_txt'] = 'Mensal';
 $wb['email_error_isascii'] = 'Por favor, não use caracteres especiais para a senha. Isto poderá causar problemas no cliente de e-mail.';
 $wb['cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
 $wb['sender_cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index 096572b5e0..e380b55d2d 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -62,4 +62,8 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index c697e4cffc..1946d4150f 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -62,4 +62,8 @@ $wb['weekly_backup_txt'] = 'Týdenní';
 $wb['monthly_backup_txt'] = 'Měsíční';
 $wb['sender_cc_note_txt'] = '(Při posílání kopií na více e-mailových adres, oddělte čárkami.) ';
 $wb['password_click_to_set_txt'] = 'Pro nastavení klikni zde';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index b60a756b09..7c1f02cd4f 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -62,4 +62,8 @@ $wb['sender_cc_txt'] = 'Kopie ausgehender Emails senden an (BCC)';
 $wb['sender_cc_error_isemail'] = '-Kopie ausgehender Emails senden an- Feld enthält keine gültige Emailadresse';
 $wb['sender_cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index fb846da199..8c0957d353 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -62,4 +62,8 @@ $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index a097470ad7..f735d6e7b3 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -62,4 +62,8 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 4174081b53..82cab6d70c 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -62,4 +62,8 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index 93c2095e1c..418fd2dbfa 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -62,4 +62,8 @@ $wb['sender_cc_txt'] = 'Enviar copia saliente a';
 $wb['server_id_txt'] = 'id_del_servidor';
 $wb['weekly_backup_txt'] = 'Semanalmente';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index 8f94f0158f..a764e95693 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -62,4 +62,8 @@ $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['password_click_to_set_txt'] = 'Click to set';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index bb54c2e0c0..732f3d8cb7 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -62,4 +62,8 @@ $wb['weekly_backup_txt'] = 'Hebdomadaire';
 $wb['monthly_backup_txt'] = 'Mensuel';
 $wb['sender_cc_note_txt'] = '(Séparer les adresses e-mail multiples par des virgules)';
 $wb['password_click_to_set_txt'] = 'Cliquez pour définir';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 8dcfe7a6fa..7406e2d656 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -62,4 +62,8 @@ $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index 43720fbd84..db8edf775e 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autor
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index ba17e373c7..670550062c 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autor
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index e6820a0329..dad3f69654 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -62,4 +62,8 @@ $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index 3cd498f270..803a278d5b 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autor
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 65d89a32af..39cd0bd0f0 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -61,4 +61,8 @@ $wb['autoresponder_start_date_is_required'] = 'Een startdatun is vereist voor he
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
 $wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
 $wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index d090fadb2a..8a35e7742e 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autor
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index aa0e9a0a05..56a1f16d30 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autor
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index 3f0f8ec479..ccdcc49fdf 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autor
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index 526c976ed5..fcfadd9db9 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Дата начала должн
 $wb['sender_cc_txt'] = 'Отправка исходящей копии на';
 $wb['sender_cc_error_isemail'] = 'Поле -Отправка исходящей копии на- не содержит действительный адрес электронной почты';
 $wb['sender_cc_note_txt'] = '(Разделите несколько адресов электронной почты запятыми)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index a427c50606..c081446557 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autor
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index 92c6dea578..eb70b8eba9 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -62,4 +62,8 @@ $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autor
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 99e9860396..c7dec33b99 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -62,4 +62,8 @@ $wb['monthly_backup_txt'] = 'Aylık';
 $wb['email_error_isascii'] = 'E-posta istemcinizde sorun yaşamamak için lütfen parolanızda dile özel unikod karakterler kullanmayın.';
 $wb['cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
 $wb['sender_cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
+$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
+$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
+$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
+$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
 ?>
diff --git a/interface/web/mail/templates/mail_user_mailfilter_edit.htm b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
index fc40398d5d..4c7058292e 100644
--- a/interface/web/mail/templates/mail_user_mailfilter_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
@@ -1,16 +1,39 @@
-            <div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='move_junk_txt'}</label>
-                <div class="col-sm-9">
-                    {tmpl_var name='move_junk'}
-                </div>
-            </div>
-        
+<div class="form-group">
+	<label class="col-sm-3 control-label">{tmpl_var name='move_junk_txt'}</label>
+	<div class="col-sm-9">{tmpl_var name='move_junk'}</div>
+</div>
 
-        {tmpl_var name='filter_records'}
+<div class="form-group">
+	<label for="purge_trash_days" class="col-sm-3 control-label">{tmpl_var name='purge_trash_days_txt'}</label>
+	<div class="col-sm-9">
+		<div class="input-group">
+        <tmpl_if name="show_config_info">
+			<input type="text" name="purge_trash_days" id="purge_trash_days" value="{tmpl_var name='purge_trash_days'}" class="form-control" data-toggle="tooltip" title="{tmpl_var name='tooltip_purge_trash_days_txt'}">
+        <tmpl_else>
+			<input type="text" name="purge_trash_days" id="purge_trash_days" value="{tmpl_var name='purge_trash_days'}" class="form-control">
+        </tmpl_if>
+		</div>
+	</div>
+</div>
 
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+<div class="form-group">
+	<label for="purge_junk_days" class="col-sm-3 control-label">{tmpl_var name='purge_junk_days_txt'}</label>
+	<div class="col-sm-9">
+		<div class="input-group">
+        <tmpl_if name="show_config_info">
+			<input type="text" name="purge_junk_days" id="purge_junk_days" value="{tmpl_var name='purge_junk_days'}" class="form-control" data-toggle="tooltip" title="{tmpl_var name='tooltip_purge_junk_days_txt'}">
+        <tmpl_else>
+			<input type="text" name="purge_junk_days" id="purge_junk_days" value="{tmpl_var name='purge_junk_days'}" class="form-control">
+        </tmpl_if>
+		</div>
+	</div>
+</div>
+ 
+{tmpl_var name='filter_records'}
 
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+<div class="clear"><div class="right">
+	<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+	<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+</div></div>
diff --git a/server/lib/classes/cron.d/500-clean_mailboxes.inc.php b/server/lib/classes/cron.d/500-clean_mailboxes.inc.php
new file mode 100755
index 0000000000..8617d0d76d
--- /dev/null
+++ b/server/lib/classes/cron.d/500-clean_mailboxes.inc.php
@@ -0,0 +1,95 @@
+<?php
+
+/*
+Copyright (c) 2020, Florian Schaal, schaal @it UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class cronjob_clean_mailboxes extends cronjob {
+
+	// should run before quota notify and backup
+	// quota notify and backup is both '0 0 * * *' 
+	
+	// job schedule
+	protected $_schedule = '00 22 * * *';
+
+	/* this function is optional if it contains no custom code */
+	public function onPrepare() {
+		global $app;
+
+		parent::onPrepare();
+	}
+
+	/* this function is optional if it contains no custom code */
+	public function onBeforeRun() {
+		global $app;
+
+		return parent::onBeforeRun();
+	}
+
+	public function onRunJob() {
+		global $app, $conf;
+
+		$trash_names=array('Trash', 'Papierkorb', 'Deleted Items', 'Deleted Messages', 'INBOX.Trash', 'INBOX.Papierkorb', 'INBOX.Deleted Messages');
+		$junk_names=array('Junk', 'Junk Email', 'SPAM', 'INBOX.SPAM');
+
+		$purge_cmd = 'doveadm expunge -u ? mailbox ? sentbefore ';
+
+		$server_id = intval($conf['server_id']);
+		$records = $app->db->queryAllRecords("SELECT email, maildir, purge_trash_days, purge_junk_days FROM mail_user WHERE maildir_format = 'maildir' AND disableimap = 'n' AND server_id = ? AND (purge_trash_days > 0 OR purge_junk_days > 0)", $server_id);
+		
+		if(is_array($records) && !empty($records)) {
+			foreach($records as $email) {
+				if($email['purge_trash_days'] > 0) {
+					foreach($trash_names as $trash) {
+						if(is_dir($email['maildir'].'/Maildir/.'.$trash)) {
+							$app->system->exec_safe($purge_cmd.intval($email['purge_trash_days']).'d', $email['email'], $trash);
+						}
+					}
+				}
+				if($email['purge_junk_days'] > 0) {
+					foreach($junk_names as $junk) {
+						if(is_dir($email['maildir'].'/Maildir/.'.$junk)) {
+							$app->system->exec_safe($purge_cmd.intval($email['purge_junk_days']).'d', $email['email'], $junk);
+						}
+					}
+				}
+			}
+		}
+
+		parent::onRunJob();
+	}
+
+	/* this function is optional if it contains no custom code */
+	public function onAfterRun() {
+		global $app;
+
+		parent::onAfterRun();
+	}
+
+}
+
+?>
-- 
GitLab


From 22819ea8cec7d2f3d1613c7f469b5aee6f5e2cc4 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 13:23:57 +0200
Subject: [PATCH 349/571] - added custom ci lint script

---
 .git-scripts/syntax.sh | 56 ++++++++++++++++++++++++++++++++++++++++++
 .gitlab-ci.yml         | 34 ++++++++++++++++++++++---
 2 files changed, 87 insertions(+), 3 deletions(-)
 create mode 100644 .git-scripts/syntax.sh

diff --git a/.git-scripts/syntax.sh b/.git-scripts/syntax.sh
new file mode 100644
index 0000000000..efc48ae4b3
--- /dev/null
+++ b/.git-scripts/syntax.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+IFS=$'\n'
+EX=0
+ERRS="" ;
+WARNS="" ;
+ERRCNT=0 ;
+WARNCNT=0 ;
+
+CMD="find . -type f \( -name \"*.php\" -o -name \"*.lng\" \) -print" ;
+
+if [[ "$1" == "commit" ]] ; then
+	CMD="git diff-tree --no-commit-id --name-only -r ${CI_COMMIT_SHA} | grep -E '\.(php|lng)$'" ;
+fi
+
+for F in $(eval "$CMD") ; do
+	if [[ ! -e "${F}" && -f "${F}" ]] ; then
+		continue ;
+	fi
+	echo -n "${F} ... " ;
+	R=$(php -d error_reporting=E_ALL -d display_errors=On -l "$F" 2>/dev/null) ;
+	RET=$? ;
+	R=$(echo "${R}" | sed "/^$/d")
+	if [ $RET -gt 0 ] ; then
+		EX=1 ;
+		echo "[ERROR]" ;
+		ERRS="${ERRS}${F}:"$'\n'"${R}"$'\n\n' ;
+		ERRCNT=$((ERRCNT + 1)) ;
+	else
+		if [[ "$R" == "Deprecated: "* ]] ; then
+			echo "[WARN]" ;
+			WARNS="${WARNS}${F}:"$'\n'"${R}"$'\n\n' ;
+			WARNCNT=$((WARNCNT + 1)) ;
+		else 
+			echo "[OK]" ;
+		fi
+	fi
+done
+
+echo ""
+echo "--------------------------";
+echo ""
+echo "${ERRCNT} Errors"
+if [ $ERRCNT -gt 0 ] ; then
+	echo "${ERRS}"
+	echo ""
+fi
+
+echo "${WARNCNT} Warnings"
+if [ $WARNCNT -gt 0 ] ; then
+	echo ""
+	echo "${WARNS}"
+	echo ""
+fi
+
+exit $EX
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cdcc6edb29..4e4a201bfc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 # Defines stages which are to be executed
 stages:
   - syntax
+  - syntax_diff
 
 #
 ### Stage syntax
@@ -16,8 +17,35 @@ syntax:lint:
     - merge_requests
 
   script:
-    - composer require overtrue/phplint
     - echo "Syntax checking PHP files"
-    - echo "For more information http://www.icosaedro.it/phplint/"
-    - vendor/bin/phplint
+    - bash ./.git-scripts/syntax.sh
+
+
+syntax_diff:lint:
+  stage: syntax
+  image: edbizarro/gitlab-ci-pipeline-php:7.2
+  allow_failure: false
+  only:
+    - web
+    - pushes
+    - branches
+
+  script:
+    - echo "Syntax checking PHP files"
+    - bash ./.git-scripts/syntax.sh commit
+
+#syntax:lint:
+#  stage: syntax
+#  image: edbizarro/gitlab-ci-pipeline-php:7.2
+#  allow_failure: false
+#  only:
+#    - schedules
+#    - web
+#    - merge_requests
+#
+#  script:
+#    - composer require overtrue/phplint
+#    - echo "Syntax checking PHP files"
+#    - echo "For more information http://www.icosaedro.it/phplint/"
+#    - vendor/bin/phplint
 
-- 
GitLab


From c8db76b6f7bf85483e99733fe29de791d56727cd Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 13:41:38 +0200
Subject: [PATCH 350/571] - improved lint script

---
 .git-scripts/syntax.sh | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/.git-scripts/syntax.sh b/.git-scripts/syntax.sh
index efc48ae4b3..e584e2ef10 100644
--- a/.git-scripts/syntax.sh
+++ b/.git-scripts/syntax.sh
@@ -7,39 +7,50 @@ WARNS="" ;
 ERRCNT=0 ;
 WARNCNT=0 ;
 
+OUTCNT=0 ;
+FILECNT=0 ;
+DONECNT=0 ;
+
 CMD="find . -type f \( -name \"*.php\" -o -name \"*.lng\" \) -print" ;
 
 if [[ "$1" == "commit" ]] ; then
 	CMD="git diff-tree --no-commit-id --name-only -r ${CI_COMMIT_SHA} | grep -E '\.(php|lng)$'" ;
 fi
 
+FILECNT=$(eval "${CMD} | wc -l") ;
+
 for F in $(eval "$CMD") ; do
 	if [[ ! -e "${F}" && -f "${F}" ]] ; then
 		continue ;
 	fi
-	echo -n "${F} ... " ;
 	R=$(php -d error_reporting=E_ALL -d display_errors=On -l "$F" 2>/dev/null) ;
 	RET=$? ;
 	R=$(echo "${R}" | sed "/^$/d")
 	if [ $RET -gt 0 ] ; then
 		EX=1 ;
-		echo "[ERROR]" ;
+		echo -n "E" ;
 		ERRS="${ERRS}${F}:"$'\n'"${R}"$'\n\n' ;
 		ERRCNT=$((ERRCNT + 1)) ;
 	else
 		if [[ "$R" == "Deprecated: "* ]] ; then
-			echo "[WARN]" ;
+			echo -n "W" ;
 			WARNS="${WARNS}${F}:"$'\n'"${R}"$'\n\n' ;
 			WARNCNT=$((WARNCNT + 1)) ;
 		else 
-			echo "[OK]" ;
+			echo -n "." ;
 		fi
 	fi
+	OUTCNT=$((OUTCNT + 1)) ;
+	DONECNT=$((DONECNT + 1)) ;
+	if [ $OUTCNT -ge 40 ] ; then
+		OUTCNT=0 ;
+		echo "[${DONECNT}/${FILECNT}]" ;
+	fi
 done
 
 echo ""
 echo "--------------------------";
-echo ""
+echo "${DONECNT} Files done"
 echo "${ERRCNT} Errors"
 if [ $ERRCNT -gt 0 ] ; then
 	echo "${ERRS}"
-- 
GitLab


From 8eca37ffd7861fe0477adaf8e3e5aed313874b9e Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 9 Jun 2020 13:51:43 +0200
Subject: [PATCH 351/571] - fixed remote functions naming (CAA/CNAME)

---
 interface/lib/classes/remote.d/dns.inc.php | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 36180ace3e..612adf7186 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -429,22 +429,22 @@ class remoting_dns extends remoting {
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_cname_get($session_id, $primary_id) {
+	public function dns_caa_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'CAA');
 	}
 
 	//* Add a record
-	public function dns_cname_add($session_id, $client_id, $params, $update_serial=false) {
+	public function dns_caa_add($session_id, $client_id, $params, $update_serial=false) {
 		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'CAA');
 	}
 
 	//* Update a record
-	public function dns_cname_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+	public function dns_caa_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
 		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'CAA');
 	}
 
 	//* Delete a record
-	public function dns_cname_delete($session_id, $primary_id, $update_serial=false) {
+	public function dns_caa_delete($session_id, $primary_id, $update_serial=false) {
 		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'CAA');
 	}
 
-- 
GitLab


From 5ffe9d88ddd7af2c4464230216f2df7a9db3c67e Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Tue, 9 Jun 2020 14:02:52 +0200
Subject: [PATCH 352/571] allow the same name for every directive snippets type
 (Implemets #5631)

---
 ...validate_server_directive_snippets.inc.php | 49 +++++++++++++++++++
 .../admin/form/directive_snippets.tform.php   |  7 ++-
 2 files changed, 52 insertions(+), 4 deletions(-)
 create mode 100755 interface/lib/classes/validate_server_directive_snippets.inc.php

diff --git a/interface/lib/classes/validate_server_directive_snippets.inc.php b/interface/lib/classes/validate_server_directive_snippets.inc.php
new file mode 100755
index 0000000000..0272166c40
--- /dev/null
+++ b/interface/lib/classes/validate_server_directive_snippets.inc.php
@@ -0,0 +1,49 @@
+<?php
+
+/*
+Copyright (c) 2020, Florian Schaal, schaal @it UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class validate_server_directive_snippets {
+
+	function get_error($errmsg) {
+		global $app;
+
+		if(isset($app->tform->wordbook[$errmsg])) {
+			return $app->tform->wordbook[$errmsg]."<br>\r\n";
+		} else {
+			return $errmsg."<br>\r\n";
+		}
+	}
+
+	function validate_snippet($field_name, $field_value, $validator) {
+		global $app;
+		$check = $app->db->queryAllRecords('SELECT * FROM directive_snippets WHERE name = ? AND type = ?', $field_value, trim($_POST['type']));
+		if(!empty($check)) return $this->get_error('directive_snippets_name_error_unique');
+	}
+
+}
diff --git a/interface/web/admin/form/directive_snippets.tform.php b/interface/web/admin/form/directive_snippets.tform.php
index d451a50795..bd9466c310 100644
--- a/interface/web/admin/form/directive_snippets.tform.php
+++ b/interface/web/admin/form/directive_snippets.tform.php
@@ -66,10 +66,9 @@ $form["tabs"]['directive_snippets'] = array (
 		'name' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
-			'validators' => array (  0 =>  array (    'type' => 'NOTEMPTY',
-					'errmsg'=> 'directive_snippets_name_empty'),
-				1 => array ( 'type' => 'UNIQUE',
-					'errmsg'=> 'directive_snippets_name_error_unique'),
+			'validators' => array (  
+				0 => array ( 'type' => 'NOTEMPTY', 'errmsg'=> 'directive_snippets_name_empty'),
+				1 => array ( 'type' => 'CUSTOM', 'class' => 'validate_server_directive_snippets', 'function' => 'validate_snippet'),
 			),
 			'filters'   => array(
 					0 => array( 'event' => 'SAVE',
-- 
GitLab


From bc0d340108893913c095812eef3c82052e92237b Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 2 Jun 2020 17:06:46 -0600
Subject: [PATCH 353/571] mail_user.disabledoveadm should always = 'n'  fixes
 #5629

---
 install/sql/incremental/upd_dev_collection.sql | 3 +++
 interface/web/mail/mail_user_edit.php          | 8 ++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index efd0f4082b..659708c685 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -23,3 +23,6 @@ ALTER TABLE `web_domain` ALTER pm SET DEFAULT 'ondemand';
 ALTER TABLE `mail_user` 
   ADD `purge_trash_days` INT NOT NULL DEFAULT '0' AFTER `move_junk`,
   ADD `purge_junk_days` INT NOT NULL DEFAULT '0' AFTER `purge_trash_days`;
+
+-- doveadm should be enabled for all mailboxes
+UPDATE `mail_user` set `disabledoveadm` = 'n';
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index d291367d11..7255c6dbac 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -313,8 +313,8 @@ class page_action extends tform_actions {
 			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = ($this->dataRecord["disablesmtp"])?'y':'n';
 
-			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disabledoveadm = ? WHERE mailuser_id = ?";
-			$app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disableimap, $this->id);
+			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ? WHERE mailuser_id = ?";
+			$app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $this->id);
 		}
 	}
 
@@ -365,8 +365,8 @@ class page_action extends tform_actions {
 			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = (isset($this->dataRecord["disablesmtp"]) && $this->dataRecord["disablesmtp"])?'y':'n';
 
-			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disabledoveadm = ? WHERE mailuser_id = ?";
-			$app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disableimap, $this->id);
+			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ? WHERE mailuser_id = ?";
+			$app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $this->id);
 		}
 
 		//** If the email address has been changed, change it in all aliases too
-- 
GitLab


From 5fe318fe3f3ca4f721f4f36791de355af3360843 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Wed, 10 Jun 2020 10:28:19 +0200
Subject: [PATCH 354/571] Update validate_server_directive_snippets.inc.php

---
 .../lib/classes/validate_server_directive_snippets.inc.php   | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/interface/lib/classes/validate_server_directive_snippets.inc.php b/interface/lib/classes/validate_server_directive_snippets.inc.php
index 0272166c40..751400766c 100755
--- a/interface/lib/classes/validate_server_directive_snippets.inc.php
+++ b/interface/lib/classes/validate_server_directive_snippets.inc.php
@@ -42,7 +42,10 @@ class validate_server_directive_snippets {
 
 	function validate_snippet($field_name, $field_value, $validator) {
 		global $app;
-		$check = $app->db->queryAllRecords('SELECT * FROM directive_snippets WHERE name = ? AND type = ?', $field_value, trim($_POST['type']));
+        $type=(isset($app->remoting_lib->dataRecord['type']))?$app->remoting_lib->dataRecord['type']:$_POST['type'];
+        $types = array('apache','nginx','php','proxy');
+        if(!in_array($type,$types)) return $this->get_error('directive_snippets_invalid_type');
+		$check = $app->db->queryAllRecords('SELECT * FROM directive_snippets WHERE name = ? AND type = ?', $field_value, $type);
 		if(!empty($check)) return $this->get_error('directive_snippets_name_error_unique');
 	}
 
-- 
GitLab


From d328afafcca38a67b4c1eb3068eded60cd4fef07 Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Wed, 10 Jun 2020 11:52:53 +0200
Subject: [PATCH 355/571] add missing entry from upd_dev_collection.sql

---
 install/sql/ispconfig3.sql | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 4965358bc6..b7722eac0c 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -561,7 +561,7 @@ INSERT INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `s
 (NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0),
 (NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0),
 (NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0),
-(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodoca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sectigo / Comodo CA', 'comodoca.com', 'Y', '', 0),
 (NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0),
 (NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0),
 (NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0),
-- 
GitLab


From f9c1d4b4e428e8343d6e27bb53e5df93c93e3e64 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 9 Oct 2019 15:47:08 -0600
Subject: [PATCH 356/571] enable imap special-use flags

---
 install/tpl/debian6_dovecot2.conf.master  | 20 ++++++++++++++++++++
 install/tpl/fedora_dovecot2.conf.master   | 21 +++++++++++++++++++++
 install/tpl/opensuse_dovecot2.conf.master | 21 +++++++++++++++++++++
 3 files changed, 62 insertions(+)

diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 777280f044..58adf1d85c 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -10,6 +10,7 @@ ssl_dh = </etc/dovecot/dh.pem
 ssl_protocols = !SSLv2 !SSLv3
 ssl_min_protocol = TLSv1
 mail_max_userip_connections = 100
+mail_plugins = quota
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
   driver = sql
@@ -83,3 +84,22 @@ protocol lmtp {
 #2.3+     }
 #2.3+ }
 
+imap_capability=+SEPCIAL-USE XLIST
+namespace inbox {
+  inbox = yes
+  mailbox Drafts {
+    special_use = \Drafts
+  }
+  mailbox Junk {
+    special_use = \Junk
+  }
+  mailbox Sent {
+    special_use = \Sent
+  }
+  mailbox "Sent Messages" {
+    special_use = \Sent
+  }
+  mailbox Trash {
+    special_use = \Trash
+  }
+}
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 1ba39a30d4..1f6c6eb996 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -7,6 +7,7 @@ mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_protocols = !SSLv2 !SSLv3
+mail_plugins = quota
 passdb {
   args = /etc/dovecot-sql.conf
   driver = sql
@@ -77,3 +78,23 @@ mail_plugins = $mail_plugins quota
 #2.3+         mode = 0660
 #2.3+     }
 #2.3+ }
+
+imap_capability=+SEPCIAL-USE XLIST
+namespace inbox {
+  inbox = yes
+  mailbox Drafts {
+    special_use = \Drafts
+  }
+  mailbox Junk {
+    special_use = \Junk
+  }
+  mailbox Sent {
+    special_use = \Sent
+  }
+  mailbox "Sent Messages" {
+    special_use = \Sent
+  }
+  mailbox Trash {
+    special_use = \Trash
+  }
+}
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index f615cf3354..9e17d4603a 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -7,6 +7,7 @@ mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_protocols = !SSLv2 !SSLv3
+mail_plugins = quota
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
   driver = sql
@@ -76,3 +77,23 @@ mail_plugins = $mail_plugins quota
 #2.3+         mode = 0660
 #2.3+     }
 #2.3+ }
+
+imap_capability=+SEPCIAL-USE XLIST
+namespace inbox {
+  inbox = yes
+  mailbox Drafts {
+    special_use = \Drafts
+  }
+  mailbox Junk {
+    special_use = \Junk
+  }
+  mailbox Sent {
+    special_use = \Sent
+  }
+  mailbox "Sent Messages" {
+    special_use = \Sent
+  }
+  mailbox Trash {
+    special_use = \Trash
+  }
+}
-- 
GitLab


From 36e7b355ce713a8993aec76a2a6b6948bf21399c Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 9 Oct 2019 16:07:29 -0600
Subject: [PATCH 357/571] enable quota checking in RCPT stage

---
 install/tpl/debian6_dovecot2.conf.master  | 1 +
 install/tpl/debian_dovecot2.conf.master   | 1 +
 install/tpl/fedora_dovecot2.conf.master   | 1 +
 install/tpl/opensuse_dovecot2.conf.master | 1 +
 4 files changed, 4 insertions(+)

diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 58adf1d85c..76d168cd7d 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -50,6 +50,7 @@ service lmtp {
 #   process_min_avail = 5
   }
 }
+lmtp_rcpt_check_quota = yes
 service imap-login {
   client_limit = 1000
   process_limit = 512
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index e1929b188d..24bf07393f 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -46,6 +46,7 @@ service lmtp {
    user = postfix
   }
 }
+lmtp_rcpt_check_quota = yes
 service imap-login {
   client_limit = 1000
   process_limit = 512
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 1f6c6eb996..56d304a761 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -43,6 +43,7 @@ service lmtp {
    user = postfix
   }
 }
+lmtp_rcpt_check_quota = yes
 service imap-login {
   client_limit = 1000
   process_limit = 500
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 9e17d4603a..d9f29a41e1 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -43,6 +43,7 @@ service lmtp {
    user = postfix
   }
 }
+lmtp_rcpt_check_quota = yes
 service imap-login {
   client_limit = 1000
   process_limit = 500
-- 
GitLab


From cda1d3b20cae212570f1ff79c95abcb8100c23cb Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 9 Oct 2019 16:37:36 -0600
Subject: [PATCH 358/571] implement dovecot quota-status policy daemon (#4649)

---
 install/sql/incremental/upd_dev_collection.sql |  3 +++
 install/sql/ispconfig3.sql                     |  1 +
 install/tpl/debian6_dovecot2.conf.master       | 15 +++++++++++++++
 install/tpl/debian_dovecot2.conf.master        | 15 +++++++++++++++
 install/tpl/debian_postfix.conf.master         |  3 ++-
 install/tpl/fedora_dovecot2.conf.master        | 15 +++++++++++++++
 install/tpl/fedora_postfix.conf.master         |  3 ++-
 install/tpl/gentoo_postfix.conf.master         |  3 ++-
 install/tpl/master_cf_amavis10025.master       |  1 +
 install/tpl/master_cf_amavis10027.master       |  1 +
 install/tpl/opensuse_dovecot2.conf.master      | 15 +++++++++++++++
 install/tpl/opensuse_postfix.conf.master       |  3 ++-
 12 files changed, 74 insertions(+), 4 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 659708c685..91db879d0c 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -26,3 +26,6 @@ ALTER TABLE `mail_user`
 
 -- doveadm should be enabled for all mailboxes
 UPDATE `mail_user` set `disabledoveadm` = 'n';
+
+-- add disablequota-status for quota-status policy daemon
+ALTER TABLE `mail_user` ADD `disablequota-status` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `disabledoveadm`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 4965358bc6..cc266ff235 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1062,6 +1062,7 @@ CREATE TABLE `mail_user` (
   `disablelda` enum('n','y') NOT NULL default 'n',
   `disablelmtp` enum('n','y') NOT NULL default 'n',
   `disabledoveadm` enum('n','y') NOT NULL default 'n',
+  `disablequota-status` enum('n','y') NOT NULL default 'n',
   `last_quota_notification` date NULL default NULL,
   `backup_interval` VARCHAR( 255 ) NOT NULL default 'none',
   `backup_copies` INT NOT NULL DEFAULT '1',
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 76d168cd7d..1f51f23ad3 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -85,6 +85,21 @@ protocol lmtp {
 #2.3+     }
 #2.3+ }
 
+service quota-status {
+  executable = quota-status -p postfix
+  inet_listener {
+    # separate multiple addresses with space:
+    address = 127.0.0.1
+    port = 10060
+  }
+  client_limit = 1
+}
+plugin {
+  quota_status_success = DUNNO
+  quota_status_nouser = DUNNO
+  quota_status_overquota = "552 5.2.2 Mailbox is full"
+}
+
 imap_capability=+SEPCIAL-USE XLIST
 namespace inbox {
   inbox = yes
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index 24bf07393f..b71ede7534 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -81,3 +81,18 @@ protocol lmtp {
 #2.3+         mode = 0660
 #2.3+     }
 #2.3+ }
+
+service quota-status {
+  executable = quota-status -p postfix
+  inet_listener {
+    # separate multiple addresses with space:
+    address = 127.0.0.1
+    port = 10060
+  }
+  client_limit = 1
+}
+plugin {
+  quota_status_success = DUNNO
+  quota_status_nouser = DUNNO
+  quota_status_overquota = "552 5.2.2 Mailbox is full"
+}
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index b7dbea6300..4d03dfd005 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -15,7 +15,8 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023 
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service inet:127.0.0.1:10060
+smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10060
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 56d304a761..9115404d9f 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -80,6 +80,21 @@ mail_plugins = $mail_plugins quota
 #2.3+     }
 #2.3+ }
 
+service quota-status {
+  executable = quota-status -p postfix
+  inet_listener {
+    # separate multiple addresses with space:
+    address = 127.0.0.1
+    port = 10060
+  }
+  client_limit = 1
+}
+plugin {
+  quota_status_success = DUNNO
+  quota_status_nouser = DUNNO
+  quota_status_overquota = "552 5.2.2 Mailbox is full"
+}
+
 imap_capability=+SEPCIAL-USE XLIST
 namespace inbox {
   inbox = yes
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index f06af82288..8bda2b7dcc 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -11,7 +11,8 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service inet:127.0.0.1:10060
+smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10060
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index dc20e02c13..79a9dcd63d 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -10,7 +10,8 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service inet:127.0.0.1:10060
+smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10060
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/master_cf_amavis10025.master b/install/tpl/master_cf_amavis10025.master
index 43f362d5c0..6dee892264 100644
--- a/install/tpl/master_cf_amavis10025.master
+++ b/install/tpl/master_cf_amavis10025.master
@@ -8,6 +8,7 @@
         -o smtpd_helo_restrictions=
         -o smtpd_sender_restrictions=
         -o smtpd_recipient_restrictions=permit_mynetworks,reject
+        -o smtpd_end_of_data_restrictions=
         -o mynetworks=127.0.0.0/8
         -o strict_rfc821_envelopes=yes
         -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
diff --git a/install/tpl/master_cf_amavis10027.master b/install/tpl/master_cf_amavis10027.master
index f9fdf1cf60..640902d52e 100644
--- a/install/tpl/master_cf_amavis10027.master
+++ b/install/tpl/master_cf_amavis10027.master
@@ -8,6 +8,7 @@
         -o smtpd_helo_restrictions=
         -o smtpd_sender_restrictions=
         -o smtpd_recipient_restrictions=permit_mynetworks,reject
+        -o smtpd_end_of_data_restrictions=
         -o mynetworks=127.0.0.0/8
         -o strict_rfc821_envelopes=yes
         -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index d9f29a41e1..7fb51246f9 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -79,6 +79,21 @@ mail_plugins = $mail_plugins quota
 #2.3+     }
 #2.3+ }
 
+service quota-status {
+  executable = quota-status -p postfix
+  inet_listener {
+    # separate multiple addresses with space:
+    address = 127.0.0.1
+    port = 10060
+  }
+  client_limit = 1
+}
+plugin {
+  quota_status_success = DUNNO
+  quota_status_nouser = DUNNO
+  quota_status_overquota = "552 5.2.2 Mailbox is full"
+}
+
 imap_capability=+SEPCIAL-USE XLIST
 namespace inbox {
   inbox = yes
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index 4192f988b5..6661bffd98 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -13,7 +13,8 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service inet:127.0.0.1:10060
+smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10060
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
-- 
GitLab


From f60d97f4313b78f7e605ef65a508d1dee4a2dc25 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 10 Oct 2019 11:20:30 -0600
Subject: [PATCH 359/571] enable managesieve daemon if installed (#3395)

---
 install/dist/lib/debian60.lib.php         | 11 ++++++++++-
 install/lib/installer_base.lib.php        | 11 ++++++++++-
 install/tpl/debian6_dovecot2.conf.master  |  2 ++
 install/tpl/debian_dovecot2.conf.master   |  2 ++
 install/tpl/fedora_dovecot2.conf.master   |  2 ++
 install/tpl/opensuse_dovecot2.conf.master |  2 ++
 6 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index cc234f132e..cd3b46e544 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -138,7 +138,7 @@ class installer extends installer_base {
 				}
 				//remove #2.3+ comment
 				$content = file_get_contents($config_dir.'/'.$configfile);
-				$content = str_replace('#2.3+','',$content);
+				$content = str_replace('#2.3+ ','',$content);
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
 				
@@ -155,6 +155,15 @@ class installer extends installer_base {
 			}
 		}
 		
+		//* dovecot-managesieved
+		if($configure_managesieve = is_file('/usr/lib/dovecot/managesieve')) {
+			//remove #mangesieve+ comment
+			$content = file_get_contents($config_dir.'/'.$configfile);
+			$content = str_replace('#mangesieve+ ','',$content);
+			file_put_contents($config_dir.'/'.$configfile,$content);
+			unset($content);
+		}
+
 		//* dovecot-lmtpd
 		if($configure_lmtp) {
 			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index e5ac1428d8..73995498d3 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1347,7 +1347,7 @@ class installer_base {
 				}
 				//remove #2.3+ comment
 				$content = file_get_contents($config_dir.'/'.$configfile);
-				$content = str_replace('#2.3+','',$content);
+				$content = str_replace('#2.3+ ','',$content);
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
 				
@@ -1358,6 +1358,15 @@ class installer_base {
 			}
 		}
 
+		//* dovecot-managesieved
+		if($configure_managesieve = is_file('/usr/lib/dovecot/managesieve')) {
+			//remove #mangesieve+ comment
+			$content = file_get_contents($config_dir.'/'.$configfile);
+			$content = str_replace('#mangesieve+ ','',$content);
+			file_put_contents($config_dir.'/'.$configfile,$content);
+			unset($content);
+		}
+
 		//* dovecot-lmtpd
 		if($configure_lmtp) {
 			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 1f51f23ad3..c21ab94ad9 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -119,3 +119,5 @@ namespace inbox {
     special_use = \Trash
   }
 }
+
+#managesieve+ protocols = $protocols sieve
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index b71ede7534..8a204e7776 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -96,3 +96,5 @@ plugin {
   quota_status_nouser = DUNNO
   quota_status_overquota = "552 5.2.2 Mailbox is full"
 }
+
+#managesieve+ protocols = $protocols sieve
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 9115404d9f..207983f86e 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -114,3 +114,5 @@ namespace inbox {
     special_use = \Trash
   }
 }
+
+#managesieve+ protocols = $protocols sieve
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 7fb51246f9..42230ed300 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -113,3 +113,5 @@ namespace inbox {
     special_use = \Trash
   }
 }
+
+#managesieve+ protocols = $protocols sieve
-- 
GitLab


From 2120766a264199d00580dfcbde98008bfd8e2815 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 14 Oct 2019 17:53:23 -0600
Subject: [PATCH 360/571] use lmtp by default if detected

---
 install/dist/lib/debian60.lib.php         | 27 ++++++++++++++---------
 install/lib/installer_base.lib.php        | 27 ++++++++++++++---------
 install/tpl/debian6_dovecot2.conf.master  |  1 -
 install/tpl/debian_dovecot2.conf.master   |  1 -
 install/tpl/fedora_dovecot2.conf.master   |  1 -
 install/tpl/opensuse_dovecot2.conf.master |  1 -
 6 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index cd3b46e544..faac52b227 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -33,11 +33,16 @@ class installer extends installer_base {
 	public function configure_dovecot()
 	{
 		global $conf;
-		
+	
 		$virtual_transport = 'dovecot';
 
 		$configure_lmtp = false;
-		
+
+		// use lmtp if installed
+		if($configure_lmtp = is_file('/usr/lib/dovecot/lmtp')) {
+			$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+		}
+
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
 			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
@@ -155,20 +160,20 @@ class installer extends installer_base {
 			}
 		}
 		
-		//* dovecot-managesieved
-		if($configure_managesieve = is_file('/usr/lib/dovecot/managesieve')) {
-			//remove #mangesieve+ comment
-			$content = file_get_contents($config_dir.'/'.$configfile);
-			$content = str_replace('#mangesieve+ ','',$content);
-			file_put_contents($config_dir.'/'.$configfile,$content);
-			unset($content);
-		}
+		$dovecot_protocols = 'imap pop3';
 
 		//* dovecot-lmtpd
 		if($configure_lmtp) {
-			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
+			$dovecot_protocols .= ' lmtp'
+		}
+
+		//* dovecot-managesieved
+		if(is_file('/usr/lib/dovecot/managesieve')) {
+			$dovecot_protocols .= ' sieve'
 		}
 
+		replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', "protocols = $dovecot_protocols", 1, 0);
+
 		//* dovecot-sql.conf
 		$configfile = 'dovecot-sql.conf';
 		if(is_file($config_dir.'/'.$configfile)){
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 73995498d3..ee9d1a6d8d 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1233,11 +1233,16 @@ class installer_base {
 
 	public function configure_dovecot() {
 		global $conf;
-		
+	
 		$virtual_transport = 'dovecot';
 
 		$configure_lmtp = false;
-		
+
+		// use lmtp if installed
+		if($configure_lmtp = is_file('/usr/lib/dovecot/lmtp')) {
+			$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+		}
+
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
 			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
@@ -1358,20 +1363,20 @@ class installer_base {
 			}
 		}
 
-		//* dovecot-managesieved
-		if($configure_managesieve = is_file('/usr/lib/dovecot/managesieve')) {
-			//remove #mangesieve+ comment
-			$content = file_get_contents($config_dir.'/'.$configfile);
-			$content = str_replace('#mangesieve+ ','',$content);
-			file_put_contents($config_dir.'/'.$configfile,$content);
-			unset($content);
-		}
+		$dovecot_protocols = 'imap pop3';
 
 		//* dovecot-lmtpd
 		if($configure_lmtp) {
-			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
+			$dovecot_protocols .= ' lmtp'
+		}
+
+		//* dovecot-managesieved
+		if(is_file('/usr/lib/dovecot/managesieve')) {
+			$dovecot_protocols .= ' sieve'
 		}
 
+		replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', "protocols = $dovecot_protocols", 1, 0);
+
 		//* dovecot-sql.conf
 		$configfile = 'dovecot-sql.conf';
 		if(is_file($config_dir.'/'.$configfile)) {
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index c21ab94ad9..95acb721e0 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -120,4 +120,3 @@ namespace inbox {
   }
 }
 
-#managesieve+ protocols = $protocols sieve
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index 8a204e7776..dbacf872f5 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -97,4 +97,3 @@ plugin {
   quota_status_overquota = "552 5.2.2 Mailbox is full"
 }
 
-#managesieve+ protocols = $protocols sieve
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 207983f86e..08ac94a903 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -115,4 +115,3 @@ namespace inbox {
   }
 }
 
-#managesieve+ protocols = $protocols sieve
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 42230ed300..6e040b9745 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -114,4 +114,3 @@ namespace inbox {
   }
 }
 
-#managesieve+ protocols = $protocols sieve
-- 
GitLab


From f78f7cc60c5ee6598c93ef8a6fcde8fb6036a288 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 14 Oct 2019 18:24:49 -0600
Subject: [PATCH 361/571] talk to amavis with lmtp if detected: closes #4792

---
 install/lib/installer_base.lib.php | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index ee9d1a6d8d..e0bf16c6aa 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -927,17 +927,26 @@ class installer_base {
 		//* mysql-virtual_uids.cf
 		$this->process_postfix_config('mysql-virtual_uids.cf');
 
+		// test if lmtp if available
+		$configure_lmtp = $this->get_postfix_service('lmtp','unix');
+
 		//* postfix-dkim
 		$filename='tag_as_originating.re';
 		$full_file_name=$config_dir.'/'.$filename;
 		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
+		if($configure_lmtp) {
+			$content = preg_replace('/amavis:/', 'lmtp:', $content);
+		}
 		wf($full_file_name, $content);
 
 		$filename='tag_as_foreign.re';
 		$full_file_name=$config_dir.'/'.$filename;
 		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
+		if($configure_lmtp) {
+			$content = preg_replace('/amavis:/', 'lmtp:', $content);
+		}
 		wf($full_file_name, $content);
 
 		//* Changing mode and group of the new created config files.
@@ -1423,6 +1432,8 @@ class installer_base {
 
 		// TODO: chmod and chown on the config file
 
+		// test if lmtp if available
+		$configure_lmtp = $this->get_postfix_service('lmtp','unix');
 
 		// Adding the amavisd commands to the postfix configuration
 		// Add array for no error in foreach and maybe future options
@@ -1430,7 +1441,8 @@ class installer_base {
 
 		// Check for amavisd -> pure webserver with postfix for mailing without antispam
 		if ($conf['amavis']['installed']) {
-			$postconf_commands[] = 'content_filter = amavis:[127.0.0.1]:10024';
+			$content_filter_service = ($configure_lmtp) ? 'lmtp' : 'amavis';
+			$postconf_commands[] = "content_filter = ${content_filter_service}:[127.0.0.1]:10024";
 			$postconf_commands[] = 'receive_override_options = no_address_mappings';
 		}
 
-- 
GitLab


From 5353f1d9d58e3bb651323b0f7f3ccd07df2b8355 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 30 Oct 2019 10:21:26 -0600
Subject: [PATCH 362/571] use unix domain socket for quota-status (#4649)

---
 install/tpl/debian6_dovecot2.conf.master  | 8 ++++----
 install/tpl/debian_dovecot2.conf.master   | 8 ++++----
 install/tpl/debian_postfix.conf.master    | 4 ++--
 install/tpl/fedora_dovecot2.conf.master   | 8 ++++----
 install/tpl/fedora_postfix.conf.master    | 4 ++--
 install/tpl/gentoo_postfix.conf.master    | 4 ++--
 install/tpl/opensuse_dovecot2.conf.master | 8 ++++----
 install/tpl/opensuse_postfix.conf.master  | 4 ++--
 8 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 95acb721e0..973ada2f99 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -87,10 +87,10 @@ protocol lmtp {
 
 service quota-status {
   executable = quota-status -p postfix
-  inet_listener {
-    # separate multiple addresses with space:
-    address = 127.0.0.1
-    port = 10060
+  unix_listener /var/spool/postfix/private/quota-status {
+    group = postfix
+    mode = 0660
+    user = postfix
   }
   client_limit = 1
 }
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index dbacf872f5..d4fc7ebd0f 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -84,10 +84,10 @@ protocol lmtp {
 
 service quota-status {
   executable = quota-status -p postfix
-  inet_listener {
-    # separate multiple addresses with space:
-    address = 127.0.0.1
-    port = 10060
+  unix_listener /var/spool/postfix/private/quota-status {
+    group = postfix
+    mode = 0660
+    user = postfix
   }
   client_limit = 1
 }
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 4d03dfd005..95603bac39 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -15,8 +15,8 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023 
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service inet:127.0.0.1:10060
-smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10060
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
+smtpd_end_of_data_restrictions = check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 08ac94a903..dbef641fdf 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -82,10 +82,10 @@ mail_plugins = $mail_plugins quota
 
 service quota-status {
   executable = quota-status -p postfix
-  inet_listener {
-    # separate multiple addresses with space:
-    address = 127.0.0.1
-    port = 10060
+  unix_listener /var/spool/postfix/private/quota-status {
+    group = postfix
+    mode = 0660
+    user = postfix
   }
   client_limit = 1
 }
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 8bda2b7dcc..f651a02729 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -11,8 +11,8 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service inet:127.0.0.1:10060
-smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10060
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
+smtpd_end_of_data_restrictions = check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 79a9dcd63d..2d562c74a9 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -10,8 +10,8 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service inet:127.0.0.1:10060
-smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10060
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
+smtpd_end_of_data_restrictions = check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 6e040b9745..a1bdfa1f91 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -81,10 +81,10 @@ mail_plugins = $mail_plugins quota
 
 service quota-status {
   executable = quota-status -p postfix
-  inet_listener {
-    # separate multiple addresses with space:
-    address = 127.0.0.1
-    port = 10060
+  unix_listener /var/spool/postfix/private/quota-status {
+    group = postfix
+    mode = 0660
+    user = postfix
   }
   client_limit = 1
 }
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index 6661bffd98..7517043e63 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -13,8 +13,8 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service inet:127.0.0.1:10060
-smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10060
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
+smtpd_end_of_data_restrictions = check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
-- 
GitLab


From e9b92aa62f3f8557d4351f649b702fe3c4cfef4d Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 31 Oct 2019 15:46:25 -0600
Subject: [PATCH 363/571] bugfixes and remove/add master.cf templates to effect
 changes

---
 install/dist/lib/debian60.lib.php  |  4 +-
 install/lib/install.lib.php        | 25 +++++++---
 install/lib/installer_base.lib.php | 79 +++++++++++++++++++++++++++---
 3 files changed, 92 insertions(+), 16 deletions(-)

diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index faac52b227..a8e90f189b 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -164,12 +164,12 @@ class installer extends installer_base {
 
 		//* dovecot-lmtpd
 		if($configure_lmtp) {
-			$dovecot_protocols .= ' lmtp'
+			$dovecot_protocols .= ' lmtp';
 		}
 
 		//* dovecot-managesieved
 		if(is_file('/usr/lib/dovecot/managesieve')) {
-			$dovecot_protocols .= ' sieve'
+			$dovecot_protocols .= ' sieve';
 		}
 
 		replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', "protocols = $dovecot_protocols", 1, 0);
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 02ebba2850..ea4e563a6a 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -471,29 +471,38 @@ function rf($file){
 }
 
 function wf($file, $content){
-	mkdirs(dirname($file));
+	if(!$ret_val = mkdirs(dirname($file))) return false;
 	if(!$fp = fopen($file, 'wb')){
 		ilog('WARNING: could not open file '.$file);
+		// implicitly returned false because the following fwrite and fclose both fail,
+		// but to be explicit:
+		$ret_val = false;
 	}
-	fwrite($fp, $content);
-	fclose($fp);
+	fwrite($fp, $content) or $ret_val = false;
+	fclose($fp) or $ret_val = false;
+	return $ret_val;
 }
 
 function af($file, $content){
-	mkdirs(dirname($file));
+	if(!$ret_val = mkdirs(dirname($file))) return false;
 	if(!$fp = fopen($file, 'ab')){
 		ilog('WARNING: could not open file '.$file);
+		$ret_val = false;
 	}
-	fwrite($fp, $content);
-	fclose($fp);
+	fwrite($fp, $content) or $ret_val = false;
+	fclose($fp) or $ret_val = false;
+	return $ret_val;
 }
 
 function aftsl($file, $content){
+	$ret_val = true;
 	if(!$fp = fopen($file, 'ab')){
 		ilog('WARNING: could not open file '.$file);
+		$ret_val = false;
 	}
-	fwrite($fp, $content);
-	fclose($fp);
+	fwrite($fp, $content) or $ret_val = false;
+	fclose($fp) or $ret_val = false;
+	return $ret_val;
 }
 
 function unix_nl($input){
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index e0bf16c6aa..5ca16cc674 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -864,7 +864,7 @@ class installer_base {
 				exec ("postconf -M $service.$type 2> /dev/null", $out, $ret);
 			}
 			$postfix_service = @($out[0]=='')?false:true;
-        } else { //* fallback - Postfix < 2.9
+		} else { //* fallback - Postfix < 2.9
 			$content = rf($conf['postfix']['config_dir'].'/master.cf');
 			$regex = "/^((?!#)".$service.".*".$type.".*)$/m"; 
 			$postfix_service = @(preg_match($regex, $content))?true:false;
@@ -873,6 +873,68 @@ class installer_base {
 		return $postfix_service;
 	}
 
+	public function remove_postfix_service( $service, $type ) {
+		global $conf;
+
+		// nothing to do if the service isn't even defined.
+		if (! $this->get_postfix_service( $service, $type ) ) {
+			return true;
+		}
+
+		$postfix_version = `postconf -d mail_version 2>/dev/null`;
+		$postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version );
+
+		if ( version_compare( $postfix_version, '2.11', '>=' ) ) {
+
+			exec("postconf -X -M $service/$type 2> /dev/null", $out, $ret);
+
+			# reduce 3 or more newlines to 2
+			$content = rf($conf['postfix']['config_dir'].'/master.cf');
+			$content = preg_replace( '/(\r?\n){3,}/', '$1$1', $content );
+			wf( $conf['postfix']['config_dir'].'/master.cf', $content );
+
+		} else { //* fallback - Postfix < 2.11
+
+			if ( ! $cf = fopen( $conf['postfix']['config_dir'].'/master.cf', 'r' ) ) {
+				return false;
+			}
+
+			$out = "";
+			$reading_service = false;
+
+			while ( !feof( $cf ) ) {
+				$line = fgets( $cf );
+
+				if ( $reading_service ) {
+					# regex matches a new service or "empty" (whitespace) line
+					if ( preg_match( '/^([^\s#]+.*|\s*)$/', $line ) &&
+					   ! preg_match( '/^'.$service.'\s+'.$type.'/', $line ) ) {
+						$out .= $line;
+						$reading_service = false;
+					}
+
+					# $skipped_lines .= $line;
+
+				# regex matches definition matching service to be removed
+				} else if ( preg_match( '/^'.$service.'\s+'.$type.'/', $line ) ) {
+
+					$reading_service = true;
+					# $skipped_lines .= $line;
+
+				} else {
+					$out .= $line;
+				}
+			}
+			fclose( $cf );
+
+			$out = preg_replace( '/(\r?\n){3,}/', '$1$1', $out ); # reduce 3 or more newlines to 2
+
+			return wf( $conf['postfix']['config_dir'].'/master.cf', $out );
+		}
+
+		return true;
+	}
+
 	public function configure_postfix($options = '') {
 		global $conf,$autoinstall;
 		$cf = $conf['postfix'];
@@ -1376,12 +1438,12 @@ class installer_base {
 
 		//* dovecot-lmtpd
 		if($configure_lmtp) {
-			$dovecot_protocols .= ' lmtp'
+			$dovecot_protocols .= ' lmtp';
 		}
 
 		//* dovecot-managesieved
 		if(is_file('/usr/lib/dovecot/managesieve')) {
-			$dovecot_protocols .= ' sieve'
+			$dovecot_protocols .= ' sieve';
 		}
 
 		replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', "protocols = $dovecot_protocols", 1, 0);
@@ -1458,11 +1520,16 @@ class installer_base {
 		$config_dir = $conf['postfix']['config_dir'];
 
 		// Adding amavis-services to the master.cf file if the service does not already exists
-		$add_amavis = !$this->get_postfix_service('amavis','unix');
-		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
-		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
+//		$add_amavis = !$this->get_postfix_service('amavis','unix');
+//		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
+//		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
 		//*TODO: check templates against existing postfix-services to make sure we use the template
 
+		// Or just remove the old service definitions and add them again?
+		$add_amavis = $this->remove_postfix_service('amavis','unix');
+		$add_amavis_10025 = $this->remove_postfix_service('127.0.0.1:10025','inet');
+		$add_amavis_10027 = $this->remove_postfix_service('127.0.0.1:10027','inet');
+
 		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
 			//* backup master.cf
 			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-- 
GitLab


From fa8183967b38dd5e751db23157c5126fe1e8c178 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 11 Nov 2019 17:30:17 -0700
Subject: [PATCH 364/571] remove quota-status policy server from
 smtpd_end_of_data_restrictions: closes #4649

---
 install/tpl/debian_postfix.conf.master   | 1 -
 install/tpl/fedora_postfix.conf.master   | 1 -
 install/tpl/gentoo_postfix.conf.master   | 1 -
 install/tpl/opensuse_postfix.conf.master | 1 -
 4 files changed, 4 deletions(-)

diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 95603bac39..0df3ae38e8 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -16,7 +16,6 @@ smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023 
 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
-smtpd_end_of_data_restrictions = check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index f651a02729..3e5646a036 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -12,7 +12,6 @@ smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
-smtpd_end_of_data_restrictions = check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 2d562c74a9..da482fc561 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -11,7 +11,6 @@ smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
-smtpd_end_of_data_restrictions = check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index 7517043e63..47f582af0c 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -14,7 +14,6 @@ smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
-smtpd_end_of_data_restrictions = check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
-- 
GitLab


From d9a2d35574f20d5403507f50f655ac98b749787e Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 13 Nov 2019 17:20:33 -0700
Subject: [PATCH 365/571] read ISPConfig's sieve script via sieve_after: closes
 #3395

---
 install/tpl/debian6_dovecot.conf.master       |  6 +++
 install/tpl/debian6_dovecot2.conf.master      |  6 +++
 install/tpl/debian_dovecot.conf.master        |  7 +++-
 install/tpl/debian_dovecot2.conf.master       |  6 +++
 install/tpl/fedora_dovecot.conf.master        |  9 ++++-
 install/tpl/fedora_dovecot2.conf.master       |  7 ++++
 install/tpl/opensuse_dovecot.conf.master      |  9 ++++-
 install/tpl/opensuse_dovecot2.conf.master     |  7 ++++
 server/conf/sieve_filter.master               |  5 ++-
 server/conf/sieve_filter_1.2.master           |  3 ++
 .../maildeliver_plugin.inc.php                | 37 ++++++++++++-------
 11 files changed, 83 insertions(+), 19 deletions(-)

diff --git a/install/tpl/debian6_dovecot.conf.master b/install/tpl/debian6_dovecot.conf.master
index 4286689cd4..a112712690 100644
--- a/install/tpl/debian6_dovecot.conf.master
+++ b/install/tpl/debian6_dovecot.conf.master
@@ -57,7 +57,13 @@ plugin {
   # the maildir quota does not need to be set.
   # You do not need: quota = maildir
 
+  # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
+
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_max_script_size = 2M
+  sieve_max_actions = 100
+  sieve_max_redirects = 25
 }
 
 
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 973ada2f99..c82ac59a38 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -24,7 +24,13 @@ userdb {
 }
 plugin {
   quota = dict:user::file:/var/vmail/%d/%n/.quotausage
+
+  # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
+
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_max_script_size = 2M
+  sieve_max_actions = 100
   sieve_max_redirects = 25
 }
 service auth {
diff --git a/install/tpl/debian_dovecot.conf.master b/install/tpl/debian_dovecot.conf.master
index 8d6022502f..f91959a1f5 100644
--- a/install/tpl/debian_dovecot.conf.master
+++ b/install/tpl/debian_dovecot.conf.master
@@ -682,7 +682,7 @@ protocol managesieve {
   # the sieve storage directory. This must match the SIEVE setting used by
   # deliver (refer to http://wiki.dovecot.org/LDA/Sieve#location for more
   # info). Variable substitution with % is recognized.
-  sieve=~/.dovecot.sieve
+  sieve=~/.sieve
 
   # This specifies the path to the directory where the uploaded scripts must
   # be stored. In terms of '%' variable substitution it is identical to
@@ -1144,4 +1144,9 @@ plugin {
   # they're moved to a 3rd namespace. The mails won't be counted in quota,
   # and they're not deleted automatically (use a cronjob or something).
   #lazy_expunge = .EXPUNGED/ .DELETED/ .DELETED/.EXPUNGED/
+
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_max_script_size = 2M
+  sieve_max_actions = 100
+  sieve_max_redirects = 25
 }
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index d4fc7ebd0f..25c586118c 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -23,7 +23,13 @@ userdb {
 }
 plugin {
   quota = dict:user::file:/var/vmail/%d/%n/.quotausage
+
+  # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
+
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_max_script_size = 2M
+  sieve_max_actions = 100
   sieve_max_redirects = 25
 }
 service auth {
diff --git a/install/tpl/fedora_dovecot.conf.master b/install/tpl/fedora_dovecot.conf.master
index cfac856414..e687954986 100644
--- a/install/tpl/fedora_dovecot.conf.master
+++ b/install/tpl/fedora_dovecot.conf.master
@@ -1300,11 +1300,16 @@ plugin {
   # 
   # Location of the active script. When ManageSieve is used this is actually 
   # a symlink pointing to the active script in the sieve storage directory. 
-  #sieve=~/.dovecot.sieve
-  #
+  sieve=~/.sieve
+
   # The path to the directory where the personal Sieve scripts are stored. For 
   # ManageSieve this is where the uploaded scripts are stored.
   sieve_dir=~/sieve
+
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_max_script_size = 2M
+  sieve_max_actions = 100
+  sieve_max_redirects = 25
 }
 
 # Config files can also be included. deliver doesn't support them currently.
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index dbef641fdf..9fd5ed92c2 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -21,7 +21,14 @@ userdb {
 }
 plugin {
   quota = dict:user::file:/var/vmail/%d/%n/.quotausage
+
+  # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
+
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_max_script_size = 2M
+  sieve_max_actions = 100
+  sieve_max_redirects = 25
 }
 service auth {
   unix_listener /var/spool/postfix/private/auth {
diff --git a/install/tpl/opensuse_dovecot.conf.master b/install/tpl/opensuse_dovecot.conf.master
index 9d345fa911..1eacf4c3a3 100644
--- a/install/tpl/opensuse_dovecot.conf.master
+++ b/install/tpl/opensuse_dovecot.conf.master
@@ -1274,11 +1274,16 @@ plugin {
   # 
   # Location of the active script. When ManageSieve is used this is actually 
   # a symlink pointing to the active script in the sieve storage directory. 
-  sieve=~/.dovecot.sieve
-  #
+  sieve=~/.sieve
+
   # The path to the directory where the personal Sieve scripts are stored. For 
   # ManageSieve this is where the uploaded scripts are stored.
   sieve_dir=~/sieve
+
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_max_script_size = 2M
+  sieve_max_actions = 100
+  sieve_max_redirects = 25
 }
 
 # Config files can also be included. deliver doesn't support them currently.
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index a1bdfa1f91..94e658aecc 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -21,7 +21,14 @@ userdb {
 }
 plugin {
   quota = dict:user::file:/var/vmail/%d/%n/.quotausage
+
+  # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
+
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_max_script_size = 2M
+  sieve_max_actions = 100
+  sieve_max_redirects = 25
 }
 service auth {
   unix_listener /var/spool/postfix/private/auth {
diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master
index 13c08dd56b..f72cd11d1f 100644
--- a/server/conf/sieve_filter.master
+++ b/server/conf/sieve_filter.master
@@ -1,3 +1,6 @@
+# This sieve script is generated by ISPConfig, any changes made will be overwritten.
+# You can create and activate a per-user sieve script (manually or via managesieve),
+# which will execute before this.
 require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
 
 <tmpl_if name="cc">
@@ -36,4 +39,4 @@ vacation  :days 1
   # :addresses ["test@test.int", "till@test.int"]
   <tmpl_var name='addresses'>
   "<tmpl_var name='autoresponder_text'>";
-</tmpl_if>
\ No newline at end of file
+</tmpl_if>
diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master
index 5244693102..edd4060b9f 100644
--- a/server/conf/sieve_filter_1.2.master
+++ b/server/conf/sieve_filter_1.2.master
@@ -1,3 +1,6 @@
+# This sieve script is generated by ISPConfig, any changes made will be overwritten.
+# You can create and activate a per-user sieve script (manually or via managesieve),
+# which will execute before this.
 require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
 
 <tmpl_if name="move_junk" op="==" value="y">
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index 2c16601f50..9c9939655c 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -98,9 +98,16 @@ class maildeliver_plugin {
 			$app->log("Mailfilter config has been changed", LOGLEVEL_DEBUG);
 
 			$sieve_file = $data["new"]["maildir"].'/.sieve';
-			$sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
-			if(is_file($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
+			$sieve_file_svbin = $data["new"]["maildir"].'/.sieve.svbin';
+			$old_sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
+			$sieve_file_isp = $data["new"]["maildir"].'/.ispconfig.sieve';
+			$sieve_file_isp_svbin = $data["new"]["maildir"].'/.ispconfig.svbin';
+			if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp)  or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
+			// cleanup .sieve file if it is now a broken link
+			if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
+			if(is_file($sieve_file_svbin)) unlink($sieve_file_svbin)  or $app->log("Unable to delete file: $sieve_file_svbin", LOGLEVEL_WARN);
 			if(is_file($sieve_file_isp)) unlink($sieve_file_isp)  or $app->log("Unable to delete file: $sieve_file_isp", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_svbin)) unlink($sieve_file_isp_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_svbin", LOGLEVEL_WARN);
 			$app->load('tpl');
 
 			//* Select sieve filter file for dovecot version
@@ -221,16 +228,13 @@ class maildeliver_plugin {
 			if ( is_file($sieve_file_isp) ) {
 				$app->system->chown($sieve_file_isp,$mail_config['mailuser_name'],false);
 				$app->system->chgrp($sieve_file_isp,$mail_config['mailuser_group'],false);
+
+				$app->system->exec_safe("sievec ?", "$sieve_file_isp");
+				if ( is_file($sieve_file_isp_svbin) ) {
+					$app->system->chown($sieve_file_isp_svbin,$mail_config['mailuser_name'],false);
+					$app->system->chgrp($sieve_file_isp_svbin,$mail_config['mailuser_group'],false);
+				}
 			}
-			chdir($data["new"]["maildir"]);
-			//* create symlink to activate sieve script
-			symlink("sieve/ispconfig.sieve", ".sieve")  or $app->log("Unable to create symlink to active sieve filter", LOGLEVEL_WARN);
-			if (is_link(".sieve")) {
-				$app->system->chown(".sieve",$mail_config['mailuser_name'],true);
-				$app->system->chgrp(".sieve",$mail_config['mailuser_group'],true);
-			}
-			$app->system->chown($sieve_file,$mail_config['mailuser_name'],true);
-			$app->system->chgrp($sieve_file,$mail_config['mailuser_group'],true);
 
 			unset($tpl);
 
@@ -241,9 +245,16 @@ class maildeliver_plugin {
 		global $app, $conf;
 
 		$sieve_file = $data["old"]["maildir"].'/.sieve';
-		$sieve_file_isp = $data["old"]["maildir"].'/sieve/ispconfig.sieve';
-		if(is_file($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
+		$sieve_file_svbin = $data["old"]["maildir"].'/.sieve.svbin';
+		$old_sieve_file_isp = $data["old"]["maildir"].'/sieve/ispconfig.sieve';
+		$sieve_file_isp = $data["old"]["maildir"].'/.ispconfig.sieve';
+		$sieve_file_isp_svbin = $data["old"]["maildir"].'/.ispconfig.svbin';
+		if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp)  or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
+		// cleanup .sieve file if it is now a broken link
+		if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
+		if(is_file($sieve_file_svbin)) unlink($sieve_file_svbin)  or $app->log("Unable to delete file: $sieve_file_svbin", LOGLEVEL_WARN);
 		if(is_file($sieve_file_isp)) unlink($sieve_file_isp)  or $app->log("Unable to delete file: $sieve_file_isp", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_svbin)) unlink($sieve_file_isp_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_svbin", LOGLEVEL_WARN);
 	}
 
 
-- 
GitLab


From 8735bd886b43ec75e621789f513a663d0ea38ec8 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 13 Nov 2019 17:24:51 -0700
Subject: [PATCH 366/571] update to current setting names

---
 install/tpl/debian_postfix.conf.master   | 2 +-
 install/tpl/fedora_postfix.conf.master   | 2 +-
 install/tpl/gentoo_postfix.conf.master   | 2 +-
 install/tpl/opensuse_postfix.conf.master | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 0df3ae38e8..c50d826e01 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -26,7 +26,7 @@ relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
 proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
 smtpd_helo_required = yes
-smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
+smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
 smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
 smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
 smtpd_client_message_rate_limit = 100
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 3e5646a036..1c8326de2a 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -22,7 +22,7 @@ relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
 proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
 smtpd_helo_required = yes
-smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
+smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
 smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
 smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
 smtpd_client_message_rate_limit = 100
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index da482fc561..51f30d914e 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -21,7 +21,7 @@ relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
 proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
 smtpd_helo_required = yes
-smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
+smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
 smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
 smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
 smtpd_client_message_rate_limit = 100
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index 47f582af0c..a1203013ef 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -24,7 +24,7 @@ relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
 proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
 smtpd_helo_required = yes
-smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
+smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
 smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
 smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
 smtpd_client_message_rate_limit = 100
-- 
GitLab


From 75cd4fecbf02ad68deb8554f330189082979c1f2 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 13 Nov 2019 17:33:25 -0700
Subject: [PATCH 367/571] rbl blocking should happen after whitelist lookups
 for whitelisting to override rbls

---
 install/tpl/debian_postfix.conf.master   | 2 +-
 install/tpl/fedora_postfix.conf.master   | 2 +-
 install/tpl/gentoo_postfix.conf.master   | 2 +-
 install/tpl/opensuse_postfix.conf.master | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index c50d826e01..1c739a5c7e 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -15,7 +15,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023 
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 1c8326de2a..d504c6ed56 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -11,7 +11,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 51f30d914e..cad2b97c3c 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -10,7 +10,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index a1203013ef..c59d46fa97 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -13,7 +13,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
-- 
GitLab


From 1bce29fdbf7fe4a72e7258e184058fb8427ddc53 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 13 Nov 2019 17:59:56 -0700
Subject: [PATCH 368/571] older dovecot requires namespace separator

---
 install/tpl/debian6_dovecot2.conf.master  | 1 +
 install/tpl/fedora_dovecot2.conf.master   | 1 +
 install/tpl/opensuse_dovecot2.conf.master | 1 +
 3 files changed, 3 insertions(+)

diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index c82ac59a38..6f32e6d5a2 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -109,6 +109,7 @@ plugin {
 imap_capability=+SEPCIAL-USE XLIST
 namespace inbox {
   inbox = yes
+  separator = .
   mailbox Drafts {
     special_use = \Drafts
   }
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 9fd5ed92c2..ee80f8c0d9 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -105,6 +105,7 @@ plugin {
 imap_capability=+SEPCIAL-USE XLIST
 namespace inbox {
   inbox = yes
+  separator = .
   mailbox Drafts {
     special_use = \Drafts
   }
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 94e658aecc..070590181b 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -104,6 +104,7 @@ plugin {
 imap_capability=+SEPCIAL-USE XLIST
 namespace inbox {
   inbox = yes
+  separator = .
   mailbox Drafts {
     special_use = \Drafts
   }
-- 
GitLab


From 1e9c3880bb2908f82ba2b013245f132379ff9977 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 19 Nov 2019 17:27:49 -0700
Subject: [PATCH 369/571] postfix_server_plugin checks for dovecot lmtp and
 sieve (#3395 and #4792)

---
 .../postfix_server_plugin.inc.php             | 45 ++++++++++++-------
 1 file changed, 28 insertions(+), 17 deletions(-)

diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index ad48e3dee8..80db1c102a 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -158,24 +158,35 @@ class postfix_server_plugin {
 		}		
 		
 		if($app->system->is_installed('dovecot')) {
+			$virtual_transport = 'dovecot';
+			$configure_lmtp = false;
+			$dovecot_protocols = 'imap pop3';
+
+			//* dovecot-lmtpd
+			if( ($configure_lmtp = is_file('/usr/lib/dovecot/lmtp')) ||
+			    ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') )
+			{
+				$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+				$dovecot_protocols .= ' lmtp';
+			}
+
+			//* dovecot-managesieved
+			if(is_file('/usr/lib/dovecot/managesieve')) {
+				$dovecot_protocols .= ' sieve';
+			}
+
 			$out = null;
 			exec("postconf -n virtual_transport", $out);
-			if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
-				// If dovecot switch to lmtp
-				if($out[0] != "virtual_transport = lmtp:unix:private/dovecot-lmtp") {
-					exec("postconf -e 'virtual_transport = lmtp:unix:private/dovecot-lmtp'");
-					exec('postfix reload');
-					$app->system->replaceLine("/etc/dovecot/dovecot.conf", "protocols = imap pop3", "protocols = imap pop3 lmtp");
-					exec($conf['init_scripts'] . '/' . 'dovecot restart');
-				}
-			} else {
-				// If dovecot switch to dovecot
-				if($out[0] != "virtual_transport = dovecot") {
-					exec("postconf -e 'virtual_transport = dovecot'");
-					exec('postfix reload');
-					$app->system->replaceLine("/etc/dovecot/dovecot.conf", "protocols = imap pop3 lmtp", "protocols = imap pop3");
-					exec($conf['init_scripts'] . '/' . 'dovecot restart');
-				}
+			if($out[0] != "virtual_transport = $virtual_transport") {
+				exec("postconf -e 'virtual_transport = $virtual_transport'");
+				exec('postfix reload');
+			}
+
+			$out = null;
+			exec("grep '^protocols\s' /etc/dovecot/dovecot.conf", $out);
+			if($out[0] != "protocols = $dovecot_protocols") {
+				$app->system->replaceLine("/etc/dovecot/dovecot.conf", 'REGEX:/^protocols\s=/', "protocols = $dovecot_protocols");
+				exec($conf['init_scripts'] . '/' . 'dovecot restart');
 			}
 		}
 
@@ -222,7 +233,7 @@ class postfix_server_plugin {
 				exec("postconf -X 'milter_default_action'");
 				
 				exec("postconf -e 'receive_override_options = no_address_mappings'");
-				exec("postconf -e 'content_filter = amavis:[127.0.0.1]:10024'");
+				exec("postconf -e 'content_filter = " . ($configure_lmtp ? "lmtp" : "amavis" ) . ":[127.0.0.1]:10024'");
 				
 				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'");
 			}
-- 
GitLab


From 6adf9d2181b6fdb2ca2362124bcce88222048d4c Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 2 Jun 2020 14:46:50 -0600
Subject: [PATCH 370/571] update disablelmtp field

---
 interface/web/mail/mail_user_edit.php   | 7 ++++---
 interface/web/tools/import_vpopmail.php | 1 +
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 7255c6dbac..c7f36a89e0 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -313,8 +313,9 @@ class page_action extends tform_actions {
 			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = ($this->dataRecord["disablesmtp"])?'y':'n';
 
-			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ? WHERE mailuser_id = ?";
 			$app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $this->id);
+			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disablelmtp = ? WHERE mailuser_id = ?";
+			$app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disabledeliver, $this->id);
 		}
 	}
 
@@ -365,8 +366,8 @@ class page_action extends tform_actions {
 			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = (isset($this->dataRecord["disablesmtp"]) && $this->dataRecord["disablesmtp"])?'y':'n';
 
-			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ? WHERE mailuser_id = ?";
-			$app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $this->id);
+			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disablelmtp = ? WHERE mailuser_id = ?";
+			$app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disabledeliver, $this->id);
 		}
 
 		//** If the email address has been changed, change it in all aliases too
diff --git a/interface/web/tools/import_vpopmail.php b/interface/web/tools/import_vpopmail.php
index 3e732d3740..7ae4efb58b 100644
--- a/interface/web/tools/import_vpopmail.php
+++ b/interface/web/tools/import_vpopmail.php
@@ -242,6 +242,7 @@ function start_import() {
 						"disablesmtp" => 'n',
 						"disablesieve" => 'n',
 						"disablelda" => 'n',
+						"disablelmtp" => 'n',
 						"disabledoveadm" => 'n'
 					);
 					$app->db->datalogInsert('mail_user', $sql, 'mailuser_id');
-- 
GitLab


From 64a58f233198456564c8b1e067bb582d901f4034 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 11 Jun 2020 12:06:46 -0600
Subject: [PATCH 371/571] add mail_user.disableindexer-worker column.  fixes
 #3108

---
 install/sql/incremental/upd_dev_collection.sql | 3 +++
 install/sql/ispconfig3.sql                     | 1 +
 2 files changed, 4 insertions(+)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 91db879d0c..aebc01dcb8 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -29,3 +29,6 @@ UPDATE `mail_user` set `disabledoveadm` = 'n';
 
 -- add disablequota-status for quota-status policy daemon
 ALTER TABLE `mail_user` ADD `disablequota-status` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `disabledoveadm`;
+
+-- add disableindexer-worker for solr search
+ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `disablequota-status`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index cc266ff235..9d2fb74134 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1063,6 +1063,7 @@ CREATE TABLE `mail_user` (
   `disablelmtp` enum('n','y') NOT NULL default 'n',
   `disabledoveadm` enum('n','y') NOT NULL default 'n',
   `disablequota-status` enum('n','y') NOT NULL default 'n',
+  `disableindexer-worker` enum('n','y') NOT NULL default 'n',
   `last_quota_notification` date NULL default NULL,
   `backup_interval` VARCHAR( 255 ) NOT NULL default 'none',
   `backup_copies` INT NOT NULL DEFAULT '1',
-- 
GitLab


From d38cca15c31ad61f20c96d2d423881b41853f41e Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Fri, 12 Jun 2020 20:06:35 +0200
Subject: [PATCH 372/571] Rename no_policy to inherit_policy (#4277)

---
 interface/web/mail/lib/lang/ar_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/bg_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/br_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/ca_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/cz_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/de_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/dk_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/el_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/en_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/es_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/fi_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/fr_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/hr_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/hu_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/id_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/it_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/ja_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/nl_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/pl_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/pt_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/ro_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/ru_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/se_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/sk_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/tr_mail_user.lng | 2 +-
 interface/web/mail/mail_user_edit.php        | 2 +-
 26 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index c68becf335..6aed9d1d1e 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Disable IMAP';
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 000377077b..a5ac34c577 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Разреши получаване';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Разреши достъп';
 $wb['policy_txt'] = 'Спам филтър';
-$wb['no_policy'] = '- забранен -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Достигнат е максималният брой на пощенските кутии за твоят профил.';
 $wb['limit_mailquota_txt'] = 'Максималното отделено място за твоята кутия е достигнато. Максималното позволено място в МБ е ';
 $wb['disableimap_txt'] = 'Забрани IMAP';
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index ed6e35ef61..c5200273cc 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -27,7 +27,7 @@ $wb['postfix_txt'] = 'Habilitar recebimento';
 $wb['greylisting_txt'] = 'Habilitar greylist';
 $wb['access_txt'] = 'Habilitar acesso';
 $wb['policy_txt'] = 'Filtros anti-spam';
-$wb['no_policy'] = '-desabilitado-';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'O limite de contas de e-mail para esta conta foi alcançado.';
 $wb['limit_mailquota_txt'] = 'O limite de tamanho para as contas de e-mails foi alcançado. O espaço disponível em MB é';
 $wb['disablesmtp_txt'] = 'Desabilitar SMTP (envio)';
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index 096572b5e0..ffabcf2395 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -18,7 +18,7 @@ $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
 $wb['access_txt'] = 'Activer l\'accès';
 $wb['policy_txt'] = 'Filtre antispam';
-$wb['no_policy'] = '- inactif -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Le nombre maximal de boites courriel pour votre compte est atteint..';
 $wb['limit_mailquota_txt'] = 'Lespace maximal pour les boites courriel est atteint. Lespace maximal disponible est de ';
 $wb['disableimap_txt'] = 'Désactiver IMAP';
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index c697e4cffc..909a7b2b5b 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -22,7 +22,7 @@ $wb['maildir_txt'] = 'E-mailový adresář';
 $wb['postfix_txt'] = 'Povolit příjem';
 $wb['access_txt'] = 'Povolit přístup';
 $wb['policy_txt'] = 'Spamový filtr';
-$wb['no_policy'] = '- nepovoleno -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Byl dosažen maximální počet mailboxů pro Váš účet.';
 $wb['limit_mailquota_txt'] = 'Dosažen maximální prostor pro mailboxy. Max. dostupné místo v MB je';
 $wb['disableimap_txt'] = 'Zakázat IMAP';
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index b60a756b09..0eb5a3e9ad 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Aktiviere Empfang';
 $wb['greylisting_txt'] = 'Aktiviere Greylisting';
 $wb['access_txt'] = 'Aktiviere Zugriff';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- nicht aktiviert -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Die maximale Anzahl an E-Mailkonten für Ihr Konto wurde erreicht.';
 $wb['limit_mailquota_txt'] = 'Der maximale Speicherplatz für Ihr E-Mail Konto wurde erreicht. Der maximal verfügbare Speicher in MB ist';
 $wb['disablesmtp_txt'] = 'SMTP (Mailversand) deaktivieren';
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index fb846da199..b8a641651b 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -24,7 +24,7 @@ $wb['maildir_txt'] = 'Mailmappe';
 $wb['postfix_txt'] = 'Aktiver modtagelse';
 $wb['access_txt'] = 'Aktiver adgang';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- ikke aktiveret -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Max. antal af mailbokse for din konto er nået.';
 $wb['limit_mailquota_txt'] = 'Max. plads for postkasser er nået. Max. tilgængelig plads i MB er';
 $wb['disablesmtp_txt'] = 'Deaktiver SMTP (afsending)';
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index a097470ad7..381ef2f9ad 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Ενεργοποίηση Λήψης';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Ενεργοποίηση Πρόσβασης';
 $wb['policy_txt'] = 'Φίλτρο Spam';
-$wb['no_policy'] = '- ανενεργή -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Έχετε φτάσει το μέγιστο πλήθος των θυρίδων για τον λογαριασμό σας.';
 $wb['limit_mailquota_txt'] = 'Έχετε φτάσει στο μέγεστο χώρο της θυρίδα σας.Ο μέγιστος διαθέσιμος χώρος σε MB είναι';
 $wb['disableimap_txt'] = 'Απενεργοποίηση IMAP';
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 4174081b53..f70140bd4f 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -27,7 +27,7 @@ $wb["postfix_txt"] = 'Enable receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb["access_txt"] = 'Enable access';
 $wb["policy_txt"] = 'Spamfilter';
-$wb["no_policy"] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb["limit_mailbox_txt"] = 'The max. number of mailboxes for your account is reached.';
 $wb["limit_mailquota_txt"] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb["disablesmtp_txt"] = 'Disable SMTP (sending)';
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index 93c2095e1c..cce382fde0 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -44,7 +44,7 @@ $wb['name_optional_txt'] = '(Opcional)';
 $wb['name_txt'] = 'Nombre';
 $wb['no_backup_txt'] = 'Sin copia de seguridad';
 $wb['no_domain_perm'] = 'Usted no tiene permisos para gestionar este dominio.';
-$wb['no_policy'] = '- deshabilitado -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['now_txt'] = 'Ahora';
 $wb['password_match_txt'] = 'Las contraseñas coinciden.';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index 8f94f0158f..2ede867053 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -18,7 +18,7 @@ $wb['postfix_txt'] = 'Salli vastaanotto';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Salli yhteys';
 $wb['policy_txt'] = 'Roskapostisuodatin';
-$wb['no_policy'] = '- ei käytössä -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Tilisi sallittu postilaatikoiden määrä on ylitetty.';
 $wb['limit_mailquota_txt'] = 'Tilisi sallittu postilaatikoiden koko on ylitetty. Vapaa tila megatavuina on';
 $wb['disableimap_txt'] = 'Estä IMAP';
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index bb54c2e0c0..87a1bb9570 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -18,7 +18,7 @@ $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
 $wb['access_txt'] = 'Activer l’accès';
 $wb['policy_txt'] = 'Filtre antispam';
-$wb['no_policy'] = '- inactif -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Le nombre maximal de boîtes aux lettres pour votre compte est atteint..';
 $wb['limit_mailquota_txt'] = 'Lespace maximal pour les boîtes aux lettres est atteint. Lespace maximal disponible est de ';
 $wb['disableimap_txt'] = 'Désactiver IMAP';
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 8dcfe7a6fa..4e48e3a7d7 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Disable IMAP';
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index 43720fbd84..8f7f826c80 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Bejövő engedélyezés';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Hozzáférés engelyezés';
 $wb['policy_txt'] = 'Spam szűrő';
-$wb['no_policy'] = '- nem engelyézett -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Nincs több mailbox lehetőség.';
 $wb['limit_mailquota_txt'] = 'Mailbox tárhely elfogyott.';
 $wb['disableimap_txt'] = 'IMAP Tiltás';
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index ba17e373c7..01bd8f59f4 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -24,7 +24,7 @@ $wb['postfix_txt'] = 'Dapat Menerima';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Dapat Mengakses';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- tidak diaktifkan -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Jumlah maks mailbox untuk akun Anda sudah tercapai.';
 $wb['limit_mailquota_txt'] = 'Ruang maks untuk mailbox sudah tercapai. Ruang maks yang tersedia dalam MB adalah';
 $wb['disableimap_txt'] = 'Nonaktifkan IMAP';
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index e6820a0329..779040835a 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -19,7 +19,7 @@ $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Abilita ricezione';
 $wb['access_txt'] = 'Abilita indirizzo';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- non abilitato -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Hai raggiungo il numero massimo di caselle per il tuo account.';
 $wb['limit_mailquota_txt'] = 'Hai raggiunto lo spazio massimo per le tue caselle di posta. Lo spazio massimo in MB è di';
 $wb['disableimap_txt'] = 'Disabilita IMAP';
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index 3cd498f270..17e02481a8 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'メールを受信する';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'アクセスを許可する';
 $wb['policy_txt'] = 'スパムフィルター';
-$wb['no_policy'] = '- 利用しない -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'メールボックスが最大数に達した為、これ以上追加できません。';
 $wb['limit_mailquota_txt'] = 'メールボックスが一杯です。 上限(MB):';
 $wb['disableimap_txt'] = 'IMAP を無効にする';
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 65d89a32af..620725b3da 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Ontvangen inschakelen';
 $wb['greylisting_txt'] = 'Greylisting inschakelen';
 $wb['access_txt'] = 'Toegang inschakelen';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- niet ingeschakeld -';
+$wb['inherit_policy'] = '- Gebruik domein instelling -';
 $wb['limit_mailbox_txt'] = 'Het max. aantal mailboxen voor uw account is bereikt.';
 $wb['limit_mailquota_txt'] = 'De max. ruimte voor uw mailboxen is bereikt. De max. beschikbare ruimte in MB is';
 $wb['disableimap_txt'] = 'Uitschakelen IMAP';
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index d090fadb2a..586b823b54 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Zezwól na odbiór poczty';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Możliwy dostęp';
 $wb['policy_txt'] = 'Filtr spamu';
-$wb['no_policy'] = '- brak polityki -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Maksymalna ilość skrzynek pocztowych dla Twojego konta została przekroczona.';
 $wb['limit_mailquota_txt'] = 'Maksymalna pojemność skrzynki pocztowej została przekroczona. Maksymalne dostępne miejsce w MB to: ';
 $wb['disableimap_txt'] = 'Wyłącz IMAP';
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index aa0e9a0a05..464a7d2de0 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Permitir Recepção';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Permitir Acesso';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- desactivado -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'O número máximo de caixas de correio para a conta foi atingido.';
 $wb['limit_mailquota_txt'] = 'O espaço em disco disponível para criação de contas foi atingido.';
 $wb['disableimap_txt'] = 'Desactivar IMAP';
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index 3f0f8ec479..4143064581 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Numarul maxim de MAILBOX pe contul dumneavoastra a fost atins';
 $wb['limit_mailquota_txt'] = 'Spatiul maxim pentru MAILBOX a fost atins.Acesta este ';
 $wb['disableimap_txt'] = 'Blocheaza IMAP';
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index 526c976ed5..1bc76633c0 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Разрешить получение';
 $wb['greylisting_txt'] = 'Включить серый список (Greylisting)';
 $wb['access_txt'] = 'Включить доступ';
 $wb['policy_txt'] = 'Спам-фильтр';
-$wb['no_policy'] = '- не включены -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Число почтовых ящиков превышено.';
 $wb['limit_mailquota_txt'] = 'Место под почтовые ящики превышено. Максимально доступно MB';
 $wb['password_strength_txt'] = 'Стойкость пароля';
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index a427c50606..7ac9fc62b5 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Aktivera mottagning';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Aktivera åtkomst';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- ej aktiverat -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Avaktivera IMAP';
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index 92c6dea578..c936936db2 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Povoliť príjem';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Povoliť Prístup';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- nepovolená -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Max. počet poštových schránok pre váš účet je dosiahnutý.';
 $wb['limit_mailquota_txt'] = 'Maximálny priestor pre poštové schránky je dosiahnutý. Max. dostupné miesto v MB je';
 $wb['disableimap_txt'] = 'Deaktivovať IMAP';
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 99e9860396..4b7f493987 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -27,7 +27,7 @@ $wb['postfix_txt'] = 'Alım Etkin';
 $wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 $wb['access_txt'] = 'EriÅŸim Etkin';
 $wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
-$wb['no_policy'] = '- devre dışı -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta kutusu sayısına ulaştınız.';
 $wb['limit_mailquota_txt'] = 'E-posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
 $wb['disablesmtp_txt'] = 'SMTP Kullanılmasın (gönderim)';
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index d291367d11..00c70b021f 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -99,7 +99,7 @@ class page_action extends tform_actions {
 		if (isset($_POST['policy'])) $tmp_user['policy_id'] = intval($_POST['policy']);
 		$sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r') . " ORDER BY policy_name";
 		$policys = $app->db->queryAllRecords($sql);
-		$policy_select = "<option value='0'>".$app->tform->lng("no_policy")."</option>";
+		$policy_select = "<option value='0'>".$app->tform->lng("inherit_policy")."</option>";
 		if(is_array($policys)) {
 			foreach( $policys as $p) {
 				$selected = ($p["id"] == $tmp_user["policy_id"])?'SELECTED':'';
-- 
GitLab


From 28781ccfee0b8f7c02547c4c87b668f3a1e7b4a8 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 13 Jun 2020 02:19:55 +0200
Subject: [PATCH 373/571] Add a direct domain add button (4304)

---
 interface/web/client/lib/lang/ar.lng             | 1 +
 interface/web/client/lib/lang/bg.lng             | 1 +
 interface/web/client/lib/lang/br.lng             | 1 +
 interface/web/client/lib/lang/ca.lng             | 1 +
 interface/web/client/lib/lang/cz.lng             | 1 +
 interface/web/client/lib/lang/de.lng             | 1 +
 interface/web/client/lib/lang/dk.lng             | 1 +
 interface/web/client/lib/lang/el.lng             | 1 +
 interface/web/client/lib/lang/en.lng             | 3 ++-
 interface/web/client/lib/lang/es.lng             | 3 ++-
 interface/web/client/lib/lang/fi.lng             | 1 +
 interface/web/client/lib/lang/fr.lng             | 1 +
 interface/web/client/lib/lang/hr.lng             | 1 +
 interface/web/client/lib/lang/hu.lng             | 1 +
 interface/web/client/lib/lang/id.lng             | 1 +
 interface/web/client/lib/lang/it.lng             | 1 +
 interface/web/client/lib/lang/ja.lng             | 1 +
 interface/web/client/lib/lang/nl.lng             | 1 +
 interface/web/client/lib/lang/nl_domain_list.lng | 2 +-
 interface/web/client/lib/lang/pl.lng             | 1 +
 interface/web/client/lib/lang/pt.lng             | 1 +
 interface/web/client/lib/lang/ro.lng             | 1 +
 interface/web/client/lib/lang/ru.lng             | 1 +
 interface/web/client/lib/lang/se.lng             | 1 +
 interface/web/client/lib/lang/sk.lng             | 1 +
 interface/web/client/lib/lang/tr.lng             | 1 +
 interface/web/client/lib/module.conf.php         | 4 ++++
 27 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/interface/web/client/lib/lang/ar.lng b/interface/web/client/lib/lang/ar.lng
index 245991ff9d..f129f4273f 100644
--- a/interface/web/client/lib/lang/ar.lng
+++ b/interface/web/client/lib/lang/ar.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/bg.lng b/interface/web/client/lib/lang/bg.lng
index c18e2e8fbd..e23521e598 100644
--- a/interface/web/client/lib/lang/bg.lng
+++ b/interface/web/client/lib/lang/bg.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/br.lng b/interface/web/client/lib/lang/br.lng
index 538a3e2e85..b65fba3044 100644
--- a/interface/web/client/lib/lang/br.lng
+++ b/interface/web/client/lib/lang/br.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Mensagens';
 $wb['Send email'] = 'Enviar e-mail';
 $wb['Edit Client Circle'] = 'Editar círculo de clientes';
 $wb['Domains'] = 'Domínios';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domínio';
 $wb['client_txt'] = 'Cliente';
 $wb['error_domain_in dnsuse'] = 'Este domínio não pode ser removido pois é utilizado em uma zona dns.';
diff --git a/interface/web/client/lib/lang/ca.lng b/interface/web/client/lib/lang/ca.lng
index 730bd2de99..c51dd2e839 100644
--- a/interface/web/client/lib/lang/ca.lng
+++ b/interface/web/client/lib/lang/ca.lng
@@ -14,6 +14,7 @@ $wb['delete_additional_template_txt'] = 'Supprimer un modèle';
 $wb['Messaging'] = 'Messagerie';
 $wb['Edit Client Circle'] = 'Editer les groupes clients';
 $wb['Domains'] = 'Domaines';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domaine';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'Ce domaine ne peut pas être supprimé, il est utilisé par un compte courriel';
diff --git a/interface/web/client/lib/lang/cz.lng b/interface/web/client/lib/lang/cz.lng
index 447810f940..c8c8f50074 100644
--- a/interface/web/client/lib/lang/cz.lng
+++ b/interface/web/client/lib/lang/cz.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Odesílání zpráv';
 $wb['Send email'] = 'Odeslat e-mail';
 $wb['Edit Client Circle'] = 'Upravit skupinu klientů';
 $wb['Domains'] = 'Domény';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Doména';
 $wb['client_txt'] = 'Klient';
 $wb['error_domain_in mailuse'] = 'Tato doména nelze odstranit, protože je v používána jako poštovní doména';
diff --git a/interface/web/client/lib/lang/de.lng b/interface/web/client/lib/lang/de.lng
index 87b85eed71..b55397999a 100644
--- a/interface/web/client/lib/lang/de.lng
+++ b/interface/web/client/lib/lang/de.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Benachrichtigungen';
 $wb['Send email'] = 'E-Mail versenden';
 $wb['Edit Client Circle'] = 'Kundenkreis bearbeiten';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Kunde';
 $wb['error_domain_in mailuse'] = 'Diese Domain kann nicht gelöscht werden, weil sie als E-Mail Domain verwendet wird';
diff --git a/interface/web/client/lib/lang/dk.lng b/interface/web/client/lib/lang/dk.lng
index 0d498a483c..920b3f8805 100644
--- a/interface/web/client/lib/lang/dk.lng
+++ b/interface/web/client/lib/lang/dk.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Meddelelser';
 $wb['Send email'] = 'Send E-mail';
 $wb['Edit Client Circle'] = 'Rediger Kunde Cirkel';
 $wb['Domains'] = 'Domæner';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domæne';
 $wb['client_txt'] = 'Kunde';
 $wb['error_domain_in mailuse'] = 'Dette domæne kan ikke slettes, da det er i brug som mail-domæne';
diff --git a/interface/web/client/lib/lang/el.lng b/interface/web/client/lib/lang/el.lng
index 8c7463d61c..992bfdcd1c 100644
--- a/interface/web/client/lib/lang/el.lng
+++ b/interface/web/client/lib/lang/el.lng
@@ -15,6 +15,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/en.lng b/interface/web/client/lib/lang/en.lng
index 743516c96c..a2004196e2 100644
--- a/interface/web/client/lib/lang/en.lng
+++ b/interface/web/client/lib/lang/en.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in dnsuse'] = 'This domain cannot be deleted, because it is in use as dns zone';
@@ -27,4 +28,4 @@ $wb['error_client_can_not_add_domain'] = 'You cannot add a new domain';
 $wb['domain_txt'] = 'Domain';
 $wb['error_client_group_id_empty'] = 'You have to select a customer<br>';
 $wb['Email-Templates'] = 'Email-Templates';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/client/lib/lang/es.lng b/interface/web/client/lib/lang/es.lng
index 9b8b2a3edb..233b58b7ca 100644
--- a/interface/web/client/lib/lang/es.lng
+++ b/interface/web/client/lib/lang/es.lng
@@ -25,5 +25,6 @@ $wb['Messaging'] = 'Mensajería';
 $wb['Resellers'] = 'Revendedores';
 $wb['Send email'] = 'Enviar correo';
 $wb['Templates'] = 'Plantillas';
-$wb['Email-Templates'] = 'Email-Templates';
+$wb['Add Domain'] = 'Add Domain';
+$wb['domain_txt'] = '] = 'Email-Templates';
 ?>
diff --git a/interface/web/client/lib/lang/fi.lng b/interface/web/client/lib/lang/fi.lng
index 52dba3949f..812ff1860f 100644
--- a/interface/web/client/lib/lang/fi.lng
+++ b/interface/web/client/lib/lang/fi.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/fr.lng b/interface/web/client/lib/lang/fr.lng
index 4538bfb0db..d4efa24b7a 100644
--- a/interface/web/client/lib/lang/fr.lng
+++ b/interface/web/client/lib/lang/fr.lng
@@ -14,6 +14,7 @@ $wb['delete_additional_template_txt'] = 'Supprimer un modèle';
 $wb['Messaging'] = 'Messagerie';
 $wb['Edit Client Circle'] = 'Modifier les groupes clients';
 $wb['Domains'] = 'Domaines';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domaine';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'Ce domaine ne peut pas être supprimé, il est utilisé par un compte e-mail';
diff --git a/interface/web/client/lib/lang/hr.lng b/interface/web/client/lib/lang/hr.lng
index 48c78e2bf1..a9e293840c 100644
--- a/interface/web/client/lib/lang/hr.lng
+++ b/interface/web/client/lib/lang/hr.lng
@@ -16,6 +16,7 @@ $wb['Messaging'] = 'Slanje poruka';
 $wb['Send email'] = 'Pošalji email';
 $wb['Edit Client Circle'] = 'Promijeni krug klijenata';
 $wb['Domains'] = 'Domene';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domena';
 $wb['client_txt'] = 'Klijent';
 $wb['error_domain_in mailuse'] = 'Ova domena ne može biti obrisana jer se koristi kao mail domena';
diff --git a/interface/web/client/lib/lang/hu.lng b/interface/web/client/lib/lang/hu.lng
index 6b988dcee2..5e67398550 100644
--- a/interface/web/client/lib/lang/hu.lng
+++ b/interface/web/client/lib/lang/hu.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/id.lng b/interface/web/client/lib/lang/id.lng
index a393cb7747..6fe64545f4 100644
--- a/interface/web/client/lib/lang/id.lng
+++ b/interface/web/client/lib/lang/id.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/it.lng b/interface/web/client/lib/lang/it.lng
index ff740790b0..257dca805d 100644
--- a/interface/web/client/lib/lang/it.lng
+++ b/interface/web/client/lib/lang/it.lng
@@ -15,6 +15,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Dominio';
 $wb['client_txt'] = 'Cliente';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/ja.lng b/interface/web/client/lib/lang/ja.lng
index c5ce289f70..b34cf49559 100644
--- a/interface/web/client/lib/lang/ja.lng
+++ b/interface/web/client/lib/lang/ja.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/nl.lng b/interface/web/client/lib/lang/nl.lng
index cf2307e6aa..dab8ba3c3c 100644
--- a/interface/web/client/lib/lang/nl.lng
+++ b/interface/web/client/lib/lang/nl.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Berichten';
 $wb['Send email'] = 'Verstuur e-mail';
 $wb['Edit Client Circle'] = 'Klanten collectie bewerken';
 $wb['Domains'] = 'Domeinen';
+$wb['Add Domain'] = 'Domein toevoegen';
 $wb['domain_txt'] = 'Domein';
 $wb['client_txt'] = 'Klant';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/nl_domain_list.lng b/interface/web/client/lib/lang/nl_domain_list.lng
index 130345f388..802917f923 100644
--- a/interface/web/client/lib/lang/nl_domain_list.lng
+++ b/interface/web/client/lib/lang/nl_domain_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Domeinen';
-$wb['add_new_record_txt'] = 'Toevoegen nieuw domein';
+$wb['add_new_record_txt'] = 'Domein toevoegen';
 $wb['domain_txt'] = 'Domein';
 $wb['user_txt'] = 'Klant';
 ?>
diff --git a/interface/web/client/lib/lang/pl.lng b/interface/web/client/lib/lang/pl.lng
index ca1563e8b8..8c4061a795 100644
--- a/interface/web/client/lib/lang/pl.lng
+++ b/interface/web/client/lib/lang/pl.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Wiadomości dla klientów';
 $wb['Send email'] = 'Wyślij email';
 $wb['Edit Client Circle'] = 'Edytuj grupy klientów';
 $wb['Domains'] = 'Domeny';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domena';
 $wb['client_txt'] = 'Klient';
 $wb['error_domain_in mailuse'] = 'Ta domena nie może zostać usunięta ponieważ jest używana jako domena dla poczty email.';
diff --git a/interface/web/client/lib/lang/pt.lng b/interface/web/client/lib/lang/pt.lng
index 1be427e820..1f837aa963 100644
--- a/interface/web/client/lib/lang/pt.lng
+++ b/interface/web/client/lib/lang/pt.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/ro.lng b/interface/web/client/lib/lang/ro.lng
index 245991ff9d..f129f4273f 100644
--- a/interface/web/client/lib/lang/ro.lng
+++ b/interface/web/client/lib/lang/ro.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/ru.lng b/interface/web/client/lib/lang/ru.lng
index c8558a3982..2dabf4c6f3 100644
--- a/interface/web/client/lib/lang/ru.lng
+++ b/interface/web/client/lib/lang/ru.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Обмен сообщениями';
 $wb['Send email'] = 'Отправить почту';
 $wb['Edit Client Circle'] = 'Изменить клиента Группы';
 $wb['Domains'] = 'Домены';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Домен';
 $wb['client_txt'] = 'Клиент';
 $wb['error_domain_in mailuse'] = 'Этот домен не может быть удален, так как он используется в качестве почтового домена.';
diff --git a/interface/web/client/lib/lang/se.lng b/interface/web/client/lib/lang/se.lng
index 3845b9c57a..adceb746d6 100644
--- a/interface/web/client/lib/lang/se.lng
+++ b/interface/web/client/lib/lang/se.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Meddelanden';
 $wb['Send email'] = 'Skicka epost';
 $wb['Edit Client Circle'] = 'Redigera kundcirkel';
 $wb['Domains'] = 'Domäner';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domän';
 $wb['client_txt'] = 'Kund';
 $wb['error_domain_in mailuse'] = 'Den här domänen kan inte tas bort då den används som epostdomän';
diff --git a/interface/web/client/lib/lang/sk.lng b/interface/web/client/lib/lang/sk.lng
index f3bfd3e2f6..7058583a32 100644
--- a/interface/web/client/lib/lang/sk.lng
+++ b/interface/web/client/lib/lang/sk.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Messaging';
 $wb['Send email'] = 'Send Email';
 $wb['Edit Client Circle'] = 'Edit Client Circle';
 $wb['Domains'] = 'Domains';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Domain';
 $wb['client_txt'] = 'Client';
 $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
diff --git a/interface/web/client/lib/lang/tr.lng b/interface/web/client/lib/lang/tr.lng
index cc2e8aa022..6f5f55e702 100644
--- a/interface/web/client/lib/lang/tr.lng
+++ b/interface/web/client/lib/lang/tr.lng
@@ -17,6 +17,7 @@ $wb['Messaging'] = 'Ä°letiÅŸim';
 $wb['Send email'] = 'E-posta Gönderimi';
 $wb['Edit Client Circle'] = 'Müşteri Grubu Düzenleme';
 $wb['Domains'] = 'Etki Alanları';
+$wb['Add Domain'] = 'Add Domain';
 $wb['domain_txt'] = 'Etki Alanı';
 $wb['client_txt'] = 'Müşteri';
 $wb['error_domain_in dnsuse'] = 'Bu etki alanı birincil DNS bölgesi olarak kullanıldığından silinemez';
diff --git a/interface/web/client/lib/module.conf.php b/interface/web/client/lib/module.conf.php
index 2603550c9b..2203571381 100644
--- a/interface/web/client/lib/module.conf.php
+++ b/interface/web/client/lib/module.conf.php
@@ -87,6 +87,10 @@ if ($settings['use_domain_module'] == 'y') {
 		'target'  => 'content',
 		'link' => 'client/domain_list.php');
 
+		$items[] = array(   'title'  => 'Add Domain',
+			'target'  => 'content',
+			'link' => 'client/domain_edit.php');
+
 	$module['nav'][] = array( 'title' => 'Domains',
 		'open'  => 1,
 		'items' => $items);
-- 
GitLab


From fa6b3c67d0a7c276673afa97f3b2af9fc45e035b Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:30:28 +0200
Subject: [PATCH 374/571] Update de_system_config.lng

---
 interface/web/admin/lib/lang/de_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 76910e1db3..79048a8298 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Wildcard verwenden';
-- 
GitLab


From ff43d3ff5e029410b486d49436962c58e0aa9f3e Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:30:46 +0200
Subject: [PATCH 375/571] Update se_system_config.lng

---
 interface/web/admin/lib/lang/se_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 74ae16734f..bb0e2cac5e 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 55a33fdbfd510b32e8f66be3e32bbfdb696aafa8 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:31:04 +0200
Subject: [PATCH 376/571] Update tr_system_config.lng

---
 interface/web/admin/lib/lang/tr_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index 3ef8e26875..3b89919129 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -84,4 +84,6 @@ $wb['reseller_can_use_options_txt'] = 'Bayi web siteleri için seçenek sekmesin
 $wb['custom_login_text_txt'] = 'Oturum Açma Sayfası Metni';
 $wb['custom_login_link_txt'] = 'Oturum Açma Sayfası Bağlantısı';
 $wb['login_link_error_regex'] = 'Oturum Açma Bağlantısı Geçersiz';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 ?>
-- 
GitLab


From 56ad3421ef7acef5ba022daf44a5ccabe7054030 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:31:21 +0200
Subject: [PATCH 377/571] Update ar_system_config.lng

---
 interface/web/admin/lib/lang/ar_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index 0a830014d8..664221e728 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From ffb8eeb696dcfa53ec1a56205ebe06cd56fbeab5 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:31:34 +0200
Subject: [PATCH 378/571] Update bg_system_config.lng

---
 interface/web/admin/lib/lang/bg_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index 130cb596aa..83fcbaa839 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 4571bcb4e45cfe6216a452b238208462beeb8c6d Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:31:50 +0200
Subject: [PATCH 379/571] Update br_system_config.lng

---
 interface/web/admin/lib/lang/br_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index 98bd4c9614..e405e7bb1b 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -81,6 +81,8 @@ $wb['reseller_can_use_options_txt'] = 'Revendas podem utilizar o menu sites';
 $wb['custom_login_text_txt'] = 'Texto personalizado para a página de acesso';
 $wb['custom_login_link_txt'] = 'Link personalizado para página de acesso';
 $wb['login_link_error_regex'] = 'Link personalizado para acesso inválido';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Nome';
 $wb['ca_issue_txt'] = 'Questão';
 $wb['ca_wildcard_txt'] = 'Usar curingas';
-- 
GitLab


From 27c15175f9bbb4dcdcd6e32d1c5830523ede62c6 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:32:12 +0200
Subject: [PATCH 380/571] Update ca_system_config.lng

---
 interface/web/admin/lib/lang/ca_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index cc3c11c6c5..267e41b65b 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -81,6 +81,8 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi
 $wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
 $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
 $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 5c163fd95157a8285248ef359b7afd77c5e058b5 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:32:26 +0200
Subject: [PATCH 381/571] Update cz_system_config.lng

---
 interface/web/admin/lib/lang/cz_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index 3660e1b689..40c78c1856 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -81,6 +81,8 @@ $wb['reseller_can_use_options_txt'] = 'Distributor (prodejce) může použít ka
 $wb['custom_login_text_txt'] = 'Vlastní text na přihlašovací stránce';
 $wb['custom_login_link_txt'] = 'Vlastní odkaz (URL) na přihlašovací stránce (vlastní text)';
 $wb['login_link_error_regex'] = 'Neplatný formát URL pro vlastní odkaz na přihlašovací stránce';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Název vydavatele';
 $wb['ca_issue_txt'] = 'Doména vydavatele';
 $wb['ca_wildcard_txt'] = 'Použít Wildcard (*)';
-- 
GitLab


From 901caa6a2299258c9d43881c1af91c4dca2643ce Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:32:42 +0200
Subject: [PATCH 382/571] Update dk_system_config.lng

---
 interface/web/admin/lib/lang/dk_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index 26b0fe7e78..ad3ecbf4db 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -81,6 +81,8 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi
 $wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
 $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
 $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From dd6e7deb2c51b6b0c704d82d4001fb1b497452d9 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:32:55 +0200
Subject: [PATCH 383/571] Update el_system_config.lng

---
 interface/web/admin/lib/lang/el_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 640d6f00a9..3276653f33 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From d9fd5475927d51047913abe0d68cfe897b398866 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:33:26 +0200
Subject: [PATCH 384/571] Update es_system_config.lng

---
 interface/web/admin/lib/lang/es_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index 043c52cfdd..39fae409ce 100755
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -81,6 +81,8 @@ $wb['webftp_url_txt'] = 'Enlace al cliente FTP por web';
 $wb['webmail_url_error_regex'] = 'Dirección del correo web inválida';
 $wb['webmail_url_note_txt'] = 'Marcador de posición:';
 $wb['webmail_url_txt'] = 'URL de correo web';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From b55a43a2a464a0633f7b1866a488aa40be24e6b1 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:33:39 +0200
Subject: [PATCH 385/571] Update fi_system_config.lng

---
 interface/web/admin/lib/lang/fi_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index c0972c49d8..be49b16ef4 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 41b9ce463aff3a04774b6c5dc5bc9e642ab8cf74 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:33:49 +0200
Subject: [PATCH 386/571] Update fr_system_config.lng

---
 interface/web/admin/lib/lang/fr_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 18f0dbbed4..8ef8aa64e6 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -81,6 +81,8 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi
 $wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
 $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
 $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 44ed03e7d3d9fcc0a70e8143836a3e5b8d685da4 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:33:58 +0200
Subject: [PATCH 387/571] Update hr_system_config.lng

---
 interface/web/admin/lib/lang/hr_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index a7735647b1..e08fdfbb3c 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 36b256bf706a38abe86d791e01d19747c0ca91da Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:34:06 +0200
Subject: [PATCH 388/571] Update hu_system_config.lng

---
 interface/web/admin/lib/lang/hu_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index cee497fe19..613ad88a22 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 65b8b7219f688a5dbd49edad9e15b51e21dbb1d1 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:34:15 +0200
Subject: [PATCH 389/571] Update id_system_config.lng

---
 interface/web/admin/lib/lang/id_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index 344185b84d..f2dfeb6734 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 1d2f3be54065b93026d4442feb33b6f803a989a0 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:34:25 +0200
Subject: [PATCH 390/571] Update ja_system_config.lng

---
 interface/web/admin/lib/lang/ja_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index aa5cc6a7a3..718e4302c5 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 55791026e43fce7acf80f0f98e339ec237714e80 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Sat, 13 Jun 2020 17:34:35 +0200
Subject: [PATCH 391/571] Update nl_system_config.lng

---
 interface/web/admin/lib/lang/nl_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index 44a58b7646..fda9056d8d 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 8325db579710a886e9b3187d5275301cf5403e42 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 14 Jun 2020 12:48:06 +0200
Subject: [PATCH 392/571] Implement SSHFP record (#1594)

---
 .../sql/incremental/upd_dev_collection.sql    |   5 +-
 install/sql/ispconfig3.sql                    | 214 +++++++++---------
 interface/web/dns/dns_sshfp_edit.php          |  53 +++++
 interface/web/dns/form/dns_sshfp.tform.php    | 165 ++++++++++++++
 interface/web/dns/lib/lang/ar_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/bg_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/br_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/ca_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/cz_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/de_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/dk_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/el_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/en_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/es_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/fi_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/fr_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/hr_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/hu_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/id_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/it_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/ja_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/nl_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/pl_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/pt_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/ro_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/ru_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/se_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/sk_dns_sshfp.lng   |  16 ++
 interface/web/dns/lib/lang/tr_dns_sshfp.lng   |  16 ++
 interface/web/dns/list/dns_a.list.php         |   2 +-
 interface/web/dns/templates/dns_a_list.htm    |   4 +-
 .../web/dns/templates/dns_sshfp_edit.htm      |  25 ++
 server/conf/bind_pri.domain.master            |   5 +-
 33 files changed, 760 insertions(+), 113 deletions(-)
 create mode 100644 interface/web/dns/dns_sshfp_edit.php
 create mode 100644 interface/web/dns/form/dns_sshfp.tform.php
 create mode 100644 interface/web/dns/lib/lang/ar_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/bg_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/br_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/ca_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/cz_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/de_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/dk_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/el_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/en_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/es_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/fi_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/fr_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/hr_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/hu_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/id_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/it_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/ja_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/nl_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/pl_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/pt_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/ro_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/ru_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/se_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/sk_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/tr_dns_sshfp.lng
 create mode 100644 interface/web/dns/templates/dns_sshfp_edit.htm

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index aebc01dcb8..519dda220f 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -20,7 +20,7 @@ UPDATE `dns_ssl_ca` SET `ca_name` = 'Sectigo / Comodo CA' WHERE `ca_issue` = 'co
 -- default php-fpm to ondemand mode
 ALTER TABLE `web_domain` ALTER pm SET DEFAULT 'ondemand';
 
-ALTER TABLE `mail_user` 
+ALTER TABLE `mail_user`
   ADD `purge_trash_days` INT NOT NULL DEFAULT '0' AFTER `move_junk`,
   ADD `purge_junk_days` INT NOT NULL DEFAULT '0' AFTER `purge_trash_days`;
 
@@ -32,3 +32,6 @@ ALTER TABLE `mail_user` ADD `disablequota-status` ENUM('n','y') CHARACTER SET ut
 
 -- add disableindexer-worker for solr search
 ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `disablequota-status`;
+
+-- add SSHFP record
+ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME', 'CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') NULL DEFAULT NULL AFTER `name`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index a5fcce8c89..ef76a370d4 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -26,24 +26,24 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
--- Includes 
--- 
+-- Includes
+--
 -- iso_country_list.sql
--- 
+--
 -- This will create and then populate a MySQL table with a list of the names and
 -- ISO 3166 codes for countries in existence as of the date below.
--- 
+--
 -- For updates to this file, see http://27.org/isocountrylist/
 -- For more about ISO 3166, see http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
--- 
+--
 -- Created by getisocountrylist.pl on Sun Nov  2 14:59:20 2003.
 -- Wm. Rhodes <iso_country_list@27.org>
--- 
+--
 
--- 
+--
 -- ISPConfig 3
 -- DB-Version: 3.0.0.9
--- 
+--
 
 SET FOREIGN_KEY_CHECKS = 0;
 
@@ -288,9 +288,9 @@ CREATE TABLE `client_circle` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `client_template`
--- 
+--
 
 CREATE TABLE `client_template` (
   `template_id` int(11) unsigned NOT NULL auto_increment,
@@ -373,9 +373,9 @@ CREATE TABLE `client_template` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `client_template_assigned`
--- 
+--
 
 CREATE TABLE `client_template_assigned` (
   `assigned_template_id` bigint(20) NOT NULL auto_increment,
@@ -426,9 +426,9 @@ CREATE TABLE `country` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `cron`
--- 
+--
 CREATE TABLE `cron` (
   `id` int(11) unsigned NOT NULL auto_increment,
   `sys_userid` int(11) unsigned NOT NULL default '0',
@@ -452,9 +452,9 @@ CREATE TABLE `cron` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `directive_snippets`
--- 
+--
 
 CREATE TABLE IF NOT EXISTS `directive_snippets` (
   `directive_snippets_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -475,9 +475,9 @@ CREATE TABLE IF NOT EXISTS `directive_snippets` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `dns_rr`
--- 
+--
 CREATE TABLE `dns_rr` (
   `id` int(11) unsigned NOT NULL auto_increment,
   `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
@@ -488,7 +488,7 @@ CREATE TABLE `dns_rr` (
   `server_id` int(11) NOT NULL default '1',
   `zone` int(11) unsigned NOT NULL DEFAULT '0',
   `name` varchar(255) NOT NULL DEFAULT '',
-  `type` enum('A','AAAA','ALIAS','CNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') default NULL,
+  `type` enum('A','AAAA','ALIAS','CNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') default NULL,
   `data` TEXT NOT NULL,
   `aux` int(11) unsigned NOT NULL default '0',
   `ttl` int(11) unsigned NOT NULL default '3600',
@@ -524,9 +524,9 @@ CREATE TABLE `dns_slave` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `dns_ssl_ca`
--- 
+--
 
 CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
@@ -598,9 +598,9 @@ INSERT INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `s
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `dns_soa`
--- 
+--
 
 CREATE TABLE `dns_soa` (
   `id` int(10) unsigned NOT NULL auto_increment,
@@ -634,9 +634,9 @@ CREATE TABLE `dns_soa` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `dns_template`
--- 
+--
 
 CREATE TABLE `dns_template` (
   `template_id` int(11) unsigned NOT NULL auto_increment,
@@ -670,9 +670,9 @@ CREATE TABLE `domain` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `firewall`
--- 
+--
 
 CREATE TABLE `firewall` (
   `firewall_id` int(11) unsigned NOT NULL auto_increment,
@@ -690,9 +690,9 @@ CREATE TABLE `firewall` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `ftp_user`
--- 
+--
 
 CREATE TABLE `ftp_user` (
   `ftp_user_id` int(11) unsigned NOT NULL auto_increment,
@@ -728,9 +728,9 @@ CREATE TABLE `ftp_user` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `ftp_traffic`
--- 
+--
 
 CREATE TABLE `ftp_traffic` (
   `hostname` varchar(255) NOT NULL,
@@ -801,9 +801,9 @@ CREATE TABLE `iptables` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_access`
--- 
+--
 
 CREATE TABLE `mail_access` (
   `access_id` int(11) unsigned NOT NULL auto_increment,
@@ -841,9 +841,9 @@ CREATE TABLE `mail_backup` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_content_filter`
--- 
+--
 
 CREATE TABLE `mail_content_filter` (
   `content_filter_id` int(11) unsigned NOT NULL auto_increment,
@@ -863,9 +863,9 @@ CREATE TABLE `mail_content_filter` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_domain`
--- 
+--
 
 CREATE TABLE `mail_domain` (
   `domain_id` int(11) unsigned NOT NULL auto_increment,
@@ -888,9 +888,9 @@ CREATE TABLE `mail_domain` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_forwarding`
--- 
+--
 
 CREATE TABLE `mail_forwarding` (
   `forwarding_id` int(11) unsigned NOT NULL auto_increment,
@@ -913,9 +913,9 @@ CREATE TABLE `mail_forwarding` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_get`
--- 
+--
 
 CREATE TABLE `mail_get` (
   `mailget_id` int(11) unsigned NOT NULL auto_increment,
@@ -979,9 +979,9 @@ CREATE TABLE IF NOT EXISTS `mail_relay_recipient` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_traffic`
--- 
+--
 
 CREATE TABLE `mail_traffic` (
   `traffic_id` int(11) unsigned NOT NULL auto_increment,
@@ -994,9 +994,9 @@ CREATE TABLE `mail_traffic` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_transport`
--- 
+--
 
 CREATE TABLE `mail_transport` (
   `transport_id` int(11) unsigned NOT NULL auto_increment,
@@ -1017,9 +1017,9 @@ CREATE TABLE `mail_transport` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_user`
--- 
+--
 
 CREATE TABLE `mail_user` (
   `mailuser_id` int(11) unsigned NOT NULL auto_increment,
@@ -1074,9 +1074,9 @@ CREATE TABLE `mail_user` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `mail_user_filter`
--- 
+--
 
 CREATE TABLE `mail_user_filter` (
   `filter_id` int(11) unsigned NOT NULL auto_increment,
@@ -1295,9 +1295,9 @@ CREATE TABLE IF NOT EXISTS `openvz_vm` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `remote_session`
--- 
+--
 
 CREATE TABLE `remote_session` (
   `remote_session` varchar(64) NOT NULL DEFAULT '',
@@ -1310,9 +1310,9 @@ CREATE TABLE `remote_session` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `remote_user`
--- 
+--
 
 CREATE TABLE `remote_user` (
   `remote_userid` int(11) unsigned NOT NULL auto_increment,
@@ -1331,9 +1331,9 @@ CREATE TABLE `remote_user` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `server`
--- 
+--
 
 CREATE TABLE `server` (
   `server_id` int(11) unsigned NOT NULL auto_increment,
@@ -1362,9 +1362,9 @@ CREATE TABLE `server` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `server_ip`
--- 
+--
 
 CREATE TABLE `server_ip` (
   `server_ip_id` int(11) unsigned NOT NULL auto_increment,
@@ -1384,9 +1384,9 @@ CREATE TABLE `server_ip` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `server_ip_map`
--- 
+--
 
 CREATE TABLE `server_ip_map` (
   `server_ip_map_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -1458,9 +1458,9 @@ CREATE TABLE `shell_user` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `software_package`
--- 
+--
 
 CREATE TABLE `software_package` (
   `package_id` int(11) unsigned NOT NULL auto_increment,
@@ -1481,9 +1481,9 @@ CREATE TABLE `software_package` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `software_repo`
--- 
+--
 
 CREATE TABLE `software_repo` (
   `software_repo_id` int(11) unsigned NOT NULL auto_increment,
@@ -1502,9 +1502,9 @@ CREATE TABLE `software_repo` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `software_update`
--- 
+--
 
 CREATE TABLE `software_update` (
   `software_update_id` int(11) unsigned NOT NULL auto_increment,
@@ -1524,9 +1524,9 @@ CREATE TABLE `software_update` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `software_update_inst`
--- 
+--
 
 CREATE TABLE `software_update_inst` (
   `software_update_inst_id` int(11) unsigned NOT NULL auto_increment,
@@ -1540,9 +1540,9 @@ CREATE TABLE `software_update_inst` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `spamfilter_policy`
--- 
+--
 
 CREATE TABLE `spamfilter_policy` (
   `id` int(11) unsigned NOT NULL auto_increment,
@@ -1603,9 +1603,9 @@ CREATE TABLE `spamfilter_policy` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `spamfilter_users`
--- 
+--
 
 CREATE TABLE `spamfilter_users` (
   `id` int(11) unsigned NOT NULL auto_increment,
@@ -1626,9 +1626,9 @@ CREATE TABLE `spamfilter_users` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `spamfilter_wblist`
--- 
+--
 
 CREATE TABLE `spamfilter_wblist` (
   `wblist_id` int(11) unsigned NOT NULL auto_increment,
@@ -1648,9 +1648,9 @@ CREATE TABLE `spamfilter_wblist` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `support_message`
--- 
+--
 
 CREATE TABLE `support_message` (
   `support_message_id` int(11) unsigned NOT NULL auto_increment,
@@ -1720,9 +1720,9 @@ CREATE TABLE `sys_datalog` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `sys_dbsync`
--- 
+--
 
 CREATE TABLE `sys_dbsync` (
   `id` int(11) unsigned NOT NULL auto_increment,
@@ -1744,9 +1744,9 @@ CREATE TABLE `sys_dbsync` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `sys_filesync`
--- 
+--
 
 CREATE TABLE `sys_filesync` (
   `id` int(11) unsigned NOT NULL auto_increment,
@@ -1764,9 +1764,9 @@ CREATE TABLE `sys_filesync` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `sys_group`
--- 
+--
 
 CREATE TABLE `sys_group` (
   `groupid` int(11) unsigned NOT NULL auto_increment,
@@ -1778,9 +1778,9 @@ CREATE TABLE `sys_group` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `sys_ini`
--- 
+--
 
 CREATE TABLE `sys_ini` (
   `sysini_id` int(11) unsigned NOT NULL auto_increment,
@@ -1792,9 +1792,9 @@ CREATE TABLE `sys_ini` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `sys_log`
--- 
+--
 
 CREATE TABLE `sys_log` (
   `syslog_id` int(11) unsigned NOT NULL auto_increment,
@@ -1861,9 +1861,9 @@ CREATE TABLE IF NOT EXISTS `sys_theme` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `sys_user`
--- 
+--
 
 CREATE TABLE `sys_user` (
   `userid` int(11) unsigned NOT NULL auto_increment,
@@ -1991,9 +1991,9 @@ CREATE TABLE IF NOT EXISTS `web_database_user` (
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Table structure for table  `web_domain`
--- 
+--
 
 CREATE TABLE `web_domain` (
   `domain_id` int(11) unsigned NOT NULL auto_increment,
@@ -2496,42 +2496,42 @@ INSERT INTO `country` (`iso`, `name`, `printable_name`, `iso3`, `numcode`, `eu`)
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `dns_template`
--- 
+--
 
 INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM,DNSSEC', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=3600\nttl=3600\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\nTXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600', 'y');
 
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `help_faq`
--- 
+--
 
 INSERT INTO `help_faq` VALUES (1,1,0,'I would like to know ...','Yes, of course.',1,1,'riud','riud','r');
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `help_faq_sections`
--- 
+--
 
 INSERT INTO `help_faq_sections` VALUES (1,'General',0,NULL,NULL,NULL,NULL,NULL);
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `software_repo`
--- 
+--
 
 INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `repo_name`, `repo_url`, `repo_username`, `repo_password`, `active`) VALUES (1, 1, 1, 'riud', 'riud', '', 'ISPConfig Addons', 'http://repo.ispconfig.org/addons/', '', '', 'n');
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `spamfilter_policy`
--- 
+--
 
 INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '', 'n', 6.00, 8.00, 'rewrite_subject', 12.00);
 INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
@@ -2543,34 +2543,34 @@ INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_us
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `sys_group`
--- 
+--
 
 INSERT INTO `sys_group` (`groupid`, `name`, `description`, `client_id`) VALUES (1, 'admin', 'Administrators group', 0);
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `sys_ini`
--- 
+--
 
 INSERT INTO `sys_ini` (`sysini_id`, `config`, `default_logo`, `custom_logo`) VALUES (1, '', 'data:image/png;base64,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', '');
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `sys_user`
--- 
+--
 
 INSERT INTO `sys_theme` (`var_id`, `tpl_name`, `username`, `logo_url`) VALUES (NULL, 'default', 'global', 'themes/default/images/header_logo.png');
 INSERT INTO `sys_theme` (`var_id`, `tpl_name`, `username`, `logo_url`) VALUES (NULL, 'default-v2', 'global', 'themes/default-v2/images/header_logo.png');
 
 -- --------------------------------------------------------
 
--- 
+--
 -- Dumping data for table `sys_user`
--- 
+--
 
 INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `username`, `passwort`, `modules`, `startmodule`, `app_theme`, `typ`, `active`, `language`, `groups`, `default_group`, `client_id`) VALUES (1, 1, 0, 'riud', 'riud', '', 'admin', '21232f297a57a5a743894a0e4a801fc3', 'dashboard,admin,client,mail,monitor,sites,dns,vm,tools,help', 'dashboard', 'default', 'admin', 1, 'en', '1,2', 1, 0);
 
diff --git a/interface/web/dns/dns_sshfp_edit.php b/interface/web/dns/dns_sshfp_edit.php
new file mode 100644
index 0000000000..adce9af9a1
--- /dev/null
+++ b/interface/web/dns/dns_sshfp_edit.php
@@ -0,0 +1,53 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/dns_sshfp.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+require_once './dns_edit_base.php';
+
+// Loading classes
+class page_action extends dns_page_action {
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/dns/form/dns_sshfp.tform.php b/interface/web/dns/form/dns_sshfp.tform.php
new file mode 100644
index 0000000000..6a71c6da78
--- /dev/null
+++ b/interface/web/dns/form/dns_sshfp.tform.php
@@ -0,0 +1,165 @@
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+global $app;
+
+$form["title"]    = "DNS SSHFP Record";
+$form["description"]  = "";
+$form["name"]    = "dns_txt";
+$form["action"]   = "dns_sshfp_edit.php";
+$form["db_table"]  = "dns_rr";
+$form["db_table_idx"] = "id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "dns";
+$form["list_default"] = "dns_a_list.php";
+$form["auth"]   = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['dns'] = array (
+	'title'  => "DNS SSHFP",
+	'width'  => 100,
+	'template'  => "templates/dns_sshfp_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'zone' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => @$app->functions->intval($_REQUEST["zone"]),
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '/^(\*\.|[a-zA-Z0-9\.\-\_]){0,255}$/',
+					'errmsg'=> 'name_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'type' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'SSHFP',
+			'value'  => '',
+			'width'  => '5',
+			'maxlength' => '5'
+		),
+		'data' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array (
+				0 => array (
+					'type' => 'NOTEMPTY',
+					'errmsg'=> 'data_error_empty'
+				),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'ttl' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'validators' => array (  0 => array ( 'type' => 'RANGE',
+					'range' => '60:',
+					'errmsg'=> 'ttl_range_error'),
+			),
+			'default' => '3600',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'Y',
+			'value'  => array(0 => 'N', 1 => 'Y')
+		),
+		'stamp' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'serial' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+if($_SESSION["s"]["user"]["typ"] == 'admin') {
+	unset($form["tabs"]['dns']['fields']['data']['validators']);
+	$form["tabs"]['dns']['fields']['data']['validators'][0]['type'] = 'NOTEMPTY';
+	$form["tabs"]['dns']['fields']['data']['validators'][0]['errmsg'] = 'data_error_empty';
+	$form["tabs"]['dns']['fields']['data']['maxlength'] = 512;
+}
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_sshfp.lng b/interface/web/dns/lib/lang/ar_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_sshfp.lng b/interface/web/dns/lib/lang/bg_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_sshfp.lng b/interface/web/dns/lib/lang/br_dns_sshfp.lng
new file mode 100644
index 0000000000..f84c2af034
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Servidor';
+$wb['zone_txt'] = 'Zona';
+$wb['name_txt'] = 'Nome do host';
+$wb['type_txt'] = 'Tipo';
+$wb['data_txt'] = 'Texto';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Ativo';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Texto está em branco.';
+$wb['data_error_regex'] = 'Texto possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+?>
diff --git a/interface/web/dns/lib/lang/ca_dns_sshfp.lng b/interface/web/dns/lib/lang/ca_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/ca_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_sshfp.lng b/interface/web/dns/lib/lang/cz_dns_sshfp.lng
new file mode 100644
index 0000000000..4ed9018152
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Název hostitele';
+$wb['type_txt'] = 'Typ';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktivní';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
+$wb['name_error_empty'] = 'Název hostitele je prázdný.';
+$wb['name_error_regex'] = 'Název hostitele má chybný formát.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_sshfp.lng b/interface/web/dns/lib/lang/de_dns_sshfp.lng
new file mode 100644
index 0000000000..eb2f83263a
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'Typ';
+$wb['data_txt'] = 'Daten';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktiv';
+$wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
+$wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
+$wb['name_error_empty'] = 'Der Hostname ist leer.';
+$wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
+$wb['data_error_empty'] = 'Text ist leer';
+$wb['data_error_regex'] = 'Textformat ungültig';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/dk_dns_sshfp.lng b/interface/web/dns/lib/lang/dk_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/dk_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_sshfp.lng b/interface/web/dns/lib/lang/el_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_sshfp.lng b/interface/web/dns/lib/lang/en_dns_sshfp.lng
new file mode 100644
index 0000000000..a2e3322bb6
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["type_txt"] = 'type';
+$wb["data_txt"] = 'Data';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'Text empty';
+$wb["data_error_regex"] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_sshfp.lng b/interface/web/dns/lib/lang/es_dns_sshfp.lng
new file mode 100644
index 0000000000..58292c007a
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['active_txt'] = 'Habilitado';
+$wb['data_error_empty'] = 'Datos vacíos';
+$wb['data_error_regex'] = 'El formato de los datos no es correcto';
+$wb['data_txt'] = 'Datos';
+$wb['limit_dns_record_txt'] = 'Ha alcanzado el número máx. de registros DNS permitidos para su cuenta.';
+$wb['name_error_empty'] = 'El nombre del host está vacío.';
+$wb['name_error_regex'] = 'El nombre del host tiene un formato incorrecto.';
+$wb['name_txt'] = 'Nombre del host';
+$wb['no_zone_perm'] = 'Usted no tiene permisos para agregar un registro a esta zona DNS.';
+$wb['server_id_txt'] = 'Servidor';
+$wb['ttl_range_error'] = 'El tiempo mín. de TTL es 60 segundos.';
+$wb['ttl_txt'] = 'TTL';
+$wb['type_txt'] = 'tipo';
+$wb['zone_txt'] = 'Zona';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_sshfp.lng b/interface/web/dns/lib/lang/fi_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_sshfp.lng b/interface/web/dns/lib/lang/fr_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_sshfp.lng b/interface/web/dns/lib/lang/hr_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_sshfp.lng b/interface/web/dns/lib/lang/hu_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_sshfp.lng b/interface/web/dns/lib/lang/id_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_sshfp.lng b/interface/web/dns/lib/lang/it_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_sshfp.lng b/interface/web/dns/lib/lang/ja_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_sshfp.lng b/interface/web/dns/lib/lang/nl_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_sshfp.lng b/interface/web/dns/lib/lang/pl_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_sshfp.lng b/interface/web/dns/lib/lang/pt_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_sshfp.lng b/interface/web/dns/lib/lang/ro_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_sshfp.lng b/interface/web/dns/lib/lang/ru_dns_sshfp.lng
new file mode 100644
index 0000000000..bf1a8a892a
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Сервер';
+$wb['zone_txt'] = 'Зона';
+$wb['name_txt'] = 'Имя хоста';
+$wb['type_txt'] = 'Тип';
+$wb['data_txt'] = 'Данные';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Активно';
+$wb['limit_dns_record_txt'] = 'Максимальное число DNS-записей для вашей учетной записи достигнуто.';
+$wb['no_zone_perm'] = 'У Вас нет прав добавлять эту запись.';
+$wb['name_error_empty'] = 'Имя пустое.';
+$wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_sshfp.lng b/interface/web/dns/lib/lang/se_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_sshfp.lng b/interface/web/dns/lib/lang/sk_dns_sshfp.lng
new file mode 100644
index 0000000000..dc9ad9a006
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Data';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Text empty';
+$wb['data_error_regex'] = 'Text format invalid';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_sshfp.lng b/interface/web/dns/lib/lang/tr_dns_sshfp.lng
new file mode 100644
index 0000000000..25350c9aa8
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = 'Sunucu';
+$wb['zone_txt'] = 'Bölge';
+$wb['name_txt'] = 'Sunucu Adı';
+$wb['type_txt'] = 'Tür';
+$wb['data_txt'] = 'Veri';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
+$wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
+$wb['data_error_empty'] = 'Metin boÅŸ';
+$wb['data_error_regex'] = 'Metin biçimi geçersiz';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+?>
diff --git a/interface/web/dns/list/dns_a.list.php b/interface/web/dns/list/dns_a.list.php
index b6363b7d24..007f76dfb3 100644
--- a/interface/web/dns/list/dns_a.list.php
+++ b/interface/web/dns/list/dns_a.list.php
@@ -132,7 +132,7 @@ $liste["item"][] = array( 'field'  => "type",
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NAPTR'=>'NAPTR', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
+	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NAPTR'=>'NAPTR', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'SSHFP'=>'SSHFP', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
 
 
 ?>
diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm
index b6b21f18b6..46fb103b7d 100644
--- a/interface/web/dns/templates/dns_a_list.htm
+++ b/interface/web/dns/templates/dns_a_list.htm
@@ -34,10 +34,11 @@
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_rp_edit.php?zone={tmpl_var name='parent_id'}">RP</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_spf_edit.php?zone={tmpl_var name='parent_id'}">SPF</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_srv_edit.php?zone={tmpl_var name='parent_id'}">SRV</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_sshfp_edit.php?zone={tmpl_var name='parent_id'}">SSHFP</button>
 			<button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_tlsa_edit.php?zone={tmpl_var name='parent_id'}">TLSA</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_txt_edit.php?zone={tmpl_var name='parent_id'}">TXT</button>
         </div>
-    
+
 </div>
 
 
@@ -93,4 +94,3 @@
             </tfoot>
         </table>
 </div>
-    
diff --git a/interface/web/dns/templates/dns_sshfp_edit.htm b/interface/web/dns/templates/dns_sshfp_edit.htm
new file mode 100644
index 0000000000..18a40a8010
--- /dev/null
+++ b/interface/web/dns/templates/dns_sshfp_edit.htm
@@ -0,0 +1,25 @@
+<div class="form-group">
+    <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+    <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+<div class="form-group">
+    <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+    <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+<div class="form-group">
+    <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+    <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+    <div class="col-sm-9">
+        {tmpl_var name='active'}
+    </div>
+</div>
+
+
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<input type="hidden" name="zone" value="{tmpl_var name='zone'}">
+<input type="hidden" name="type" value="{tmpl_var name='type'}">
+
+<div class="clear"><div class="right">
+<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_sshfp_edit.php">{tmpl_var name='btn_save_txt'}</button>
+<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+</div></div>
diff --git a/server/conf/bind_pri.domain.master b/server/conf/bind_pri.domain.master
index 379d80c8df..9635e445f7 100644
--- a/server/conf/bind_pri.domain.master
+++ b/server/conf/bind_pri.domain.master
@@ -50,6 +50,9 @@ $TTL        {tmpl_var name='ttl'}
 <tmpl_if name="type" op='==' value='SRV'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      SRV    {tmpl_var name='aux'} {tmpl_var name='data'}
 </tmpl_if>
+<tmpl_if name="type" op='==' value='SSHFP'>
+{tmpl_var name='name'} {tmpl_var name='ttl'}      SSHFP   {tmpl_var name='data'} {tmpl_var name='data'}
+</tmpl_if>
 <tmpl_if name="type" op='==' value='TLSA'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      TLSA       {tmpl_var name='data'}
 </tmpl_if>
@@ -60,5 +63,3 @@ $TTL        {tmpl_var name='ttl'}
 {tmpl_var name='name'} {tmpl_var name='ttl'}      TYPE257    {tmpl_var name='data'}
 </tmpl_if>
 </tmpl_loop>
-
-
-- 
GitLab


From 7cedfde85bdfa03bcf5bee522113e6c1c2d78cbb Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 14 Jun 2020 13:18:52 +0200
Subject: [PATCH 393/571] Add remote functions for SSHFP

---
 interface/lib/classes/remote.d/dns.inc.php | 46 ++++++++++++++++------
 interface/web/dns/lib/remote.conf.php      |  1 +
 2 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 612adf7186..817953a5c7 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -57,7 +57,7 @@ class remoting_dns extends remoting {
 		$app->uses('tform');
 		$app->tform->loadFormDef($tform_def_file);
 		$app->uses('tpl,validate_dns,remoting_lib');
-		
+
 		$app->remoting_lib->loadUserProfile($client_id);
 
 		//* replace template placeholders
@@ -197,7 +197,7 @@ class remoting_dns extends remoting {
 		$app->remoting_lib->loadFormDef('../dns/form/dns_soa.tform.php');
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
-	
+
 	//* Get slave zone details
 	public function dns_slave_get($session_id, $primary_id) {
 		global $app;
@@ -211,7 +211,7 @@ class remoting_dns extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	
+
 	//* Add a slave zone
 	public function dns_slave_add($session_id, $client_id, $params) {
 		if(!$this->checkPerm($session_id, 'dns_zone_add')) {
@@ -220,7 +220,7 @@ class remoting_dns extends remoting {
 		}
 		return $this->insertQuery('../dns/form/dns_slave.tform.php', $client_id, $params);
 	}
-	
+
 	//* Update a slave zone
 	public function dns_slave_update($session_id, $client_id, $primary_id, $params) {
 		if(!$this->checkPerm($session_id, 'dns_zone_update')) {
@@ -296,12 +296,12 @@ class remoting_dns extends remoting {
 
 	private function dns_rr_get($session_id, $primary_id, $rr_type = 'A') {
 		global $app;
-	
+
 		$rr_type = strtolower($rr_type);
 		if(!preg_match('/^[a-z]+$/', $rr_type)) {
 			throw new SoapFault('permission denied', 'Invalid rr type');
 		}
-		
+
 		if(!$this->checkPerm($session_id, 'dns_' . $rr_type . '_get')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 		}
@@ -309,14 +309,14 @@ class remoting_dns extends remoting {
 		$app->remoting_lib->loadFormDef('../dns/form/dns_' . $rr_type . '.tform.php');
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
-	
+
 	//* Add a record
 	private function dns_rr_add($session_id, $client_id, $params, $update_serial=false, $rr_type = 'A') {
 		$rr_type = strtolower($rr_type);
 		if(!preg_match('/^[a-z]+$/', $rr_type)) {
 			throw new SoapFault('permission denied', 'Invalid rr type');
 		}
-		
+
 		if(!$this->checkPerm($session_id, 'dns_' . $rr_type . '_add')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 		}
@@ -332,7 +332,7 @@ class remoting_dns extends remoting {
 		if(!preg_match('/^[a-z]+$/', $rr_type)) {
 			throw new SoapFault('permission denied', 'Invalid rr type');
 		}
-		
+
 		if(!$this->checkPerm($session_id, 'dns_' . $rr_type . '_update')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
@@ -343,7 +343,7 @@ class remoting_dns extends remoting {
 		}
 		return $affected_rows;
 	}
-	
+
 	//* Delete a record
 	private function dns_rr_delete($session_id, $primary_id, $update_serial=false, $rr_type = 'A') {
 		$rr_type = strtolower($rr_type);
@@ -359,9 +359,9 @@ class remoting_dns extends remoting {
 		$affected_rows = $this->deleteQuery('../dns/form/dns_' . $rr_type . '.tform.php', $primary_id);
 		return $affected_rows;
 	}
-	
+
 	// ----------------------------------------------------------------------------------------------------------------
-	
+
 	//* Get record details
 	public function dns_aaaa_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'AAAA');
@@ -626,6 +626,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_sshfp_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'SSHFP');
+	}
+
+	//* Add a record
+	public function dns_sshfp_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'SSHFP');
+	}
+
+	//* Update a record
+	public function dns_sshfp_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'SSHFP');
+	}
+
+	//* Delete a record
+	public function dns_sshfp_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'SSHFP');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_tlsa_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'TLSA');
diff --git a/interface/web/dns/lib/remote.conf.php b/interface/web/dns/lib/remote.conf.php
index ea725de8a4..c87296a8c9 100644
--- a/interface/web/dns/lib/remote.conf.php
+++ b/interface/web/dns/lib/remote.conf.php
@@ -15,6 +15,7 @@ $function_list['dns_ns_get,dns_ns_add,dns_ns_update,dns_ns_delete'] = 'DNS ns fu
 $function_list['dns_ptr_get,dns_ptr_add,dns_ptr_update,dns_ptr_delete'] = 'DNS ptr functions';
 $function_list['dns_rp_get,dns_rp_add,dns_rp_update,dns_rp_delete'] = 'DNS rp functions';
 $function_list['dns_srv_get,dns_srv_add,dns_srv_update,dns_srv_delete'] = 'DNS srv functions';
+$function_list['dns_sshfp_get,dns_sshfp_add,dns_sshfp_update,dns_sshfp_delete'] = 'DNS sshfp functions';
 $function_list['dns_tlsa_get,dns_tlsa_add,dns_tlsa_update,dns_tlsa_delete'] = 'DNS tlsa functions';
 $function_list['dns_txt_get,dns_txt_add,dns_txt_update,dns_txt_delete'] = 'DNS txt functions';
 
-- 
GitLab


From 488bbdd5fbc1292be385df6ec2949e99972f2107 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 14 Jun 2020 15:08:09 +0200
Subject: [PATCH 394/571] Add translation for new DNAME record

---
 interface/web/dns/lib/lang/ar_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/ar_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/ar_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/ar_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/bg_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/bg_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/bg_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/bg_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/br_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/br_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/br_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/br_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/ca_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/ca_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/ca_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/ca_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/cz_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/cz_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/cz_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/cz_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/de_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/de_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/de_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/de_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/dk_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/dk_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/dk_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/dk_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/el_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/el_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/el_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/el_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/en_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/en_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/en_dns_cname.lng |  4 ++--
 interface/web/dns/lib/lang/en_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/es_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/es_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/es_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/es_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/fi_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/fi_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/fi_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/fi_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/fr_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/fr_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/fr_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/fr_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/hr_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/hr_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/hr_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/hr_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/hu_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/hu_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/hu_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/hu_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/id_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/id_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/id_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/id_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/it_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/it_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/it_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/it_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/ja_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/ja_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/ja_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/ja_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/nl_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/nl_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/nl_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/nl_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/pl_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/pl_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/pl_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/pl_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/pt_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/pt_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/pt_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/pt_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/ro_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/ro_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/ro_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/ro_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/ru_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/ru_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/ru_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/ru_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/se_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/se_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/se_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/se_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/sk_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/sk_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/sk_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/sk_dns_dname.lng | 17 +++++++++++++++++
 interface/web/dns/lib/lang/tr_dns_a.lng     |  2 +-
 interface/web/dns/lib/lang/tr_dns_aaaa.lng  |  2 +-
 interface/web/dns/lib/lang/tr_dns_cname.lng |  2 +-
 interface/web/dns/lib/lang/tr_dns_dname.lng | 17 +++++++++++++++++
 100 files changed, 501 insertions(+), 76 deletions(-)
 create mode 100644 interface/web/dns/lib/lang/ar_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/bg_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/br_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/ca_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/cz_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/de_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/dk_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/el_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/en_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/es_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/fi_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/fr_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/hr_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/hu_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/id_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/it_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/ja_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/nl_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/pl_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/pt_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/ro_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/ru_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/se_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/sk_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/tr_dns_dname.lng

diff --git a/interface/web/dns/lib/lang/ar_dns_a.lng b/interface/web/dns/lib/lang/ar_dns_a.lng
index 68e40da5e7..c191ff19d3 100644
--- a/interface/web/dns/lib/lang/ar_dns_a.lng
+++ b/interface/web/dns/lib/lang/ar_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_aaaa.lng b/interface/web/dns/lib/lang/ar_dns_aaaa.lng
index 3d634780f1..03f18f18da 100644
--- a/interface/web/dns/lib/lang/ar_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_cname.lng b/interface/web/dns/lib/lang/ar_dns_cname.lng
index 5f8363aaa8..636c4e7a7a 100644
--- a/interface/web/dns/lib/lang/ar_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ar_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_dname.lng b/interface/web/dns/lib/lang/ar_dns_dname.lng
new file mode 100644
index 0000000000..382397abf7
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Target Hostname';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Target hostname empty';
+$wb['data_error_regex'] = 'Target hostname format invalid';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_a.lng b/interface/web/dns/lib/lang/bg_dns_a.lng
index e397d9774e..f789a19f47 100644
--- a/interface/web/dns/lib/lang/bg_dns_a.lng
+++ b/interface/web/dns/lib/lang/bg_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Полето за хост име е празно.';
 $wb['name_error_regex'] = 'Избраното име на хост е в грешен формат.';
 $wb['data_error_empty'] = 'Полето за IP-адреса е празно';
 $wb['ip_error_wrong'] = 'Формата на IP-адреса е грешен';
-$wb['data_error_duplicate'] = 'Дублиран A-Запис';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_aaaa.lng b/interface/web/dns/lib/lang/bg_dns_aaaa.lng
index d4efae73db..d2ca072bec 100644
--- a/interface/web/dns/lib/lang/bg_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/bg_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Вие нямате право да добавяте за
 $wb['name_error_empty'] = 'Полето с имейла е празно.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_cname.lng b/interface/web/dns/lib/lang/bg_dns_cname.lng
index d7de1f0c01..d9863d10e8 100644
--- a/interface/web/dns/lib/lang/bg_dns_cname.lng
+++ b/interface/web/dns/lib/lang/bg_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Полето с имейла е празно.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_dname.lng b/interface/web/dns/lib/lang/bg_dns_dname.lng
new file mode 100644
index 0000000000..4705cd73d8
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Target Hostname';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['limit_dns_record_txt'] = 'Максималният брой записи за DNS за твоят акаунт е достигнат';
+$wb['no_zone_perm'] = 'Вие намате права да добавяте запис в тази DNS зона.';
+$wb['name_error_empty'] = 'Полето с имейла е празно.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Target hostname empty';
+$wb['data_error_regex'] = 'Target hostname format invalid';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_a.lng b/interface/web/dns/lib/lang/br_dns_a.lng
index f96cf551e6..7204ce11ab 100644
--- a/interface/web/dns/lib/lang/br_dns_a.lng
+++ b/interface/web/dns/lib/lang/br_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'Endereço IP está em branco.';
 $wb['ip_error_wrong'] = 'Endereço IP inválido.';
-$wb['data_error_duplicate'] = 'Registro A ou CNAME duplicado.';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_aaaa.lng b/interface/web/dns/lib/lang/br_dns_aaaa.lng
index 2f81a52a0c..5678f2c67f 100644
--- a/interface/web/dns/lib/lang/br_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/br_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns ne
 $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'Endereço IPv6 está em branco.';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'O endereço IPv6 possui formato inválido.';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_cname.lng b/interface/web/dns/lib/lang/br_dns_cname.lng
index c4fb0df260..e36fb57909 100644
--- a/interface/web/dns/lib/lang/br_dns_cname.lng
+++ b/interface/web/dns/lib/lang/br_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'O alvo do host está em branco.';
 $wb['data_error_regex'] = 'O alvo do host possui formato inválido.';
-$wb['data_error_duplicate'] = 'Registro A ou CNAME duplicado.';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_dname.lng b/interface/web/dns/lib/lang/br_dns_dname.lng
new file mode 100644
index 0000000000..4a8f98cb02
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Servidor';
+$wb['zone_txt'] = 'Zona';
+$wb['name_txt'] = 'Nome do host';
+$wb['type_txt'] = 'Tipo';
+$wb['data_txt'] = 'Alvo do host';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Ativo';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O alvo do host está em branco.';
+$wb['data_error_regex'] = 'O alvo do host possui formato inválido.';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+?>
diff --git a/interface/web/dns/lib/lang/ca_dns_a.lng b/interface/web/dns/lib/lang/ca_dns_a.lng
index 6b3b31ae4c..e91bff2c73 100644
--- a/interface/web/dns/lib/lang/ca_dns_a.lng
+++ b/interface/web/dns/lib/lang/ca_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Vous n\'avez pas la permission d\'ajouter un enregistreme
 $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'L\'adresse IP est vide.';
-$wb['data_error_duplicate'] = 'Enregistrement A ou CNAME en double';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_aaaa.lng b/interface/web/dns/lib/lang/ca_dns_aaaa.lng
index c06b153dc2..94a7deeddb 100644
--- a/interface/web/dns/lib/lang/ca_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Vous n\'avez pas la permission d\'ajouter un enregistreme
 $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'L\'adresse IP est vide.';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_cname.lng b/interface/web/dns/lib/lang/ca_dns_cname.lng
index 3d191f703b..94d523c4e2 100644
--- a/interface/web/dns/lib/lang/ca_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ca_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'Le nom d\'hôte cible est vide.';
 $wb['data_error_regex'] = 'Le format du nom d\'hôte cible invalide.';
-$wb['data_error_duplicate'] = 'Enregistrement A ou CNAME en double';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_dname.lng b/interface/web/dns/lib/lang/ca_dns_dname.lng
new file mode 100644
index 0000000000..480f1ddd4d
--- /dev/null
+++ b/interface/web/dns/lib/lang/ca_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Serveur';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Nom d\'hôte';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Nom d\'hôte cible';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Actif';
+$wb['limit_dns_record_txt'] = 'Le nombre maximum d\'enregistrements DNS pour votre compte a été atteint.';
+$wb['no_zone_perm'] = 'Vous n\'avez pas la permission d\'ajouter un enregistrement dans cette zone DNS.';
+$wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
+$wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
+$wb['data_error_empty'] = 'Le nom d\'hôte cible est vide.';
+$wb['data_error_regex'] = 'Le format du nom d\'hôte cible invalide.';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_a.lng b/interface/web/dns/lib/lang/cz_dns_a.lng
index 871f9146d4..cfc3c60854 100644
--- a/interface/web/dns/lib/lang/cz_dns_a.lng
+++ b/interface/web/dns/lib/lang/cz_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'IP adresa je prázdná';
-$wb['data_error_duplicate'] = 'Duplikace A záznamu';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 $wb['ip_error_wrong'] = 'IP - formát adresy neplatný';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_aaaa.lng b/interface/web/dns/lib/lang/cz_dns_aaaa.lng
index 9c59cea715..67fc7c7906 100644
--- a/interface/web/dns/lib/lang/cz_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'IP adresa je prázdná';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 $wb['ip_error_wrong'] = 'IP - formát adresy neplatný';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_cname.lng b/interface/web/dns/lib/lang/cz_dns_cname.lng
index 8fed28a5a7..c41b619588 100644
--- a/interface/web/dns/lib/lang/cz_dns_cname.lng
+++ b/interface/web/dns/lib/lang/cz_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'Cílový název hostitele je prázdný';
 $wb['data_error_regex'] = 'Cílový název hostitele má chybný formát';
-$wb['data_error_duplicate'] = 'Duplikace A záznamu nebo CNAME-záznamu';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_dname.lng b/interface/web/dns/lib/lang/cz_dns_dname.lng
new file mode 100644
index 0000000000..7003f707c4
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zóna';
+$wb['name_txt'] = 'Název hostitele';
+$wb['type_txt'] = 'Typ';
+$wb['data_txt'] = 'Cílový název hostitele';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktivní';
+$wb['limit_dns_record_txt'] = 'Byl dosažen maximální počet DNS záznamů pro Váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny.';
+$wb['name_error_empty'] = 'Název hostitele je prázdný.';
+$wb['name_error_regex'] = 'Název hostitele má chybný formát.';
+$wb['data_error_empty'] = 'Cílový název hostitele je prázdný';
+$wb['data_error_regex'] = 'Cílový název hostitele má chybný formát';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_a.lng b/interface/web/dns/lib/lang/de_dns_a.lng
index 564a9318de..af10bb1d19 100644
--- a/interface/web/dns/lib/lang/de_dns_a.lng
+++ b/interface/web/dns/lib/lang/de_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'IPv4 Adresse ist leer';
 $wb['ip_error_wrong'] = 'IPv4 Adressen Format ist ungültig';
-$wb['data_error_duplicate'] = 'Doppelter A oder CNAME Eintrag';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_aaaa.lng b/interface/web/dns/lib/lang/de_dns_aaaa.lng
index a225723f89..c54663a94f 100644
--- a/interface/web/dns/lib/lang/de_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/de_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser
 $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'IPv6 Adresse ist leer';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IPv6 Adressen Format ist ungültig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_cname.lng b/interface/web/dns/lib/lang/de_dns_cname.lng
index 6f9b0eecb4..0342276336 100644
--- a/interface/web/dns/lib/lang/de_dns_cname.lng
+++ b/interface/web/dns/lib/lang/de_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'Ziel Hostname ist leer';
 $wb['data_error_regex'] = 'Ziel Hostname Format ist ungültig';
-$wb['data_error_duplicate'] = 'Doppelter A oder CNAME Eintrag';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_dname.lng b/interface/web/dns/lib/lang/de_dns_dname.lng
new file mode 100644
index 0000000000..f2154e37ad
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'Typ';
+$wb['data_txt'] = 'Ziel Hostname';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktiv';
+$wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
+$wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
+$wb['name_error_empty'] = 'Der Hostname ist leer.';
+$wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
+$wb['data_error_empty'] = 'Ziel Hostname ist leer';
+$wb['data_error_regex'] = 'Ziel Hostname Format ist ungültig';
+$wb['data_error_duplicate'] = 'Doppelter A, CNAME oder DNAME Eintrag';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/dk_dns_a.lng b/interface/web/dns/lib/lang/dk_dns_a.lng
index b10dae13ac..7506edcef5 100644
--- a/interface/web/dns/lib/lang/dk_dns_a.lng
+++ b/interface/web/dns/lib/lang/dk_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Du har ikke tilladelse til at tilføje en post til denne
 $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'IP-Adressen er tom';
-$wb['data_error_duplicate'] = 'Dupliker A-Record eller CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_aaaa.lng b/interface/web/dns/lib/lang/dk_dns_aaaa.lng
index 27a7fae538..107b28be91 100644
--- a/interface/web/dns/lib/lang/dk_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Du har ikke tilladelse til at tilføje en post til denne
 $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'IP-Adressen er tom';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_cname.lng b/interface/web/dns/lib/lang/dk_dns_cname.lng
index 1957b5f82c..e213d6e3d9 100644
--- a/interface/web/dns/lib/lang/dk_dns_cname.lng
+++ b/interface/web/dns/lib/lang/dk_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'Mål-værtsnavn er tom';
 $wb['data_error_regex'] = 'Mål-værtsnavn format er ugyldigt';
-$wb['data_error_duplicate'] = 'Duplikere A-Record eller CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_dname.lng b/interface/web/dns/lib/lang/dk_dns_dname.lng
new file mode 100644
index 0000000000..1815eab77a
--- /dev/null
+++ b/interface/web/dns/lib/lang/dk_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Værtsnavn';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Mål Værtsnavn';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktiv';
+$wb['limit_dns_record_txt'] = 'Max. antal DNS-poster for din konto er nået.';
+$wb['no_zone_perm'] = 'Du har ikke tilladelse til at tilføje en post til denne DNS zone.';
+$wb['name_error_empty'] = 'Værtsnavnet er tomt.';
+$wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
+$wb['data_error_empty'] = 'Mål-værtsnavn er tom';
+$wb['data_error_regex'] = 'Mål-værtsnavn format er ugyldigt';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_a.lng b/interface/web/dns/lib/lang/el_dns_a.lng
index ca5f336d98..6202d2e88b 100644
--- a/interface/web/dns/lib/lang/el_dns_a.lng
+++ b/interface/web/dns/lib/lang/el_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Η διεύθυνση IP είναι κενή';
 $wb['ip_error_wrong'] = 'Διεύθυνση IP με μη έγκυρη μορφοποίηση';
-$wb['data_error_duplicate'] = 'Διπλή εγγραφή A-Record ή CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_aaaa.lng b/interface/web/dns/lib/lang/el_dns_aaaa.lng
index faced402b1..5341e9022d 100644
--- a/interface/web/dns/lib/lang/el_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/el_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Δεν έχετε δικαίωμα να προσθέσε
 $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Διεύθυνση IP κενή';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'Διεύθυνση IP με μη έγκυρη μορφοποίηση';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_cname.lng b/interface/web/dns/lib/lang/el_dns_cname.lng
index 546d16fdae..1d19eb0c23 100644
--- a/interface/web/dns/lib/lang/el_dns_cname.lng
+++ b/interface/web/dns/lib/lang/el_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Το hostname Προορισμός δεν έχει οριστεί';
 $wb['data_error_regex'] = 'Hostname Προορισμός με μη έγκυρη μορφοποίηση';
-$wb['data_error_duplicate'] = 'Διπλοεγγραφή A-Record ή CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_dname.lng b/interface/web/dns/lib/lang/el_dns_dname.lng
new file mode 100644
index 0000000000..ba6404887a
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Ζώνη';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'τύπος';
+$wb['data_txt'] = 'Hostname Προορισμός';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Ενεργή';
+$wb['limit_dns_record_txt'] = 'Έχετε φτάσει το μέγιστο πλήθος των εγγραφών DNS για τον λογαριασμό σας.';
+$wb['no_zone_perm'] = 'Δεν έχετε δικαίωμα να προσθέσετε εγγραφές σε αυτή τη ζώνη DNS.';
+$wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
+$wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
+$wb['data_error_empty'] = 'Το hostname Προορισμός δεν έχει οριστεί';
+$wb['data_error_regex'] = 'Hostname Προορισμός με μη έγκυρη μορφοποίηση';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_a.lng b/interface/web/dns/lib/lang/en_dns_a.lng
index 510d04f34d..3f9f4aa047 100644
--- a/interface/web/dns/lib/lang/en_dns_a.lng
+++ b/interface/web/dns/lib/lang/en_dns_a.lng
@@ -12,6 +12,6 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
 $wb["ip_error_wrong"] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_aaaa.lng b/interface/web/dns/lib/lang/en_dns_aaaa.lng
index 1272fb8587..d55ab7ffd3 100644
--- a/interface/web/dns/lib/lang/en_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/en_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb["no_zone_perm"] = 'You do not have the permission to add a record to this DN
 $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb["ip_error_wrong"] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_cname.lng b/interface/web/dns/lib/lang/en_dns_cname.lng
index ea67106e7a..7ffb78e0d3 100644
--- a/interface/web/dns/lib/lang/en_dns_cname.lng
+++ b/interface/web/dns/lib/lang/en_dns_cname.lng
@@ -12,6 +12,6 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'Target hostname empty';
 $wb["data_error_regex"] = 'Target hostname format invalid';
-$wb["data_error_duplicate"] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_dname.lng b/interface/web/dns/lib/lang/en_dns_dname.lng
new file mode 100644
index 0000000000..d9b41a012e
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["type_txt"] = 'type';
+$wb["data_txt"] = 'Target Hostname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'Target hostname empty';
+$wb["data_error_regex"] = 'Target hostname format invalid';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_a.lng b/interface/web/dns/lib/lang/es_dns_a.lng
index f3ea858f1d..0f19854e2d 100644
--- a/interface/web/dns/lib/lang/es_dns_a.lng
+++ b/interface/web/dns/lib/lang/es_dns_a.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
-$wb['data_error_duplicate'] = 'Registro A o registro CNAME duplicado.';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['data_error_empty'] = 'Dirección IP vacía';
 $wb['data_txt'] = 'Dirección IP';
 $wb['ip_error_wrong'] = 'Formato inválido de dirección IP';
diff --git a/interface/web/dns/lib/lang/es_dns_aaaa.lng b/interface/web/dns/lib/lang/es_dns_aaaa.lng
index 957feabdb5..d9c38070f3 100644
--- a/interface/web/dns/lib/lang/es_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/es_dns_aaaa.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
 $wb['data_error_empty'] = 'Dirección IP vacía';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['data_txt'] = 'Dirección IPv6';
 $wb['ip_error_wrong'] = 'La dirección IP tiene un formato incorrecto';
 $wb['limit_dns_record_txt'] = 'Ha alcanzado el número máx. de registros DNS permitidos para su cuenta.';
diff --git a/interface/web/dns/lib/lang/es_dns_cname.lng b/interface/web/dns/lib/lang/es_dns_cname.lng
index 73bfc671a9..cd0ed67c11 100644
--- a/interface/web/dns/lib/lang/es_dns_cname.lng
+++ b/interface/web/dns/lib/lang/es_dns_cname.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
-$wb['data_error_duplicate'] = 'Registro A o registro CNAME duplicado.';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['data_error_empty'] = 'El nombre del host de destino está vacío.';
 $wb['data_error_regex'] = 'El nombre del host de destino tiene un formato incorrecto.';
 $wb['data_txt'] = 'Nombre del host de destino';
diff --git a/interface/web/dns/lib/lang/es_dns_dname.lng b/interface/web/dns/lib/lang/es_dns_dname.lng
new file mode 100644
index 0000000000..ffc748f106
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['active_txt'] = 'Habilitado';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_empty'] = 'El nombre del host de destino está vacío.';
+$wb['data_error_regex'] = 'El nombre del host de destino tiene un formato incorrecto.';
+$wb['data_txt'] = 'Nombre del host de destino';
+$wb['limit_dns_record_txt'] = 'Ha alcanzado el número máx. de registros DNS permitidos para su cuenta.';
+$wb['name_error_empty'] = 'El nombre del host está vacío.';
+$wb['name_error_regex'] = 'El nombre del host tiene un formato incorrecto.';
+$wb['name_txt'] = 'Nombre del host';
+$wb['no_zone_perm'] = 'Usted no tiene permisos para agregar un registro a esta zona DNS.';
+$wb['server_id_txt'] = 'Servidor';
+$wb['ttl_range_error'] = 'El tiempo mín. de TTL es 60 segundos.';
+$wb['ttl_txt'] = 'TTL';
+$wb['type_txt'] = 'tipo';
+$wb['zone_txt'] = 'Zona';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_a.lng b/interface/web/dns/lib/lang/fi_dns_a.lng
index a7cf6efbbb..be6b4cc42a 100644
--- a/interface/web/dns/lib/lang/fi_dns_a.lng
+++ b/interface/web/dns/lib/lang/fi_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on vääränlainen.';
 $wb['data_error_empty'] = 'IP-osoite tyhjä';
 $wb['ip_error_wrong'] = 'IP-osoite on vääränlainen';
-$wb['data_error_duplicate'] = 'A-tietue on jo olemassa';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_aaaa.lng b/interface/web/dns/lib/lang/fi_dns_aaaa.lng
index f6f99f324b..3759287206 100644
--- a/interface/web/dns/lib/lang/fi_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/fi_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Käyttäjätunnuksella ei ole oikeuksia lisätä tietueit
 $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on väärän muotoinen.';
 $wb['data_error_empty'] = 'Tekstikenttä on tyhjä';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'Tekstikenttä on vääränlainen';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_cname.lng b/interface/web/dns/lib/lang/fi_dns_cname.lng
index 3241e1f780..202949b9f7 100644
--- a/interface/web/dns/lib/lang/fi_dns_cname.lng
+++ b/interface/web/dns/lib/lang/fi_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on vääränlainen.';
 $wb['data_error_empty'] = 'Kohteen verkkotunnus on tyhjä';
 $wb['data_error_regex'] = 'Kohteen verkkotunnus on vääränlainen';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_dname.lng b/interface/web/dns/lib/lang/fi_dns_dname.lng
new file mode 100644
index 0000000000..d7483389d4
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Palvelin';
+$wb['zone_txt'] = 'Alue (Zone)';
+$wb['name_txt'] = 'Verkkotunnus';
+$wb['type_txt'] = 'Tyyppi';
+$wb['data_txt'] = 'Kohteen verkkotunnus';
+$wb['ttl_txt'] = 'Elinaika (TTL)';
+$wb['active_txt'] = 'Käytössä';
+$wb['limit_dns_record_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä DNS-tietueita.';
+$wb['no_zone_perm'] = 'Käyttäjätunnuksella ei ole oikeuksia lisätä tietueita tälle DNS-alueelle.';
+$wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
+$wb['name_error_regex'] = 'Verkkotunnus on vääränlainen.';
+$wb['data_error_empty'] = 'Kohteen verkkotunnus on tyhjä';
+$wb['data_error_regex'] = 'Kohteen verkkotunnus on vääränlainen';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_a.lng b/interface/web/dns/lib/lang/fr_dns_a.lng
index 381fd623a6..f022f0c873 100644
--- a/interface/web/dns/lib/lang/fr_dns_a.lng
+++ b/interface/web/dns/lib/lang/fr_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Vous n’avez pas la permission d’ajouter un enregistre
 $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'L’adresse IP est vide.';
-$wb['data_error_duplicate'] = 'Enregistrement A ou CNAME en double';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_aaaa.lng b/interface/web/dns/lib/lang/fr_dns_aaaa.lng
index 280acdcea4..52e5ef1b33 100644
--- a/interface/web/dns/lib/lang/fr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Vous n’avez pas la permission d’ajouter un enregistre
 $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'L’adresse IP est vide.';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_cname.lng b/interface/web/dns/lib/lang/fr_dns_cname.lng
index 15b4144086..8a5840a2bc 100644
--- a/interface/web/dns/lib/lang/fr_dns_cname.lng
+++ b/interface/web/dns/lib/lang/fr_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'Le nom d’hôte cible est vide.';
 $wb['data_error_regex'] = 'Le format du nom d’hôte cible invalide.';
-$wb['data_error_duplicate'] = 'Enregistrement A ou CNAME en double';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_dname.lng b/interface/web/dns/lib/lang/fr_dns_dname.lng
new file mode 100644
index 0000000000..47779eeffe
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Serveur';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Nom d’hôte';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Nom d’hôte cible';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Actif';
+$wb['limit_dns_record_txt'] = 'Le nombre maximum d’enregistrements DNS pour votre compte a été atteint.';
+$wb['no_zone_perm'] = 'Vous n’avez pas la permission d’ajouter un enregistrement dans cette zone DNS.';
+$wb['name_error_empty'] = 'Le nom d’hôte est vide.';
+$wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
+$wb['data_error_empty'] = 'Le nom d’hôte cible est vide.';
+$wb['data_error_regex'] = 'Le format du nom d’hôte cible invalide.';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_a.lng b/interface/web/dns/lib/lang/hr_dns_a.lng
index a6be0b89fc..b4c83d6431 100644
--- a/interface/web/dns/lib/lang/hr_dns_a.lng
+++ b/interface/web/dns/lib/lang/hr_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje IP adresa je prazno';
 $wb['ip_error_wrong'] = 'Neispravan format A zapisa';
-$wb['data_error_duplicate'] = 'Već postoji ovaj A ili CNAME zapis';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_aaaa.lng b/interface/web/dns/lib/lang/hr_dns_aaaa.lng
index 76fc600703..2e2ee87893 100644
--- a/interface/web/dns/lib/lang/hr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/hr_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nemate dozvolu za dodavanja zapisa ovoj domeni.';
 $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje IPv6 adresa je prazno';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'Neispravan format IPv6 adrese';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_cname.lng b/interface/web/dns/lib/lang/hr_dns_cname.lng
index cb1f5ece00..4e8fad12ba 100644
--- a/interface/web/dns/lib/lang/hr_dns_cname.lng
+++ b/interface/web/dns/lib/lang/hr_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje odredišni host je prazno';
 $wb['data_error_regex'] = 'Neispravan format odredišnog host zapisa';
-$wb['data_error_duplicate'] = 'Duplicirani A zapis ili CNAME zapis';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_dname.lng b/interface/web/dns/lib/lang/hr_dns_dname.lng
new file mode 100644
index 0000000000..ce334e750e
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zona';
+$wb['name_txt'] = 'Naziv hosta';
+$wb['type_txt'] = 'Vrsta';
+$wb['data_txt'] = 'Odredišni host';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktivno';
+$wb['limit_dns_record_txt'] = 'Iskorišten je maksimalan broj DNS zapisa za vaš račun.';
+$wb['no_zone_perm'] = 'Nemate dozvolu za dodavanja zapisa ovoj domeni.';
+$wb['name_error_empty'] = 'Naziv hosta nije upisan.';
+$wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
+$wb['data_error_empty'] = 'Polje odredišni host je prazno';
+$wb['data_error_regex'] = 'Neispravan format odredišnog host zapisa';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_a.lng b/interface/web/dns/lib/lang/hu_dns_a.lng
index 4820079b53..9c27b79139 100644
--- a/interface/web/dns/lib/lang/hu_dns_a.lng
+++ b/interface/web/dns/lib/lang/hu_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_aaaa.lng b/interface/web/dns/lib/lang/hu_dns_aaaa.lng
index 5f261eeb5f..a532c80ca1 100644
--- a/interface/web/dns/lib/lang/hu_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_cname.lng b/interface/web/dns/lib/lang/hu_dns_cname.lng
index 9f45f5279c..36969d9984 100644
--- a/interface/web/dns/lib/lang/hu_dns_cname.lng
+++ b/interface/web/dns/lib/lang/hu_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_dname.lng b/interface/web/dns/lib/lang/hu_dns_dname.lng
new file mode 100644
index 0000000000..38a6415774
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Szerver';
+$wb['zone_txt'] = 'Zóna';
+$wb['name_txt'] = 'Hosztnév';
+$wb['type_txt'] = 'típus';
+$wb['data_txt'] = 'Target Hosztnév';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktív';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Target hostname empty';
+$wb['data_error_regex'] = 'Target hostname format invalid';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_a.lng b/interface/web/dns/lib/lang/id_dns_a.lng
index e953380090..659091bca6 100644
--- a/interface/web/dns/lib/lang/id_dns_a.lng
+++ b/interface/web/dns/lib/lang/id_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Alamat IP kosong';
 $wb['ip_error_wrong'] = 'Format Alamat IP tidak valid';
-$wb['data_error_duplicate'] = 'Record-A Ganda';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_aaaa.lng b/interface/web/dns/lib/lang/id_dns_aaaa.lng
index 3257ba193f..4b17ef0e85 100644
--- a/interface/web/dns/lib/lang/id_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/id_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Anda tidak memiliki hak untuk menambah record ke zona DNS
 $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Alamat IP kosong';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'Format Alamat IP tidak valid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_cname.lng b/interface/web/dns/lib/lang/id_dns_cname.lng
index a12d665652..4151b241db 100644
--- a/interface/web/dns/lib/lang/id_dns_cname.lng
+++ b/interface/web/dns/lib/lang/id_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Nama Host Target kosong';
 $wb['data_error_regex'] = 'Format Nama Host Target tidak valid';
-$wb['data_error_duplicate'] = 'Record-A atau Record-CNAME Ganda';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_dname.lng b/interface/web/dns/lib/lang/id_dns_dname.lng
new file mode 100644
index 0000000000..9413415394
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zona';
+$wb['name_txt'] = 'Nama Host';
+$wb['type_txt'] = 'Tipe';
+$wb['data_txt'] = 'Nama Host Target';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktif';
+$wb['limit_dns_record_txt'] = 'Jumlah maksimum record DNS untuk akun Anda telah tercapai.';
+$wb['no_zone_perm'] = 'Anda tidak memiliki hak untuk menambah record ke zona DNS ini.';
+$wb['name_error_empty'] = 'Nama Host kosong.';
+$wb['name_error_regex'] = 'Format Nama Host salah.';
+$wb['data_error_empty'] = 'Nama Host Target kosong';
+$wb['data_error_regex'] = 'Format Nama Host Target tidak valid';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_a.lng b/interface/web/dns/lib/lang/it_dns_a.lng
index 9aa9e1186f..2e79466d7f 100644
--- a/interface/web/dns/lib/lang/it_dns_a.lng
+++ b/interface/web/dns/lib/lang/it_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname  vuoto.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_aaaa.lng b/interface/web/dns/lib/lang/it_dns_aaaa.lng
index e82ada0166..76c540459d 100644
--- a/interface/web/dns/lib/lang/it_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/it_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DN
 $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
 $wb['data_error_empty'] = 'Indirizzo Ip vuoto';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_cname.lng b/interface/web/dns/lib/lang/it_dns_cname.lng
index 0732cbd72a..76cd9cd0e7 100644
--- a/interface/web/dns/lib/lang/it_dns_cname.lng
+++ b/interface/web/dns/lib/lang/it_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
 $wb['data_error_empty'] = 'Target nome host vuoto';
 $wb['data_error_regex'] = 'Target nome host formato errato';
-$wb['data_error_duplicate'] = 'A-Record o CNAME-Record duplicato';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_dname.lng b/interface/web/dns/lib/lang/it_dns_dname.lng
new file mode 100644
index 0000000000..6d7d135a01
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zona';
+$wb['name_txt'] = 'Nome Host';
+$wb['type_txt'] = 'tipo';
+$wb['data_txt'] = 'Target Nome Host';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Attivo';
+$wb['limit_dns_record_txt'] = 'Numero massimo di record DNS raggiunto per il tuo account.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'Nome Host vuoto.';
+$wb['name_error_regex'] = 'Formato errato per Nome Host.';
+$wb['data_error_empty'] = 'Target nome host vuoto';
+$wb['data_error_regex'] = 'Target nome host formato errato';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_a.lng b/interface/web/dns/lib/lang/ja_dns_a.lng
index 890183a927..a59aec7376 100644
--- a/interface/web/dns/lib/lang/ja_dns_a.lng
+++ b/interface/web/dns/lib/lang/ja_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'IPアドレスを入力してください。';
 $wb['ip_error_wrong'] = 'IPアドレスの形式が不正です。';
-$wb['data_error_duplicate'] = 'Aレコードが重複しています。';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_aaaa.lng b/interface/web/dns/lib/lang/ja_dns_aaaa.lng
index 3f10406659..cfc23b426a 100644
--- a/interface/web/dns/lib/lang/ja_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'このDNSゾーンにレコードを追加する権限が
 $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'IPアドレスを入力してください。';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IPアドレスの形式が不正です。';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_cname.lng b/interface/web/dns/lib/lang/ja_dns_cname.lng
index 2e0fd3de7a..b29ead6599 100644
--- a/interface/web/dns/lib/lang/ja_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ja_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'ターゲットのホスト名を入力してください。';
 $wb['data_error_regex'] = 'ターゲットのホスト名の形式が不正です。';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_dname.lng b/interface/web/dns/lib/lang/ja_dns_dname.lng
new file mode 100644
index 0000000000..af805c9823
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'サーバー';
+$wb['zone_txt'] = 'ゾーン';
+$wb['name_txt'] = 'ホスト名';
+$wb['type_txt'] = '種別';
+$wb['data_txt'] = 'ターゲットホスト名';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '有効';
+$wb['limit_dns_record_txt'] = 'DNSレコードが最大数に達しました。';
+$wb['no_zone_perm'] = 'このDNSゾーンにレコードを追加する権限がありません。';
+$wb['name_error_empty'] = 'ホスト名を入力してください。';
+$wb['name_error_regex'] = 'ホスト名の形式が不正です。';
+$wb['data_error_empty'] = 'ターゲットのホスト名を入力してください。';
+$wb['data_error_regex'] = 'ターゲットのホスト名の形式が不正です。';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_a.lng b/interface/web/dns/lib/lang/nl_dns_a.lng
index b70b5c9c50..45d0501ac9 100644
--- a/interface/web/dns/lib/lang/nl_dns_a.lng
+++ b/interface/web/dns/lib/lang/nl_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'De hostnaam is niet ingvuld.';
 $wb['name_error_regex'] = 'De hostnaam heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'IP-adres is niet ingvuld';
 $wb['ip_error_wrong'] = 'IP-adres formaat ongeldig';
-$wb['data_error_duplicate'] = 'Duplicaat A-Record of CNAME-record';
+$wb['data_error_duplicate'] = 'Duplicaat A, CNAME, of DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_aaaa.lng b/interface/web/dns/lib/lang/nl_dns_aaaa.lng
index 139cc71ded..e30766442d 100644
--- a/interface/web/dns/lib/lang/nl_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'U heeft geen toestemming om een record toe te voegen aan
 $wb['name_error_empty'] = 'De hostnaam is niet ingvuld';
 $wb['name_error_regex'] = 'De hostnaam heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'IP-adres is niet ingevuld';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IP-adres formaat ongeldig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_cname.lng b/interface/web/dns/lib/lang/nl_dns_cname.lng
index 00057d3f15..84b904a60e 100644
--- a/interface/web/dns/lib/lang/nl_dns_cname.lng
+++ b/interface/web/dns/lib/lang/nl_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'De hostnaam is niet ingvuld.';
 $wb['name_error_regex'] = 'De hostname heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'Doel hostnaam is niet ingvuld';
 $wb['data_error_regex'] = 'Doel hostnaam formaat ongeldig';
-$wb['data_error_duplicate'] = 'Duplicaat A-record of CNAME-record';
+$wb['data_error_duplicate'] = 'Duplicaat A, CNAME, of DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_dname.lng b/interface/web/dns/lib/lang/nl_dns_dname.lng
new file mode 100644
index 0000000000..d5f63bcc13
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostnaam';
+$wb['type_txt'] = 'type';
+$wb['data_txt'] = 'Doel Hostnaam';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Actief';
+$wb['limit_dns_record_txt'] = 'Het max. aan DNS records voor uw account is bereikt.';
+$wb['no_zone_perm'] = 'U heeft geen toestemming om een record toe te voegen aan deze DNS zone.';
+$wb['name_error_empty'] = 'De hostnaam is niet ingvuld.';
+$wb['name_error_regex'] = 'De hostname heeft een onjuist formaat.';
+$wb['data_error_empty'] = 'Doel hostnaam is niet ingvuld';
+$wb['data_error_regex'] = 'Doel hostnaam formaat ongeldig';
+$wb['data_error_duplicate'] = 'Duplicaat A-record, CNAME-record of DNAME-record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_a.lng b/interface/web/dns/lib/lang/pl_dns_a.lng
index 88adb2306e..59ef056e53 100644
--- a/interface/web/dns/lib/lang/pl_dns_a.lng
+++ b/interface/web/dns/lib/lang/pl_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Adres IP jest pusty.';
 $wb['ip_error_wrong'] = 'Adres IP ma niepoprawny format.';
-$wb['data_error_duplicate'] = 'Duplikat wpisu A.';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_aaaa.lng b/interface/web/dns/lib/lang/pl_dns_aaaa.lng
index 86d93fe71f..debb636d7e 100644
--- a/interface/web/dns/lib/lang/pl_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nie masz uprawnień, aby dodać nowy wpis w tej strefie D
 $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Adres IP jest pusty.';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'Adres IP ma niepoprawny format.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_cname.lng b/interface/web/dns/lib/lang/pl_dns_cname.lng
index 8153741f91..bee2839ae0 100644
--- a/interface/web/dns/lib/lang/pl_dns_cname.lng
+++ b/interface/web/dns/lib/lang/pl_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Docelowa nazwa serwera jest pusta.';
 $wb['data_error_regex'] = 'Docelowa nazwa serwera ma niepoprawny format.';
-$wb['data_error_duplicate'] = 'Zdublowany rekord A lub CNAME.';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_dname.lng b/interface/web/dns/lib/lang/pl_dns_dname.lng
new file mode 100644
index 0000000000..d4fb5ab8c8
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Serwer';
+$wb['zone_txt'] = 'Strefa';
+$wb['name_txt'] = 'Nazwa serwera';
+$wb['type_txt'] = 'typ';
+$wb['data_txt'] = 'Docelowa nazwa serwera';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktywne';
+$wb['limit_dns_record_txt'] = 'Maksymalna ilość wpisów DNS dla Twojego konta została przekroczona.';
+$wb['no_zone_perm'] = 'Nie masz uprawnień, aby dodać nowy wpis w tej strefie DNS.';
+$wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
+$wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
+$wb['data_error_empty'] = 'Docelowa nazwa serwera jest pusta.';
+$wb['data_error_regex'] = 'Docelowa nazwa serwera ma niepoprawny format.';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_a.lng b/interface/web/dns/lib/lang/pt_dns_a.lng
index 37e949b431..0051c476bc 100644
--- a/interface/web/dns/lib/lang/pt_dns_a.lng
+++ b/interface/web/dns/lib/lang/pt_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname em branco.';
 $wb['name_error_regex'] = 'Hostname tem um formato inválido.';
 $wb['data_error_empty'] = 'Endereço-IP em branco';
 $wb['ip_error_wrong'] = 'Endereço-IP formato inválido';
-$wb['data_error_duplicate'] = 'Registo-A duplicado';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_aaaa.lng b/interface/web/dns/lib/lang/pt_dns_aaaa.lng
index 9fc3798dc8..29da278ec4 100644
--- a/interface/web/dns/lib/lang/pt_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Não tem permissão para adicionar registos a está zona
 $wb['name_error_empty'] = 'O Hostname está em branco.';
 $wb['name_error_regex'] = 'O Hostname está com formato inválido.';
 $wb['data_error_empty'] = 'Endereço-IP em branco';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'Endereço-IP com formato inválido';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_cname.lng b/interface/web/dns/lib/lang/pt_dns_cname.lng
index 6d2c7fbba4..06782a96c4 100644
--- a/interface/web/dns/lib/lang/pt_dns_cname.lng
+++ b/interface/web/dns/lib/lang/pt_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname está em branco.';
 $wb['name_error_regex'] = 'O hostname está em um formato inválido.';
 $wb['data_error_empty'] = 'Hostname de destino está em branco';
 $wb['data_error_regex'] = 'O hostname de destino está em um formato inválido.';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_dname.lng b/interface/web/dns/lib/lang/pt_dns_dname.lng
new file mode 100644
index 0000000000..124b9e3000
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Servidor';
+$wb['zone_txt'] = 'Zona';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'tipo';
+$wb['data_txt'] = 'Hostname de Destino';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Activo';
+$wb['limit_dns_record_txt'] = 'O número máximo de registos DNS para a conta foi atingido.';
+$wb['no_zone_perm'] = 'Não tem permissão para adicionar registos a está zona DNS.';
+$wb['name_error_empty'] = 'Hostname está em branco.';
+$wb['name_error_regex'] = 'O hostname está em um formato inválido.';
+$wb['data_error_empty'] = 'Hostname de destino está em branco';
+$wb['data_error_regex'] = 'O hostname de destino está em um formato inválido.';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_a.lng b/interface/web/dns/lib/lang/ro_dns_a.lng
index b8c2522432..556dbea115 100644
--- a/interface/web/dns/lib/lang/ro_dns_a.lng
+++ b/interface/web/dns/lib/lang/ro_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname necompletat';
 $wb['name_error_regex'] = 'Hostname format gresit';
 $wb['data_error_empty'] = 'IP-Adresa vid';
 $wb['ip_error_wrong'] = 'IP-Adresa format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_aaaa.lng b/interface/web/dns/lib/lang/ro_dns_aaaa.lng
index 3d634780f1..03f18f18da 100644
--- a/interface/web/dns/lib/lang/ro_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_cname.lng b/interface/web/dns/lib/lang/ro_dns_cname.lng
index a37533fbdc..f023134100 100644
--- a/interface/web/dns/lib/lang/ro_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ro_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Rubrica hostname necompletata';
 $wb['name_error_regex'] = 'Hostname cu format gresit';
 $wb['data_error_empty'] = 'Hostname tinta necompletat';
 $wb['data_error_regex'] = 'Hostname tinta cu format gresit';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_dname.lng b/interface/web/dns/lib/lang/ro_dns_dname.lng
new file mode 100644
index 0000000000..c76d2587a1
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zone';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'tip';
+$wb['data_txt'] = 'Hostname  Tinta';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Activ';
+$wb['limit_dns_record_txt'] = 'Numarul maxim de inregistrari DNS a fost atins pe contul dumneavoastra .';
+$wb['no_zone_perm'] = 'NU aveti permisiunea de a adauga inregistrari la aceasta zona  DNS ';
+$wb['name_error_empty'] = 'Rubrica hostname necompletata';
+$wb['name_error_regex'] = 'Hostname cu format gresit';
+$wb['data_error_empty'] = 'Hostname tinta necompletat';
+$wb['data_error_regex'] = 'Hostname tinta cu format gresit';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_a.lng b/interface/web/dns/lib/lang/ru_dns_a.lng
index 0af3014657..2a55aa4d64 100644
--- a/interface/web/dns/lib/lang/ru_dns_a.lng
+++ b/interface/web/dns/lib/lang/ru_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'IP-адрес пустой';
 $wb['ip_error_wrong'] = 'Неправильный формат IP-адреса';
-$wb['data_error_duplicate'] = 'Дубликат записи';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_aaaa.lng b/interface/web/dns/lib/lang/ru_dns_aaaa.lng
index e8a02443d3..a1b63edf53 100644
--- a/interface/web/dns/lib/lang/ru_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту за
 $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Неправильный формат имени хоста.';
 $wb['data_error_empty'] = 'Пустой IP-адрес';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'Неправильный формат IP-адреса';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_cname.lng b/interface/web/dns/lib/lang/ru_dns_cname.lng
index e7a0abcf3f..cb20700fe6 100644
--- a/interface/web/dns/lib/lang/ru_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ru_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'Целевое имя узла пустое';
 $wb['data_error_regex'] = 'Целевое имя узла имеет неправильный формат';
-$wb['data_error_duplicate'] = 'Дубликат записи';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_dname.lng b/interface/web/dns/lib/lang/ru_dns_dname.lng
new file mode 100644
index 0000000000..8fbddd6799
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Сервер';
+$wb['zone_txt'] = 'Зона';
+$wb['name_txt'] = 'Имя';
+$wb['type_txt'] = 'Тип';
+$wb['data_txt'] = 'Имя целевого хоста';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Активно';
+$wb['limit_dns_record_txt'] = 'Максимальное число DNS-записей для вашей учетной записи достигнуто.';
+$wb['no_zone_perm'] = 'У Вас нет прав добавлять эту запись.';
+$wb['name_error_empty'] = 'Имя пустое.';
+$wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
+$wb['data_error_empty'] = 'Целевое имя узла пустое';
+$wb['data_error_regex'] = 'Целевое имя узла имеет неправильный формат';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_a.lng b/interface/web/dns/lib/lang/se_dns_a.lng
index 68e40da5e7..c191ff19d3 100644
--- a/interface/web/dns/lib/lang/se_dns_a.lng
+++ b/interface/web/dns/lib/lang/se_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_aaaa.lng b/interface/web/dns/lib/lang/se_dns_aaaa.lng
index 3d634780f1..03f18f18da 100644
--- a/interface/web/dns/lib/lang/se_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/se_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_cname.lng b/interface/web/dns/lib/lang/se_dns_cname.lng
index b7ceb5d9c9..6530e927f6 100644
--- a/interface/web/dns/lib/lang/se_dns_cname.lng
+++ b/interface/web/dns/lib/lang/se_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_dname.lng b/interface/web/dns/lib/lang/se_dns_dname.lng
new file mode 100644
index 0000000000..0d42cac595
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zon';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'typ';
+$wb['data_txt'] = 'Target Hostname';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktiv';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['name_error_empty'] = 'The hostname is empty.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['data_error_empty'] = 'Target hostname empty';
+$wb['data_error_regex'] = 'Target hostname format invalid';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_a.lng b/interface/web/dns/lib/lang/sk_dns_a.lng
index d1fff2cdea..3f048c2857 100644
--- a/interface/web/dns/lib/lang/sk_dns_a.lng
+++ b/interface/web/dns/lib/lang/sk_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'IP Adresa je prázdna';
 $wb['ip_error_wrong'] = 'IP Adresa má zlý formát.';
-$wb['data_error_duplicate'] = 'Duplikátny A-záznam';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_aaaa.lng b/interface/web/dns/lib/lang/sk_dns_aaaa.lng
index 246ac1dd23..f719fe6bc2 100644
--- a/interface/web/dns/lib/lang/sk_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnenie Pridať záznam do tejto zóny DNS.';
 $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'IP-Adresa prázdna';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IP-Adresa má zlý formát';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_cname.lng b/interface/web/dns/lib/lang/sk_dns_cname.lng
index 1f415fac3b..a6a8685c8f 100644
--- a/interface/web/dns/lib/lang/sk_dns_cname.lng
+++ b/interface/web/dns/lib/lang/sk_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'Cieľový hostname je prázdny';
 $wb['data_error_regex'] = 'Target hostname má zlý format';
-$wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_dname.lng b/interface/web/dns/lib/lang/sk_dns_dname.lng
new file mode 100644
index 0000000000..c155285234
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Server';
+$wb['zone_txt'] = 'Zóna';
+$wb['name_txt'] = 'Hostname';
+$wb['type_txt'] = 'typ';
+$wb['data_txt'] = 'Cieľový Hostname';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktivovať';
+$wb['limit_dns_record_txt'] = 'Max. počet záznamov DNS pre váš účet je dosiahnutý.';
+$wb['no_zone_perm'] = 'Nemáte oprávnenie Pridať záznam do tejto zóny DNS.';
+$wb['name_error_empty'] = 'Hostname je prázdny.';
+$wb['name_error_regex'] = 'Hostname má zlý formát.';
+$wb['data_error_empty'] = 'Cieľový hostname je prázdny';
+$wb['data_error_regex'] = 'Target hostname má zlý format';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_a.lng b/interface/web/dns/lib/lang/tr_dns_a.lng
index 905ff04744..34eba9c0b5 100644
--- a/interface/web/dns/lib/lang/tr_dns_a.lng
+++ b/interface/web/dns/lib/lang/tr_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
-$wb['data_error_duplicate'] = 'Bu A DNS kaydı zaten var';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 $wb['ip_error_wrong'] = 'IP adresi biçimi geçersiz';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_aaaa.lng b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
index d75ff802bb..80a4c64d51 100644
--- a/interface/web/dns/lib/lang/tr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adının biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
-$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
 $wb['ip_error_wrong'] = 'IP adresinin biçimi geçersiz';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_cname.lng b/interface/web/dns/lib/lang/tr_dns_cname.lng
index fa9a497e12..008e4962eb 100644
--- a/interface/web/dns/lib/lang/tr_dns_cname.lng
+++ b/interface/web/dns/lib/lang/tr_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Hedef sunucu adı boş olamaz';
 $wb['data_error_regex'] = 'Hedef sunucu adı biçimi geçersiz';
-$wb['data_error_duplicate'] = 'Çift A ya da CNAME kaydı var.';
+$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_dname.lng b/interface/web/dns/lib/lang/tr_dns_dname.lng
new file mode 100644
index 0000000000..cc8ce3005c
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = 'Sunucu';
+$wb['zone_txt'] = 'Bölge';
+$wb['name_txt'] = 'Sunucu Adı';
+$wb['type_txt'] = 'Tür';
+$wb['data_txt'] = 'Hedef Sunucu Adı';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
+$wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
+$wb['data_error_empty'] = 'Hedef sunucu adı boş olamaz';
+$wb['data_error_regex'] = 'Hedef sunucu adı biçimi geçersiz';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+?>
-- 
GitLab


From 59f88481a0686f1c4b0299edc795dc48baa0ecbb Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 14 Jun 2020 15:08:43 +0200
Subject: [PATCH 395/571] Add DNAME record (#1848)

---
 .../sql/incremental/upd_dev_collection.sql    |   4 +-
 install/sql/ispconfig3.sql                    |   2 +-
 interface/lib/classes/remote.d/dns.inc.php    |  22 +++
 interface/web/dns/dns_a_edit.php              |   2 +-
 interface/web/dns/dns_aaaa_edit.php           |   2 +-
 interface/web/dns/dns_cname_edit.php          |   2 +-
 interface/web/dns/dns_dname_edit.php          |  60 ++++++
 interface/web/dns/form/dns_dname.tform.php    | 178 ++++++++++++++++++
 interface/web/dns/lib/remote.conf.php         |   1 +
 interface/web/dns/list/dns_a.list.php         |   2 +-
 interface/web/dns/templates/dns_a_list.htm    |   1 +
 .../web/dns/templates/dns_dname_edit.htm      |  25 +++
 server/conf/bind_pri.domain.master            |   3 +
 13 files changed, 297 insertions(+), 7 deletions(-)
 create mode 100644 interface/web/dns/dns_dname_edit.php
 create mode 100644 interface/web/dns/form/dns_dname.tform.php
 create mode 100644 interface/web/dns/templates/dns_dname_edit.htm

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 519dda220f..8e924a62b0 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -33,5 +33,5 @@ ALTER TABLE `mail_user` ADD `disablequota-status` ENUM('n','y') CHARACTER SET ut
 -- add disableindexer-worker for solr search
 ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `disablequota-status`;
 
--- add SSHFP record
-ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME', 'CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') NULL DEFAULT NULL AFTER `name`;
+-- add SSHFP and DNAME record
+ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME','DNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') NULL DEFAULT NULL AFTER `name`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index ef76a370d4..c54f0ac345 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -488,7 +488,7 @@ CREATE TABLE `dns_rr` (
   `server_id` int(11) NOT NULL default '1',
   `zone` int(11) unsigned NOT NULL DEFAULT '0',
   `name` varchar(255) NOT NULL DEFAULT '',
-  `type` enum('A','AAAA','ALIAS','CNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') default NULL,
+  `type` enum('A','AAAA','ALIAS','CNAME','DNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') default NULL,
   `data` TEXT NOT NULL,
   `aux` int(11) unsigned NOT NULL default '0',
   `ttl` int(11) unsigned NOT NULL default '3600',
diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 817953a5c7..4bf6906147 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -472,6 +472,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_cname_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'DNAME');
+	}
+
+	//* Add a record
+	public function dns_dname_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'DNAME');
+	}
+
+	//* Update a record
+	public function dns_dname_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'DNAME');
+	}
+
+	//* Delete a record
+	public function dns_dname_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'DNAME');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_hinfo_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'HINFO');
diff --git a/interface/web/dns/dns_a_edit.php b/interface/web/dns/dns_a_edit.php
index 595ebcc92c..19cb7d1c01 100644
--- a/interface/web/dns/dns_a_edit.php
+++ b/interface/web/dns/dns_a_edit.php
@@ -48,7 +48,7 @@ class page_action extends dns_page_action {
 	protected function checkDuplicate() {
 		global $app;
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?) OR (type = 'DNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
 		if($tmp['number'] > 0) return true;
 		return false;
 	}
diff --git a/interface/web/dns/dns_aaaa_edit.php b/interface/web/dns/dns_aaaa_edit.php
index 780fbcc80e..7d6972854f 100644
--- a/interface/web/dns/dns_aaaa_edit.php
+++ b/interface/web/dns/dns_aaaa_edit.php
@@ -48,7 +48,7 @@ class page_action extends dns_page_action {
 	protected function checkDuplicate() {
 		global $app;
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'AAAA' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'AAAA' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?) OR (type = 'DNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
 		if($tmp['number'] > 0) return true;
 		return false;
 	}
diff --git a/interface/web/dns/dns_cname_edit.php b/interface/web/dns/dns_cname_edit.php
index 1f17169e60..4013b72ea8 100644
--- a/interface/web/dns/dns_cname_edit.php
+++ b/interface/web/dns/dns_cname_edit.php
@@ -48,7 +48,7 @@ class page_action extends dns_page_action {
 	protected function checkDuplicate() {
 		global $app;
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'AAAA' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'AAAA' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?) OR (type = 'DNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
 		if($tmp['number'] > 0) return true;
 		return false;
 	}
diff --git a/interface/web/dns/dns_dname_edit.php b/interface/web/dns/dns_dname_edit.php
new file mode 100644
index 0000000000..c33c0cce71
--- /dev/null
+++ b/interface/web/dns/dns_dname_edit.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/dns_dname.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+require_once './dns_edit_base.php';
+
+// Loading classes
+class page_action extends dns_page_action {
+
+	protected function checkDuplicate() {
+		global $app;
+		//* Check for duplicates where IP and hostname are the same
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'AAAA' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?) OR (type = 'DNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		if($tmp['number'] > 0) return true;
+		return false;
+	}
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/dns/form/dns_dname.tform.php b/interface/web/dns/form/dns_dname.tform.php
new file mode 100644
index 0000000000..c78f2dcae0
--- /dev/null
+++ b/interface/web/dns/form/dns_dname.tform.php
@@ -0,0 +1,178 @@
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+global $app;
+
+$form["title"]    = "DNS DNAME";
+$form["description"]  = "";
+$form["name"]    = "dns_dname";
+$form["action"]   = "dns_dname_edit.php";
+$form["db_table"]  = "dns_rr";
+$form["db_table_idx"] = "id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "dns";
+$form["list_default"] = "dns_a_list.php";
+$form["auth"]   = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['dns'] = array (
+	'title'  => "DNS DNAME",
+	'width'  => 100,
+	'template'  => "templates/dns_dname_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'zone' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => @$app->functions->intval($_REQUEST["zone"]),
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\.\-\*\_]{0,255}$/',
+					'errmsg'=> 'name_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'type' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'DNAME',
+			'value'  => '',
+			'width'  => '5',
+			'maxlength' => '5'
+		),
+		'data' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
+					'errmsg'=> 'data_error_empty'),
+				1 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\.\-\_]{1,255}$/',
+					'errmsg'=> 'data_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		/*
+		'aux' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'default'	=> '0',
+			'value'		=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10'
+		),
+		*/
+		'ttl' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'validators' => array (  0 => array ( 'type' => 'RANGE',
+					'range' => '60:',
+					'errmsg'=> 'ttl_range_error'),
+			),
+			'default' => '3600',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'Y',
+			'value'  => array(0 => 'N', 1 => 'Y')
+		),
+		'stamp' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'serial' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+
+
+?>
diff --git a/interface/web/dns/lib/remote.conf.php b/interface/web/dns/lib/remote.conf.php
index c87296a8c9..fb52f8973e 100644
--- a/interface/web/dns/lib/remote.conf.php
+++ b/interface/web/dns/lib/remote.conf.php
@@ -6,6 +6,7 @@ $function_list['dns_aaaa_get,dns_aaaa_add,dns_aaaa_update,dns_aaaa_delete'] = 'D
 $function_list['dns_alias_get,dns_alias_add,dns_alias_update,dns_alias_delete'] = 'DNS alias functions';
 $function_list['dns_caa_get,dns_caa_add,dns_caa_update,dns_caa_delete'] = 'DNS caa functions';
 $function_list['dns_cname_get,dns_cname_add,dns_cname_update,dns_cname_delete'] = 'DNS cname functions';
+$function_list['dns_dname_get,dns_dname_add,dns_dname_update,dns_dname_delete'] = 'DNS dname functions';
 $function_list['dns_ds_get,dns_ds_add,dns_ds_update,dns_ds_delete'] = 'DNS ds functions';
 $function_list['dns_hinfo_get,dns_hinfo_add,dns_hinfo_update,dns_hinfo_delete'] = 'DNS hinfo functions';
 $function_list['dns_loc_get,dns_loc_add,dns_loc_update,dns_loc_delete'] = 'DNS loc functions';
diff --git a/interface/web/dns/list/dns_a.list.php b/interface/web/dns/list/dns_a.list.php
index 007f76dfb3..169ec4af06 100644
--- a/interface/web/dns/list/dns_a.list.php
+++ b/interface/web/dns/list/dns_a.list.php
@@ -132,7 +132,7 @@ $liste["item"][] = array( 'field'  => "type",
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NAPTR'=>'NAPTR', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'SSHFP'=>'SSHFP', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
+	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DNAME'=>'DNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NAPTR'=>'NAPTR', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'SSHFP'=>'SSHFP', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
 
 
 ?>
diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm
index 46fb103b7d..da8a8aaf06 100644
--- a/interface/web/dns/templates/dns_a_list.htm
+++ b/interface/web/dns/templates/dns_a_list.htm
@@ -22,6 +22,7 @@
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_alias_edit.php?zone={tmpl_var name='parent_id'}">ALIAS</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_caa_edit.php?zone={tmpl_var name='parent_id'}">CAA</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_cname_edit.php?zone={tmpl_var name='parent_id'}">CNAME</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_dname_edit.php?zone={tmpl_var name='parent_id'}">DNAME</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_dkim_edit.php?zone={tmpl_var name='parent_id'}">DKIM</button>
 			<button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_ds_edit.php?zone={tmpl_var name='parent_id'}">DS</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_dmarc_edit.php?zone={tmpl_var name='parent_id'}">DMARC</button>
diff --git a/interface/web/dns/templates/dns_dname_edit.htm b/interface/web/dns/templates/dns_dname_edit.htm
new file mode 100644
index 0000000000..32a1a396dd
--- /dev/null
+++ b/interface/web/dns/templates/dns_dname_edit.htm
@@ -0,0 +1,25 @@
+<div class="form-group">
+    <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+    <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+<div class="form-group">
+    <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+    <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+<div class="form-group">
+    <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+    <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+    <div class="col-sm-9">
+        {tmpl_var name='active'}
+    </div>
+</div>
+
+
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<input type="hidden" name="zone" value="{tmpl_var name='zone'}">
+<input type="hidden" name="type" value="{tmpl_var name='type'}">
+
+<div class="clear"><div class="right">
+<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_dname_edit.php">{tmpl_var name='btn_save_txt'}</button>
+<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+</div></div>
diff --git a/server/conf/bind_pri.domain.master b/server/conf/bind_pri.domain.master
index 9635e445f7..e5af0ca311 100644
--- a/server/conf/bind_pri.domain.master
+++ b/server/conf/bind_pri.domain.master
@@ -26,6 +26,9 @@ $TTL        {tmpl_var name='ttl'}
 <tmpl_if name="type" op='==' value='CNAME'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME      {tmpl_var name='data'}
 </tmpl_if>
+<tmpl_if name="type" op='==' value='DNAME'>
+{tmpl_var name='name'} {tmpl_var name='ttl'}      DNAME      {tmpl_var name='data'}
+</tmpl_if>
 <tmpl_if name="type" op='==' value='DS'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      DS         {tmpl_var name='data'}
 </tmpl_if>
-- 
GitLab


From 6f7cff40f73ff9c59b78ca6a6ea3a0f98d674b3e Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 14 Jun 2020 17:08:25 +0200
Subject: [PATCH 396/571] Add get template function (#3635)

---
 interface/lib/classes/remote.d/dns.inc.php | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 4bf6906147..9b5e6b74ad 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -736,6 +736,24 @@ class remoting_dns extends remoting {
 
 
 
+  //* Get All DNS Zones Templates by etruel
+	public function dns_templatezone_get_all($session_id) {
+		global $app, $conf;
+	  if(!$this->checkPerm($session_id, 'dns_templatezone_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+	  }
+		$sql ="SELECT * FROM dns_template";
+		$result = $app->db->queryAllRecords($sql);
+		if(isset($result)) {
+			return $result;
+		}
+		else {
+			this->server->fault('template_id_error', 'There is no DNS templates.');
+			return false;
+		}
+	}
+
 	/**
 	 *  Get all dns records for a zone
 	 * @param  int  session id
-- 
GitLab


From 52034380b7374d0972c0323444c74ad25de3d9fe Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 14 Jun 2020 20:12:14 +0200
Subject: [PATCH 397/571] Fix column amount (#5637)

---
 interface/web/dns/templates/dns_slave_list.htm | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/interface/web/dns/templates/dns_slave_list.htm b/interface/web/dns/templates/dns_slave_list.htm
index 799f14ba28..e59470a191 100644
--- a/interface/web/dns/templates/dns_slave_list.htm
+++ b/interface/web/dns/templates/dns_slave_list.htm
@@ -21,12 +21,12 @@
         </div>
         </tmpl_if>
         <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
-            
+
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_slave_edit.php">{tmpl_var name="add_new_record_txt"}</button>
-            
-        
 
-    
+
+
+
         <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
             <div class="table-wrapper marginTop15">
 <table class="table">
@@ -62,16 +62,14 @@
                 </tmpl_loop>
                 <tmpl_unless name="records">
                     <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td colspan="5">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                        <td colspan="4">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                     </tr>
                 </tmpl_unless>
                 </tbody>
                 <tfoot>
                 <tr>
-                    <td colspan="6"><tmpl_var name="paging"></td>
+                    <td colspan="4"><tmpl_var name="paging"></td>
                 </tr>
                 </tfoot>
             </table>
 </div>
-        
-    
\ No newline at end of file
-- 
GitLab


From 269542cada42933dc374a6ee1baa175bf7d5abf2 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 14 Jun 2020 21:46:21 +0200
Subject: [PATCH 398/571] Fix records page width (#5580)

---
 .../web/themes/default/assets/stylesheets/ispconfig.css     | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css
index fb1c8e8d18..534d2390f8 100644
--- a/interface/web/themes/default/assets/stylesheets/ispconfig.css
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -1,5 +1,6 @@
 body {
-  overflow-y: scroll; }
+  overflow-y: scroll;
+  overflow-x: hidden; }
 
 .left {
   float: left; }
@@ -421,7 +422,7 @@ ul.gs-resultbox li.gs-cheader p.gs-cheader-limit {
 ul.df-resultbox li.df-cdata img,
 ul.gs-resultbox li.gs-cdata img {
   margin-right: 12px; }
-    
+
 ul.df-resultbox li.df-cdata p span.df-cdata-title,
 ul.gs-resultbox li.gs-cdata p span.gs-cdata-title {
   font-weight: bold; }
@@ -798,4 +799,3 @@ span.notification_text {
 #apache_directives, #nginx_directives, #proxy_directives {
 	font-family: Consolas, "Courier New", Courier, monospace;
 }
-
-- 
GitLab


From 2e51c20a32cece66061ac3eaa060593b485a332e Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 14 Jun 2020 22:21:23 +0200
Subject: [PATCH 399/571] Fix checkbox (#4592)

---
 interface/web/dns/templates/dns_dmarc_edit.htm | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/interface/web/dns/templates/dns_dmarc_edit.htm b/interface/web/dns/templates/dns_dmarc_edit.htm
index 668b29f8df..4e966d36ed 100644
--- a/interface/web/dns/templates/dns_dmarc_edit.htm
+++ b/interface/web/dns/templates/dns_dmarc_edit.htm
@@ -129,7 +129,7 @@
 					<select name="dmarc_sp" id="dmarc_sp" class="form-control">{tmpl_var name='dmarc_sp'}</select>
 				</div>
             </div>
-            
+
 			<div class="form-group">
                 <label for="ttl" class="col-sm-2 control-label">{tmpl_var name='ttl_txt'}</label>
                 <div class="col-sm-3">
@@ -140,7 +140,7 @@
             <div class="form-group">
                 <label class="col-sm-2 control-label">{tmpl_var name='active_txt'}</label>
                 <div class="col-sm-3">
-					{tmpl_var name='active'}
+                  <input type="checkbox" value="1" id="active" name="active" {tmpl_var name='active'} />
                 </div>
             </div>
 
@@ -149,9 +149,8 @@
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
         <input type="hidden" name="name" value="{tmpl_var name='name'}">
             </div>
-            
+
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_dmarc_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
-
-- 
GitLab


From a193d8ea8f047322606608499d8b06f90cc18516 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 00:05:23 +0200
Subject: [PATCH 400/571] Add read only serial (#2732)

---
 interface/web/dns/templates/dns_soa_edit.htm | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/interface/web/dns/templates/dns_soa_edit.htm b/interface/web/dns/templates/dns_soa_edit.htm
index ce8154c857..c34e8a3416 100644
--- a/interface/web/dns/templates/dns_soa_edit.htm
+++ b/interface/web/dns/templates/dns_soa_edit.htm
@@ -119,29 +119,33 @@
                 <label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='update_acl_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="update_acl" id="update_acl" value="{tmpl_var name='update_acl'}" class="form-control" /></div></div>
             </tmpl_if>
+						<div class="form-group">
+              <label for="serial" class="col-sm-3 control-label">{tmpl_var name='serial_txt'}</label>
+              <div class="col-sm-9"><textarea readonly="true" rows="1" id="serial" name="serial" class="form-control">{tmpl_var name='serial'}</textarea></div>
+			      </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
                 <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        
+
 <tmpl_if name="show_dnssec">
 		    <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='dnssec_wanted_txt'}</label>
                 <div class="col-sm-9">
                     {tmpl_var name='dnssec_wanted'}<br /><small>({tmpl_var name='dnssec_wanted_info'})</small>
-                </div> 
+                </div>
             </div>
             <div class="form-group">
                 <label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='dnssec_info_txt'}</label>
                 <div class="col-sm-9"><textarea readonly="true" rows="5" id="dnssec_info" name="dnssec_info" class="form-control">{tmpl_var name='dnssec_info'}</textarea></div>
 			</div>
-</tmpl_if>            
+</tmpl_if>
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input name="serial" type="hidden" value="{tmpl_var name='serial'}">
-            
+
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_soa_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-- 
GitLab


From 32795453d002b4bf20f1d8a60f8702dc3525bd29 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 13:05:11 +0200
Subject: [PATCH 401/571] Add empty option for domain module (#4305)

---
 interface/web/dns/dns_slave_edit.php          |  2 +-
 interface/web/dns/dns_soa_edit.php            |  2 +-
 interface/web/dns/dns_wizard.php              |  2 +-
 .../web/mail/mail_domain_catchall_edit.php    |  2 +-
 interface/web/mail/mail_domain_edit.php       |  2 +-
 interface/web/mail/mail_mailinglist_edit.php  |  2 +-
 interface/web/mail/xmpp_domain_edit.php       |  2 +-
 interface/web/sites/web_childdomain_edit.php  |  2 +-
 interface/web/sites/web_vhost_domain_edit.php | 92 +++++++++----------
 9 files changed, 54 insertions(+), 54 deletions(-)

diff --git a/interface/web/dns/dns_slave_edit.php b/interface/web/dns/dns_slave_edit.php
index 117b101b87..020a044593 100644
--- a/interface/web/dns/dns_slave_edit.php
+++ b/interface/web/dns/dns_slave_edit.php
@@ -124,7 +124,7 @@ class page_action extends tform_actions {
 			 * The domain-module is in use.
 			*/
 			$domains = $app->tools_sites->getDomainModuleDomains("dns_slave", $this->dataRecord["origin"]);
-			$domain_select = '';
+			$domain_select = "<option value=''></option>";
 			if(is_array($domains) && sizeof($domains) > 0) {
 				/* We have domains in the list, so create the drop-down-list */
 				foreach( $domains as $domain) {
diff --git a/interface/web/dns/dns_soa_edit.php b/interface/web/dns/dns_soa_edit.php
index 9b36daee15..ec5ba67c79 100644
--- a/interface/web/dns/dns_soa_edit.php
+++ b/interface/web/dns/dns_soa_edit.php
@@ -192,7 +192,7 @@ class page_action extends tform_actions {
 		 * The domain-module is in use.
 		*/
 		$domains = $app->tools_sites->getDomainModuleDomains("dns_soa", $this->dataRecord["origin"]);
-		$domain_select = '';
+		$domain_select = "<option value=''></option>";
 		if(is_array($domains) && sizeof($domains) > 0) {
 			/* We have domains in the list, so create the drop-down-list */
 			foreach( $domains as $domain) {
diff --git a/interface/web/dns/dns_wizard.php b/interface/web/dns/dns_wizard.php
index 17d767550c..a02ee0a80f 100644
--- a/interface/web/dns/dns_wizard.php
+++ b/interface/web/dns/dns_wizard.php
@@ -197,7 +197,7 @@ if ($domains_settings['use_domain_module'] == 'y') {
 	 * The domain-module is in use.
 	*/
 	$domains = $app->tools_sites->getDomainModuleDomains("dns_soa", 'domain');
-	$domain_select = '';
+	$domain_select = "<option value=''></option>";
 	if(is_array($domains) && sizeof($domains) > 0) {
 		/* We have domains in the list, so create the drop-down-list */
 		foreach( $domains as $domain) {
diff --git a/interface/web/mail/mail_domain_catchall_edit.php b/interface/web/mail/mail_domain_catchall_edit.php
index 4ef18d45e7..1f37164224 100644
--- a/interface/web/mail/mail_domain_catchall_edit.php
+++ b/interface/web/mail/mail_domain_catchall_edit.php
@@ -77,7 +77,7 @@ class page_action extends tform_actions {
 		// Getting Domains of the user
 		$sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r');
 		$domains = $app->db->queryAllRecords($sql);
-		$domain_select = '';
+		$domain_select = "<option value=''></option>";
 		if(is_array($domains)) {
 			foreach( $domains as $domain) {
 				$domain['domain'] = $app->functions->idn_decode($domain['domain']);
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index 28d4f40917..51d55ef2de 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -159,7 +159,7 @@ class page_action extends tform_actions {
 			 * The domain-module is in use.
 			*/
 			$domains = $app->tools_sites->getDomainModuleDomains("mail_domain", $this->dataRecord["domain"]);
-			$domain_select = '';
+			$domain_select = "<option value=''></option>";
 			if(is_array($domains) && sizeof($domains) > 0) {
 				/* We have domains in the list, so create the drop-down-list */
 				foreach( $domains as $domain) {
diff --git a/interface/web/mail/mail_mailinglist_edit.php b/interface/web/mail/mail_mailinglist_edit.php
index 57d9c77f2e..913611323d 100644
--- a/interface/web/mail/mail_mailinglist_edit.php
+++ b/interface/web/mail/mail_mailinglist_edit.php
@@ -112,7 +112,7 @@ class page_action extends tform_actions {
 		// Getting Domains of the user
 		$sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
 		$domains = $app->db->queryAllRecords($sql);
-		$domain_select = '';
+		$domain_select = "<option value=''></option>";
 		if(is_array($domains)) {
 			foreach( $domains as $domain) {
 				$selected = ($domain["domain"] == $this->dataRecord["domain"])?'SELECTED':'';
diff --git a/interface/web/mail/xmpp_domain_edit.php b/interface/web/mail/xmpp_domain_edit.php
index a89d27c452..500757c159 100644
--- a/interface/web/mail/xmpp_domain_edit.php
+++ b/interface/web/mail/xmpp_domain_edit.php
@@ -182,7 +182,7 @@ class page_action extends tform_actions {
 			 * The domain-module is in use.
 			*/
 			$domains = $app->tools_sites->getDomainModuleDomains("xmpp_domain", $this->dataRecord["domain"]);
-			$domain_select = '';
+			$domain_select = "<option value=''></option>";
 			if(is_array($domains) && sizeof($domains) > 0) {
 				/* We have domains in the list, so create the drop-down-list */
 				foreach( $domains as $domain) {
diff --git a/interface/web/sites/web_childdomain_edit.php b/interface/web/sites/web_childdomain_edit.php
index 2da58a4661..019057b3be 100644
--- a/interface/web/sites/web_childdomain_edit.php
+++ b/interface/web/sites/web_childdomain_edit.php
@@ -106,7 +106,7 @@ class page_action extends tform_actions {
 			 * The domain-module is in use.
 			*/
 			$domains = $app->tools_sites->getDomainModuleDomains($this->_vhostdomain_type == 'subdomain' ? null : "web_domain");
-			$domain_select = '';
+			$domain_select = "<option value=''></option>";
 			$selected_domain = '';
 			if(is_array($domains) && sizeof($domains) > 0) {
 				/* We have domains in the list, so create the drop-down-list */
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 81415f194a..82da18ae1e 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -79,7 +79,7 @@ class page_action extends tform_actions {
 
 		$_SESSION['s']['var']['vhostdomain_type'] = $show_type;
 		$this->_vhostdomain_type = $show_type;
-		
+
 		parent::onLoad();
 	}
 
@@ -143,7 +143,7 @@ class page_action extends tform_actions {
 		$read_limits = array('limit_cgi', 'limit_ssi', 'limit_perl', 'limit_ruby', 'limit_python', 'force_suexec', 'limit_hterror', 'limit_wildcard', 'limit_ssl', 'limit_ssl_letsencrypt', 'limit_directive_snippets');
 
 		if($this->_vhostdomain_type != 'domain') $parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ?", @$this->dataRecord["parent_domain_id"]);
-		
+
 		$is_admin = false;
 
 		//* Client: If the logged in user is not admin and has no sub clients (no reseller)
@@ -164,7 +164,7 @@ class page_action extends tform_actions {
 				$client['web_servers_ids'][] = $this->dataRecord['server_id'];
 				$client['web_servers_ids'] = array_unique($client['web_servers_ids']);
 			}
-			
+
 			$only_one_server = count($client['web_servers_ids']) === 1;
 			$app->tpl->setVar('only_one_server', $only_one_server);
 
@@ -195,7 +195,7 @@ class page_action extends tform_actions {
 			} else {
 				$server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 0;
 			}
-			
+
 			if($app->functions->intval($this->dataRecord["server_id"]) > 0) {
 				// check if server is in client's servers or add it.
 				$chk_sid = explode(',', $client['web_servers']);
@@ -204,7 +204,7 @@ class page_action extends tform_actions {
 					$client['web_servers'] .= $app->functions->intval($this->dataRecord["server_id"]);
 				}
 			}
-			
+
 			//* Fill the IPv4 select field with the IP addresses that are allowed for this client on the current server
 			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND virtualhost = 'y' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
 			$ips = $app->db->queryAllRecords($sql, $server_id);
@@ -312,7 +312,7 @@ class page_action extends tform_actions {
 
 			$app->tpl->setVar("server_id", $options_web_servers);
 			unset($options_web_servers);
-			
+
 			if($this->id > 0) {
 				if(!isset($this->dataRecord["server_id"])){
 					$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->id);
@@ -352,7 +352,7 @@ class page_action extends tform_actions {
 					$client['web_servers'] .= $app->functions->intval($this->dataRecord["server_id"]);
 				}
 			}
-			
+
 			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
 			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND virtualhost = 'y' AND (client_id = 0 OR client_id=?)";
 			$ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
@@ -438,7 +438,7 @@ class page_action extends tform_actions {
 					}
 					$php_directive_snippets_txt .= '<br><br>';
 				}
-				
+
 				$php_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'php' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
 				if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
 					$php_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
@@ -461,7 +461,7 @@ class page_action extends tform_actions {
 						}
 						$apache_directive_snippets_txt .= '<br><br>';
 					}
-					
+
 					$apache_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'apache' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
 					if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
 						$apache_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
@@ -485,7 +485,7 @@ class page_action extends tform_actions {
 						}
 						$nginx_directive_snippets_txt .= '<br><br>';
 					}
-					
+
 					$nginx_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'nginx' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
 					if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
 						$nginx_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
@@ -508,7 +508,7 @@ class page_action extends tform_actions {
 					}
 					$proxy_directive_snippets_txt .= '<br><br>';
 				}
-				
+
 				$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
 				if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
 					$proxy_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
@@ -523,7 +523,7 @@ class page_action extends tform_actions {
 
 			//* Admin: If the logged in user is admin
 		} else {
-		
+
 			$is_admin = true;
 
 			if($this->_vhostdomain_type == 'domain') {
@@ -657,7 +657,7 @@ class page_action extends tform_actions {
 				}
 				$php_directive_snippets_txt .= '<br><br>';
 			}
-			
+
 			$php_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'php' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
 			if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
 				$php_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
@@ -680,7 +680,7 @@ class page_action extends tform_actions {
 					}
 					$apache_directive_snippets_txt .= '<br><br>';
 				}
-				
+
 				$apache_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'apache' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
 				if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
 					$apache_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
@@ -704,7 +704,7 @@ class page_action extends tform_actions {
 					}
 					$nginx_directive_snippets_txt .= '<br><br>';
 				}
-				
+
 				$nginx_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'nginx' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
 				if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
 					$nginx_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
@@ -727,7 +727,7 @@ class page_action extends tform_actions {
 				}
 				$proxy_directive_snippets_txt .= '<br><br>';
 			}
-			
+
 			$proxy_directive_snippets = $app->db->queryAllRecords("SELECT * FROM directive_snippets WHERE type = 'proxy' AND active = 'y' AND master_directive_snippets_id = 0 ORDER BY name");
 			if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
 				$proxy_directive_snippets_txt .= $app->tform->wordbook["select_directive_snippet_txt"].'<br>';
@@ -789,7 +789,7 @@ class page_action extends tform_actions {
 			 * The domain-module is in use.
 			*/
 			$domains = $app->tools_sites->getDomainModuleDomains($this->_vhostdomain_type == 'subdomain' ? null : "web_domain");
-			$domain_select = '';
+			$domain_select = "<option value=''></option>";
 			$selected_domain = '';
 			if(is_array($domains) && sizeof($domains) > 0) {
 				/* We have domains in the list, so create the drop-down-list */
@@ -815,16 +815,16 @@ class page_action extends tform_actions {
 				$domain_select .= "<option value=''></option>\r\n";
 			}
 			$app->tpl->setVar("domain_option", $domain_select);
-			
+
 			// remove the parent domain part of the domain name before we show it in the text field.
 			if($this->dataRecord["type"] == 'vhostsubdomain') $this->dataRecord["domain"] = str_replace('.'.$selected_domain, '', $this->dataRecord["domain"]);
 
-		
+
 		} else {
 			// remove the parent domain part of the domain name before we show it in the text field.
 			if($this->dataRecord["type"] == 'vhostsubdomain') $this->dataRecord["domain"] = str_replace('.'.$parent_domain["domain"], '', $this->dataRecord["domain"]);
 		}
-		
+
 		if($this->_vhostdomain_type != 'domain') $app->tpl->setVar("domain", $this->dataRecord["domain"], true);
 
 		// check for configuration errors in sys_datalog
@@ -837,13 +837,13 @@ class page_action extends tform_actions {
 				}
 			}
 		}
-		
+
 		$app->tpl->setVar('vhostdomain_type', $this->_vhostdomain_type, true);
 
 		$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
 		$app->tpl->setVar('is_pagespeed_enabled', ($web_config['nginx_enable_pagespeed'] === 'y'));
 		$app->tpl->setVar("is_admin", $is_admin);
-		
+
 		if($this->id > 0) {
 			$tmp_web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", intval($this->id));
 			$tmp_sys_group = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE groupid = ?", intval($tmp_web['sys_groupid']));
@@ -856,11 +856,11 @@ class page_action extends tform_actions {
 		if($sys_config['use_combobox'] == 'y') {
 			$app->tpl->setVar('use_combobox', 'y');
 		}
-		
+
 		$directive_snippets_id_select = '<option value="0"'.($this->dataRecord['directive_snippets_id'] == 0? ' selected="selected"' : '').'>-</option>';
 		$server_type = $app->getconf->get_server_config($server_id, 'web');
 		$server_type = $server_type['server_type'];
-		
+
 		$m_directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND master_directive_snippets_id > 0 AND type = ? ORDER BY name ASC", $server_type);
 		if(is_array($m_directive_snippets) && !empty($m_directive_snippets)){
 			$directive_snippets_id_select .= '<optgroup label="'.$app->tform->wordbook["select_master_directive_snippet_txt"].'">';
@@ -883,7 +883,7 @@ class page_action extends tform_actions {
 			$directive_snippets_id_select .= '</optgroup>';
 		}
 		$app->tpl->setVar("directive_snippets_id", $directive_snippets_id_select);
-		
+
 		// folder_directive_snippets
 		if(isset($_POST['folder_directive_snippets']) && !isset($this->dataRecord['folder_directive_snippets'])){
 			$this->dataRecord['folder_directive_snippets'] = '';
@@ -894,10 +894,10 @@ class page_action extends tform_actions {
 			}
 			$this->dataRecord['folder_directive_snippets'] = trim($this->dataRecord['folder_directive_snippets']);
 		}
-		
+
 		$master_directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND snippet LIKE '%{FOLDER}%' AND master_directive_snippets_id > 0 AND type = ? ORDER BY name ASC", $server_type);
 		$c_directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND snippet LIKE '%{FOLDER}%' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
-		
+
 		$folder_directive_snippets = array();
 		$this->dataRecord['folder_directive_snippets'] = str_replace("\r\n", "\n", $this->dataRecord['folder_directive_snippets']);
 		$this->dataRecord['folder_directive_snippets'] = str_replace("\r", "\n", $this->dataRecord['folder_directive_snippets']);
@@ -920,7 +920,7 @@ class page_action extends tform_actions {
 					}
 					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '</optgroup>';
 				}
-				
+
 				if(is_array($c_directive_snippets) && !empty($c_directive_snippets)){
 					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<optgroup label="'.$app->tform->wordbook["select_directive_snippet_txt"].'">';
 					foreach($c_directive_snippets as $c_directive_snippet){
@@ -938,7 +938,7 @@ class page_action extends tform_actions {
 					}
 					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '</optgroup>';
 				}
-				
+
 				if(is_array($c_directive_snippets) && !empty($c_directive_snippets)){
 					$folder_directive_snippets[$i]['folder_directive_snippets_id'] .= '<optgroup label="'.$app->tform->wordbook["select_directive_snippet_txt"].'">';
 					foreach($c_directive_snippets as $c_directive_snippet){
@@ -1007,7 +1007,7 @@ class page_action extends tform_actions {
 					$app->tform->errorMessage .= $app->tform->lng("subdomain_error_empty")."<br />";
 				}
 			}
-			
+
 			/* check if the domain module is used - and check if the selected domain can be used! */
 			$app->uses('ini_parser,getconf');
 			$settings = $app->getconf->get_global_config('domains');
@@ -1073,13 +1073,13 @@ class page_action extends tform_actions {
 			} else {
 				$old_web_values = array();
 			}
-			
+
 			if($this->_vhostdomain_type == 'domain') {
 				//* ensure that quota value is not 0 when vhost type = domain
 				if(isset($_POST["hd_quota"]) && $_POST["hd_quota"] == 0) {
 					$app->tform->errorMessage .= $app->tform->lng("limit_web_quota_not_0_txt")."<br>";
 				}
-				
+
 				//* Check the website quota of the client
 				if(isset($_POST["hd_quota"]) && $client["limit_web_quota"] >= 0 && $_POST["hd_quota"] != $old_web_values["hd_quota"]) {
 					$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ? AND type = 'vhost' AND ".$app->tform->getAuthSQL('u'), $this->id);
@@ -1174,7 +1174,7 @@ class page_action extends tform_actions {
 				if($this->dataRecord['ssl'] == 'n') $this->dataRecord['ssl'] = $tmp['ssl'];
 				if($this->dataRecord['ssl_letsencrypt'] == 'n') $this->dataRecord['ssl_letsencrypt'] = $tmp['ssl_letsencrypt'];
 				if($this->dataRecord['directive_snippets_id'] == 0) $this->dataRecord['directive_snippets_id'] = $tmp['directive_snippets_id'];
-				
+
 				unset($tmp);
 				// When the record is inserted
 			} else {
@@ -1296,7 +1296,7 @@ class page_action extends tform_actions {
 				$app->tform->errorMessage .= $app->tform->lng("invalid_rewrite_rules_txt").'<br>';
 			}
 		}
-		
+
 		// check custom php.ini settings
 		if(isset($this->dataRecord['custom_php_ini']) && trim($this->dataRecord['custom_php_ini']) != '') {
 			$custom_php_ini_settings = trim($this->dataRecord['custom_php_ini']);
@@ -1330,7 +1330,7 @@ class page_action extends tform_actions {
 			unset($app->tform->formDef["tabs"]['ssl']['fields']['enable_spdy']);
 		}
 	//	if($this->dataRecord["directive_snippets_id"] < 1) $this->dataRecord["enable_pagespeed"] = 'n';
-		
+
 		//print_r($_POST['folder_directive_snippets']);
 		//print_r($_POST['folder_directive_snippets_id']);
 		if(isset($_POST['folder_directive_snippets'])){
@@ -1354,7 +1354,7 @@ class page_action extends tform_actions {
 			}
 			$this->dataRecord['folder_directive_snippets'] = trim($this->dataRecord['folder_directive_snippets']);
 		}
-		
+
 		// Check custom PHP version
 		if(isset($this->dataRecord['fastcgi_php_version']) && $this->dataRecord['fastcgi_php_version'] != '') {
 			// Check php-fpm mode
@@ -1380,15 +1380,15 @@ class page_action extends tform_actions {
 				$this->dataRecord['fastcgi_php_version'] = '';
 			}
 		}
-		
+
 		$this->validateDefaultFastcgiPhpVersion();
-		
+
 		parent::onSubmit();
 	}
-	
+
 	function onBeforeInsert() {
 		global $app, $conf;
-		
+
 		// Letsencrypt can not be activated before the website has been created
 		// So we deactivate it here and add a datalog update in onAfterInsert
 		if(isset($this->dataRecord['ssl_letsencrypt']) && $this->dataRecord['ssl_letsencrypt'] == 'y' && isset($this->dataRecord['ssl']) && $this->dataRecord['ssl'] == 'y') {
@@ -1401,7 +1401,7 @@ class page_action extends tform_actions {
 			$this->_letsencrypt_on_insert = true;
 		}
 	}
-	
+
 
 	function onAfterInsert() {
 		global $app, $conf;
@@ -1421,7 +1421,7 @@ class page_action extends tform_actions {
 		$app->uses("getconf");
 		$web_rec = $app->tform->getDataRecord($this->id);
 		$web_config = $app->getconf->get_server_config($app->functions->intval($web_rec["server_id"]), 'web');
-		
+
 		// get global log retention value as default for web log retention
 		$server_config = $app->getconf->get_server_config($app->functions->intval($web_rec["server_id"]), 'server');
 		if($server_config['log_retention'] > 0) {
@@ -1495,7 +1495,7 @@ class page_action extends tform_actions {
 			$new_data_record['ssl'] = 'y';
 			$app->db->datalogUpdate('web_domain', $new_data_record, 'domain_id', $this->id);
 		}
-	
+
 	}
 
 	function onBeforeUpdate () {
@@ -1547,13 +1547,13 @@ class page_action extends tform_actions {
 		}
 
 	}
-	
+
 	function onAfterUpdate() {
 		global $app, $conf;
 
 		if(isset($this->dataRecord['folder_directive_snippets'])) $app->db->query("UPDATE web_domain SET folder_directive_snippets = ? WHERE domain_id = ?", $this->dataRecord['folder_directive_snippets'], $this->id);
 	}
-	
+
 	function validateDefaultFastcgiPhpVersion() {
 		global $app;
 
@@ -1575,7 +1575,7 @@ class page_action extends tform_actions {
 			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('fastcgi_php_version_invalid_txt'));
 			return;
 		}
-		
+
 		// If the default PHP version is now hidden but this vhost was using it, we don't want to implicitly
 		// switch the user to some random Additional PHP version. So we show a warning instead.
 		$old_fastcgi_php_version = null;
-- 
GitLab


From 9f1e3e1f980bfcf3e39d31d52e01a21ab66aaab8 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 13:47:38 +0200
Subject: [PATCH 402/571] Translated invalid

---
 interface/web/sites/lib/lang/nl_web_domain.lng | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/sites/lib/lang/nl_web_domain.lng b/interface/web/sites/lib/lang/nl_web_domain.lng
index 8b4f6ff855..aa57c6e012 100644
--- a/interface/web/sites/lib/lang/nl_web_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_domain.lng
@@ -89,8 +89,8 @@ $wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children must be a positive
 $wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers must be a positive integer value.';
 $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be a positive integer value.';
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
-$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
-$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
+$wb['hd_quota_error_regex'] = 'Harddisk quota is ongeldig.';
+$wb['traffic_quota_error_regex'] = 'Traffic quota is ongeldig.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
 $wb['fastcgi_php_version_txt'] = 'PHP Versie';
-- 
GitLab


From 41364d2f28f11df3098d2f569f7f7bda5e8fa69f Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 14:26:56 +0200
Subject: [PATCH 403/571] Fix major typo

---
 interface/web/client/lib/lang/es.lng | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/client/lib/lang/es.lng b/interface/web/client/lib/lang/es.lng
index 233b58b7ca..9dc7ad813f 100644
--- a/interface/web/client/lib/lang/es.lng
+++ b/interface/web/client/lib/lang/es.lng
@@ -26,5 +26,5 @@ $wb['Resellers'] = 'Revendedores';
 $wb['Send email'] = 'Enviar correo';
 $wb['Templates'] = 'Plantillas';
 $wb['Add Domain'] = 'Add Domain';
-$wb['domain_txt'] = '] = 'Email-Templates';
+$wb['domain_txt'] = 'Email-Templates';
 ?>
-- 
GitLab


From 10c55a8c904f932aea657a9a2dd5558548fdc13e Mon Sep 17 00:00:00 2001
From: Thom Pol <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 14:38:26 +0200
Subject: [PATCH 404/571] Revert "Merge branch 'inherit-spampolicy' of
 git.ispconfig.org:thom/ispconfig3 into add-domain-button"

This reverts commit a2cf4b73057674533f7e1fcf52e46a98b2cfb1bb
---
 interface/web/mail/lib/lang/ar_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/bg_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/br_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/ca_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/cz_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/de_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/dk_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/el_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/en_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/es_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/fi_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/fr_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/hr_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/hu_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/id_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/it_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/ja_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/nl_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/pl_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/pt_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/ro_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/ru_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/se_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/sk_mail_user.lng | 2 +-
 interface/web/mail/lib/lang/tr_mail_user.lng | 2 +-
 interface/web/mail/mail_user_edit.php        | 2 +-
 26 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index 9d4828b557..a67a83c07a 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- not enabled -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Disable IMAP';
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 0901e0a0fd..3b9a27390e 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Разреши получаване';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Разреши достъп';
 $wb['policy_txt'] = 'Спам филтър';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- забранен -';
 $wb['limit_mailbox_txt'] = 'Достигнат е максималният брой на пощенските кутии за твоят профил.';
 $wb['limit_mailquota_txt'] = 'Максималното отделено място за твоята кутия е достигнато. Максималното позволено място в МБ е ';
 $wb['disableimap_txt'] = 'Забрани IMAP';
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index 2abe1931f6..2aca5c3736 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -27,7 +27,7 @@ $wb['postfix_txt'] = 'Habilitar recebimento';
 $wb['greylisting_txt'] = 'Habilitar greylist';
 $wb['access_txt'] = 'Habilitar acesso';
 $wb['policy_txt'] = 'Filtros anti-spam';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '-desabilitado-';
 $wb['limit_mailbox_txt'] = 'O limite de contas de e-mail para esta conta foi alcançado.';
 $wb['limit_mailquota_txt'] = 'O limite de tamanho para as contas de e-mails foi alcançado. O espaço disponível em MB é';
 $wb['disablesmtp_txt'] = 'Desabilitar SMTP (envio)';
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index 08c9bc78ec..e380b55d2d 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -18,7 +18,7 @@ $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
 $wb['access_txt'] = 'Activer l\'accès';
 $wb['policy_txt'] = 'Filtre antispam';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- inactif -';
 $wb['limit_mailbox_txt'] = 'Le nombre maximal de boites courriel pour votre compte est atteint..';
 $wb['limit_mailquota_txt'] = 'Lespace maximal pour les boites courriel est atteint. Lespace maximal disponible est de ';
 $wb['disableimap_txt'] = 'Désactiver IMAP';
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index fb09f0c0a0..1946d4150f 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -22,7 +22,7 @@ $wb['maildir_txt'] = 'E-mailový adresář';
 $wb['postfix_txt'] = 'Povolit příjem';
 $wb['access_txt'] = 'Povolit přístup';
 $wb['policy_txt'] = 'Spamový filtr';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- nepovoleno -';
 $wb['limit_mailbox_txt'] = 'Byl dosažen maximální počet mailboxů pro Váš účet.';
 $wb['limit_mailquota_txt'] = 'Dosažen maximální prostor pro mailboxy. Max. dostupné místo v MB je';
 $wb['disableimap_txt'] = 'Zakázat IMAP';
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index e653fbe288..7c1f02cd4f 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Aktiviere Empfang';
 $wb['greylisting_txt'] = 'Aktiviere Greylisting';
 $wb['access_txt'] = 'Aktiviere Zugriff';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- nicht aktiviert -';
 $wb['limit_mailbox_txt'] = 'Die maximale Anzahl an E-Mailkonten für Ihr Konto wurde erreicht.';
 $wb['limit_mailquota_txt'] = 'Der maximale Speicherplatz für Ihr E-Mail Konto wurde erreicht. Der maximal verfügbare Speicher in MB ist';
 $wb['disablesmtp_txt'] = 'SMTP (Mailversand) deaktivieren';
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index 34bf076359..8c0957d353 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -24,7 +24,7 @@ $wb['maildir_txt'] = 'Mailmappe';
 $wb['postfix_txt'] = 'Aktiver modtagelse';
 $wb['access_txt'] = 'Aktiver adgang';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- ikke aktiveret -';
 $wb['limit_mailbox_txt'] = 'Max. antal af mailbokse for din konto er nået.';
 $wb['limit_mailquota_txt'] = 'Max. plads for postkasser er nået. Max. tilgængelig plads i MB er';
 $wb['disablesmtp_txt'] = 'Deaktiver SMTP (afsending)';
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index 76c266d591..f735d6e7b3 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Ενεργοποίηση Λήψης';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Ενεργοποίηση Πρόσβασης';
 $wb['policy_txt'] = 'Φίλτρο Spam';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- ανενεργή -';
 $wb['limit_mailbox_txt'] = 'Έχετε φτάσει το μέγιστο πλήθος των θυρίδων για τον λογαριασμό σας.';
 $wb['limit_mailquota_txt'] = 'Έχετε φτάσει στο μέγεστο χώρο της θυρίδα σας.Ο μέγιστος διαθέσιμος χώρος σε MB είναι';
 $wb['disableimap_txt'] = 'Απενεργοποίηση IMAP';
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 69ac0a00a9..82cab6d70c 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -27,7 +27,7 @@ $wb["postfix_txt"] = 'Enable receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb["access_txt"] = 'Enable access';
 $wb["policy_txt"] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb["no_policy"] = '- not enabled -';
 $wb["limit_mailbox_txt"] = 'The max. number of mailboxes for your account is reached.';
 $wb["limit_mailquota_txt"] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb["disablesmtp_txt"] = 'Disable SMTP (sending)';
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index be329c304a..418fd2dbfa 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -44,7 +44,7 @@ $wb['name_optional_txt'] = '(Opcional)';
 $wb['name_txt'] = 'Nombre';
 $wb['no_backup_txt'] = 'Sin copia de seguridad';
 $wb['no_domain_perm'] = 'Usted no tiene permisos para gestionar este dominio.';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- deshabilitado -';
 $wb['now_txt'] = 'Ahora';
 $wb['password_match_txt'] = 'Las contraseñas coinciden.';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index 45ea1d9b8b..a764e95693 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -18,7 +18,7 @@ $wb['postfix_txt'] = 'Salli vastaanotto';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Salli yhteys';
 $wb['policy_txt'] = 'Roskapostisuodatin';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- ei käytössä -';
 $wb['limit_mailbox_txt'] = 'Tilisi sallittu postilaatikoiden määrä on ylitetty.';
 $wb['limit_mailquota_txt'] = 'Tilisi sallittu postilaatikoiden koko on ylitetty. Vapaa tila megatavuina on';
 $wb['disableimap_txt'] = 'Estä IMAP';
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 8df58233a3..732f3d8cb7 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -18,7 +18,7 @@ $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
 $wb['access_txt'] = 'Activer l’accès';
 $wb['policy_txt'] = 'Filtre antispam';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- inactif -';
 $wb['limit_mailbox_txt'] = 'Le nombre maximal de boîtes aux lettres pour votre compte est atteint..';
 $wb['limit_mailquota_txt'] = 'Lespace maximal pour les boîtes aux lettres est atteint. Lespace maximal disponible est de ';
 $wb['disableimap_txt'] = 'Désactiver IMAP';
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 170aaa6b61..7406e2d656 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- not enabled -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Disable IMAP';
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index 65962cd21c..db8edf775e 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Bejövő engedélyezés';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Hozzáférés engelyezés';
 $wb['policy_txt'] = 'Spam szűrő';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- nem engelyézett -';
 $wb['limit_mailbox_txt'] = 'Nincs több mailbox lehetőség.';
 $wb['limit_mailquota_txt'] = 'Mailbox tárhely elfogyott.';
 $wb['disableimap_txt'] = 'IMAP Tiltás';
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index 3bedbd9b93..670550062c 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -24,7 +24,7 @@ $wb['postfix_txt'] = 'Dapat Menerima';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Dapat Mengakses';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- tidak diaktifkan -';
 $wb['limit_mailbox_txt'] = 'Jumlah maks mailbox untuk akun Anda sudah tercapai.';
 $wb['limit_mailquota_txt'] = 'Ruang maks untuk mailbox sudah tercapai. Ruang maks yang tersedia dalam MB adalah';
 $wb['disableimap_txt'] = 'Nonaktifkan IMAP';
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index a1a0f8cfd5..dad3f69654 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -19,7 +19,7 @@ $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Abilita ricezione';
 $wb['access_txt'] = 'Abilita indirizzo';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- non abilitato -';
 $wb['limit_mailbox_txt'] = 'Hai raggiungo il numero massimo di caselle per il tuo account.';
 $wb['limit_mailquota_txt'] = 'Hai raggiunto lo spazio massimo per le tue caselle di posta. Lo spazio massimo in MB è di';
 $wb['disableimap_txt'] = 'Disabilita IMAP';
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index b58b9d13dd..803a278d5b 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'メールを受信する';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'アクセスを許可する';
 $wb['policy_txt'] = 'スパムフィルター';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- 利用しない -';
 $wb['limit_mailbox_txt'] = 'メールボックスが最大数に達した為、これ以上追加できません。';
 $wb['limit_mailquota_txt'] = 'メールボックスが一杯です。 上限(MB):';
 $wb['disableimap_txt'] = 'IMAP を無効にする';
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 9a75a9fd7a..39cd0bd0f0 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Ontvangen inschakelen';
 $wb['greylisting_txt'] = 'Greylisting inschakelen';
 $wb['access_txt'] = 'Toegang inschakelen';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Gebruik domein instelling -';
+$wb['no_policy'] = '- niet ingeschakeld -';
 $wb['limit_mailbox_txt'] = 'Het max. aantal mailboxen voor uw account is bereikt.';
 $wb['limit_mailquota_txt'] = 'De max. ruimte voor uw mailboxen is bereikt. De max. beschikbare ruimte in MB is';
 $wb['disableimap_txt'] = 'Uitschakelen IMAP';
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index 593f83531e..8a35e7742e 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Zezwól na odbiór poczty';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Możliwy dostęp';
 $wb['policy_txt'] = 'Filtr spamu';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- brak polityki -';
 $wb['limit_mailbox_txt'] = 'Maksymalna ilość skrzynek pocztowych dla Twojego konta została przekroczona.';
 $wb['limit_mailquota_txt'] = 'Maksymalna pojemność skrzynki pocztowej została przekroczona. Maksymalne dostępne miejsce w MB to: ';
 $wb['disableimap_txt'] = 'Wyłącz IMAP';
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index 0b7ffe3d37..56a1f16d30 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Permitir Recepção';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Permitir Acesso';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- desactivado -';
 $wb['limit_mailbox_txt'] = 'O número máximo de caixas de correio para a conta foi atingido.';
 $wb['limit_mailquota_txt'] = 'O espaço em disco disponível para criação de contas foi atingido.';
 $wb['disableimap_txt'] = 'Desactivar IMAP';
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index 97dfdafd88..ccdcc49fdf 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- not enabled -';
 $wb['limit_mailbox_txt'] = 'Numarul maxim de MAILBOX pe contul dumneavoastra a fost atins';
 $wb['limit_mailquota_txt'] = 'Spatiul maxim pentru MAILBOX a fost atins.Acesta este ';
 $wb['disableimap_txt'] = 'Blocheaza IMAP';
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index 07bab6fd4f..fcfadd9db9 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Разрешить получение';
 $wb['greylisting_txt'] = 'Включить серый список (Greylisting)';
 $wb['access_txt'] = 'Включить доступ';
 $wb['policy_txt'] = 'Спам-фильтр';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- не включены -';
 $wb['limit_mailbox_txt'] = 'Число почтовых ящиков превышено.';
 $wb['limit_mailquota_txt'] = 'Место под почтовые ящики превышено. Максимально доступно MB';
 $wb['password_strength_txt'] = 'Стойкость пароля';
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index da0282e118..c081446557 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Aktivera mottagning';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Aktivera åtkomst';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- ej aktiverat -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Avaktivera IMAP';
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index d9a68404ae..eb70b8eba9 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Povoliť príjem';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Povoliť Prístup';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- nepovolená -';
 $wb['limit_mailbox_txt'] = 'Max. počet poštových schránok pre váš účet je dosiahnutý.';
 $wb['limit_mailquota_txt'] = 'Maximálny priestor pre poštové schránky je dosiahnutý. Max. dostupné miesto v MB je';
 $wb['disableimap_txt'] = 'Deaktivovať IMAP';
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 9e964e5e8a..c7dec33b99 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -27,7 +27,7 @@ $wb['postfix_txt'] = 'Alım Etkin';
 $wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 $wb['access_txt'] = 'EriÅŸim Etkin';
 $wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['no_policy'] = '- devre dışı -';
 $wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta kutusu sayısına ulaştınız.';
 $wb['limit_mailquota_txt'] = 'E-posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
 $wb['disablesmtp_txt'] = 'SMTP Kullanılmasın (gönderim)';
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index ac4607e76a..c7f36a89e0 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -99,7 +99,7 @@ class page_action extends tform_actions {
 		if (isset($_POST['policy'])) $tmp_user['policy_id'] = intval($_POST['policy']);
 		$sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r') . " ORDER BY policy_name";
 		$policys = $app->db->queryAllRecords($sql);
-		$policy_select = "<option value='0'>".$app->tform->lng("inherit_policy")."</option>";
+		$policy_select = "<option value='0'>".$app->tform->lng("no_policy")."</option>";
 		if(is_array($policys)) {
 			foreach( $policys as $p) {
 				$selected = ($p["id"] == $tmp_user["policy_id"])?'SELECTED':'';
-- 
GitLab


From a504ec4a30f8ee08ed7c53d00b7191c8cdc4e17d Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 14:45:19 +0200
Subject: [PATCH 405/571] Fix fault for DNS Zone template

---
 interface/lib/classes/remote.d/dns.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 9b5e6b74ad..f4c75ba25b 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -736,7 +736,7 @@ class remoting_dns extends remoting {
 
 
 
-  //* Get All DNS Zones Templates by etruel
+  //* Get All DNS Zones Templates by etruel and thom
 	public function dns_templatezone_get_all($session_id) {
 		global $app, $conf;
 	  if(!$this->checkPerm($session_id, 'dns_templatezone_add')) {
@@ -749,7 +749,7 @@ class remoting_dns extends remoting {
 			return $result;
 		}
 		else {
-			this->server->fault('template_id_error', 'There is no DNS templates.');
+			throw new SoapFault('template_id_error', 'There is no DNS templates.');
 			return false;
 		}
 	}
-- 
GitLab


From 3681d6a16680dca4bc1e5173b04735b1a2fb20bb Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 14:52:19 +0200
Subject: [PATCH 406/571] Fix major typo

---
 interface/web/admin/lib/lang/ar_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/bg_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/br_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/ca_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/cz_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/de_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/dk_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/el_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/en_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/es_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/fi_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/fr_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/hr_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/hu_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/id_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/it_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/ja_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/nl_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/pl_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/pt_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/ro_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/ru_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/se_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/sk_remote_user.lng | 2 +-
 interface/web/admin/lib/lang/tr_remote_user.lng | 2 +-
 25 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/interface/web/admin/lib/lang/ar_remote_user.lng b/interface/web/admin/lib/lang/ar_remote_user.lng
index 8c70904102..b1db64e8e6 100644
--- a/interface/web/admin/lib/lang/ar_remote_user.lng
+++ b/interface/web/admin/lib/lang/ar_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/bg_remote_user.lng b/interface/web/admin/lib/lang/bg_remote_user.lng
index 35132ab452..2ad534da45 100644
--- a/interface/web/admin/lib/lang/bg_remote_user.lng
+++ b/interface/web/admin/lib/lang/bg_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Потребителско име';
 $wb['password_txt'] = 'Парола';
 $wb['function_txt'] = 'Функции';
diff --git a/interface/web/admin/lib/lang/br_remote_user.lng b/interface/web/admin/lib/lang/br_remote_user.lng
index b698af128d..7fbcbdf372 100644
--- a/interface/web/admin/lib/lang/br_remote_user.lng
+++ b/interface/web/admin/lib/lang/br_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['function_txt'] = 'Funções';
diff --git a/interface/web/admin/lib/lang/ca_remote_user.lng b/interface/web/admin/lib/lang/ca_remote_user.lng
index dc39a8e798..638882de55 100644
--- a/interface/web/admin/lib/lang/ca_remote_user.lng
+++ b/interface/web/admin/lib/lang/ca_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/cz_remote_user.lng b/interface/web/admin/lib/lang/cz_remote_user.lng
index f8d0f3d5e5..1c53a5c5b7 100644
--- a/interface/web/admin/lib/lang/cz_remote_user.lng
+++ b/interface/web/admin/lib/lang/cz_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Uživatelské jméno:';
 $wb['password_txt'] = 'Heslo:';
 $wb['function_txt'] = 'Funkce:';
diff --git a/interface/web/admin/lib/lang/de_remote_user.lng b/interface/web/admin/lib/lang/de_remote_user.lng
index e1f932a904..9bfb9c43a0 100644
--- a/interface/web/admin/lib/lang/de_remote_user.lng
+++ b/interface/web/admin/lib/lang/de_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Benutzername';
 $wb['password_txt'] = 'Passwort';
 $wb['function_txt'] = 'Funktionen';
diff --git a/interface/web/admin/lib/lang/dk_remote_user.lng b/interface/web/admin/lib/lang/dk_remote_user.lng
index e7f020e411..c592247b83 100644
--- a/interface/web/admin/lib/lang/dk_remote_user.lng
+++ b/interface/web/admin/lib/lang/dk_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Brugernavn:';
 $wb['password_txt'] = 'Adgangskode:';
 $wb['function_txt'] = 'Funktioner:';
diff --git a/interface/web/admin/lib/lang/el_remote_user.lng b/interface/web/admin/lib/lang/el_remote_user.lng
index 72d9eb29dd..43d04d0e02 100644
--- a/interface/web/admin/lib/lang/el_remote_user.lng
+++ b/interface/web/admin/lib/lang/el_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Όνομα Χρήστη:';
 $wb['password_txt'] = 'Συνθηματικό:';
 $wb['function_txt'] = 'Ενέργειες:';
diff --git a/interface/web/admin/lib/lang/en_remote_user.lng b/interface/web/admin/lib/lang/en_remote_user.lng
index dc39a8e798..638882de55 100644
--- a/interface/web/admin/lib/lang/en_remote_user.lng
+++ b/interface/web/admin/lib/lang/en_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/es_remote_user.lng b/interface/web/admin/lib/lang/es_remote_user.lng
index b14c4b408b..2bd9c6f2ce 100644
--- a/interface/web/admin/lib/lang/es_remote_user.lng
+++ b/interface/web/admin/lib/lang/es_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['Client functions'] = 'Funciones para clientes';
 $wb['DNS a functions'] = 'Funciones DNS para registro A';
 $wb['DNS aaaa functions'] = 'Funciones DNS para registro AAAA';
diff --git a/interface/web/admin/lib/lang/fi_remote_user.lng b/interface/web/admin/lib/lang/fi_remote_user.lng
index 8b943d3e52..f225bb8416 100644
--- a/interface/web/admin/lib/lang/fi_remote_user.lng
+++ b/interface/web/admin/lib/lang/fi_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Käyttäjätunnus';
 $wb['password_txt'] = 'Salasana';
 $wb['function_txt'] = 'Toiminnot';
diff --git a/interface/web/admin/lib/lang/fr_remote_user.lng b/interface/web/admin/lib/lang/fr_remote_user.lng
index f2f8098945..99a8f2e4f9 100644
--- a/interface/web/admin/lib/lang/fr_remote_user.lng
+++ b/interface/web/admin/lib/lang/fr_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Identifiant';
 $wb['password_txt'] = 'Mot de passe';
 $wb['function_txt'] = 'Fonctions';
diff --git a/interface/web/admin/lib/lang/hr_remote_user.lng b/interface/web/admin/lib/lang/hr_remote_user.lng
index 200e15544b..e5cef6a179 100644
--- a/interface/web/admin/lib/lang/hr_remote_user.lng
+++ b/interface/web/admin/lib/lang/hr_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Korisničko ime';
 $wb['password_txt'] = 'Å ifra';
 $wb['function_txt'] = 'Funkcije';
diff --git a/interface/web/admin/lib/lang/hu_remote_user.lng b/interface/web/admin/lib/lang/hu_remote_user.lng
index 278d2d0434..ad34bf0823 100644
--- a/interface/web/admin/lib/lang/hu_remote_user.lng
+++ b/interface/web/admin/lib/lang/hu_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Felhasználónév';
 $wb['password_txt'] = 'Jelszó';
 $wb['function_txt'] = 'Funkciók';
diff --git a/interface/web/admin/lib/lang/id_remote_user.lng b/interface/web/admin/lib/lang/id_remote_user.lng
index 740ed6fe71..1a31ae3274 100644
--- a/interface/web/admin/lib/lang/id_remote_user.lng
+++ b/interface/web/admin/lib/lang/id_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Nama pengguna';
 $wb['password_txt'] = 'Kata Sandi';
 $wb['function_txt'] = 'Fungsi';
diff --git a/interface/web/admin/lib/lang/it_remote_user.lng b/interface/web/admin/lib/lang/it_remote_user.lng
index 0d5e550d05..967270222b 100644
--- a/interface/web/admin/lib/lang/it_remote_user.lng
+++ b/interface/web/admin/lib/lang/it_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Nome Utente';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Funzioni';
diff --git a/interface/web/admin/lib/lang/ja_remote_user.lng b/interface/web/admin/lib/lang/ja_remote_user.lng
index adaaf54688..5ffbecd22a 100644
--- a/interface/web/admin/lib/lang/ja_remote_user.lng
+++ b/interface/web/admin/lib/lang/ja_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'ユーザー名';
 $wb['password_txt'] = 'パスワード';
 $wb['function_txt'] = '機能';
diff --git a/interface/web/admin/lib/lang/nl_remote_user.lng b/interface/web/admin/lib/lang/nl_remote_user.lng
index 3d2baac1fd..884331daa0 100644
--- a/interface/web/admin/lib/lang/nl_remote_user.lng
+++ b/interface/web/admin/lib/lang/nl_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Externe Gebruiker'
+$wb['remote_user_txt'] = 'Externe Gebruiker';
 $wb['username_txt'] = 'Gebruikersnaam';
 $wb['password_txt'] = 'Wachtwoord';
 $wb['function_txt'] = 'Funties';
diff --git a/interface/web/admin/lib/lang/pl_remote_user.lng b/interface/web/admin/lib/lang/pl_remote_user.lng
index 2a6a726bcb..1e611ffbe1 100644
--- a/interface/web/admin/lib/lang/pl_remote_user.lng
+++ b/interface/web/admin/lib/lang/pl_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Nazwa użytkownika';
 $wb['password_txt'] = 'Hasło';
 $wb['function_txt'] = 'Funkcje';
diff --git a/interface/web/admin/lib/lang/pt_remote_user.lng b/interface/web/admin/lib/lang/pt_remote_user.lng
index b521beb5e4..b1e8e08899 100644
--- a/interface/web/admin/lib/lang/pt_remote_user.lng
+++ b/interface/web/admin/lib/lang/pt_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Nome do utilizador';
 $wb['password_txt'] = 'Senha';
 $wb['function_txt'] = 'Funções';
diff --git a/interface/web/admin/lib/lang/ro_remote_user.lng b/interface/web/admin/lib/lang/ro_remote_user.lng
index 8c70904102..b1db64e8e6 100644
--- a/interface/web/admin/lib/lang/ro_remote_user.lng
+++ b/interface/web/admin/lib/lang/ro_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Username';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Functions';
diff --git a/interface/web/admin/lib/lang/ru_remote_user.lng b/interface/web/admin/lib/lang/ru_remote_user.lng
index 38eb3a3c33..e1266951aa 100644
--- a/interface/web/admin/lib/lang/ru_remote_user.lng
+++ b/interface/web/admin/lib/lang/ru_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Логин';
 $wb['password_txt'] = 'Пароль';
 $wb['function_txt'] = 'Функции';
diff --git a/interface/web/admin/lib/lang/se_remote_user.lng b/interface/web/admin/lib/lang/se_remote_user.lng
index 39ae0ed375..c71d09f54f 100644
--- a/interface/web/admin/lib/lang/se_remote_user.lng
+++ b/interface/web/admin/lib/lang/se_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Användarnamn';
 $wb['password_txt'] = 'Lösenord';
 $wb['function_txt'] = 'Funktioner';
diff --git a/interface/web/admin/lib/lang/sk_remote_user.lng b/interface/web/admin/lib/lang/sk_remote_user.lng
index e8fac2a0b9..4e867066c7 100644
--- a/interface/web/admin/lib/lang/sk_remote_user.lng
+++ b/interface/web/admin/lib/lang/sk_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Uživateľ';
 $wb['password_txt'] = 'Heslo';
 $wb['function_txt'] = 'Funkcia';
diff --git a/interface/web/admin/lib/lang/tr_remote_user.lng b/interface/web/admin/lib/lang/tr_remote_user.lng
index 24fc6497f2..aacb7f4c35 100644
--- a/interface/web/admin/lib/lang/tr_remote_user.lng
+++ b/interface/web/admin/lib/lang/tr_remote_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User'
+$wb['remote_user_txt'] = 'Remote User';
 $wb['username_txt'] = 'Kullanıcı Adı:';
 $wb['password_txt'] = 'Parola:';
 $wb['function_txt'] = 'Ä°ÅŸlevler:';
-- 
GitLab


From 8fe45d1d00e1e280bd28851718047b2bcdefce9d Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 14:55:58 +0200
Subject: [PATCH 407/571] Fix typo for DNAME

---
 interface/lib/classes/remote.d/dns.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index f4c75ba25b..3129c6a3a2 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -473,7 +473,7 @@ class remoting_dns extends remoting {
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_cname_get($session_id, $primary_id) {
+	public function dns_dname_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'DNAME');
 	}
 
-- 
GitLab


From e64c6f93b77c3cf00426225cb3cbaf95c0882a86 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 17:57:12 +0200
Subject: [PATCH 408/571] Add Font Awesome (fixes #5443)

---
 .../font-awesome-4.7.0/HELP-US-OUT.txt        |    7 +
 .../font-awesome-4.7.0/css/font-awesome.css   | 2337 ++++++++++++++
 .../css/font-awesome.min.css                  |    4 +
 .../font-awesome-4.7.0/fonts/FontAwesome.otf  |  Bin 0 -> 134808 bytes
 .../fonts/fontawesome-webfont.eot             |  Bin 0 -> 165742 bytes
 .../fonts/fontawesome-webfont.svg             | 2671 +++++++++++++++++
 .../fonts/fontawesome-webfont.ttf             |  Bin 0 -> 165548 bytes
 .../fonts/fontawesome-webfont.woff            |  Bin 0 -> 98024 bytes
 .../fonts/fontawesome-webfont.woff2           |  Bin 0 -> 77160 bytes
 .../font-awesome-4.7.0/less/animated.less     |   34 +
 .../less/bordered-pulled.less                 |   25 +
 .../font-awesome-4.7.0/less/core.less         |   12 +
 .../font-awesome-4.7.0/less/fixed-width.less  |    6 +
 .../font-awesome-4.7.0/less/font-awesome.less |   18 +
 .../font-awesome-4.7.0/less/icons.less        |  789 +++++
 .../font-awesome-4.7.0/less/larger.less       |   13 +
 .../font-awesome-4.7.0/less/list.less         |   19 +
 .../font-awesome-4.7.0/less/mixins.less       |   60 +
 .../font-awesome-4.7.0/less/path.less         |   15 +
 .../less/rotated-flipped.less                 |   20 +
 .../less/screen-reader.less                   |    5 +
 .../font-awesome-4.7.0/less/stacked.less      |   20 +
 .../font-awesome-4.7.0/less/variables.less    |  800 +++++
 .../font-awesome-4.7.0/scss/_animated.scss    |   34 +
 .../scss/_bordered-pulled.scss                |   25 +
 .../font-awesome-4.7.0/scss/_core.scss        |   12 +
 .../font-awesome-4.7.0/scss/_fixed-width.scss |    6 +
 .../font-awesome-4.7.0/scss/_icons.scss       |  789 +++++
 .../font-awesome-4.7.0/scss/_larger.scss      |   13 +
 .../font-awesome-4.7.0/scss/_list.scss        |   19 +
 .../font-awesome-4.7.0/scss/_mixins.scss      |   60 +
 .../font-awesome-4.7.0/scss/_path.scss        |   15 +
 .../scss/_rotated-flipped.scss                |   20 +
 .../scss/_screen-reader.scss                  |    5 +
 .../font-awesome-4.7.0/scss/_stacked.scss     |   20 +
 .../font-awesome-4.7.0/scss/_variables.scss   |  800 +++++
 .../font-awesome-4.7.0/scss/font-awesome.scss |   18 +
 .../web/themes/default/templates/main.tpl.htm |    1 +
 38 files changed, 8692 insertions(+)
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/HELP-US-OUT.txt
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.css
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.min.css
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/FontAwesome.otf
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.eot
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.svg
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.woff
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/animated.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/bordered-pulled.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/core.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/fixed-width.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/font-awesome.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/icons.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/larger.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/list.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/mixins.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/path.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/rotated-flipped.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/screen-reader.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/stacked.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/variables.less
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_animated.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_bordered-pulled.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_core.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_fixed-width.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_icons.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_larger.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_list.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_mixins.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_path.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_rotated-flipped.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_screen-reader.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_stacked.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_variables.scss
 create mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/font-awesome.scss

diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/HELP-US-OUT.txt b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/HELP-US-OUT.txt
new file mode 100644
index 0000000000..83d083dd77
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/HELP-US-OUT.txt
@@ -0,0 +1,7 @@
+I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
+Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
+comprehensive icon sets or copy and paste your own.
+
+Please. Check it out.
+
+-Dave Gandy
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.css b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.css
new file mode 100644
index 0000000000..ee906a8196
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.css
@@ -0,0 +1,2337 @@
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
+  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+.fa {
+  display: inline-block;
+  font: normal normal normal 14px/1 FontAwesome;
+  font-size: inherit;
+  text-rendering: auto;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+  font-size: 1.33333333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.28571429em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.14285714em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.14285714em;
+  width: 2.14285714em;
+  top: 0.14285714em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.85714286em;
+}
+.fa-border {
+  padding: .2em .25em .15em;
+  border: solid 0.08em #eeeeee;
+  border-radius: .1em;
+}
+.fa-pull-left {
+  float: left;
+}
+.fa-pull-right {
+  float: right;
+}
+.fa.fa-pull-left {
+  margin-right: .3em;
+}
+.fa.fa-pull-right {
+  margin-left: .3em;
+}
+/* Deprecated as of 4.4.0 */
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left {
+  margin-right: .3em;
+}
+.fa.pull-right {
+  margin-left: .3em;
+}
+.fa-spin {
+  -webkit-animation: fa-spin 2s infinite linear;
+  animation: fa-spin 2s infinite linear;
+}
+.fa-pulse {
+  -webkit-animation: fa-spin 1s infinite steps(8);
+  animation: fa-spin 1s infinite steps(8);
+}
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+  -webkit-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+  -webkit-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+  -webkit-transform: scale(-1, 1);
+  -ms-transform: scale(-1, 1);
+  transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+  -webkit-transform: scale(1, -1);
+  -ms-transform: scale(1, -1);
+  transform: scale(1, -1);
+}
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+  filter: none;
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #ffffff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+   readers do not read off random characters that represent icons */
+.fa-glass:before {
+  content: "\f000";
+}
+.fa-music:before {
+  content: "\f001";
+}
+.fa-search:before {
+  content: "\f002";
+}
+.fa-envelope-o:before {
+  content: "\f003";
+}
+.fa-heart:before {
+  content: "\f004";
+}
+.fa-star:before {
+  content: "\f005";
+}
+.fa-star-o:before {
+  content: "\f006";
+}
+.fa-user:before {
+  content: "\f007";
+}
+.fa-film:before {
+  content: "\f008";
+}
+.fa-th-large:before {
+  content: "\f009";
+}
+.fa-th:before {
+  content: "\f00a";
+}
+.fa-th-list:before {
+  content: "\f00b";
+}
+.fa-check:before {
+  content: "\f00c";
+}
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+  content: "\f00d";
+}
+.fa-search-plus:before {
+  content: "\f00e";
+}
+.fa-search-minus:before {
+  content: "\f010";
+}
+.fa-power-off:before {
+  content: "\f011";
+}
+.fa-signal:before {
+  content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+  content: "\f013";
+}
+.fa-trash-o:before {
+  content: "\f014";
+}
+.fa-home:before {
+  content: "\f015";
+}
+.fa-file-o:before {
+  content: "\f016";
+}
+.fa-clock-o:before {
+  content: "\f017";
+}
+.fa-road:before {
+  content: "\f018";
+}
+.fa-download:before {
+  content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+  content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+  content: "\f01b";
+}
+.fa-inbox:before {
+  content: "\f01c";
+}
+.fa-play-circle-o:before {
+  content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+  content: "\f01e";
+}
+.fa-refresh:before {
+  content: "\f021";
+}
+.fa-list-alt:before {
+  content: "\f022";
+}
+.fa-lock:before {
+  content: "\f023";
+}
+.fa-flag:before {
+  content: "\f024";
+}
+.fa-headphones:before {
+  content: "\f025";
+}
+.fa-volume-off:before {
+  content: "\f026";
+}
+.fa-volume-down:before {
+  content: "\f027";
+}
+.fa-volume-up:before {
+  content: "\f028";
+}
+.fa-qrcode:before {
+  content: "\f029";
+}
+.fa-barcode:before {
+  content: "\f02a";
+}
+.fa-tag:before {
+  content: "\f02b";
+}
+.fa-tags:before {
+  content: "\f02c";
+}
+.fa-book:before {
+  content: "\f02d";
+}
+.fa-bookmark:before {
+  content: "\f02e";
+}
+.fa-print:before {
+  content: "\f02f";
+}
+.fa-camera:before {
+  content: "\f030";
+}
+.fa-font:before {
+  content: "\f031";
+}
+.fa-bold:before {
+  content: "\f032";
+}
+.fa-italic:before {
+  content: "\f033";
+}
+.fa-text-height:before {
+  content: "\f034";
+}
+.fa-text-width:before {
+  content: "\f035";
+}
+.fa-align-left:before {
+  content: "\f036";
+}
+.fa-align-center:before {
+  content: "\f037";
+}
+.fa-align-right:before {
+  content: "\f038";
+}
+.fa-align-justify:before {
+  content: "\f039";
+}
+.fa-list:before {
+  content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "\f03b";
+}
+.fa-indent:before {
+  content: "\f03c";
+}
+.fa-video-camera:before {
+  content: "\f03d";
+}
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+  content: "\f03e";
+}
+.fa-pencil:before {
+  content: "\f040";
+}
+.fa-map-marker:before {
+  content: "\f041";
+}
+.fa-adjust:before {
+  content: "\f042";
+}
+.fa-tint:before {
+  content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "\f044";
+}
+.fa-share-square-o:before {
+  content: "\f045";
+}
+.fa-check-square-o:before {
+  content: "\f046";
+}
+.fa-arrows:before {
+  content: "\f047";
+}
+.fa-step-backward:before {
+  content: "\f048";
+}
+.fa-fast-backward:before {
+  content: "\f049";
+}
+.fa-backward:before {
+  content: "\f04a";
+}
+.fa-play:before {
+  content: "\f04b";
+}
+.fa-pause:before {
+  content: "\f04c";
+}
+.fa-stop:before {
+  content: "\f04d";
+}
+.fa-forward:before {
+  content: "\f04e";
+}
+.fa-fast-forward:before {
+  content: "\f050";
+}
+.fa-step-forward:before {
+  content: "\f051";
+}
+.fa-eject:before {
+  content: "\f052";
+}
+.fa-chevron-left:before {
+  content: "\f053";
+}
+.fa-chevron-right:before {
+  content: "\f054";
+}
+.fa-plus-circle:before {
+  content: "\f055";
+}
+.fa-minus-circle:before {
+  content: "\f056";
+}
+.fa-times-circle:before {
+  content: "\f057";
+}
+.fa-check-circle:before {
+  content: "\f058";
+}
+.fa-question-circle:before {
+  content: "\f059";
+}
+.fa-info-circle:before {
+  content: "\f05a";
+}
+.fa-crosshairs:before {
+  content: "\f05b";
+}
+.fa-times-circle-o:before {
+  content: "\f05c";
+}
+.fa-check-circle-o:before {
+  content: "\f05d";
+}
+.fa-ban:before {
+  content: "\f05e";
+}
+.fa-arrow-left:before {
+  content: "\f060";
+}
+.fa-arrow-right:before {
+  content: "\f061";
+}
+.fa-arrow-up:before {
+  content: "\f062";
+}
+.fa-arrow-down:before {
+  content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "\f064";
+}
+.fa-expand:before {
+  content: "\f065";
+}
+.fa-compress:before {
+  content: "\f066";
+}
+.fa-plus:before {
+  content: "\f067";
+}
+.fa-minus:before {
+  content: "\f068";
+}
+.fa-asterisk:before {
+  content: "\f069";
+}
+.fa-exclamation-circle:before {
+  content: "\f06a";
+}
+.fa-gift:before {
+  content: "\f06b";
+}
+.fa-leaf:before {
+  content: "\f06c";
+}
+.fa-fire:before {
+  content: "\f06d";
+}
+.fa-eye:before {
+  content: "\f06e";
+}
+.fa-eye-slash:before {
+  content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+  content: "\f071";
+}
+.fa-plane:before {
+  content: "\f072";
+}
+.fa-calendar:before {
+  content: "\f073";
+}
+.fa-random:before {
+  content: "\f074";
+}
+.fa-comment:before {
+  content: "\f075";
+}
+.fa-magnet:before {
+  content: "\f076";
+}
+.fa-chevron-up:before {
+  content: "\f077";
+}
+.fa-chevron-down:before {
+  content: "\f078";
+}
+.fa-retweet:before {
+  content: "\f079";
+}
+.fa-shopping-cart:before {
+  content: "\f07a";
+}
+.fa-folder:before {
+  content: "\f07b";
+}
+.fa-folder-open:before {
+  content: "\f07c";
+}
+.fa-arrows-v:before {
+  content: "\f07d";
+}
+.fa-arrows-h:before {
+  content: "\f07e";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+  content: "\f080";
+}
+.fa-twitter-square:before {
+  content: "\f081";
+}
+.fa-facebook-square:before {
+  content: "\f082";
+}
+.fa-camera-retro:before {
+  content: "\f083";
+}
+.fa-key:before {
+  content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+  content: "\f085";
+}
+.fa-comments:before {
+  content: "\f086";
+}
+.fa-thumbs-o-up:before {
+  content: "\f087";
+}
+.fa-thumbs-o-down:before {
+  content: "\f088";
+}
+.fa-star-half:before {
+  content: "\f089";
+}
+.fa-heart-o:before {
+  content: "\f08a";
+}
+.fa-sign-out:before {
+  content: "\f08b";
+}
+.fa-linkedin-square:before {
+  content: "\f08c";
+}
+.fa-thumb-tack:before {
+  content: "\f08d";
+}
+.fa-external-link:before {
+  content: "\f08e";
+}
+.fa-sign-in:before {
+  content: "\f090";
+}
+.fa-trophy:before {
+  content: "\f091";
+}
+.fa-github-square:before {
+  content: "\f092";
+}
+.fa-upload:before {
+  content: "\f093";
+}
+.fa-lemon-o:before {
+  content: "\f094";
+}
+.fa-phone:before {
+  content: "\f095";
+}
+.fa-square-o:before {
+  content: "\f096";
+}
+.fa-bookmark-o:before {
+  content: "\f097";
+}
+.fa-phone-square:before {
+  content: "\f098";
+}
+.fa-twitter:before {
+  content: "\f099";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+  content: "\f09a";
+}
+.fa-github:before {
+  content: "\f09b";
+}
+.fa-unlock:before {
+  content: "\f09c";
+}
+.fa-credit-card:before {
+  content: "\f09d";
+}
+.fa-feed:before,
+.fa-rss:before {
+  content: "\f09e";
+}
+.fa-hdd-o:before {
+  content: "\f0a0";
+}
+.fa-bullhorn:before {
+  content: "\f0a1";
+}
+.fa-bell:before {
+  content: "\f0f3";
+}
+.fa-certificate:before {
+  content: "\f0a3";
+}
+.fa-hand-o-right:before {
+  content: "\f0a4";
+}
+.fa-hand-o-left:before {
+  content: "\f0a5";
+}
+.fa-hand-o-up:before {
+  content: "\f0a6";
+}
+.fa-hand-o-down:before {
+  content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+  content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+  content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+  content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+  content: "\f0ab";
+}
+.fa-globe:before {
+  content: "\f0ac";
+}
+.fa-wrench:before {
+  content: "\f0ad";
+}
+.fa-tasks:before {
+  content: "\f0ae";
+}
+.fa-filter:before {
+  content: "\f0b0";
+}
+.fa-briefcase:before {
+  content: "\f0b1";
+}
+.fa-arrows-alt:before {
+  content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+  content: "\f0c1";
+}
+.fa-cloud:before {
+  content: "\f0c2";
+}
+.fa-flask:before {
+  content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "\f0c5";
+}
+.fa-paperclip:before {
+  content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+  content: "\f0c7";
+}
+.fa-square:before {
+  content: "\f0c8";
+}
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+  content: "\f0c9";
+}
+.fa-list-ul:before {
+  content: "\f0ca";
+}
+.fa-list-ol:before {
+  content: "\f0cb";
+}
+.fa-strikethrough:before {
+  content: "\f0cc";
+}
+.fa-underline:before {
+  content: "\f0cd";
+}
+.fa-table:before {
+  content: "\f0ce";
+}
+.fa-magic:before {
+  content: "\f0d0";
+}
+.fa-truck:before {
+  content: "\f0d1";
+}
+.fa-pinterest:before {
+  content: "\f0d2";
+}
+.fa-pinterest-square:before {
+  content: "\f0d3";
+}
+.fa-google-plus-square:before {
+  content: "\f0d4";
+}
+.fa-google-plus:before {
+  content: "\f0d5";
+}
+.fa-money:before {
+  content: "\f0d6";
+}
+.fa-caret-down:before {
+  content: "\f0d7";
+}
+.fa-caret-up:before {
+  content: "\f0d8";
+}
+.fa-caret-left:before {
+  content: "\f0d9";
+}
+.fa-caret-right:before {
+  content: "\f0da";
+}
+.fa-columns:before {
+  content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+  content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-desc:before {
+  content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-asc:before {
+  content: "\f0de";
+}
+.fa-envelope:before {
+  content: "\f0e0";
+}
+.fa-linkedin:before {
+  content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+  content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "\f0e4";
+}
+.fa-comment-o:before {
+  content: "\f0e5";
+}
+.fa-comments-o:before {
+  content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+  content: "\f0e7";
+}
+.fa-sitemap:before {
+  content: "\f0e8";
+}
+.fa-umbrella:before {
+  content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+  content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+  content: "\f0eb";
+}
+.fa-exchange:before {
+  content: "\f0ec";
+}
+.fa-cloud-download:before {
+  content: "\f0ed";
+}
+.fa-cloud-upload:before {
+  content: "\f0ee";
+}
+.fa-user-md:before {
+  content: "\f0f0";
+}
+.fa-stethoscope:before {
+  content: "\f0f1";
+}
+.fa-suitcase:before {
+  content: "\f0f2";
+}
+.fa-bell-o:before {
+  content: "\f0a2";
+}
+.fa-coffee:before {
+  content: "\f0f4";
+}
+.fa-cutlery:before {
+  content: "\f0f5";
+}
+.fa-file-text-o:before {
+  content: "\f0f6";
+}
+.fa-building-o:before {
+  content: "\f0f7";
+}
+.fa-hospital-o:before {
+  content: "\f0f8";
+}
+.fa-ambulance:before {
+  content: "\f0f9";
+}
+.fa-medkit:before {
+  content: "\f0fa";
+}
+.fa-fighter-jet:before {
+  content: "\f0fb";
+}
+.fa-beer:before {
+  content: "\f0fc";
+}
+.fa-h-square:before {
+  content: "\f0fd";
+}
+.fa-plus-square:before {
+  content: "\f0fe";
+}
+.fa-angle-double-left:before {
+  content: "\f100";
+}
+.fa-angle-double-right:before {
+  content: "\f101";
+}
+.fa-angle-double-up:before {
+  content: "\f102";
+}
+.fa-angle-double-down:before {
+  content: "\f103";
+}
+.fa-angle-left:before {
+  content: "\f104";
+}
+.fa-angle-right:before {
+  content: "\f105";
+}
+.fa-angle-up:before {
+  content: "\f106";
+}
+.fa-angle-down:before {
+  content: "\f107";
+}
+.fa-desktop:before {
+  content: "\f108";
+}
+.fa-laptop:before {
+  content: "\f109";
+}
+.fa-tablet:before {
+  content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "\f10b";
+}
+.fa-circle-o:before {
+  content: "\f10c";
+}
+.fa-quote-left:before {
+  content: "\f10d";
+}
+.fa-quote-right:before {
+  content: "\f10e";
+}
+.fa-spinner:before {
+  content: "\f110";
+}
+.fa-circle:before {
+  content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "\f112";
+}
+.fa-github-alt:before {
+  content: "\f113";
+}
+.fa-folder-o:before {
+  content: "\f114";
+}
+.fa-folder-open-o:before {
+  content: "\f115";
+}
+.fa-smile-o:before {
+  content: "\f118";
+}
+.fa-frown-o:before {
+  content: "\f119";
+}
+.fa-meh-o:before {
+  content: "\f11a";
+}
+.fa-gamepad:before {
+  content: "\f11b";
+}
+.fa-keyboard-o:before {
+  content: "\f11c";
+}
+.fa-flag-o:before {
+  content: "\f11d";
+}
+.fa-flag-checkered:before {
+  content: "\f11e";
+}
+.fa-terminal:before {
+  content: "\f120";
+}
+.fa-code:before {
+  content: "\f121";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+  content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "\f123";
+}
+.fa-location-arrow:before {
+  content: "\f124";
+}
+.fa-crop:before {
+  content: "\f125";
+}
+.fa-code-fork:before {
+  content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+  content: "\f127";
+}
+.fa-question:before {
+  content: "\f128";
+}
+.fa-info:before {
+  content: "\f129";
+}
+.fa-exclamation:before {
+  content: "\f12a";
+}
+.fa-superscript:before {
+  content: "\f12b";
+}
+.fa-subscript:before {
+  content: "\f12c";
+}
+.fa-eraser:before {
+  content: "\f12d";
+}
+.fa-puzzle-piece:before {
+  content: "\f12e";
+}
+.fa-microphone:before {
+  content: "\f130";
+}
+.fa-microphone-slash:before {
+  content: "\f131";
+}
+.fa-shield:before {
+  content: "\f132";
+}
+.fa-calendar-o:before {
+  content: "\f133";
+}
+.fa-fire-extinguisher:before {
+  content: "\f134";
+}
+.fa-rocket:before {
+  content: "\f135";
+}
+.fa-maxcdn:before {
+  content: "\f136";
+}
+.fa-chevron-circle-left:before {
+  content: "\f137";
+}
+.fa-chevron-circle-right:before {
+  content: "\f138";
+}
+.fa-chevron-circle-up:before {
+  content: "\f139";
+}
+.fa-chevron-circle-down:before {
+  content: "\f13a";
+}
+.fa-html5:before {
+  content: "\f13b";
+}
+.fa-css3:before {
+  content: "\f13c";
+}
+.fa-anchor:before {
+  content: "\f13d";
+}
+.fa-unlock-alt:before {
+  content: "\f13e";
+}
+.fa-bullseye:before {
+  content: "\f140";
+}
+.fa-ellipsis-h:before {
+  content: "\f141";
+}
+.fa-ellipsis-v:before {
+  content: "\f142";
+}
+.fa-rss-square:before {
+  content: "\f143";
+}
+.fa-play-circle:before {
+  content: "\f144";
+}
+.fa-ticket:before {
+  content: "\f145";
+}
+.fa-minus-square:before {
+  content: "\f146";
+}
+.fa-minus-square-o:before {
+  content: "\f147";
+}
+.fa-level-up:before {
+  content: "\f148";
+}
+.fa-level-down:before {
+  content: "\f149";
+}
+.fa-check-square:before {
+  content: "\f14a";
+}
+.fa-pencil-square:before {
+  content: "\f14b";
+}
+.fa-external-link-square:before {
+  content: "\f14c";
+}
+.fa-share-square:before {
+  content: "\f14d";
+}
+.fa-compass:before {
+  content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+  content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+  content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+  content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+  content: "\f153";
+}
+.fa-gbp:before {
+  content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+  content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+  content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+  content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+  content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "\f15a";
+}
+.fa-file:before {
+  content: "\f15b";
+}
+.fa-file-text:before {
+  content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+  content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+  content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+  content: "\f160";
+}
+.fa-sort-amount-desc:before {
+  content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+  content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+  content: "\f163";
+}
+.fa-thumbs-up:before {
+  content: "\f164";
+}
+.fa-thumbs-down:before {
+  content: "\f165";
+}
+.fa-youtube-square:before {
+  content: "\f166";
+}
+.fa-youtube:before {
+  content: "\f167";
+}
+.fa-xing:before {
+  content: "\f168";
+}
+.fa-xing-square:before {
+  content: "\f169";
+}
+.fa-youtube-play:before {
+  content: "\f16a";
+}
+.fa-dropbox:before {
+  content: "\f16b";
+}
+.fa-stack-overflow:before {
+  content: "\f16c";
+}
+.fa-instagram:before {
+  content: "\f16d";
+}
+.fa-flickr:before {
+  content: "\f16e";
+}
+.fa-adn:before {
+  content: "\f170";
+}
+.fa-bitbucket:before {
+  content: "\f171";
+}
+.fa-bitbucket-square:before {
+  content: "\f172";
+}
+.fa-tumblr:before {
+  content: "\f173";
+}
+.fa-tumblr-square:before {
+  content: "\f174";
+}
+.fa-long-arrow-down:before {
+  content: "\f175";
+}
+.fa-long-arrow-up:before {
+  content: "\f176";
+}
+.fa-long-arrow-left:before {
+  content: "\f177";
+}
+.fa-long-arrow-right:before {
+  content: "\f178";
+}
+.fa-apple:before {
+  content: "\f179";
+}
+.fa-windows:before {
+  content: "\f17a";
+}
+.fa-android:before {
+  content: "\f17b";
+}
+.fa-linux:before {
+  content: "\f17c";
+}
+.fa-dribbble:before {
+  content: "\f17d";
+}
+.fa-skype:before {
+  content: "\f17e";
+}
+.fa-foursquare:before {
+  content: "\f180";
+}
+.fa-trello:before {
+  content: "\f181";
+}
+.fa-female:before {
+  content: "\f182";
+}
+.fa-male:before {
+  content: "\f183";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+  content: "\f184";
+}
+.fa-sun-o:before {
+  content: "\f185";
+}
+.fa-moon-o:before {
+  content: "\f186";
+}
+.fa-archive:before {
+  content: "\f187";
+}
+.fa-bug:before {
+  content: "\f188";
+}
+.fa-vk:before {
+  content: "\f189";
+}
+.fa-weibo:before {
+  content: "\f18a";
+}
+.fa-renren:before {
+  content: "\f18b";
+}
+.fa-pagelines:before {
+  content: "\f18c";
+}
+.fa-stack-exchange:before {
+  content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+  content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+  content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+  content: "\f191";
+}
+.fa-dot-circle-o:before {
+  content: "\f192";
+}
+.fa-wheelchair:before {
+  content: "\f193";
+}
+.fa-vimeo-square:before {
+  content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+  content: "\f195";
+}
+.fa-plus-square-o:before {
+  content: "\f196";
+}
+.fa-space-shuttle:before {
+  content: "\f197";
+}
+.fa-slack:before {
+  content: "\f198";
+}
+.fa-envelope-square:before {
+  content: "\f199";
+}
+.fa-wordpress:before {
+  content: "\f19a";
+}
+.fa-openid:before {
+  content: "\f19b";
+}
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+  content: "\f19c";
+}
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+  content: "\f19d";
+}
+.fa-yahoo:before {
+  content: "\f19e";
+}
+.fa-google:before {
+  content: "\f1a0";
+}
+.fa-reddit:before {
+  content: "\f1a1";
+}
+.fa-reddit-square:before {
+  content: "\f1a2";
+}
+.fa-stumbleupon-circle:before {
+  content: "\f1a3";
+}
+.fa-stumbleupon:before {
+  content: "\f1a4";
+}
+.fa-delicious:before {
+  content: "\f1a5";
+}
+.fa-digg:before {
+  content: "\f1a6";
+}
+.fa-pied-piper-pp:before {
+  content: "\f1a7";
+}
+.fa-pied-piper-alt:before {
+  content: "\f1a8";
+}
+.fa-drupal:before {
+  content: "\f1a9";
+}
+.fa-joomla:before {
+  content: "\f1aa";
+}
+.fa-language:before {
+  content: "\f1ab";
+}
+.fa-fax:before {
+  content: "\f1ac";
+}
+.fa-building:before {
+  content: "\f1ad";
+}
+.fa-child:before {
+  content: "\f1ae";
+}
+.fa-paw:before {
+  content: "\f1b0";
+}
+.fa-spoon:before {
+  content: "\f1b1";
+}
+.fa-cube:before {
+  content: "\f1b2";
+}
+.fa-cubes:before {
+  content: "\f1b3";
+}
+.fa-behance:before {
+  content: "\f1b4";
+}
+.fa-behance-square:before {
+  content: "\f1b5";
+}
+.fa-steam:before {
+  content: "\f1b6";
+}
+.fa-steam-square:before {
+  content: "\f1b7";
+}
+.fa-recycle:before {
+  content: "\f1b8";
+}
+.fa-automobile:before,
+.fa-car:before {
+  content: "\f1b9";
+}
+.fa-cab:before,
+.fa-taxi:before {
+  content: "\f1ba";
+}
+.fa-tree:before {
+  content: "\f1bb";
+}
+.fa-spotify:before {
+  content: "\f1bc";
+}
+.fa-deviantart:before {
+  content: "\f1bd";
+}
+.fa-soundcloud:before {
+  content: "\f1be";
+}
+.fa-database:before {
+  content: "\f1c0";
+}
+.fa-file-pdf-o:before {
+  content: "\f1c1";
+}
+.fa-file-word-o:before {
+  content: "\f1c2";
+}
+.fa-file-excel-o:before {
+  content: "\f1c3";
+}
+.fa-file-powerpoint-o:before {
+  content: "\f1c4";
+}
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+  content: "\f1c5";
+}
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+  content: "\f1c6";
+}
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+  content: "\f1c7";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+  content: "\f1c8";
+}
+.fa-file-code-o:before {
+  content: "\f1c9";
+}
+.fa-vine:before {
+  content: "\f1ca";
+}
+.fa-codepen:before {
+  content: "\f1cb";
+}
+.fa-jsfiddle:before {
+  content: "\f1cc";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+  content: "\f1cd";
+}
+.fa-circle-o-notch:before {
+  content: "\f1ce";
+}
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+  content: "\f1d0";
+}
+.fa-ge:before,
+.fa-empire:before {
+  content: "\f1d1";
+}
+.fa-git-square:before {
+  content: "\f1d2";
+}
+.fa-git:before {
+  content: "\f1d3";
+}
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+  content: "\f1d4";
+}
+.fa-tencent-weibo:before {
+  content: "\f1d5";
+}
+.fa-qq:before {
+  content: "\f1d6";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+  content: "\f1d7";
+}
+.fa-send:before,
+.fa-paper-plane:before {
+  content: "\f1d8";
+}
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+  content: "\f1d9";
+}
+.fa-history:before {
+  content: "\f1da";
+}
+.fa-circle-thin:before {
+  content: "\f1db";
+}
+.fa-header:before {
+  content: "\f1dc";
+}
+.fa-paragraph:before {
+  content: "\f1dd";
+}
+.fa-sliders:before {
+  content: "\f1de";
+}
+.fa-share-alt:before {
+  content: "\f1e0";
+}
+.fa-share-alt-square:before {
+  content: "\f1e1";
+}
+.fa-bomb:before {
+  content: "\f1e2";
+}
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+  content: "\f1e3";
+}
+.fa-tty:before {
+  content: "\f1e4";
+}
+.fa-binoculars:before {
+  content: "\f1e5";
+}
+.fa-plug:before {
+  content: "\f1e6";
+}
+.fa-slideshare:before {
+  content: "\f1e7";
+}
+.fa-twitch:before {
+  content: "\f1e8";
+}
+.fa-yelp:before {
+  content: "\f1e9";
+}
+.fa-newspaper-o:before {
+  content: "\f1ea";
+}
+.fa-wifi:before {
+  content: "\f1eb";
+}
+.fa-calculator:before {
+  content: "\f1ec";
+}
+.fa-paypal:before {
+  content: "\f1ed";
+}
+.fa-google-wallet:before {
+  content: "\f1ee";
+}
+.fa-cc-visa:before {
+  content: "\f1f0";
+}
+.fa-cc-mastercard:before {
+  content: "\f1f1";
+}
+.fa-cc-discover:before {
+  content: "\f1f2";
+}
+.fa-cc-amex:before {
+  content: "\f1f3";
+}
+.fa-cc-paypal:before {
+  content: "\f1f4";
+}
+.fa-cc-stripe:before {
+  content: "\f1f5";
+}
+.fa-bell-slash:before {
+  content: "\f1f6";
+}
+.fa-bell-slash-o:before {
+  content: "\f1f7";
+}
+.fa-trash:before {
+  content: "\f1f8";
+}
+.fa-copyright:before {
+  content: "\f1f9";
+}
+.fa-at:before {
+  content: "\f1fa";
+}
+.fa-eyedropper:before {
+  content: "\f1fb";
+}
+.fa-paint-brush:before {
+  content: "\f1fc";
+}
+.fa-birthday-cake:before {
+  content: "\f1fd";
+}
+.fa-area-chart:before {
+  content: "\f1fe";
+}
+.fa-pie-chart:before {
+  content: "\f200";
+}
+.fa-line-chart:before {
+  content: "\f201";
+}
+.fa-lastfm:before {
+  content: "\f202";
+}
+.fa-lastfm-square:before {
+  content: "\f203";
+}
+.fa-toggle-off:before {
+  content: "\f204";
+}
+.fa-toggle-on:before {
+  content: "\f205";
+}
+.fa-bicycle:before {
+  content: "\f206";
+}
+.fa-bus:before {
+  content: "\f207";
+}
+.fa-ioxhost:before {
+  content: "\f208";
+}
+.fa-angellist:before {
+  content: "\f209";
+}
+.fa-cc:before {
+  content: "\f20a";
+}
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+  content: "\f20b";
+}
+.fa-meanpath:before {
+  content: "\f20c";
+}
+.fa-buysellads:before {
+  content: "\f20d";
+}
+.fa-connectdevelop:before {
+  content: "\f20e";
+}
+.fa-dashcube:before {
+  content: "\f210";
+}
+.fa-forumbee:before {
+  content: "\f211";
+}
+.fa-leanpub:before {
+  content: "\f212";
+}
+.fa-sellsy:before {
+  content: "\f213";
+}
+.fa-shirtsinbulk:before {
+  content: "\f214";
+}
+.fa-simplybuilt:before {
+  content: "\f215";
+}
+.fa-skyatlas:before {
+  content: "\f216";
+}
+.fa-cart-plus:before {
+  content: "\f217";
+}
+.fa-cart-arrow-down:before {
+  content: "\f218";
+}
+.fa-diamond:before {
+  content: "\f219";
+}
+.fa-ship:before {
+  content: "\f21a";
+}
+.fa-user-secret:before {
+  content: "\f21b";
+}
+.fa-motorcycle:before {
+  content: "\f21c";
+}
+.fa-street-view:before {
+  content: "\f21d";
+}
+.fa-heartbeat:before {
+  content: "\f21e";
+}
+.fa-venus:before {
+  content: "\f221";
+}
+.fa-mars:before {
+  content: "\f222";
+}
+.fa-mercury:before {
+  content: "\f223";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+  content: "\f224";
+}
+.fa-transgender-alt:before {
+  content: "\f225";
+}
+.fa-venus-double:before {
+  content: "\f226";
+}
+.fa-mars-double:before {
+  content: "\f227";
+}
+.fa-venus-mars:before {
+  content: "\f228";
+}
+.fa-mars-stroke:before {
+  content: "\f229";
+}
+.fa-mars-stroke-v:before {
+  content: "\f22a";
+}
+.fa-mars-stroke-h:before {
+  content: "\f22b";
+}
+.fa-neuter:before {
+  content: "\f22c";
+}
+.fa-genderless:before {
+  content: "\f22d";
+}
+.fa-facebook-official:before {
+  content: "\f230";
+}
+.fa-pinterest-p:before {
+  content: "\f231";
+}
+.fa-whatsapp:before {
+  content: "\f232";
+}
+.fa-server:before {
+  content: "\f233";
+}
+.fa-user-plus:before {
+  content: "\f234";
+}
+.fa-user-times:before {
+  content: "\f235";
+}
+.fa-hotel:before,
+.fa-bed:before {
+  content: "\f236";
+}
+.fa-viacoin:before {
+  content: "\f237";
+}
+.fa-train:before {
+  content: "\f238";
+}
+.fa-subway:before {
+  content: "\f239";
+}
+.fa-medium:before {
+  content: "\f23a";
+}
+.fa-yc:before,
+.fa-y-combinator:before {
+  content: "\f23b";
+}
+.fa-optin-monster:before {
+  content: "\f23c";
+}
+.fa-opencart:before {
+  content: "\f23d";
+}
+.fa-expeditedssl:before {
+  content: "\f23e";
+}
+.fa-battery-4:before,
+.fa-battery:before,
+.fa-battery-full:before {
+  content: "\f240";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+  content: "\f241";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+  content: "\f242";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+  content: "\f243";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+  content: "\f244";
+}
+.fa-mouse-pointer:before {
+  content: "\f245";
+}
+.fa-i-cursor:before {
+  content: "\f246";
+}
+.fa-object-group:before {
+  content: "\f247";
+}
+.fa-object-ungroup:before {
+  content: "\f248";
+}
+.fa-sticky-note:before {
+  content: "\f249";
+}
+.fa-sticky-note-o:before {
+  content: "\f24a";
+}
+.fa-cc-jcb:before {
+  content: "\f24b";
+}
+.fa-cc-diners-club:before {
+  content: "\f24c";
+}
+.fa-clone:before {
+  content: "\f24d";
+}
+.fa-balance-scale:before {
+  content: "\f24e";
+}
+.fa-hourglass-o:before {
+  content: "\f250";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+  content: "\f251";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+  content: "\f252";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+  content: "\f253";
+}
+.fa-hourglass:before {
+  content: "\f254";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+  content: "\f255";
+}
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+  content: "\f256";
+}
+.fa-hand-scissors-o:before {
+  content: "\f257";
+}
+.fa-hand-lizard-o:before {
+  content: "\f258";
+}
+.fa-hand-spock-o:before {
+  content: "\f259";
+}
+.fa-hand-pointer-o:before {
+  content: "\f25a";
+}
+.fa-hand-peace-o:before {
+  content: "\f25b";
+}
+.fa-trademark:before {
+  content: "\f25c";
+}
+.fa-registered:before {
+  content: "\f25d";
+}
+.fa-creative-commons:before {
+  content: "\f25e";
+}
+.fa-gg:before {
+  content: "\f260";
+}
+.fa-gg-circle:before {
+  content: "\f261";
+}
+.fa-tripadvisor:before {
+  content: "\f262";
+}
+.fa-odnoklassniki:before {
+  content: "\f263";
+}
+.fa-odnoklassniki-square:before {
+  content: "\f264";
+}
+.fa-get-pocket:before {
+  content: "\f265";
+}
+.fa-wikipedia-w:before {
+  content: "\f266";
+}
+.fa-safari:before {
+  content: "\f267";
+}
+.fa-chrome:before {
+  content: "\f268";
+}
+.fa-firefox:before {
+  content: "\f269";
+}
+.fa-opera:before {
+  content: "\f26a";
+}
+.fa-internet-explorer:before {
+  content: "\f26b";
+}
+.fa-tv:before,
+.fa-television:before {
+  content: "\f26c";
+}
+.fa-contao:before {
+  content: "\f26d";
+}
+.fa-500px:before {
+  content: "\f26e";
+}
+.fa-amazon:before {
+  content: "\f270";
+}
+.fa-calendar-plus-o:before {
+  content: "\f271";
+}
+.fa-calendar-minus-o:before {
+  content: "\f272";
+}
+.fa-calendar-times-o:before {
+  content: "\f273";
+}
+.fa-calendar-check-o:before {
+  content: "\f274";
+}
+.fa-industry:before {
+  content: "\f275";
+}
+.fa-map-pin:before {
+  content: "\f276";
+}
+.fa-map-signs:before {
+  content: "\f277";
+}
+.fa-map-o:before {
+  content: "\f278";
+}
+.fa-map:before {
+  content: "\f279";
+}
+.fa-commenting:before {
+  content: "\f27a";
+}
+.fa-commenting-o:before {
+  content: "\f27b";
+}
+.fa-houzz:before {
+  content: "\f27c";
+}
+.fa-vimeo:before {
+  content: "\f27d";
+}
+.fa-black-tie:before {
+  content: "\f27e";
+}
+.fa-fonticons:before {
+  content: "\f280";
+}
+.fa-reddit-alien:before {
+  content: "\f281";
+}
+.fa-edge:before {
+  content: "\f282";
+}
+.fa-credit-card-alt:before {
+  content: "\f283";
+}
+.fa-codiepie:before {
+  content: "\f284";
+}
+.fa-modx:before {
+  content: "\f285";
+}
+.fa-fort-awesome:before {
+  content: "\f286";
+}
+.fa-usb:before {
+  content: "\f287";
+}
+.fa-product-hunt:before {
+  content: "\f288";
+}
+.fa-mixcloud:before {
+  content: "\f289";
+}
+.fa-scribd:before {
+  content: "\f28a";
+}
+.fa-pause-circle:before {
+  content: "\f28b";
+}
+.fa-pause-circle-o:before {
+  content: "\f28c";
+}
+.fa-stop-circle:before {
+  content: "\f28d";
+}
+.fa-stop-circle-o:before {
+  content: "\f28e";
+}
+.fa-shopping-bag:before {
+  content: "\f290";
+}
+.fa-shopping-basket:before {
+  content: "\f291";
+}
+.fa-hashtag:before {
+  content: "\f292";
+}
+.fa-bluetooth:before {
+  content: "\f293";
+}
+.fa-bluetooth-b:before {
+  content: "\f294";
+}
+.fa-percent:before {
+  content: "\f295";
+}
+.fa-gitlab:before {
+  content: "\f296";
+}
+.fa-wpbeginner:before {
+  content: "\f297";
+}
+.fa-wpforms:before {
+  content: "\f298";
+}
+.fa-envira:before {
+  content: "\f299";
+}
+.fa-universal-access:before {
+  content: "\f29a";
+}
+.fa-wheelchair-alt:before {
+  content: "\f29b";
+}
+.fa-question-circle-o:before {
+  content: "\f29c";
+}
+.fa-blind:before {
+  content: "\f29d";
+}
+.fa-audio-description:before {
+  content: "\f29e";
+}
+.fa-volume-control-phone:before {
+  content: "\f2a0";
+}
+.fa-braille:before {
+  content: "\f2a1";
+}
+.fa-assistive-listening-systems:before {
+  content: "\f2a2";
+}
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+  content: "\f2a3";
+}
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+  content: "\f2a4";
+}
+.fa-glide:before {
+  content: "\f2a5";
+}
+.fa-glide-g:before {
+  content: "\f2a6";
+}
+.fa-signing:before,
+.fa-sign-language:before {
+  content: "\f2a7";
+}
+.fa-low-vision:before {
+  content: "\f2a8";
+}
+.fa-viadeo:before {
+  content: "\f2a9";
+}
+.fa-viadeo-square:before {
+  content: "\f2aa";
+}
+.fa-snapchat:before {
+  content: "\f2ab";
+}
+.fa-snapchat-ghost:before {
+  content: "\f2ac";
+}
+.fa-snapchat-square:before {
+  content: "\f2ad";
+}
+.fa-pied-piper:before {
+  content: "\f2ae";
+}
+.fa-first-order:before {
+  content: "\f2b0";
+}
+.fa-yoast:before {
+  content: "\f2b1";
+}
+.fa-themeisle:before {
+  content: "\f2b2";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+  content: "\f2b3";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+  content: "\f2b4";
+}
+.fa-handshake-o:before {
+  content: "\f2b5";
+}
+.fa-envelope-open:before {
+  content: "\f2b6";
+}
+.fa-envelope-open-o:before {
+  content: "\f2b7";
+}
+.fa-linode:before {
+  content: "\f2b8";
+}
+.fa-address-book:before {
+  content: "\f2b9";
+}
+.fa-address-book-o:before {
+  content: "\f2ba";
+}
+.fa-vcard:before,
+.fa-address-card:before {
+  content: "\f2bb";
+}
+.fa-vcard-o:before,
+.fa-address-card-o:before {
+  content: "\f2bc";
+}
+.fa-user-circle:before {
+  content: "\f2bd";
+}
+.fa-user-circle-o:before {
+  content: "\f2be";
+}
+.fa-user-o:before {
+  content: "\f2c0";
+}
+.fa-id-badge:before {
+  content: "\f2c1";
+}
+.fa-drivers-license:before,
+.fa-id-card:before {
+  content: "\f2c2";
+}
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+  content: "\f2c3";
+}
+.fa-quora:before {
+  content: "\f2c4";
+}
+.fa-free-code-camp:before {
+  content: "\f2c5";
+}
+.fa-telegram:before {
+  content: "\f2c6";
+}
+.fa-thermometer-4:before,
+.fa-thermometer:before,
+.fa-thermometer-full:before {
+  content: "\f2c7";
+}
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+  content: "\f2c8";
+}
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+  content: "\f2c9";
+}
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+  content: "\f2ca";
+}
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+  content: "\f2cb";
+}
+.fa-shower:before {
+  content: "\f2cc";
+}
+.fa-bathtub:before,
+.fa-s15:before,
+.fa-bath:before {
+  content: "\f2cd";
+}
+.fa-podcast:before {
+  content: "\f2ce";
+}
+.fa-window-maximize:before {
+  content: "\f2d0";
+}
+.fa-window-minimize:before {
+  content: "\f2d1";
+}
+.fa-window-restore:before {
+  content: "\f2d2";
+}
+.fa-times-rectangle:before,
+.fa-window-close:before {
+  content: "\f2d3";
+}
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+  content: "\f2d4";
+}
+.fa-bandcamp:before {
+  content: "\f2d5";
+}
+.fa-grav:before {
+  content: "\f2d6";
+}
+.fa-etsy:before {
+  content: "\f2d7";
+}
+.fa-imdb:before {
+  content: "\f2d8";
+}
+.fa-ravelry:before {
+  content: "\f2d9";
+}
+.fa-eercast:before {
+  content: "\f2da";
+}
+.fa-microchip:before {
+  content: "\f2db";
+}
+.fa-snowflake-o:before {
+  content: "\f2dc";
+}
+.fa-superpowers:before {
+  content: "\f2dd";
+}
+.fa-wpexplorer:before {
+  content: "\f2de";
+}
+.fa-meetup:before {
+  content: "\f2e0";
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.min.css b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.min.css
new file mode 100644
index 0000000000..540440ce89
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/FontAwesome.otf b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/FontAwesome.otf
new file mode 100644
index 0000000000000000000000000000000000000000..401ec0f36e4f73b8efa40bd6f604fe80d286db70
GIT binary patch
literal 134808
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

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.eot b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928
GIT binary patch
literal 165742
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

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.svg b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000000..855c845e53
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+</metadata>
+<defs>
+<font id="FontAwesome" horiz-adv-x="1536" >
+  <font-face 
+    font-family="FontAwesome"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="1792"
+    panose-1="0 0 0 0 0 0 0 0 0 0"
+    ascent="1536"
+    descent="-256"
+    bbox="-1.02083 -256.962 2304.6 1537.02"
+    underline-thickness="0"
+    underline-position="0"
+    unicode-range="U+0020-F500"
+  />
+<missing-glyph horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".notdef" horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".null" horiz-adv-x="0" 
+ />
+    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" 
+ />
+    <glyph glyph-name="space" unicode=" " horiz-adv-x="448" 
+ />
+    <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792" 
+d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+    <glyph glyph-name="music" unicode="&#xf001;" 
+d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
+t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664" 
+d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
+t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792" 
+d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
+t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
+M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792" 
+d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
+q-18 -18 -44 -18z" />
+    <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664" 
+d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
+l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664" 
+d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
+l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280" 
+d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920" 
+d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
+q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
+t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
+q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
+t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664" 
+d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
+h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792" 
+d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+    <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408" 
+d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
+t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+    <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
+q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
+t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
+M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
+" />
+    <glyph glyph-name="off" unicode="&#xf011;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+    <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792" 
+d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="cog" unicode="&#xf013;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+    <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408" 
+d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664" 
+d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+    <glyph glyph-name="file_alt" unicode="&#xf016;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+" />
+    <glyph glyph-name="time" unicode="&#xf017;" 
+d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920" 
+d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+    <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664" 
+d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+    <glyph glyph-name="download" unicode="&#xf01a;" 
+d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="upload" unicode="&#xf01b;" 
+d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="inbox" unicode="&#xf01c;" 
+d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
+q25 -61 25 -123z" />
+    <glyph glyph-name="play_circle" unicode="&#xf01d;" 
+d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="repeat" unicode="&#xf01e;" 
+d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+    <glyph glyph-name="refresh" unicode="&#xf021;" 
+d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792" 
+d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152" 
+d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792" 
+d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664" 
+d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+    <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+    <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+    <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408" 
+d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+    <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792" 
+d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+    <glyph glyph-name="tag" unicode="&#xf02b;" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664" 
+d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+    <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280" 
+d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664" 
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+    <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920" 
+d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664" 
+d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+    <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408" 
+d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+    <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024" 
+d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+    <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792" 
+d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+    <glyph glyph-name="text_width" unicode="&#xf035;" 
+d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+    <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792" 
+d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792" 
+d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792" 
+d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792" 
+d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
+q39 -17 39 -59z" />
+    <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920" 
+d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="pencil" unicode="&#xf040;" 
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
+q53 0 91 -38l235 -234q37 -39 37 -91z" />
+    <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024" 
+d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+    <glyph glyph-name="adjust" unicode="&#xf042;" 
+d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024" 
+d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+    <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792" 
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+    <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664" 
+d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664" 
+d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
+q24 -24 24 -57t-24 -57z" />
+    <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024" 
+d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
+    <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792" 
+d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
+q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664" 
+d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408" 
+d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+    <glyph glyph-name="pause" unicode="&#xf04c;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="stop" unicode="&#xf04d;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
+    <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538" 
+d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+    <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280" 
+d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280" 
+d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="plus_sign" unicode="&#xf055;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="minus_sign" unicode="&#xf056;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="remove_sign" unicode="&#xf057;" 
+d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_sign" unicode="&#xf058;" 
+d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="question_sign" unicode="&#xf059;" 
+d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="info_sign" unicode="&#xf05a;" 
+d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="screenshot" unicode="&#xf05b;" 
+d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="remove_circle" unicode="&#xf05c;" 
+d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_circle" unicode="&#xf05d;" 
+d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ban_circle" unicode="&#xf05e;" 
+d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+    <glyph glyph-name="arrow_left" unicode="&#xf060;" 
+d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
+t32.5 -90.5z" />
+    <glyph glyph-name="arrow_right" unicode="&#xf061;" 
+d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+    <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664" 
+d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
+q37 -39 37 -91z" />
+    <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664" 
+d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+    <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792" 
+d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+    <glyph glyph-name="resize_full" unicode="&#xf065;" 
+d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="resize_small" unicode="&#xf066;" 
+d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+    <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664" 
+d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+    <glyph glyph-name="exclamation_sign" unicode="&#xf06a;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+    <glyph glyph-name="gift" unicode="&#xf06b;" 
+d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792" 
+d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+    <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408" 
+d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+    <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792" 
+d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+    <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792" 
+d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
+" />
+    <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792" 
+d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+    <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408" 
+d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+    <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664" 
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792" 
+d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792" 
+d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="magnet" unicode="&#xf076;" 
+d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792" 
+d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792" 
+d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920" 
+d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
+" />
+    <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664" 
+d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664" 
+d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920" 
+d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768" 
+d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048" 
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+    <glyph glyph-name="twitter_sign" unicode="&#xf081;" 
+d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="facebook_sign" unicode="&#xf082;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792" 
+d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792" 
+d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+    <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920" 
+d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+    <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792" 
+d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+    <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;" 
+d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
+    <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896" 
+d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+    <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792" 
+d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
+q224 0 351 -124t127 -344z" />
+    <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664" 
+d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+    <glyph glyph-name="linkedin_sign" unicode="&#xf08c;" 
+d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152" 
+d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+    <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792" 
+d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="signin" unicode="&#xf090;" 
+d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664" 
+d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="github_sign" unicode="&#xf092;" 
+d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664" 
+d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+    <glyph glyph-name="lemon" unicode="&#xf094;" 
+d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
+    <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408" 
+d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+    <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408" 
+d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280" 
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
+q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="phone_sign" unicode="&#xf098;" 
+d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
+" />
+    <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664" 
+d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+    <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024" 
+d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+    <glyph glyph-name="github" unicode="&#xf09b;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+    <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664" 
+d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
+t316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920" 
+d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+    <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408" 
+d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
+q187 -186 294 -425.5t120 -501.5z" />
+    <glyph glyph-name="hdd" unicode="&#xf0a0;" 
+d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+    <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792" 
+d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+    <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="certificate" unicode="&#xf0a3;" 
+d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+    <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792" 
+d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="hand_up" unicode="&#xf0a6;" 
+d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+    <glyph glyph-name="hand_down" unicode="&#xf0a7;" 
+d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+    <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;" 
+d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;" 
+d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;" 
+d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="globe" unicode="&#xf0ac;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
+q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
+q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
+q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
+t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
+q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
+q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
+t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
+t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
+q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
+q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
+q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
+t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
+q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
+q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+    <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664" 
+d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
+t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+    <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792" 
+d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
+t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408" 
+d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+    <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792" 
+d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
+t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="fullscreen" unicode="&#xf0b2;" 
+d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
+l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
+" />
+    <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920" 
+d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
+t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
+t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+    <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664" 
+d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
+l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
+t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
+q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+    <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920" 
+d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
+" />
+    <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664" 
+d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+    <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792" 
+d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
+q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
+q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
+q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
+q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+    <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792" 
+d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
+h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+    <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408" 
+d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
+l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
+z" />
+    <glyph glyph-name="save" unicode="&#xf0c7;" 
+d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
+h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="sign_blank" unicode="&#xf0c8;" 
+d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="reorder" unicode="&#xf0c9;" 
+d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
+t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792" 
+d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
+M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792" 
+d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
+q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
+t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
+q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792" 
+d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
+l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
+l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+    <glyph glyph-name="underline" unicode="&#xf0cd;" 
+d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
+q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
+q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
+q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+    <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664" 
+d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
+v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
+q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
+q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
+z" />
+    <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664" 
+d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
+l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+    <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792" 
+d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
+t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
+t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="pinterest" unicode="&#xf0d2;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
+q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
+q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
+t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
+t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;" 
+d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
+h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304" 
+d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
+q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+    <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920" 
+d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
+v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024" 
+d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640" 
+d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640" 
+d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664" 
+d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792" 
+d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
+q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+    <glyph glyph-name="linkedin" unicode="&#xf0e1;" 
+d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
+q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+    <glyph glyph-name="undo" unicode="&#xf0e2;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+    <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792" 
+d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
+t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
+q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
+q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+    <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792" 
+d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
+t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
+t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
+q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792" 
+d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
+q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
+t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792" 
+d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
+t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
+t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
+q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+    <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896" 
+d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+    <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792" 
+d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664" 
+d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
+q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
+q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+    <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792" 
+d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
+h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024" 
+d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
+q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
+q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
+t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+    <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792" 
+d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
+q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920" 
+d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920" 
+d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408" 
+d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
+t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
+t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
+t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
+t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792" 
+d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
+t66 -158z" />
+    <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
+t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920" 
+d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
+t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408" 
+d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
+t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="file_text_alt" unicode="&#xf0f6;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
+q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+    <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
+t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
+v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920" 
+d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
+q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792" 
+d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
+q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920" 
+d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
+q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
+    <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664" 
+d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+    <glyph glyph-name="h_sign" unicode="&#xf0fd;" 
+d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="f0fe" unicode="&#xf0fe;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024" 
+d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
+l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152" 
+d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
+q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152" 
+d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640" 
+d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152" 
+d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152" 
+d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920" 
+d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
+t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920" 
+d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
+M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+    <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152" 
+d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
+q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768" 
+d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
+q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="circle_blank" unicode="&#xf10c;" 
+d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
+t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664" 
+d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
+M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664" 
+d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
+v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792" 
+d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
+M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
+q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="circle" unicode="&#xf111;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792" 
+d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
+l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+    <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664" 
+d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
+q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
+t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
+q0 -87 -27 -168q136 -160 136 -398z" />
+    <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664" 
+d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
+q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920" 
+d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
+v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
+" />
+    <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="smile" unicode="&#xf118;" 
+d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
+t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="frown" unicode="&#xf119;" 
+d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
+t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="meh" unicode="&#xf11a;" 
+d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920" 
+d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
+t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+    <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920" 
+d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
+h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
+h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
+q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
+h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792" 
+d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
+h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
+q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792" 
+d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
+q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
+q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
+q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664" 
+d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920" 
+d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
+l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+    <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792" 
+d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
+q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+    <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664" 
+d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
+l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+    <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408" 
+d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+    <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664" 
+d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024" 
+d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
+q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
+q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664" 
+d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
+q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
+l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
+t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024" 
+d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
+t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+    <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640" 
+d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
+q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640" 
+d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+    <glyph glyph-name="superscript" unicode="&#xf12b;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
+t-65.5 -51.5t-30.5 -63h232v80h126z" />
+    <glyph glyph-name="subscript" unicode="&#xf12c;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
+h232v80h126z" />
+    <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920" 
+d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+    <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664" 
+d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
+t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
+q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
+q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+    <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152" 
+d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
+t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+    <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408" 
+d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
+q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
+t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+    <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280" 
+d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
+t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664" 
+d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408" 
+d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
+q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
+q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+    <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664" 
+d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
+q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+    <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792" 
+d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+    <glyph glyph-name="chevron_sign_left" unicode="&#xf137;" 
+d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_right" unicode="&#xf138;" 
+d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_up" unicode="&#xf139;" 
+d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;" 
+d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408" 
+d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+    <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792" 
+d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+    <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792" 
+d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
+q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
+t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152" 
+d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
+v-320h736z" />
+    <glyph glyph-name="bullseye" unicode="&#xf140;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
+t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408" 
+d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384" 
+d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="_303" unicode="&#xf143;" 
+d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
+q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="play_sign" unicode="&#xf144;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
+q16 -8 32 -8q17 0 32 9z" />
+    <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792" 
+d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
+t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+    <glyph glyph-name="minus_sign_alt" unicode="&#xf146;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
+t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024" 
+d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+    <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024" 
+d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+    <glyph glyph-name="check_sign" unicode="&#xf14a;" 
+d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
+t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="edit_sign" unicode="&#xf14b;" 
+d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_312" unicode="&#xf14c;" 
+d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
+q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="share_sign" unicode="&#xf14d;" 
+d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
+t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="compass" unicode="&#xf14e;" 
+d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="collapse" unicode="&#xf150;" 
+d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="collapse_top" unicode="&#xf151;" 
+d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_317" unicode="&#xf152;" 
+d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024" 
+d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
+t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
+l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+    <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024" 
+d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
+q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+    <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024" 
+d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
+t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
+t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
+t53 -63.5t31.5 -76.5t13 -94z" />
+    <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898" 
+d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
+q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027" 
+d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
+l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+    <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280" 
+d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
+q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+    <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792" 
+d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
+t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
+q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280" 
+d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
+l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
+t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+    <glyph glyph-name="file" unicode="&#xf15b;" 
+d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+    <glyph glyph-name="file_text" unicode="&#xf15c;" 
+d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+    <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664" 
+d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
+v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
+l230 -662h70z" />
+    <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664" 
+d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
+v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
+v119h121z" />
+    <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792" 
+d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
+q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792" 
+d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
+q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_order" unicode="&#xf162;" 
+d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
+zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
+t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+    <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;" 
+d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
+t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
+q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+    <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664" 
+d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
+q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
+t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+    <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664" 
+d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
+t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
+t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+    <glyph glyph-name="youtube_sign" unicode="&#xf166;" 
+d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
+q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
+q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
+q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
+q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
+h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube" unicode="&#xf167;" 
+d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
+q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
+q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
+q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
+q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+    <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408" 
+d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
+q25 45 64 45h241q22 0 31 -15z" />
+    <glyph glyph-name="xing_sign" unicode="&#xf169;" 
+d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
+l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792" 
+d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
+l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
+q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
+    <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792" 
+d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+    <glyph glyph-name="stackexchange" unicode="&#xf16c;" 
+d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
+    <glyph glyph-name="instagram" unicode="&#xf16d;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
+q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
+t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
+q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
+    <glyph glyph-name="flickr" unicode="&#xf16e;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
+t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+    <glyph glyph-name="adn" unicode="&#xf170;" 
+d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408" 
+d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
+t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
+t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
+t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+    <glyph glyph-name="bitbucket_sign" unicode="&#xf172;" 
+d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
+t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
+M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024" 
+d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
+q78 2 134 29z" />
+    <glyph glyph-name="tumblr_sign" unicode="&#xf174;" 
+d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768" 
+d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+    <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768" 
+d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+    <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792" 
+d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792" 
+d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+    <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408" 
+d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
+q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+    <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664" 
+d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+    <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408" 
+d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
+t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
+h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+    <glyph glyph-name="linux" unicode="&#xf17c;" 
+d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
+M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
+q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
+q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
+t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
+q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
+q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
+q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
+q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
+t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
+t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
+q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
+t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
+q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
+t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
+t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+    <glyph glyph-name="dribble" unicode="&#xf17d;" 
+d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
+t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
+q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
+t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="skype" unicode="&#xf17e;" 
+d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
+t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
+q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
+q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+    <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280" 
+d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
+M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
+l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+    <glyph glyph-name="trello" unicode="&#xf181;" 
+d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
+q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280" 
+d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
+q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024" 
+d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
+M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="gittip" unicode="&#xf184;" 
+d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792" 
+d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
+l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
+q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+    <glyph glyph-name="_366" unicode="&#xf186;" 
+d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
+t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+    <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792" 
+d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
+q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664" 
+d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
+q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
+t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+    <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920" 
+d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
+t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
+q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
+q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
+q39 5 64 -2.5t31 -16.5z" />
+    <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792" 
+d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
+q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
+q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
+q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
+M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+    <glyph glyph-name="renren" unicode="&#xf18b;" 
+d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
+q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+    <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408" 
+d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
+t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
+t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
+t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+    <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280" 
+d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
+" />
+    <glyph glyph-name="_374" unicode="&#xf18e;" 
+d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;" 
+d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_376" unicode="&#xf191;" 
+d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="dot_circle_alt" unicode="&#xf192;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
+t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664" 
+d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
+q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+    <glyph glyph-name="vimeo_square" unicode="&#xf194;" 
+d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
+q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152" 
+d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
+q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
+q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176" 
+d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
+t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
+q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+    <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664" 
+d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
+q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
+t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+    <glyph glyph-name="_384" unicode="&#xf199;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
+q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
+t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+    <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792" 
+d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
+t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
+t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
+t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
+t273 -182.5t331.5 -68z" />
+    <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792" 
+d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+    <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048" 
+d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
+q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+    <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304" 
+d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
+q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+    <glyph glyph-name="_389" unicode="&#xf19e;" 
+d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
+q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+    <glyph glyph-name="uniF1A0" unicode="&#xf1a0;" 
+d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
+t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
+    <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792" 
+d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
+t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
+q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
+t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_392" unicode="&#xf1a2;" 
+d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
+q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
+q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_393" unicode="&#xf1a3;" 
+d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
+v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
+t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920" 
+d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
+v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+    <glyph glyph-name="_395" unicode="&#xf1a5;" 
+d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048" 
+d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
+v-369h123z" />
+    <glyph glyph-name="_397" unicode="&#xf1a7;" 
+d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
+v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038" 
+d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
+q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
+q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
+q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
+t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
+q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
+t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
+t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+    <glyph glyph-name="_399" unicode="&#xf1a9;" 
+d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
+q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
+q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
+t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
+q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+    <glyph glyph-name="_400" unicode="&#xf1aa;" 
+d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
+M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
+t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
+q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
+t135.5 51q85 0 145 -60.5t60 -145.5z" />
+    <glyph glyph-name="f1ab" unicode="&#xf1ab;" 
+d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
+q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
+q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
+M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
+q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
+q20 0 20 -21v-418z" />
+    <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792" 
+d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
+l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
+t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
+q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
+q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+    <glyph glyph-name="_403" unicode="&#xf1ad;" 
+d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
+t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
+t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
+t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+    <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280" 
+d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
+q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664" 
+d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
+q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
+q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
+t100.5 134t141.5 55.5z" />
+    <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768" 
+d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+    <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792" 
+d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
+" />
+    <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304" 
+d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
+t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
+v-400l434 -186q36 -16 57 -48t21 -70z" />
+    <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048" 
+d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
+q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
+q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+    <glyph glyph-name="_410" unicode="&#xf1b5;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
+t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
+t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+    <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792" 
+d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
+q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
+q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+    <glyph glyph-name="_412" unicode="&#xf1b7;" 
+d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
+q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
+q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
+" />
+    <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792" 
+d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
+l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
+t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
+q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+    <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048" 
+d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
+q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
+l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048" 
+d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
+t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
+M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+    <glyph glyph-name="_416" unicode="&#xf1bb;" 
+d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
+q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+    <glyph glyph-name="_417" unicode="&#xf1bc;" 
+d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
+q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
+q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024" 
+d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+    <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304" 
+d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
+q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
+q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
+l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
+q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
+q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
+q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+    <glyph glyph-name="uniF1C0" unicode="&#xf1c0;" 
+d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
+t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
+t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+    <glyph glyph-name="uniF1C1" unicode="&#xf1c1;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
+q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
+q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+    <glyph glyph-name="_422" unicode="&#xf1c2;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
+t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
+    <glyph glyph-name="_423" unicode="&#xf1c3;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
+h-290v-107h68l189 -272l-194 -283h-68z" />
+    <glyph glyph-name="_424" unicode="&#xf1c4;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+    <glyph glyph-name="_425" unicode="&#xf1c5;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+    <glyph glyph-name="_426" unicode="&#xf1c6;" 
+d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
+v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
+q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+    <glyph glyph-name="_427" unicode="&#xf1c7;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
+q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+    <glyph glyph-name="_428" unicode="&#xf1c8;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+    <glyph glyph-name="_429" unicode="&#xf1c9;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
+l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+    <glyph glyph-name="_430" unicode="&#xf1ca;" 
+d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
+q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+    <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792" 
+d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
+q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+    <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048" 
+d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
+q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
+t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
+    <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
+q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
+t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+    <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792" 
+d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
+t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
+    <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792" 
+d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
+t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
+t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
+q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+    <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792" 
+d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
+l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
+q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
+q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
+t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF1D2" unicode="&#xf1d2;" 
+d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
+q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
+q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
+q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792" 
+d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
+q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
+q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
+v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+    <glyph glyph-name="_439" unicode="&#xf1d4;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280" 
+d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
+t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
+t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+    <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792" 
+d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
+q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
+t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
+t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+    <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048" 
+d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
+q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
+q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
+q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+    <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+    <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
+l863 639l-478 -797z" />
+    <glyph glyph-name="_445" unicode="&#xf1da;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
+t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_446" unicode="&#xf1db;" 
+d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792" 
+d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
+t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
+t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
+q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
+q0 -26 -12 -48t-36 -22z" />
+    <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280" 
+d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
+q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+    <glyph glyph-name="_449" unicode="&#xf1de;" 
+d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
+q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+    <glyph glyph-name="uniF1E0" unicode="&#xf1e0;" 
+d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
+t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+    <glyph glyph-name="_451" unicode="&#xf1e1;" 
+d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
+t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792" 
+d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
+t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
+q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
+t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792" 
+d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
+l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+    <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792" 
+d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
+t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+    <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792" 
+d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
+M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792" 
+d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
+l401 400q38 37 91 37t90 -37z" />
+    <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792" 
+d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
+t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
+M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
+t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+    <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792" 
+d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+    <glyph glyph-name="_459" unicode="&#xf1e9;" 
+d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
+q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
+t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
+q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+    <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048" 
+d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
+t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+    <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048" 
+d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
+q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
+M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+    <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792" 
+d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
+t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
+h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_463" unicode="&#xf1ed;" 
+d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
+q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
+q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+    <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792" 
+d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
+q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
+    <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304" 
+d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
+q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
+q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304" 
+d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
+q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
+M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
+h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
+q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
+q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
+q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
+q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
+q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
+h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
+t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304" 
+d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
+q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
+v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
+q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
+t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+    <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304" 
+d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
+M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
+l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
+v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
+q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
+q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
+t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
+h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
+t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+    <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304" 
+d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
+t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
+q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
+t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
+l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
+q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304" 
+d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
+q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
+q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
+q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
+q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048" 
+d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
+l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
+l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048" 
+d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
+q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
+q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408" 
+d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
+q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_474" unicode="&#xf1f9;" 
+d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
+t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
+t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_475" unicode="&#xf1fa;" 
+d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
+q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
+t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
+t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+    <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792" 
+d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
+t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+    <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792" 
+d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
+t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+    <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792" 
+d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
+t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
+t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
+h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
+q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+    <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+    <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792" 
+d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792" 
+d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
+q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
+t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
+q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+    <glyph glyph-name="_483" unicode="&#xf203;" 
+d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
+q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
+q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048" 
+d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
+t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
+t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+    <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048" 
+d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
+t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+    <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304" 
+d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
+q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
+q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
+q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="_487" unicode="&#xf207;" 
+d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
+h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+    <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048" 
+d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
+q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
+q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+    <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280" 
+d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
+t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
+t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
+q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
+q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
+t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+    <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048" 
+d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
+q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
+t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
+t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+    <glyph glyph-name="_491" unicode="&#xf20b;" 
+d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
+t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_492" unicode="&#xf20c;" 
+d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
+q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
+q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+    <glyph glyph-name="_493" unicode="&#xf20d;" 
+d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+    <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048" 
+d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
+q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
+q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
+h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
+l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
+l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
+zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+    <glyph glyph-name="f210" unicode="&#xf210;" 
+d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+    <glyph glyph-name="_496" unicode="&#xf211;" 
+d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
+q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+    <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048" 
+d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
+q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
+q209 0 374 -102q172 107 374 102z" />
+    <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048" 
+d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
+q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
+q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+    <glyph glyph-name="_499" unicode="&#xf214;" 
+d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
+h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
+t-43 -34t-16.5 -53.5z" />
+    <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048" 
+d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
+q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+    <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048" 
+d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
+t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
+t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
+q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+    <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664" 
+d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048" 
+d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
+l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+    <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048" 
+d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
+q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
+v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+    <glyph glyph-name="_506" unicode="&#xf21b;" 
+d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
+t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
+q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
+t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+    <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304" 
+d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
+t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
+l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
+t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+    <glyph glyph-name="_508" unicode="&#xf21d;" 
+d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
+q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
+q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
+t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792" 
+d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
+q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
+t127 -344z" />
+    <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
+q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+    <glyph glyph-name="_511" unicode="&#xf222;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
+q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280" 
+d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
+t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_513" unicode="&#xf224;" 
+d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792" 
+d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
+t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792" 
+d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
+t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
+q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
+q0 -226 -154 -391q103 -57 218 -57z" />
+    <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920" 
+d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
+q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
+t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
+q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+    <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048" 
+d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
+t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
+t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
+t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+    <glyph glyph-name="_518" unicode="&#xf229;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
+t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280" 
+d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
+t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
+t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048" 
+d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
+t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
+t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280" 
+d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
+t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+    <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_525" unicode="&#xf230;" 
+d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+    <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280" 
+d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
+l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
+q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+    <glyph glyph-name="_527" unicode="&#xf232;" 
+d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
+t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
+l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+    <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792" 
+d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
+q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+    <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
+t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+    <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
+q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
+t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+    <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048" 
+d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
+q-26 0 -45 -19t-19 -45v-384h1152z" />
+    <glyph glyph-name="_532" unicode="&#xf237;" 
+d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+    <glyph glyph-name="_533" unicode="&#xf238;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
+t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+    <glyph glyph-name="_534" unicode="&#xf239;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
+t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+    <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792" 
+d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
+q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
+    <glyph glyph-name="_536" unicode="&#xf23b;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+    <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296" 
+d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
+q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
+q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
+q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
+q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
+q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
+q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
+t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
+q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
+q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
+M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
+t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
+q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
+l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
+t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
+q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
+q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+    <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304" 
+d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
+t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
+t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+    <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792" 
+d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
+t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
+t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
+q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+    <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304" 
+d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
+v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304" 
+d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304" 
+d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304" 
+d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304" 
+d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
+v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280" 
+d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+    <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024" 
+d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+    <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048" 
+d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+    <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304" 
+d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+    <glyph glyph-name="_549" unicode="&#xf249;" 
+d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+    <glyph glyph-name="_550" unicode="&#xf24a;" 
+d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304" 
+d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
+t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
+t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
+t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304" 
+d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
+t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
+M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792" 
+d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
+zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304" 
+d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
+t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
+t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+    <glyph glyph-name="_555" unicode="&#xf250;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
+t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_556" unicode="&#xf251;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+    <glyph glyph-name="_557" unicode="&#xf252;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+    <glyph glyph-name="_558" unicode="&#xf253;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
+h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_559" unicode="&#xf254;" 
+d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
+t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
+h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+    <glyph glyph-name="_560" unicode="&#xf255;" 
+d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
+q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
+t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
+q72 69 174 69z" />
+    <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792" 
+d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
+t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
+h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+    <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792" 
+d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
+q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
+t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
+t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
+q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+    <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048" 
+d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
+q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
+q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+    <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048" 
+d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
+t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
+q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
+l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
+    <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792" 
+d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
+q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
+v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
+v-384h32z" />
+    <glyph glyph-name="_566" unicode="&#xf25b;" 
+d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
+v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
+q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
+q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
+q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+    <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973" 
+d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
+t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
+q13 0 22 -8.5t10 -20.5z" />
+    <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792" 
+d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
+t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
+q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792" 
+d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
+q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
+t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
+q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+    <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048" 
+d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+    <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792" 
+d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304" 
+d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
+t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
+t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
+t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
+t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
+q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+    <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280" 
+d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
+t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
+q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+    <glyph glyph-name="_574" unicode="&#xf264;" 
+d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
+q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
+zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720" 
+d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
+l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+    <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304" 
+d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
+q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
+l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+    <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792" 
+d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
+q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
+t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
+t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
+t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
+t191 -286t71 -348z" />
+    <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792" 
+d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
+q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+    <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792" 
+d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
+q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
+q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+    <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792" 
+d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
+q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
+" />
+    <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792" 
+d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
+q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
+M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
+    <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048" 
+d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
+v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792" 
+d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
+h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
+q-68 175 -180 287z" />
+    <glyph glyph-name="_584" unicode="&#xf26e;" 
+d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
+q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
+q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
+q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
+q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
+t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
+    <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792" 
+d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
+M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
+q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
+t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
+q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+    <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792" 
+d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
+h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
+v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+    <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792" 
+d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
+t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792" 
+d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
+M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792" 
+d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
+t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792" 
+d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+    <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024" 
+d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
+q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+    <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792" 
+d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
+q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+    <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048" 
+d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
+v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+    <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792" 
+d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
+q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+    <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792" 
+d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
+t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792" 
+d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
+t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
+t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+    <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024" 
+d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+    <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792" 
+d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
+q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+    <glyph glyph-name="f27e" unicode="&#xf27e;" 
+d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+    <glyph glyph-name="uniF280" unicode="&#xf280;" 
+d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
+h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
+l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+    <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792" 
+d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
+l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
+t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
+q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
+    <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792" 
+d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
+q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
+    <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304" 
+d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
+    <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792" 
+d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
+t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
+t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
+    <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792" 
+d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
+    <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792" 
+d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
+q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
+q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
+q16 0 16 -16z" />
+    <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304" 
+d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
+q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
+t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
+    <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792" 
+d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
+t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304" 
+d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
+q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
+q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
+q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
+    <glyph glyph-name="_610" unicode="&#xf28a;" 
+d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
+t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
+q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
+t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
+    <glyph glyph-name="_611" unicode="&#xf28b;" 
+d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
+t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_612" unicode="&#xf28c;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
+    <glyph glyph-name="_613" unicode="&#xf28d;" 
+d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="_614" unicode="&#xf28e;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
+    <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792" 
+d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048" 
+d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
+t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
+q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
+h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
+    <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792" 
+d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
+q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
+q15 0 25 -12q9 -12 6 -28z" />
+    <glyph glyph-name="_618" unicode="&#xf293;" 
+d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
+t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
+    <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024" 
+d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+    <glyph glyph-name="_620" unicode="&#xf295;" 
+d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5
+t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792" 
+d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
+    <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792" 
+d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
+q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
+    <glyph glyph-name="_623" unicode="&#xf298;" 
+d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
+t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
+    <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792" 
+d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
+q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
+q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
+    <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792" 
+d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
+q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
+t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_626" unicode="&#xf29b;" 
+d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
+l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
+M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
+    <glyph glyph-name="_627" unicode="&#xf29c;" 
+d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
+t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
+t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
+t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408" 
+d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
+q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
+q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
+q3 -1 7 1t7 4l3 2q11 9 11 17z" />
+    <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304" 
+d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
+t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
+t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
+h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
+t9.5 -70.5z" />
+    <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408" 
+d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
+q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
+l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
+t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
+q-18 -19 -45 -19z" />
+    <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176" 
+d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
+t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
+t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
+t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
+t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792" 
+d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
+M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
+t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
+t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
+q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
+    <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304" 
+d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
+q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
+q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
+q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
+q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
+q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
+    <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792" 
+d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
+t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
+t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
+l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
+    <glyph glyph-name="uniF2A5" unicode="&#xf2a5;" 
+d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
+q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
+q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535" 
+d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
+l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
+q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
+q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
+    <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664" 
+d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
+t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
+l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
+q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
+l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
+    <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792" 
+d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
+q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
+q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
+q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
+    <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280" 
+d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
+q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
+M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
+    <glyph glyph-name="uniF2AA" unicode="&#xf2aa;" 
+d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
+M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
+q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AB" unicode="&#xf2ab;" 
+d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
+q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
+t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664" 
+d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
+q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
+t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
+    <glyph glyph-name="uniF2AD" unicode="&#xf2ad;" 
+d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
+q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
+t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304" 
+d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
+q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
+q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
+    <glyph glyph-name="uniF2B0" unicode="&#xf2b0;" 
+d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
+q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
+l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
+M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+    <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664" 
+d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
+t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
+    <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792" 
+d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
+t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
+q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
+q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
+t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
+q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
+q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
+t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
+    <glyph glyph-name="uniF2B3" unicode="&#xf2b3;" 
+d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="uniF2B4" unicode="&#xf2b4;" 
+d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
+q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304" 
+d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
+l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
+q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
+M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
+q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792" 
+d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
+t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
+q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
+    <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792" 
+d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
+l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
+h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
+q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
+    <glyph glyph-name="uniF2B8" unicode="&#xf2b8;" 
+d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
+l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
+q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
+q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
+    <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664" 
+d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
+q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
+q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664" 
+d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
+t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
+q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
+q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
+    <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048" 
+d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
+M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
+q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
+h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048" 
+d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
+q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
+q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
+t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
+t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792" 
+d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
+t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
+t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" />
+    <glyph glyph-name="uniF2C0" unicode="&#xf2c0;" 
+d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
+t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
+q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
+    <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280" 
+d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
+t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
+q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048" 
+d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
+t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
+v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
+q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048" 
+d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
+M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
+h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792" 
+d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
+q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
+t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
+    <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304" 
+d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
+t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
+t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
+t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
+q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
+t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
+q2 -42 2 -64z" />
+    <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792" 
+d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
+M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
+    <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920" 
+d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
+t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
+t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
+t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
+    <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792" 
+d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
+q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
+t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
+t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
+    <glyph glyph-name="uniF2CE" unicode="&#xf2ce;" 
+d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
+t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
+q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
+q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
+t72.5 -263.5z" />
+    <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792" 
+d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792" 
+d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048" 
+d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792" 
+d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
+l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792" 
+d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792" 
+d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794" 
+d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
+t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
+t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
+q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
+q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
+q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
+t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D7" unicode="&#xf2d7;" 
+d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
+q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
+t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
+    <glyph glyph-name="uniF2D8" unicode="&#xf2d8;" 
+d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
+t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
+h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
+v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176" 
+d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
+q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
+q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
+q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
+q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
+t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
+    <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792" 
+d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
+q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
+t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
+t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
+t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
+    <glyph glyph-name="uniF2DB" unicode="&#xf2db;" 
+d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
+q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
+t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
+q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
+h48q16 0 16 -16z" />
+    <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664" 
+d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
+t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
+q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
+l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
+q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
+    <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792" 
+d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
+q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
+    <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792" 
+d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
+t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
+t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920" 
+d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
+t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
+q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
+q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
+t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
+q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
+M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
+q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
+q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
+    <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792" 
+ />
+  </font>
+</defs></svg>
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3
GIT binary patch
literal 165548
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

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.woff b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b
GIT binary patch
literal 98024
zcmZTubC4&$(_Y)Q?OXfSHg9d)wr$(CZSQ{8wr%e%e)p|<|9eyQq|;BjCzE7qGMTiS
zyqFjeFc1(Bu<scV{67g2S`7pS1o^M@|B{%PitIl_rhgT9|G}zPyhB_>RO}xo^G_%I
z2O^L=ATW7lM&^H<^*^2eAN0eSJq3(x4DA1L)&F4euaO6sK5joV1E+r+DAqq4sQ>Wu
z0|aVj?P2<lBLV`}^8f;o>5hA?l{GgpFa`oP%>HM?@(=7t5y$lA|Hyyb+&}%lcF7Py
zVOq>>oZbI%cmJ;c1Ox<gC+dL}Vr^&i&(7os2nZ4b2nZGl<hfAW#=zbF-|c<=pDz(8
z9SEMSfsF|eu+6`IfrtPBfrTEXMOE9|IXMFX+vx)VA%*|};keYrWflDM`ERs<ruhnI
z|C3YlyiEVerC;V9?%78A#`^kupoY*8Ncx8V%EsJaWE%av5I}J4K(9dm)tgQkXZQC{
z_V+Ig8BX{2&p{MqL}FuMbz$B42Tm3mLO?=<)WKQ9{RDWkLx{yQktU*mLx=&*O+ncL
z{qvtm+?6_TKpHtUvotw*=kF)E02S%+ALsXn@>&!PmnY&6cmq2?4Nt?RBbj#@*S#u%
z($dm;AKJG3Yv)w@yrS19dscW!&dp@T$utcaiktwRu?l%Fgn7##v*Q%&IaI$|O!P}5
zE!tXI-Ss#N&%~+2xwep6)=D=@bER^nrNZX=A{Jq3H3E=sm}xcLG|pUA-88}8wRPyv
zPnoSTxscjcm{McuVx_s+*=h#*Xv3UB1T}&E{uxPi!CD1QZy{>6F_-GvT;_v+@h3%S
z3~p6JKLUMaO+O0%W$iTHs4{|UN^?L;ts#@G+64bnV>gujTO1A$SfkJKhUN{&{#iBu
zbrz-NBAI4CWjjIN*&fwVu4RubbB`IvgcJ!WV;{$}bpWy2K1lw(2Xe|eWcN9U#V^J=
z0v&sgD$Y5Kh^J4utKJ8w`)YkScnEwZDG=2~oYvdtqau)|6HAhwqW$r>MKydMdi-xf
z|IPEi=Mls`ySoS4Uu8Lk>GP(?uENKw#l^+NO;vrl>caNS*3!n4J~PMG6%1?`Lo`8D
zP!I`IikK!Gm+D~0Tx5dT2;-4lEPJvvNz@R<kiGAHgN!1hJv!-#1G$r6x8qe+Rh<L=
zZ2FVXxySAGdCO~->oxn4bK2&F(-3ukKoTzvdLw9<pc%2CJ99f4k^?qCIZN~gP5g)W
zCXprkEjs?tvi~qSo)627XGEc1SF#jUkVi>r!ZsOd)GFakMtPqh`I$P>j#E63N~^t!
z8t)N`OP-Ey8cNVPKsgcS6B*&w9LA&4rPERq64J$9K^)cnN)EQxZgj#nJKXDP(A<tW
zNAO%^i{5c@MW^MU(q(av?f$|fWL~!<)mXOmPZkm<A6DM#kt5qo7l^K+_Oow65wm}{
zS{f5ktlc4#l`z5vk%Qn_TMX<RVPNfwI5O`bOe@#IKG3aeyFS*Ix7^pC9`!FQ$un+}
zXUau`=QZ`6PI*3`&kd_MQs8Bh{kIm5A`@gd==frCHKz$*aQYq(vXPdt<;B;YXY}Vk
z!2k$13Q7l%vG;ZcTZS>wtHNPvj4d!y|3WE|h>aXutjp#eR1Va1(D~!1cD@#G$XK@|
z8ScdxW>*_WC0A}fCWQ_Gk+039h^tbyU`-AaRQXE3C@|xuc#bIvB-u`7jVA9qExYjR
z=L}OyA;5`@PuJUM+d|rr+H3CQORerU?U9!{Bot;XUqe}i%R=!=DIcZf5IBHt${UX7
z$u&nXerDE=@3Wd|0@Hz$q*rpVDJ+Wsi!-OJ!$UKaeXQAz3oz@z3unQS7l<)x)linz
zAH493JdOfC<S%@|Hvq$>{BNrjX7CVfZBLDtgiqO>03bm9Y%opN;dZI*d!CgC7s1So
z<Lj{I=Syziqvncna0}ky87F#D0WYU597rB$E?Q=Q6*XbeA&#y;{cR~Ml_X8swSvzQ
zQKlT0QI)XTQkbxZ-fhyZC~jjs#y0Px*fMdt7H84xHp5c85c~_irovV9scGH{9{%EJ
z-LsS5zQdL;M3*lT%fM1ngsSCmYi6%4zrFL|&A|mca#oCIKIV*Vr8d-w1C~con4?p*
zr$_56r1PO=HN0SH`prXAax)$EY_02zCKipD3>x$n!T6vhxG4g7BozT_i+(EXciSh1
z*W<L!SJ(XL_SdE<`{t~@UDdAdUz?>Kx5dLayUw$Hadz3+<5D}%BZCKe`cE4yNK&2O
zC_2B@YGbYTJ=@>6O14_I7;gA)sBiMP<Rr*bC{!3%h|0P^fuZ#J<E|t_1l^I3=GWfj
zGronMV{|yF%HGx(Tw@_;se3`h`M`3Awj`nz5|n3DOFI=Z>W}zMqr`$mljy|@#K)X4
zywlOE7bt(D_<9aY(j=81rYh}wpQBZ2>BFX$_0y{XD7Q1jV-(PFSPU`4DYgBSjuXGW
zB&TypZ4-Ia;ZDv{*YiZ4BK%bLvA^d#3^`kw)^(lO=^V#PS}I{JY8vD2<6?gDUgByH
zoos%w5n5SA70~&_wmZ}=sE_CH+$5D%I~M^tEkJ&ltZQI7BsvH)rso$j0Tno$9{71<
z@V}SCAhApjLIvlX0Pxk%zZqkf%M1LSF2n#NI}?5xPC<wONXcqDK?%thB2MI|yK>=!
zobSQlu20xcw~DY&-wOel-n@?qJ&by)A02bP=f7VUb$6h9A&zxij{$poi1x&>usk&q
z)o~Zd^jeapPeoI1Jmh>Rc-6+ws~2@GiSZz{hBgw^soz#me0J4++L57M=6^+@00R~q
za2yth-1NjYw%qz!q2gOQL3>x?qI6L_n5iR9jUE#0ppndAXQSaxXgAAg+?Y2ZVSq`=
z9KUjbab4|QH-zBoMtL>BP)ja&OJ4O?2yYF#*>9aH4X@u0(otsJ5@}kXX@!4~Fy4Wh
zDN>w`7i{CSlIi9?H2YDBB_h~K`_cJqA-9`a@G}pVc;w6b)PGdJz9MqO5m<F}FzeZC
z*X!+f?>S;`wb~72i`W#}dhh!aglheCet+(79kLz+P{)7XRuyhb{YxtDFZ#1N?6e^#
zh*vvtce7F3I~yiY){1)rPtn#OV%8zxe}b9$IU5=66PVl01yCBSd^dXUKhK1G0R|IV
zcvk_Ac>q2IN6uR13{;c-_cRbEqYJTB_{Fr4IijaD<!Mrd*>P_s&jXx0$`sG}^H^o5
zz-Q`#Xift$p?Wb<=<h|fA;%agwD@EyQB>fxuzXVyNKg#>QnXBe)ocjuyk{hgW=c?V
zRs~?RkX9n-Kuh2ogdASyGctZ-79U~PP*d!u<<~CRR3B7LYtxF8T{?!Nye0d%0n1-I
zI4RC68nKpBKg^rfqiJ-i4HXbQx4>=dyxjLao>lA4TIu938pOX`7jX~@WPeN@jr_P#
z^lTrnNnS5FJgePCzFZ$yZEE2?4_z#R){UKOsw3qqM;Tb8H@A2_3MP!1!fsit%Vn(B
za_2OfhiiPV49y_-YDhUHAURUHq=tlP%rx5l^&mD@G^8z-Y=Z-tIt3L`u!>WVQxz;^
z&9LZUjm7~;VIecrymMSz9sAiMQWB|u=tF>$?NZ<_+~80;Rt&KJZ1cdqEdhb%EWus!
zdJaxE0R*U{g1~6{#~l&e3R1mY+6nb{2=-5{7mcd@paR4GV(zxv{CelE`s$Ei#`XXd
z)c6s?t)+nM8@GOItmYqze$tkR-@pNBhUdU3!dN9ILMYJOj4^aUvZMFQFK=P@cL1r6
z@U=sJ<=N(Bq`QQC3-wJHuee;+1OIT=^WJf^vichJbLK-(8A>DTum-ya`_|C7PvY^V
z-X#zAoguBv{!+QTW6rx3-!1S_UiFDt_}ti$D*F?fI@AHKaETKn;7R7C5HXlh^h{!o
zsrxdvVOX}7A?4Tr{6o+@q_3pMQZTg)Ea1)Q8|O#l$}N5<%GqV~ZE>N)M!~x7JUKA5
z9t(l39F)9Tiu!T`O`2ZQdW$v?+Qe4m558`xNHnv~bX8j4G6ay*PnvTLCWgm@K+IP1
z^SI~_P^NN)(Qy;<k<zK*cR2v-gyV~0AQiU6wxyy&Q;~4VPY2c0%y=4xW{-2|PdgcS
zF^4oiRfuFIl`54OCbx8sWdU1~MGK^EAw@<m&+%NtLJHaP?ChvFc0Prg|0QDUn}NwS
z!<dmX9)(xhmx1?IbRx8JB_Ic-_B+^~(lH%&-IS2K5SC}&5UN3FTv5U>gv`8wrCM0r
zdu^7~mAS%W$G8dDhB^z`1T=lN-^sNz%Wcwkz4|)K)IQg@u1iEb91XhJ5xEwYDfvM6
zkLOfT>Goml>)dkK7RrcGd}4t$1w4`Vi@x?8r-Xz-T@erhoTTvYj;62sm##V72KMKy
z7jCvo37#eEob8=(e^%k-w*#CwiWcoBL~yaY-mZ;3#7$hwrE0n&Z&_iqW9;qZ8h>;~
zOjAz(rmb4$^7bp}HHOIkg&1oXJz&O9f5ETRc`KDiwH!c>87$<tuS#eJC?p^dhgYAu
zVt3(EafN~hd+X1VAY`n%z{Y)(fLV5{rB`+<wj~`@By^!un~RGmEPOd+W=!KsUT#|j
zBKNXj>jXR}9R=#e{N-{typMNosUZX^8aPu^3Zb=_A_|$kJ2>CKI25a~u?@$|xUD0E
z3rV0H2Dkhmtcz}Bqr1R;PGC&s1*q_(cw=w!eh^JIxmYy6ip|~R@0t~6h9kSKF8k`r
z-rmZ)soKb2jgHIODnmo-1=6%KLu=Va>yJSJgYnC@P2eB{+<2U~g=4b-hjNb|x!65z
z5!Z3c@32#?=kl#m5f8>l8a@f=Wi6&X>j+N1+ruaQG?CtDV~PXb>@WWf2Q($z>z7U+
zMBlz(Z=2s-T8$d;Ue6M3l3xRuVhSxm5<B)h0`2`38hI#DD>s{3BKIpgmi-?-oisza
zkmgcLp`Vnlx?L~qe?(H=WYV)H)PPR{pA7{5h`m_l^X{d`q$MOR49YduCf{c>9PI^G
zU)!twAe$_^TtGrD{jAw%Wfw1k)5`DgJXWP`-<M&JiUEl?X^Z}aEST#t+_N(Efbm3|
zfQ)w<x{im3hyL@G^^sy#+bz2isgU@vv!l_bXVy1Jike{>7XNQ20MryLW6t0#t42k2
z0hnOio5PA`bpihQ)A=v&;|;YU&l?F@fC_Npa}OspB^Vr!zTb{NLwi)Hy`}19z@fr?
zU3Jh7xd)*wL=El;v+()ck_u(iI_w^muPd_R6?OAcCyxtX2(<rJlA42`$|$TR(<12v
zl?Y=e)gf9DYybQZ4qK@b25;3f3J3V%pD+1&^X-c5Giw!-UTKF8n0O2YT{F}e1ff;g
zjuv>vAWE-tjbs3u$PJ&jfGp*j;7`8P+@e0HF88@NU#6<M%>t?jH*EMz0L$My9PHiB
zRVebeoyHC8Wl&pm$IT(G**{Utw9Bh)HAE_^TCH*ta-8|<-fxJ&aV4hWUSV75)+$)r
zdIu%X^B9`Hh`wv*IW6Ho^#zL)v08Di99QNKyQ4Ex^x@3G;Cg6K(hX}D-{D_(j!D<f
zrg1OImb>%6g}xd;qA)E>mv@<*$ZX$rUpcaK+~5kxF2pAac<y?O5anPPc95_H`9WED
zWYcOrkRsxK*XDZK&y<t`G6Il`S?diP>=%N>3B`6+-EO>fzLHkzfcD>r`}fy+!N&}-
zUH9`HP&unio@p<rTM?to8R%4f?^t#A%^89fSe<HHA*j2--tcIx4&F)}Hbj_5T^cj$
zFF|M9UGld?S>V+24r=ON7xE68a7?3>8!kAzHyK4Lb=YbvQ+HBn+||W{Eg?GVcYQ!l
ztSPK!t!;<OEKu<(Mig8rL7&)3cSc8nLm>Un>i4P0$ET?I9pdIh^EU0+RcYthPqRm&
zPB}LVBWJC5;`qzHr{VN*QZ9;5?qvVIY@^viP)2>OQxb+mdkWDzLq#%PR5z67y??M+
zSjDiw%<bN@u~pn?LjN*Av^%NtrcHn!Nw6uYgXzv?BGZ`2z)Fxe$ldvcV_=rTg_zy$
zVt>%q&n3QENt>Lwj~Ps8*c{0xvFm@csrU=eyiH}Cpb=6h0&O92O%dTc0WV%R`6~bS
z;QT3eZTz7V7f#K|S{Kj{_}e_u;Joz^)V0uvH!H@e3WnVKG*Y;R5RQx=UKb=?4!qeb
z=_DKa-vz<<!-#l3;vWuQzB@*wKRW8KV4p5-yPE2&L*Kb)=K+0M>$?}ZxrbHii^hC>
zLN`k`gS9^kaeye-(%)p=Q!i(kFa)B=q#!VbG7-calS3zKZMl8Kg`I^HD#h_iN?($!
z>66rNVaPiYq<@#JX$rYXkw1$h7(yVDzNky$V^i%H!;0ZYI+ZXhW#@zfK7#lXMnh2Y
z^3kcr0*7W=&Ss!urb<Hj1^*_}&FMjA<THPQl9#Y$*+cYu*aovR?$_?Mf((Pm8WuQX
z(w)kntkfo+k6L5XK5?x8D;A0y>d>4di6HWv0K><1f+uu%DQIF7AJcpusQzmE==J_e
z-fwZbee~KU31mUe(k?U$jD<>ni>OKvN0|-t=m-(#j;6O&G~<{8=r6^gv3$D&K-xY8
z-A~Ae;#6^CAZ`&J{>W;EQAqsZ`r@~1+yiz(zXcIDK*GBO!0caA&f@eEcUcd0SLAp%
ziK^4%<Sav&1Q~{(M?V|7JN5KxFol8bvWsFaTxRp<P@_bvbtFhUWu3z9*86lWtML^9
z#C;DDG_0n~qcRzJTDmsFLJoSEBE47{fQ*99v9-<hflt}`b`N31iUd0<*@^)wW}#ZF
zeN&`IPbaM(%6@frESDf>9xfj7AK-j%&m}#)l$Krz(B|KAu~u{JsH3mYsRF-@7#pkE
z;OJGjbEEV%#{Qt8>G*G(Vfh9<)rQPk1eaSAEZC<JH+7rv@BMOTV&D6H6=!m4Cy2N0
zv|$(o9`iC?32N#QZ^#lPAcP3m4FpZra9I0|#4}_=Jqc{i>J)F~PoR(h+g}tl-VX($
zYO0R@KF7}dH^^v=pHnQ9YSNiTJWm+f!v@BwqQ$Y$ei`a_1{_|I<o%WKWtavx$ZQwI
zOg7hf?IM>-ss`3Ry;b`bNIE$R<S=!Sz_quS7=Ad4IYK%YO{6~+p_215=-{lh|Jzts
zhzbfqTR7AoS$atY2J#p*VUq9n)4<=kbhJ~Ue*SztHP9nZ{0}cB&PUIC0T7o9IAy9k
zX6TA>nb+z+c*ky}aexvI*zKtJjccvTTZIqk!Rw!$+NgN&BT7q-IM^YM>9lAFF3qsj
z{Ui)Y_-SRrj^=N_HhESJD-ltQtL~Y=Od(%jfPRpq8P9`F;O6pc)s_oF{z{=|n6er5
z!u-{h;{bvm_L%5agg+m)4aA0YAb@K`Qv~Y<N@s{Q`gwf<!<S<>LWx~sGmt6*V!|?F
z%7PdL2(eqp+Sq<ETerEWz|-@#q-oRaFR~bSgTqB(jupzay7hGo<6ObuZG(&7ALd99
z$H#pYC!xL7{N3A^>bvQ;>6xmHK-4tnG6El;(blqDJ+}Q2=*wlRYGBr%&K>9+K^{Aa
z9GQ#O*$%Ki>UYmph71RnuwA?#!9vfTIuG|p%N;AWWwB5C+IE2*>xGPGkT?t@?Dvhd
zt%Wpg_71*1_@0kBba@@FZN^TvjpVY+rkq1<XZfI(GvRp^mRM6N3mBbJH&~P>h2gtm
zJPXCjvMjf7K+`s#pH$0kv}>*SPOV2H-e;NChSuuNAtqhRtEe-DVqBG7vr*enVEmVd
zAv-&^RqMyAthD#nN)(w!Yp^GI_VB1e$~skiRlP3K6DJObNVTJM{r0E+{x$grTNFbh
z_uB<D_Q7y0vO6ERP3?(oz<N|y&4vw@&eU8j!8JuRvp7--FcrN(nj!~;y9)~vI=R4v
zeRIZ~?_AH?p>sc88W7$jtTI-pPGD>}Uj((F_<lBWCkEX5^#QJ6*rS>m&nMmhI4lhx
z;SZUOC;SP$w;q=0ux8Ozq190iFGeAoD%-HBSfOO9W&PK~Tem;KeV~3gA0dW>Pv6I1
zYNn)N-+Qq-I+AJB!=V9uxeoR-tL7t;-ZGy%%>9l;tMtQJm7z}(vh)}z8v;!QqkT%c
z`Pr;kXU{<7gZGe(<&Zjp1|1&SGt0&iI1JiBIdPElDo}oD(oS=FPy1_j?dy9UkEB(@
z9bfbpt~myqXy`*o?NPpA2S*3Iq3$t0QzT^=d^GlO7pmjpsXe^IwU{J-P?mtkdD4jT
zbfg}pfa66t&>R@<Z8=Xb5anVZ0@*VilInharGReOmWG@F2H~xj{4z&<dWfz$Rj<py
zm>5s6DBCTElqWD~=VAB5A$Y$g3nSX4Ol}s9ozugn47sFrns|d)D7D8mh1^h>F8%3W
z2a5TI<EH=tQ)DCEKj~cA)7>9W)%Rgrt<QP4pCAdA&I{QZu#15e8|E9mu`%xzEc4J7
z2bN9=Pr>E1+L(i!DwwV@xZ@VytBSnvu3ay?9Y$%KBd@=bFp#4X>B};lBl^>;B5%<i
zBeZ|TmK^P85F)d8Jb(ax#IIL|Q6+2FY)??77PzOwe*DZ||6qr}zKgeYIX2Udef04z
z{K#*38@!fTKYF;k7}>>LW8TF<a-2r>DeNLsW?@@;#fCxMm!*pX9lfHt)uuajgiV$d
zT#h**{Ipyhjltvp#_fvwZ6(9T&)Rb;VTsa~=gJDe$;q~EJzFO3Apn2EXrlA~F<KE$
zU^`~@dRT9`NnkY&k5rnw^8IMHpQYj9vL%e__KV3ACO7`>^1;i;H_jG>WmV*SvFHky
zf3twjY=>%B`6@dr95pk37;>@x#zI%UP>yJ?6%2RCAY-s(SLIof9c#sG+>FEDjD6gU
zD+r3UOyZKt5Q%XW6oZUQHH@|K!@vgu>y(j~#NpH5x9l+GPE6*P91EzHBE}krNo7~5
zb|0;8aj<>dJDCakJW=LK#vk^V^`8D9UP$2lLk&K$X+Ag;(w#ZeR7?dFGzJkJMi;Oc
zoicM8#T@0|)<<i-CzAhA*$y=Z&Z0PxVqZX}e-5SKoUi5o6#BA`Ohg#o7yyhaf~(fs
z#T;g5k6S!wNA7;0NgV?b_ITlcXM0r6ZO@u5M|~?sv>b|u?YyW0!6Ew$>Y~pX2XU`J
z<A?^&Uq$5?i*YZnoAh-Ted7EF>DYoQ`d*fm7~YwxoZtL1W7$X*5n>+fi8oUqvJri&
z6nm&FFcO9AAX=7k9_;yussklMDtxu6t5OkjY3tvL7s1PUqGstoYssPT_ItLMXX))Z
zJ03DK>_IPJgIKX7x8Rw<+?!kIc9MEA5hw)}5-iqzE8VFOr%mr5VC50inCtJ#tAQL}
z1%tXg16rH5cZ?pPJcaYO6~hh*gGh%x5*s)RLDozXG<$(Q=kn_7fh78e%R|8C^X%4F
zm9*vMr4{4*^7ibRo5iK-C*+ed7*^J_i&Im+>V~x=%ybD)(9wLptciZLN_)YB5O^v@
z{$Ja{Qtd!!GiH0^v6Ue$NG8nsD)~)N*JjWChU+1?Ny%198}eb+iG#cLFl;OopkF>K
zIJg1<gZ|vZb($pzH4ltHj`;8bzidD`^%%<T4%M5LS_!KXtzD_a(AWgymwVbW3(#<V
zb?|8f6xaG-z}4OhlEIJf&0ddWw;~%FTaylOxMkzYCUX@vrw>zG{!THV!AKNdnO5aW
zt-47+g@#B%3Z{i<S43@LH(h0Inj&$ed7j?=wQjuhVH;EX$@l#HxJHc-AKQe3cs&}8
zKZ0?Y?sDCYx`Z^Cx|^s^I*iw(dRAsvhwb(3U7F%B30k*WJfGLHM0klB{ddN50ZTy2
zu60p|v$n`?G0`75qP$UL+d3eSXk2mIrC+O+ew6RiZBe4b>t%Q@M`87PUsQr8-l>(V
z7?crSbh@OEA$m#}=67-ZTp889W3?AU=1tjMdw;Ne(Izfm0-RQ+6jH&8gwGA_(Q}sf
z2cqudmvKpmxhIPXLGEOm41F$3^s>mhI5{xLs3uHjw&8hlNfyhYWJ>LMMzm7Au8{{4
z-78CWHW(hd0`W;PqChl|g^3)t!&RZbm@=i00BhlV_)wg0=hMU42F)9g3L@3ao5I}H
z8I}fZ8eb0a?<61oj=9=X+T!Eq!RN*aH=0Y9i8s}rg8IT>C(zNJ!Th>8L<=0PZ>~y%
zhz0Bh?ag(U19g*K4YsztBIx+FBiiPs)+@S)uF6ph=|=6xgUL*jcixtPvskp*56`B0
z={4aNiYE!<Z9^;P?FtUwfqZfE=e;SI7Sl5M@xR%o_93*!yiuIf8V_%Sf0hYrsorOs
zfkK^9_=$Oho>i0tq@Z1;pR-k?I3o>lQ~?sYinu)T9ag!9h~z6;ikT8&2oT|A@)-z(
zaQOIKXY~=W6~KLycubCWOz(G95I!BBDB0Pny<_|zlgVmqx-mrqM_VmHhiBtJ`$Z5w
zCPrd45%V_Ko8gYvDbKOB4l<(Fy#)}+&?NnmY-1A}rTwO$s?$(4W6U5%XfMI)w58zk
zbnp#zcaX9eQujFlW$d|exgN>CX+D9ODCFX{GoRcYei!0W`_<p^r<%M|<v<e(yc702
zsGRtzx%b`iJ6Q_e<y$l}s|#ePV@&Z%BjsRpVnr@IOe(<8;=%MoTEI_({<MIx?o+Lm
zy@uf}-#~+3XTroy5iC8qqX>4DPA4@ELI0BSq?GTP9{qy5{Jp>{!$ilU=1r*;&BcRg
z$*q-IA(UIbR;y$MuoVtrm}_sru-Iv6QF-Z$*v_HQLPEzhFGyrl8>MSf`fNpzygHW~
z_QJA574ufXwN23TR!mhNU*^BKQw@5&LTdJs*_=x{mDYt5qy%uW6HuIrYQdUw=BHHG
z5Nt@%wEdaq4{)mv_E2B_!pNn?M`+Gf3%JA^GCHQY{6Z+#==o?<Xc<Bbo+i#H&0;Bq
zPkGS2-h%5-AG?Sl&q79mB*ASe)Q8HRNCZz&>VMBVKN&I-5tw2=+-ea|`(iVDzDkf`
z_o4ZdXMG*j@}fOMk`);6@zP0?jJx<T&}h%~U3MIX@wIi?F2pMP=$Rx~vVOhG&L&fI
z%&@+nxx`#%MaLBV6tSRtUBbUEE)aL$F(n`|>g<s`On6!kmkg!}$!cL@ukMVLxBMmu
zb!1M*xy0+mHQp06f;84P+Uf>|pqYLnuYp;NEjq=E37d$523+{9c|=_m;Y=FC2zr0q
z9ABp`#xa?^D8x?{^m9Pb8P5(LYi&GbahTA*2ISmx(8c(0gM7mGV0*-m^P2+5>2y*D
zK>!ty(}TsN$-pvPyv8MaFTTJ&O7I6s@>;4;BIl36G56wWqHwlP{~pWLHf$Uy#0Puy
zeV;G?gvis^Jxj`$>M5o?zm}_}UVzVP!9jt89Pwn(1x#nRAN`d2;9sJ`tk0AOz$1+E
zH{8RxgaNe%M&|1hrS+*9C*P^Q=fDJ&p_?m6QWaQ!V5kK*vuF%HaecM^I*<GHD<U0!
z?Vw-JqXtn?NIzh8dAH)H@;erWZy<Fp)KYh>D{f1%Ubp+IA5m}APs2n1ZJ<ms?xXTU
zi^4!7YC{p;W!{O&ivrx{EGU8I0-<4j`OT6#reRd25lOhZlnhn_O);6DCRAY!BVw=X
z+(#m>u)J^J{Rl04s^nuyFN`DfFR|@!RJFA-DyQV<_<Z>xaV4SNKY62@hT@DgkLAq~
zhG+%xacHfgNfA`ZaU>zuj+4n`fU3TLj}&960XK1bcKm{wvmh9SVn*;5QgF*KxDXp>
z;Zr51Q6HgH%jqJevB^Jiu6LMSlE`WNR1ubZUzzA5+#sU+UBVg8!D?yT@>=FvY+EEQ
zC!*yn>I=^d@TLt~CR<gUtqRoFCNQ~7N=pIB-^L8<acJDWKFHZ&?KRH4)Ny5uD2jgY
zM%%mcr$Pa};^OuI-jG)kdhz25dJsHAKw+&1ORV8p6=`~X+8JAll7g@mftT@A=1n}&
zS`B-Wabu!RMcMspnE&J;9&n{hi81DZjLUgcD}3#Y463ka)ne`IfTV`gQwz_WU}S^<
zjqQ@hMq$hFA;ADZdMa+Bq9q??N3;zy=KMuH=wtb>iEKJXWgp@5P+?!Jd%4yZjSDVZ
z`OkMD7`^B2*g{%}qlKpgf7Zmo0$lvg7&BQ)Aza@3G~b|J$Ysk*P8I&CB}bAMZW-~Z
zIR_wi6Up0t%hZXSOGa=}k*;=(xjt200^6TTRMf=`GX0xknXv$dY&r<S$cBtbmr7c%
z8dg|Gq^Mx@F2bUtEF+yZk1<t631!(_Ug~#Ax?D6mLho7lP8N}6B@gO8+*Lr+ENSv4
zuB5UJlOjqmA*=e|#@?#T<v6V3Dnd3r@b3##W1upO5V#EzCbXiZxH&?iH=J-^5ucn2
zB}#&TJ1e5^d2#7qR0GXTdW>T#xsb_X8RNyA_$By$)d>6vNs2f?oR!rfdl)uT3^wm?
zQwUBwSI&b&0r(I>$MjJH`fi%N1_>bz?&Ie_?js~TGj-`X%$+E9%n{r<<}`S$e`-p)
z=*`trS)6S1Q%@D>CURjquWCtl()2l|<=i+Y;!j1i7jdhWpckp=OwWUJ0MIi}l3TJ6
z%ie2wuVKrrw_6uhff+-6)=_Nlw(qWRJwWbgGK?~1p|U<-iQ8R_>vJhnE;jiLPcBi1
zRW@hF{B?5XRh6|AR&h%$^yWc*ouol%@U#QTr4H?XOSYZzd|Vm2@o@5F7Ops_jl7Q)
z_!ybL>GEq;&gio9wM`Qi-TlKa5EY2IY0@jteHNx%WR6`sJuJP1f$&aYFSPnLp{u4Y
zEC0QDql)X^>kq8ecE4t_gb{C=2=3N2Gdry^aVqO$<8QdOeXI3e?r5`^^}Z(42qSR{
z0UzZY8>scj<Q3Y!S8{2XYT0fr-jCd5x}ByHUoWLG^n=;fe(X!*S|UwonOU}J?-rpV
z7aw{2Eqqt?C_b!);TwD(s$Q+B?s#*;2|+GN{>$7ip(7LQ+vQ=uIKkHj_~tcpcgSP5
zl5+MbW(cv;e_PPRsa@@MkrcgqMx5Z%N!L9-bn~Ur<+53s7!rjk3?<gI`54Gj8$Vx<
z#FH=xj^&gwp9tEbR7;b?boGuRVv=(J@npfqC<2Pzxwv70W2GpI_pgzi!gkLW!0I}8
zxIVF;fVd+FsJhSGb{^3Eru&>KlB}I?)Qdv;%ICl2PJN$ftp)ow;+k%4wA>Ck$|vtQ
zY_;32dscrw)Oop1ekSSV`gS{<%RUw@3VxU0lDzU1SQNO$YkfWP$ke$i6f&=S)<#|)
zlsaMpADLw$TU8oa^N=>@h~Cf?=Nn=+j|^}w(v<M}Vw)2monZgX2utG5RxHF8Xm(ia
zHnGZQoZass?GbP*e7>lxqQu54&1r>x{W^6ldqjSsVb<$rwy}rmwYQ01Baz>U?dDE)
z6Enk8YWv#EPCC25t@EorUGU5O{POaAz%~D^imu19F!K|CcOQ6u9A(3jzt&6Lx23hJ
z_sY<?&e)V;92O04dAWT%JTH#=I$b`?@Ht59g-6)^nR3Zt*5_Tp?#8~B$8UUxR*b}!
z`px4dPclxQQo@VebG1i%V`-qyjJwO68P%1TVP6p5Q}m6dzH1N{3}tqkJ?{a=PO&aT
zXpZ<%AjynF9+mkkedZ`cxg$3>^Wy`DrdJCS0duxEW>Bp16>_r;eS+N9O(hQNv<q6X
z!LJf&xRsc1VT%AbwVR2Fc+<~Vq5hN%Rld6L<JOXxJRR~0!+M#JkloN2s4cuNCVWy0
ziv5I+{c~L3PZvw#<Zm3B=|n0pGBOK}8tiVX7R1vUr?+-vhHTooBFw)Ck9F(OYz=qI
z`rp#>jVv4ZBkPTG<kV;HThDl>)KZS(quq)nebe34H)H7M%ti+!MZpA9N4oWcss21+
zAQwnD0vc>}2(d1Q#3z7x%6;?j6E#S26$>I+F1&^X5Yhyy)jZx2)-|Upucn@=gqJ|1
znjL{ulPOb0eXL1wk8Ah>PJa-YixeC}tZx!&A(kWBz|&k)2zfAfgt^NQ;Olk0Vk3P%
zSYd$?<92$LGI`4r+F>*)w>2H8@J!QRnSiB-i2PD1f4t*yB0TW=VEPmk1ex?YExNMN
zI9GtnDg}xUYG}IWCAHvEm4{~@{-51el6Asc*;aKov?K-kv&2q9S;tVToYnO+c-B=`
znQKkgiC7CwY$Fiqj<-%#M!D%}%W?y{P=lzvRFF$pViFDB=NX-O>E6kM3WCB9`o^B*
z{MM$j4lm`~NPO5-ia@%@awPiq@h@2GFf=ysU@*00s(yk}5oIaOg0TGff)nIUWYyxN
zcEn}cZ}y^F)#s&R>KDsgsBwSUKb9_R?p87K-R`$x<v&(_!f{Ea&rKI~{B?g%D=_d~
zd64W5YlZ_|sO7aDtJg*(c%A?L)%)}JeV)}X(Bh#p8;+JH$GHAyDbbySI?o#O=)_N+
zuMnUV=PkduWqz)`w6)e<-X!{{1S&#fM5ILcdot{?<F=}<`;Fw{t9R5;=7rWa*G*X{
z{2{CkPf|0ZW}HxWpkuhm+yB9lRH?)yVF7<xa1@6>3itD)iTviK$x&+bcHFT*Q!eFg
zNcceU!8YQz_sVsSd;ERa>;c4~o)C6(H5wX?RrI-;Mgfj(au5r*P)ju{uKG+ds!M@l
zW?klvU;Oq*8pDCohHSQ24f7DeFk&%(PZcU>rFa>O6fcD4U}U3XS#+b?NZOc2maoDf
zS5>B4E6*}7JnfMM)^Z2!u|FFCSETDqB*+}eo{nd-W7`sNQ!;2e+6~Ni)KbM22iZWB
z%yRrZnm~6U0RBToY0kZLy)+s{VKacat74^qa)$4)&Ph1*?@Ov-g?MMEm?8Zb;eqt!
zLvhaQgRdzKuk?`*j<s|~EvD~@G-lqWsxjRi`d;sWTGI4d_%EqP%A?pgKrW~zC9?5v
zG`vd^SmM7(5XDoa;styK#oZZ?moG*5LzknMYVI7J7PDCzFnQi~OGIosrr#5bX8Q8)
za@v{@$K%>XV%Juuj*{CsQsj!V&}8J|X^iw$%6jIW)vwOI{HkFX{!z0lWlKgw@5_{(
zOMVy%4F^D<rpqBqH4z!T8=XiSh;~c-?&owaRpXoQk)sN_2w{&TNj3XeNHIN=_#N#d
z9)FCDYAtAMHQx0o&pm6}LykKhN~+j>sc0R@>XubIc?i6ec|UaBw?M>gea5yPFzj5S
zT>m(ee^IdLw=-~?{o7xKpf^)qkrM(2p!((az6XGrED0(FM33D<0}i-zg79zA=DNXS
zEsb+Zs~m#O<|j?o&r=|HRfL83{B0M~P{4zigdGU_Y0sk`&i#!eN@q9FI$Eh0D@$c=
zHCwJI_FH!WbsFo5orbP4n^#UY>8;Ped9MS08=u=>R+PXtTkh6>nUbtX-mk~TlT<&}
zv`4nQ78`LiHas=DuR9r3LjJaDID5~MGzV7ac6>D$N#lJ)K*b$#vtKZ<$~-Garg^@I
zP>8fe%19Y_zr@ojHZ~{hg_(b+=~elZnQQ=ZFK<0h^nP0I2;dD#pcOcEKg%FDH|FA=
zgCO~T$_6o8I$2SShA9w6s>(w(SXOn4pJ?h|oFzAC(qSCg$%!_$fG;Qnflw=yLUdWW
zA)3k1AMBe)===<r#fQSmedPJoS+6)g*_XqEY!Uo8wAwYMpG)K%Dtdd9q2xbJ`ixu{
z`KF9)xG7RuKd<pBg}3b%r+KISzC(RFwk%Qw^X1u3n}&m;<#IHV{R$VS$89#ixd)~j
zO<7{4a!EjClZK_a2Su&oGZMK?=;a%;AUUSsV_?}acaM0iu0G6tP_f;oe%JjvVbp#Z
zyf@SJ10R9R^YG#5^!8_6g<M&ifp8c|jG|1!gy68#om(TaW9U@{^ilwYff~oM0Ui&_
zT>HMKi6Z+RK3K-|6!Nf$WbMb-SFwgWqST%&t-)@hRVSed2jSKYbX^_BIu^IWwbNF9
zpJnu1Rn|Wqa>o_q$=jWj4UQukG7HKuhoijLbIp1FaSe$CRlFxs!%%g2>DL85wjvj(
zy86kPCL7BS#|tDau=B}#QE|ffG7?kw$s+S;oe~>*PDr08^U!7HjxX!ohnTQt-D1S<
zv>{kD2r9{5>ItH#v8$A+WSK86m8%+ql61HsP9hz+9q#mvT0C!ly1bL)-)G``ieJy&
zd%tNl6e$!ua=U}>dM}XA>NTG{gA*PE_J3EIFWC8k4~p(C2wkZV>yfP7W~hmm#ntLo
z8zO~R9Z9@lS@sMv$@L065Op;&QPR1FUw{cSF>(@B%9&rewXJ#8_cAc=o6*#1DT$<H
zQSV}Mt;v;izf;q)K~g*{K<3122P-sX-@|4FC>xOzeycmC9E)Kw;29{@u_qV|P2(ZS
zxS}xa+vYYvo$*1@$w1$QXeJ2ZsA|VX769oq82C&5=~|MRo4VlmF*%RSB7`4{P#pDd
zHVO!rfZDXw4$Zpt!Il+oD?D$1+{uEk#nJjBK(eeJY%HhD`*}7)n_Btv{`Im!O4a(D
z%EQ}+PvTbP=WADI;~|5XOqn2(kOqamX)kKHqw#y&_tnem731aRZGz5@?m$TdETNl9
zYS>UXk-v4THB7I;csa~%`a0{~6#Le+(<x`G6xoU;d?%J-@yWMW26_M)fv<#&;;9OE
zAVAo|xSk}(+N3^jE%=-$=BmtDQE4*bB3l522B#*Yc>mw=byX1PI&dDx!XDsGYB|_m
zcnJe4os^9}S8d;{%WfLBg;;#j0-p7l;vBtSuFqcnEiu4ur+K*sVg3u1YtU+w(t}S*
znYH047Q2SAnx}fb`rn$h^+M=ct#RG8&mx;^A;cRG6M`R-O{L-D%KMi~ug2yjTfo~>
zH4VQ8Mvs>gE0<^aSeNJZh7>i+(1$u(`q{(nwWQK^YY{7>(QcDGjqqfWJw2Vyf}@0<
z*0q@`%Zi=ABF2bB1I%U^tnxIB&zV$RNhKpCH@w6qHX=p|SL^r?GC$PTAhC+K`1sxu
z=1&f_c)8l2Cc3u2W<phEB@~7TVAk`Ycfm9vv+cMfx`c34IN`HX_`0t`R#eVoi6YJX
zrcaYK_*O#~kk)e`H#HsVwL9HEQRPWgACldr#ubhQs^dGVY<#+9BBq;`KA7~GG1uHx
zWEhUI_EhNMu#3F1c^w07p0Z<zo2R37+}`ix95Pw_<S5!r?iIBBZf)wgZEL~M@;B%w
zwJu$y0C-3<Oou?mM7p90V0G@PPR5DYmK|ESoR6LL6A#)|ie<kX89VAM=%S@_ffX$%
zyet7!lSuaytgH#cT8oSRN*A6Lzyo(D{*H!~TeTJ&Q_FdlJ9qAj<4w*WXspwkGKJnB
z_s1(!EyEj?zRl}AZVm&hT%X6m(>@J%(6;VRUbf0Btl2F`Y)VYf`m|vxeoTi>`gW96
zdvwr9$IR>Y)MUHq$%$rM=IkMf`b<@d5=nY#^q%C`fbwITF7v&Kd~K}4z;F$*^rQ0@
z4Sj#ac5hQzCLMN`*^3>aRyVd2a?)5z3k(T7strykphhh$nsZ>Qc7_&FaAzY51H=Kq
zn4HbEn!l9dl5~X1xNQFng5l~P)~B!E-}j`fMweF^Ns421yno{$UANe9e-h$<ORWH)
zwdN<JmYgWRH?k%y784`R7sK*|U->_dT3dQTzRcqepkzHk^z<TZn0GjuG7O8EpCyDT
zui*0X;fXLTVd$i=z?0?HqK5HH-mdCl;ekUT{jkntTpU0)Wy>|s)HyzqDH#~EbY*nE
z!3acTnuFHKm4Be2=5dmGaC(Z~Y(EH2Sh?kod(}((&UA6`XTR-YOn2Lq=K8Ed9J;;w
zkQ210aTLZ=kK-~tSZUlpgbb=&zrtSoh^z`D-34aSz#KFN6OkBL#w9Qm3&c|6wm}xW
zpST@|N0Y+_&$;v!^lp@ufMv?cYmi{r4I{lR1#NwKkwjJrH|5aRv8PE^P+iKQnnsxV
zp9t{@(G&~gYy7pdSBcci0$eh7${KG?ZP|P5B!Hh!V~Ydjpyepjlz9e_y56W~f?UN1
zT}>?Ii^u;+sVa<|K{^5K$KG$V_fNK*c-!7`SKC-ilQU~8d^Yh?4bl^Be3ZK^lT{8=
zS8p}8Foc24u}xec3~k<W%lw#`Zr|e|d>@==9w{AJZg;u$Bsi94Ws6U%vuicdGkP86
zxPP_v64Oubdj3pnSIZt6EKDi*gaANFtS^9aDeN6?*l&Po^l(+nHNdVjB*mkA<#9R(
zcBb{DRXMY<aT3K;yatb*{ZRo_u%&Gna|W&?!a}D0kpMlhi8&s{^i$g_hsCBbAu?H2
zTpGvd5Hq^_L|y+paUeVqlwk}y$#4m74l$7>=mRP1rN=ufcI?i2TqDX}okf?on<4}r
zl;fjdikvb6STV!q@K~{=8VjL*l6Q)k40Kr!tD_9n-j}cIQH4J3L)rJNMja`rb^JJA
zOox=e;F?5I3T<R;(!s0eP`@Kie=#D_kwQyzOJ-Bwiv$wdHE9%#a1+RyRT5L?DgX45
zHDn~ph7<YZ)D1;~70De`ZTt3-wYHB`E*-O+w7Jb9SJ|+4={T-NI(2TI%Il`WY`%3`
zTf?)jOQ2xi=cITkO}Gl>&fsrC0_^(Yus3APsM;-FFE!Cx%+-tsa;5@zPj%AVh-)t$
zF+X@&4pt>X7%PsBv14&KggqdqHG1W^!jSt~HJUay?gXlvWsLkQPE0grR#Im*_Tl>X
z$Zi}x0nE$Bk%)~}`lYFe!RX7JuD=ox%p`whlQ6|bqgsXfHaF81jT$YIL9{f(HSak?
zpn0T?m@}WjLFh8hI=OyV6rERA*m#w}U1h2qzjXGbsml6#Jw&N*zdT-dd=15Ie+EtT
z*#y<ETWzcEuXmI@5`4V?0KZ$Oz5pRkdtj^vS)hH~`!^SwKO%W%B|HZLA8K){Ik~KV
zcYh9B*YtzT)`M}}bleXZ;~#I#mhEx@GUXK=uB~nzl&;158+mze8_BV?9yOsY(!8|1
zrgi-NW4YzYA^DxYa$;E^e1Le4SO&^o^X~BV)DoXT=S^zYS!HR~MUAD1iqOz_CmbCs
z^}0&AmnHhSx{NOAFMVID@Fg64r9yh$mg)@>E+H{;eR8(c31v!LGR%vg8(nR?iWQ!X
zgB&?&SyDYVk5FD=GAgy6YMPzYc)U?f6w91AysneldB*ZfNwqr7o)r^k6yycj+5=oG
zIsm{uOIXjQV$7>=Gfq1Zc(Qc~$x7f?D4x<e9PMWOF+*|sC}Q+kSoL=sGJ4|m7+9_I
z&0PCH0@U@^igkK;CZ90Rq<g%#t`S9t0Ro@f{m2>DB3DhOeHps*Sz*-D^I+uTCI|L@
z!^~0YFTBJ!r7pCmhdi8L0w%yf7id5|2Cex45Bt0=AS`Qc>_st%GM2eiFurXA8)&vn
z(v1_c41I0zS)vsNN<jmX;j8M`zp%8FXBNQ*=(y}DGe0#Nmgg1FTV?sr9OKqkQnBH4
zE%VZl%77oF3$e{^y0Y748;xzDI5gmG`-tSMbJ6y;YlD((_A4R8tKKx8TjZ|drvsU4
zxI`(`Z=}N~4I`xYyz_?JBkN!4!S8WOq;4Bp)G-~s*0$TSUeT_t6u*r$wV9ul{zblK
zUC8(4f1hp^l(y-$f0*mc?Jl*y?=^e$JW_0htMyj$_>O%C$bu$RG48L{WZ2&C)?)C#
z>17e@z3yu<pho91+8m-Y@9&IE{U!K_6olS&_>@{by7YpJ=5K$JiT#A#la2nF;S3f;
zDSR=#+R(v$PoqqAEtF7EmCxP>bl;Bz4el=aO=r4jf0+oz{lpsf`JTJPo^$7U#Lirz
z*rL0Ew*_?NZcc0iwo4?}+q1LDEVUGyv&xom@Y2<247cIV0>W%XhlS_CXn+GXfhKB1
zlkLEMF9fYoKw9yoIFBEbwmtAoO2?fPtK2%89$@3BqiiYqJ(gJ#O3CSZtS5)QCq#Td
zD;_7RGd7geKFUW=+l}kCIyx@xSzhNHB=BU*rOC2NCU#BeGr7%XUc3<LJ?Aa$X19l9
z!3ASI5lh-3?PIQ7x_I`G*0N+cdp23XGyum~<yf|@+gz`i9)ilCoKco7Tb;t_LUOIS
ztc%QN<@Wt8yq;3CogeGg&6~waFW+r+Tz`qO)r)_L+^>KTRu(22MeP|OfeK}h6Sw$9
znybF@fKbPT$!GsTdDghElPCbj>FE=w$Ot1AM3OO`xCeU~O~LnREf(PRSZF*d#^Q?o
z>;6J)+eJi7qg3szm{M%>vS1BMpTSV>egNC$?5H3hAr1~m4Pbo}?=89Nzi~9tHbPTP
z;2V^AM16l1wX0b{vq4OIUpnQ|fwiRQ8kTb|JSWSTROq@C$lwruW0aX#qk-YnxK8H>
zHw!#`jFjBf=_XQx5f~Oa{a_)-ei$&AuTgrk;Fu{BoqrAlS)sby2vM(P<hWoI?7&71
ziK>>jNt|rNgh>#=@{8vwQ;2CN+C+RNN7dj;t?yk<b<X4!I*6+KxRa*=n+N~<uQ#&s
zN8<<2bE=+7NHzkYAj!vXMxRI7VhiZ1-A5jsfl9YIXAT7QZH>eFtlMtesE?J!WjV9*
z3rus4%J)WW(aIZ8p^48E4n3tHQ9k8b_cpaLHU+paT&KQ&zhG@L^d~+YM|w33YEs);
zo?4rq3Nc<hE0ql1owNNup?9pXzoSN`9`zQ)HeUGtR>CzHtF8B$38y_<uAl9Okq1qw
zEdTX+(rVhaW!TarOK4Jc=;mJD%%b7NH#6(E9Thh}Nrc0pQib}>U>LwR7r2++O5|Bv
z#$sZ13Jk+K41jjkomNzn@>A+j*<RV1qLrKfRUum8@d7)uAkvYEb;YBRBYZ}C_H67Y
z*CV(cW=qC3`YQWUlp^Ty9BOVaRajKe%BQ=1)=~2qO0Km~<y8?gukGi^DWj|8w~_x{
zl5n5XXvUeaQ-TfbTLxs1Ys{(2S7N3R-$a=O{Hvb<m(+R<66OqPkq?kCU+t;Ho)~0n
zf8?t*CK^y>ifN0KeIZ^$OW<*yfL`NGz?~QZUTT{3buT*ARp{p{y4spA`#PCdq%(!t
zgVbI=WSZrJZYhdd&(h!^D?ghV6EWy@F=6~$$K`8cR2A~~Yg!i~=>Q|o`GeD>@AK1s
z*Uv*oP}N%In7?%8Abm7D=%i3{BPIHITKaU$uuS!$8KP0af*C~(-(~u;_{URw3*`*_
zdq{v!3xx93adJg%>3)ftaFArB(~d`3U&FxMhmx>t4)wF+v~l@12ZgHeOpe<MYqVUD
zlTo7q$Bd~p*2Kygp^kIVfQsAec8l0hIqR`q;=D`l!Ai_=8FPhDB|j;;9S2nq(o2t&
zuVsWN6$W;tsO%0(?L55#Z_=u*PoRlyrM<ImcYGcEsxI&1<|W&h=}dJFKMPX&^W-ZA
z0i&a$BB8*+kUHUEP;}Bq#$nzyRih#(MBJ*X&HVv2u~T(#iFn5`Hb-YcV#Y;ww&oUV
z%jFGp?bTq2Y7%URb!%e8MqcNK{i|_I5O<HT5!i)E*X{+S6LYQT_WB$?PniqB3C$=a
zc-J0AY!um5rVhzVUM8FoYe1AwHM}cgq^F07=k7%Lt1WA2w4sU^;sS#qs}d>lk^&}8
z>}dr$wl6ypRB);DsHO8~b^1t@aoA=_md7tRbz;K2)jSa&9J7=@>-9u+J;6&>r7Fe}
z1Q+j@6rI;ze+5kFhp}4Uw>xg<puZVf$+@W?>0GSfUi8Zhbz}Y@6}@->kHZ+jo_eNB
zh(V%q_s&vwdO2BFfGpWxY$G-%v(_2hc5_AcDm2Jepu?qKUkzVEKPk4WM>j+2dM@ow
z8vq`m^&8RJX*`fav$SU)?UJt_67BmEgZxsQOvV2JJV3+0J-Z{8?Apzzotf{|zIMm{
zv!jhM>cxsvuURNkE@|ysfs8o<_zT7QN@VBJQPZ3}3lcCuLXJ*(Vf-n-Y6LJ=XrD6d
ztc1sN0qxRH0G(w}9yLBmu9JSRk?N^2Appkvq5mzs20=JsXT)mCPH|p0tTyVyWvdgg
zFNy5FhuyPMb=0E4S|<Hfp+!omxNNp?o>_06JTmFIA{Aep?DP~m+37hq-Z^Hn+1lxt
zj<W!Wvn~X+Aq{9r7aQ8bG!0T~rSn5-5w1tmLUjx)V)~ewbW!zC5}kDj(Ju_pkTLq1
zR2W({9GB&l^xFZ4RyrIj(Ry%#<2d?=YJ`rbv3XomRHW%4sd@-<f#dl3bvRkuxFr4f
z6V-);MwN9&Srgsy49Zk$90~#}TWgGJU>M>@#ipY5E0K9@)7GY0>x+%?jWiTetLN0y
zEVe7E>1ZOYDLtsHRm(ok5FV|sc~;NMl_AU6R$a+j>o`YW3Kwcu3mdMoaHyt8>hvJi
ztWh>ls2=G!J$JBCIlEm~jLh;lFu<KTpB|hM{Ste*(RvRSB*iuB&Tzgfl#SAZL?!B!
zl8P8Dk>vFj6jER{Lt;v4rIl!cMM*%Xx!m-4piw}Fxh>dAv%`Oh{%GoMl%m&=Avcrz
zha=aWj=EV2(W6)pt)ZS4nWhCY?9WY&>4|QM(#Dh+q|(i4CW0erg?KV<k3xk4fPRe9
zBc1YnGHxl&uoK!YcLuf;$pde($P_~0p~fB=A1IU73|Yr(p&}L=in}##5wrJ484XZW
zMvJ3_xI2?hiBUlJDC3&trK2Re>ggqHH&GZrj>>FO8onE`P~>Jp5+Qe*(xghpone*3
zu1DM1jR5gVrXYiMOB;=6>H$|z)2x)cOke3Fn~-#fv72Fx=vyIaCjK5x7wtYu7UH2y
zLT24kfdm$wx}YVs4BMkNA>nVV1`C;nts)i#B-$)Wy&Zc9@e*t@B2jO_27`#O6(d3f
zQ70iH5)l(4vDyrxo=5_+I*Bd`ZwZ<GJn;cJDq$oFJTc0YFD(k;s-P%JCW46`nIsaj
z3T9q!kOd3ToAf+yvg!=TZqp&Xpwkh*L9UjnMFANNW^56$*#I>Pf{sW51Mjs9JdX%(
zA<eC#DA;hlPOyj)bV$Oy)uOYB2QHQb9s^-6q9z#=GqNEfNzgh>>}GQiTJA7Gl{)M}
zh#*o$5avbfvtlA(tb<&{U~yv6rqjDcLB!Z>auT6hXE50Xt6vJsSTIUh@ClI6sk78M
z1cEWI$09;bEVu<?hH=73FJhxfmJq%2ub0d+6(%t8m^L1U5lKy=RT8k^B~=1}o(TqQ
z)JZx-|5+u20a@(4OO$v7!>yMDLC~9Yl2At^On5i86XGx%Y{aA|c5HRqkDqve$iyKc
zNpB<Az#B!0P8CKjt6<U_MFGQN5{OlA;msK44$GJ)l3a~>n+=_%prn2e*^$A7B%LVg
zWb8%&7H(uS14v;QdcBtj&=W}%3<iu4j4MWh$Rpk+@_HQ>^t`B-iD(fdyIE)BbuN+J
z1Hjl=s|20iY}O0NVkM%7POR0$TLmwSrGY9}IG_Rm2jl^`t3p<t1(~ccW|CflKm(6p
zUU?@kRPlO(panW;1`M~=2Tjl;izL|eJP}2cNGvdt3+|N=vOyP&$ZzLi&MYvEC=lh5
zX(Ayp9m14f5)wtf9yT+Y2Rj?9c)`UJs7-R&+*qu3>2+aIGK&TbgU&-=>v>s+%nl<F
z9U?F2yqMHjgGdi>BRP1Tm*_D-F+c#|3O2I|S|Agvju6c28f}K4-G;3MQTwF;jYKaR
z&B!iPI|xqze2HK&#K2`YN;<t>M;x*q2|8Z3>7gbgv0;-zr;{WR!>9^6WaP0KdH^d8
zVS^|P-yVJh>H%cIL|dzaX{L}ypaNJ{SQG$?t3+72Myw~i4LU;%adVx$%IfB&Y8}&#
zaGi09w=$Z^MKvKyD89a^kxS)QYXQue!~|#K*taO0lHl@apQF%FEBv{_QmUi6UQzI|
z=)?FePs_XaXv#qCyC&Fd>TkX!Jb07dYA@b}{2r1=Hc~BCd~D6bXn%C-9nWb@rC_bG
z-gs<i16euK$yI)nQ`6(9hSRkJD3@R=h)TZ;e9LvLpXVs<ujY7e7+h4E5Pu>|kjzX!
z{0(PIY%gm5;t%KYP}*An+WRJfV{)o)schzsDjc(KMa6}i>~*TltlOR8WL2ggffBez
z{#Ok(s$B3f!*-nPLw`W;*ECS2V!nLOO_<ze3;SM4#TW!#C7V+rSCD;&VC>Z@re6@?
z_~N%!=oLKu5c<FwDEnh>buSvwSa@ilceTLf3Y;3y*eQdwYlAQZRPiL&yIL~}Uiw~k
zk*Ck;F=Z3DM!pQBXD3jJ@sy@YK~m`>Mw-nmD+EQg@t_%5tU%N!(B=0-r%N9Ux?g=l
zed2yPK*f&%-H$GZ0NH0U#poRxOM@<lOzcZqd7r{8fRW#gpRYDLCKojTMsv{=tZtTq
z)-A}ITqVcsoZGoc++=PFx0qYWxcQVov1y!y3^lA>mT4EL^ow@$B$T*xrLR{r(-BNu
zi3t!xUR+Fp7e0N}9g8;KEcWf_nA$7wxdS&2AG+~?<O-x`tnD)NF1X{aI~MdBy4KD}
z2VByyW|xmFElS6d;O0elT=n!qp?7M>jy~~bP52Q56fT^HE^BP^L~8CXSa#ff_m0%s
zZC6}6HP)1Bg1^|*ORw0rR){m%Lba~=sqDg2^A_GDY`eQA;%RC`>se$;Pwjqjv+yAo
z<fd|07p<iLDO}4lvJFVF5yLKNR5JWh3d@v4gNP^1X`1-jJ`*k404OStQ67tjxr7(|
zZ}?-4wIpDarM8&0%4e!0LH~*BhM51Lzc9sr!XJy)9Q6C&sBRdWitM`R;Nl%OE<Uk%
z`SPVZcPx2h$rwM%#-Q{7sWbVitg$vpHiEk`=KpcE?|>iw2^{|F1O6x^s;(QIsPOiO
ziw`Wm=*Nq9+_ZH0awvJUw`k)s$839Z8eDMHKnpdgNI!_BUBgPXNXota)ag8Im-lYP
zXu`=S5$c#Ru>MfPZO^0JQ*Xl_y5~1(zx5=V@WQ>_ht~J?)cyqMjq72}nVEilkXn6b
zP?ymp`-_q`P4pNDqG-w<vb%)8w@qJvI=6m$8~S^;WLit{W!3l85AnaMA3Af(FW$B5
zVp4_fE6Sv8nWipAU#yFu`_wHFZQDUb*-VL>$F1Vlb33>@xcyw&=D&a#f06BR3^}(H
zmpa4Q6HG9d$!ONIZ^*FgXohW5A>rbrQ|4ltnc-&SL?TYQnaLn1i~6Xw6)1#RaYqv5
ziXxZ9jQN8*Lu(}(;|y&?r~O2z&6#a>OJUwMIv#N1HH-H=aM#imMrqBWJqH#~)0=nh
zH0!4=KCoxe8cAqqx@hkMdls*eAf@ga{AG*XX3o_L#D98Kb9~{dE9OMCSM$Pnb9BxX
ztF#xg3<NFneZ(RFp7e_WJOn%DpdN5O3-2QXxxzobgpF7`Bz@|2&Tz<<1(a`hFOMd*
z&b=qKWZsgS`tMCGsWa<m&(@pkmZa|O@7Nffza)9@+}25m??t<HQq~p<JNGs2Npyti
zqtKDq(->wCJlJjwJ9RBSVgs}Y{d)jsv+BYv13Jv}Hr}V^v*_?X!fW?1+PP83)pHRp
zLBA|9>K>+eLYA~uT=sNALP0$W%JdK^exfs(E_=km(v47Ih<*_Q(N989y8_cXbL!7g
zQ-M9di#k<inE-P!@=MLhmrV+wK=IoXkQvHQzaIO!`g8nw_2=qmQ76?YqF=2*Tx?+Y
zAAC;pF`hPmW{+^Qa5J+4?JQZ<&@6Wp1@wzr8;CKRk`;c}nDoNUPj0*Ois8R+dF!bs
zug8}dx@=}c;pzETu0POEbUll*OL_|5^wrlWRp?Pex6Ncwuk5*Q(ef@l{fdXTJ$VJu
zUH|w~|F)&@w83QSGT=++9$J5O|M1^?mSh+8;OSnaCQz+j331&9^k~=eMb|-LYevcT
zQ625++BZI!JRkdh%!ppUJyBwLjnzRNt8?d}SQ`Bx5Jz%3r$POrq1CG0$mL+T2@JQI
ztI!P2mA_5OhTrRtv5ynwERzhV%HS+1_Mhf7OA(l>xZRP5S**amTB`oZKQK!7WL!IZ
zmDlV1z-YA<?S78kYiah5Kec7=(RTjM<*u;a{fF_K?2OM#)DDAozZT^(6r(9=usKS%
zhGS~y&JljLRcUr_sQn2aR^GIo%8e6P>3)M{L-%V2h6l@rl*#YLhM*Bk)7r3FnQrOd
zxmsB9{jh6q<Zg!TfUSazwmPI}H_oK$#Sr_D6`V)1E6A9x+I>m1n_Ui5W^N*NwjuIh
zDv_kvrYJ=-3Ht>H;g(Gc*Y{4IG`XhfYM*XWShh{Etw(b&O>|=Qkl51O+fq~29J<JR
zY5VLerY)L|b_svh#=&9H21@<X284BuGw)h2yjK}hIa*5=tm<7pvBsa(wHc;1I1o-9
zUVgo44$eLmb|jW0n<jXws@ppflNZm7FK*6Mb*kUe#?0c7$qkoZ-f*PBWRLXkQa7r%
zlq1HB>&RV-l}mAJ*<LzIxG|zB$D}o*u-XSCs4@*Z*vgj!Bv`bTTe^+Y6j~_WoXTj@
zN}i&vH!A%lGDYQ&nG_@Xj^ERI$7c{9-`0Dr!DtaoODyr!@}1XBo7&s^^Xco_Bk!Td
zqy|rGWY&V&3vRk@;r_{19i<zuwANaM(8Q+hj@jA1xf5F!*5lmBxA(H4iECE8nA;_r
z!pef1Ivv$OQ$EzTvZH<Z?5R_`oy~sl87`W-c5Pd0sJYeQ^2BT=oyEMdwN{Bt!1Z$!
z-Q-Bv<*xR1c1>F{yQYFKdO6j$mz5UH5H9OeJR^BrqBbCImq)JXt=8jaZOE($K+EIK
zc*=uC)4OH&$jE7TSg_$lm9cgWTO&GRuI^0ksb9KiYi(OC!kyVp*^H1yoEYj_e(}0x
zZB4EAu-zqDf##O$o360nC9n7I09t=ybhc<EI*aJC`jk0+8#WzyZrk?GF1O8IB`kGV
zMn0o11TkKYc!>awZ^`QQRhApfQSlx1PdCr&2)6hg!LYxrefHz?*Bo5hG1V19m@G9A
zGgi!!*My9s)hES_vU=xtHuX18X`dVjHn;TkZ(r~Pn)`B9_|)yCxp8oup)A8O_L~Ct
zaZhO$BP#oDALAc8HviN9vGtApMkxJGdBrE{E8L@FRPNkypFCxyo07Xs7D1pQab=r^
z=-#qZ9dQ!Nc%c_eP*E6~SNVlex(`>Md8}xULT37sP1M2%5WXnP<h@(Uc1$Cl|I6E(
z0Jc$_ed9Z`m(G>6tILut>#!upXKY!LZ!58LIB^o^PRM0)Iu4MVKth5Dp^$Ke0O2O)
zD$tNZxp@h#+5)BA;e}FKXiZCb3oS?6mjbc1`OnO*4j&=B@BjNgh_$o3v%531vop^#
z&-46#c%*0p;51w2hak8?{yi)cPo5NG;)|lla(H|4m6a<!9`pw;dj9$5X7oq@K|PYb
zQ%%s%l55|I;cL;QF?_A~;&tStXQezuu4{fiy<9y4J!*oiJtVU7znOAUGx99#7z-M!
zc-gQVi&bDk0mUJL{2~ENQT&h~(@JANC<2cW$pw4MuY%;AM(r=Ptm4`ax-^pDGlXfZ
zlwwUbL5B@KLDC?_9WYwS_@dP2?hm;bq{%3;01yd_=z3%N$7GjD4N)eCprrx8z7qHk
z09q?JOc>Kt6SG&l{pcpHlmZ}-lVPS&85{;Y5Mk9GhZqr%A{xj4Dn<yE1yd0zF^67M
zjeT{{oCD)EVCxQtEpaC{ZfKIUmDawN3xC?X<4@PDfAZob<=rzp8fbu=C351yn;zW1
zp=Fw&2|8l6tqTfPS(w-540`BnvQFz=HpTywaKrvD4{v#CPh-#SAGG)0={0!y@tnij
za@I}n-FxYeK3~`p*uJ>9cH)-#oi+0E$s3k{i#|D_Sb=hN>&lb+Gqn>Haxk@WWbpmY
z%4P7Tl=$Iv`Fw}A!nVHoiN8$V^<-b~6T8nUpEbj1V{|NMseR-A8}GlouNha)9<6Da
z?_BA$Je40~ymOKN;cz_&|7qSG7j`!E?7D2?+S|RXPN=Xrq}D};-?{se2mZdW*}r{Z
zam|FybEnqGD_7r|4Mfh_w%kNs!`O*FTSQRd1Zo{|Txv5Gbb^s+Ac|xhTf`O_DWTFg
za`NH#X!rQ}u~k=HwQ6Zg?>RU24-E9*_X=2i?z!io|A3e;!@?b|&^~8fEO5<B*EFqJ
zjaOgZ+JUp32QM2Y-QxN09xcT#Q?Y=pFpm`5>)?qix0UoTI_``5>_HnA!vfJrG-6}#
z__6%cH*b``e16-u=Yjb~;Cby=+aKO_V&~2iyXIbbR(mmr^s2`V^r{nYojCCp-1w&a
z>{B=+C<Er_x21lz`J#7*-npo1(xRDxp|&=h=fsKZ8Y0GMFi?e51<?cvbt&(N;UJ?D
zB<lIAU|lP$MLLB=`GRrSj?Gs$YDCA;^T{nY%qTPBb;Yt7dk*iJQKoEQS>NHoB>wK0
z<l#?4u5ZbT1CIfPlRY4{zdLA^2R^>);6*cMUUX2|$Yqei7s%w7PUQH4LMqk(gY+B9
zn2C}hcm}8#3?<14jMkZu2w4(+7D-DWCDmnc9+28d(Fx^RQUw(O0RxZ>5zK)U#vDii
z;wvF34*ANp2`ULOLVz*LtgAvBV9h@FASRK2A1TA9oP-G`ugnUNpaZ}JDYNn{9Db82
zd`Nxn@YtFnii-G%Z)6bjL5`kV`(aNyDY56Kldwmj&d$zvOmeW_D0!Kl!KB2zmd`_i
z`)7(#u;<((TU8v<PQ%+cG@{vlm)8<wv>|y8dfXY`-LM;}*V2?)#xuM-dgOC+@x(5S
zMw0vP?GDD_flZLuzJoCg9Y*m2Qw~XBK?$+qsx(o`LU~04=)1gO%J~rhBIi$O_z{@e
zP`<KLzGA6vLU~Kffu`qJOZf!d68T5|*7N4hU{e!T(2YYM6EA#MP3YgN%BpK>s>^o$
zAq*DGIv9}$6MS`1i71v7Rr86@oMqRy&Fo!H-uWYFJUfTP{gtcu7Iwu|7kd+u6@7)G
z-e&QM=4#-x1xSb`SSCLSR)BT$;GEU#ez=;sR(@*sg0}fKz5Ems`#~qPmQ7jLcJxj9
z+94nPM^M|ja%JbVv(Fy-ApH^)*YB7V@kG+^f@{H-<HsNLj;}BNbLPD%<7*w66LC0p
zNjQYV|08(S4g2(vxr5_JEc0W4KL)AhJ71SSy8R*f<#TzU*{?I1`Odd@^gefB_Ur@C
z^{#w;^8UP)`Mn!}bp7q1@O8RSeo6l5^_|!4(-mkAXrXRJFUtNVx@yYA19>a=m#o>i
z^L13l(o;6>Z|rZePn&NTXe|y-^>8@emsO9oG9(<Db*Npaio?hOth#n2FeJ2u4P)%v
z3>NI)f*T0$?v0`HQ`8=zRDd?d%xLIB+O2nqE@Nq-+*_#C+VvjV6VjP2Ityoof&i9|
zl@;7PM%F!mD#xo-8-mf`Il&;nma%exo+UslhccOUA#{P>uGNy2G9$W`-i>amK{vNS
z^ceK4(OFTc#>l$o6jhGu63$_GDE`Ely%k$Frsra-v%;Jds{%NRo%nlTF5!|9IWit`
zz|1RlA4`V$9V7`0GSDlVuh($y+A4lc^K!Gb`_=<ia|K*U&ZJ)<8>r^H@@gq?@&^Iw
zYK&$D&H-ItUIWOP=}@IdJ_7c*Dh0Po-pkHto^hbGdq(pXLCNt7*=$$xrR2ds6cv2{
zxF_*VuK7}aJTopRm|J!{|4~R#L$VKsq~~J_8huI39Aa`{To`^}I2soLiSCkn<vUJX
zyLX}6S#|TS@`gz*uYy%4PJr2Y7+tK%ISQofOK>~*E4ZCWUitU^n_ih#+p}bL+c_al
zbLHQG`1fDsfV*s#F>t$n48li`=GGu^>_#KCI=>d#I@E>mTlfwX1@PVY2}t~-7t629
z|GuNI=j?#Lup&Bh`Yk|r#~tZAF>b=~GoUN5jo%AZ;Tk5{`{>#^H`mwCvr5G}q4&{O
zAN}k8zn=kWVep$Xqb%&Y-~<{Uz$uEp2#sMr#SW_&AmS3M7$;O`cr;4TK^*Y1UDT&P
zG8Qp9i-mbX?qf8fQDlG3IL%<H<YJG4t2B&6zif35?ka$6p_wjS1N0^*-5`hs7L87>
zSqbyGKjsf#4@F83l21pHBaeBE7;Xc(30}eTvH4UKL7u8FRYD4TWQwfFj=9%W2bFyi
zcv#v4F>+sNeSSD%DwWAS#$H`lDswG9n(C@c)#qfB6w+pAQHxc%DC6*sk#j7uT4j|H
zt4&<S6okFWz=&NknJKsgF$&Kb*dzpOAwN%UM<;K7^X5=pXy)pfzE;{N8TE#mMU5R7
zl=C)5ZxQv3jW6GE#SXG7TFCAN9gT}>40@vkDydUo{!gz0#)12MAWfB3lwsfB=hMe~
zZ@#$~i!ik_XV$_FeaI;3s;Z_n>q<C_g)7lDPs>kNRp}%n3!eg(E4r`$^8pCoS_$Dw
zER-@?yNU*B#BQvCus+3>;v2PC;>*Txw+tsmA*=T^l5Fw1yPU-AjA^o(2~(&J6eyS9
zfmF`eQeVoTl+A?af+Swb2mQdC#fnXzi}KG;lXu>)EYoAtiqVATgPyEhNw{FlR4KKT
z*d|F>xvDdv=2xQ{tO`?hBu4bzxD|W2WuY;!W=I0I$eYXjVR!N<Q5_&0kX+I^b+}x$
ztETr)+Iaba%QsHy(2dh2jUO44XxouoSJ~9eR2LLf8r!O@-OIbJRc*$~f`V$Mxv6s9
z;_IIJ=~LG&rpd}{RV})kx2taIMYAd^XI(UP%`AO|{+8>my9I4#t+{P;P1n}i!dTGl
z4%QVpoK>|Ib#)cBRZd4y9X=K-tlipGv-!4FM>kKHu=yw%{}t?67l}b3%hWmBkisKL
z+$GF;xRjw>pt=HQW<1$184U*c=UOdD5UR)?Oom8MCQtSgl;0i&MH2L&TA+VAln*m5
zCNM&z1brE>NV2q?g@nvt1QKqdD2V|s&sl&nwk%8#$bN@inWaQwfZTWhlTr3yGRhS?
zn6Wlrbw0K>-wx=eDJ%L8kK21c>=8uJL+m{LgaNZ3RcnReZDNDo`+nSGd>d5!_+abd
zzOL5d6Qj!*CXUMrK1J3KH=-g!oVJYkF{l;p(&ZKQJIdHE;F_TP27@5Vq>Vw3B!70A
zLT38A8vnJ3>d9Gj*sQMx9Y<d&0Vz;G32+pqH;y_0{(3WLW??cM4ciZe>#z@|hsip2
zD5hQ}q_}P9gN?l%_QuJZ`ZrB!DA)%k?<?p#?5*#v_jdJmk?o`=02rO7qqi}rms6@6
z$M1*<d-sJ04qVu==kV4grn-(-tgBnPH*M-}S#5o#wYaypxHWOOZ*fr>{<zDE7Gu1O
z++N2HzivWtU72KBvi0yD`nRe>M>e)xX^R;-NiUAnAB&aomSDmXm12~beaIJq-laFD
z_~Mf_A?5AiaABKrhDZ{%*|3Ev4GMhpz3+!yoX*l5z;5rp;^RPbyx51+fo6-2bA{f&
z7awYvf?9`GoDLGLD{b=jBOiWvWS{l72MMHxrvyoHqI@1%y*nhLoe~ek{9p%vYu!f<
zUTIs|ike2{`c&+ySep$hzENxr9v$gUk*q6}ilH9Kctpwl1l5u0AEJ_q3lyaGElr?<
zOcH~}?ORHt^dOSA6wjxDq14iSEVU1{X)Z=AG9p6k`$vV*iSHQ*_PqkX6xlGL%JzQp
zrb%UiPwDii!<LWWTji3Qx)X`+Z@=WJ!+nEP-(f!S;gQ6?r5NoJFTxz5$M<iNlj#(C
zKBGl_%8T0z4q$e!92R;dHBpfU_-ur!(xph3u`Ads!_#awXP&eJlT#W9@PEUUd>92B
z#X^zeXqY&@54+m2sdN&37DHd*kAT*r4+Sdlusy^XuYY9vTf&(E(dbQk_Z?U4zDoRx
zgk}Q;19vWAG_Z{{vhx-n=0pYR3~$K+<SO~t5mvyFRzdbS_H$4z@5$1h!hPTZok9MU
z0jwhK4HO0)&OpuxA{@x1@{fuFv#+qHbTEnU!VxQchkQkm0W=s+iVTItfs+*7lQ9|z
z{W<I2DJqx75#L$-`q8$ehpC@YZ%}`vzCaR`2^51$&@!60Iyz#X9kD+$|482Ik>}5}
z|Nr{>GvyyyUyKND$#`3i!eYX_(pfPrhu2Nz(x>v$^l6TtF8zNaKRnIx;bq47skm+g
z7>mkhe;>%!^k1VZo_8$$uQ3jemHI!GQ6B4H?&sw77<6<%5#aLNf$<9DcYHHXQNO3Y
z`hWkG{BL?`)-NNkzZQTD-#{Qb+}o%HL~Nt+?IXUd2J?TVcYojBcM5C5XdJ|8r5BP@
zdF4r}_sjH6kU*m(=D|t)AM2xM=ut!0Gf6KVu)Tvx(y!>0QqZ2BtYejuuFQQtfLtLD
zgpkmY$nuzD+iNpM2Fka-5(w9fI46<Umt~I#WGEzT*|%96Qve`_8E8YqIvZ1Lv)O5w
zEW63CfaINm=9fHVDRSTyB&`!uw}PFYNn)<bRK{LQz8jbHqLgs;D^?tJ2@h$wkpHDY
zmp(@JY451};3TZV=AVq^7W;JeyAtSb#9uv>!In^P>%&wH`W8EtD9STd{d-A;M0*;e
zifKh!OcLpbNe!m@bJC(09R&Sj*XHx@6e2VD90V60TPips-~);XUQS0NmH;0JW2;~^
z9F1c`W;7mgprg?ysQCJVh=WDiI-dmchjRZwLjL_E-26TLi9~;@$Lmd|Qc173Cx!Qk
zFf<7S69b?pc~AorUi3dw!vw7t^bdGbUX3&9)S&GE==W-|BAD<Nj@J?WA))%8aHtm&
z>jV~aZN6xnv}ZW(i~Eq6gz>hgM;SCRB$G!zOnAY7mri*TINstE6`d|8QmNF3M?fNx
zOs2d;1H(8|G4n}|E_H<8qXG{?@DE4f01-bvnac6j!VGh2zU?-p*sd@IM#hGP2Lu^=
z0nq<3!Z&e5xxNpV>saNIQ%c!V%CnSGB}SG^A#+VAr5k<$Y#d%Nh~(@U^uL%0lH$f;
zjdmm#F0Td5SO?)&U9HZgldE((@D@tc>U8oBupb;4^YAf}B1h1Vl4XayLpSzeQZ6GZ
z*MDZpMdf^3a-6!%SO?);{BY&I`_U7~O~G5JTw@)EGnBHDz5QUnTH-3**oSesW>8l%
z5oYeN_8QI)A&zyBiJYm{!w!Eos;Kz+;QTQUQ%bpxp>l1_Z?6#?6XIA0QMpcA-7yZs
zW20X#%7F_u#$h}bq5cK8lJ|&9r3EADmQhDia}Vn`^k-u?78&1A-+*(o_x#?S;B;@B
z+;avnG7);Na?k(43k2t$?w#O!R-$`u&6V?eHa=Z>n&wpP(2Cqxt>C5Rqx2}Ye5)s`
zk=M0?Xx<otmm0q%A_A8nw*B;g*Q=1Ed%bA_k;LI(E-y`FiXohpo`GG^g0owUcnlGm
zyF)p5v^*aW6Ny;IW7}{`LjdGq&*8FS5m1#GBW!IQ8Ud{l(4Td3n>g4n85#2U!4zHy
z?N?x%`sqz(bHCXPC<Q%KLBFMYatqwj&|I=u-GgSStUoxT$T|)*vuEX;;FztJzht1`
zJp52?0VAz6Rt^hqEm=SqP*#+Oa0%$whB@jnN&(2ai9_*5Ki$(IX@Vv&lEMJINdS?k
zQ%I_#NFC8{3O7MN7~fSVQ_AW?UDpZ)H;FWXvffY6@Or&NBm;wg^XDHuDi1}eOtq~*
zF-~S#o^QyK(jGcAik6n?&m*mUZY-<^bx!vY_McpRT458&5FKY}$nxoa#?C-fo4Vy>
z_a<!OC$m|i?{IzTK=&p(d72Y2fe&x$hAHeCK&HOKeMtCKvX60`8nfI2%u{oatVibQ
ze43)~&OlS63bv^mByqV<bAm~w6C+CuNQqB#92Z%GWcdVHFVs>Nf{KQ}za}--K*7<e
z%|;Anq6@6b@@p>MVC)=<*B%t6N9($#_rVs$xPB$sFlj;+&^LXkdHKHO%l9!~s-|}Z
z&}{F%rI__`>Aqj~O~)DK|5BuN#gLx92H$Y{bow9o(&g!Ul#@zGg1kk!G9$-k`z)1@
zbis{8B~g7F^E%@&{#szAF{FYDVv7C2+4AB3S2jz;E1}WxV%lWj4Q7*tWdp4%H{WvG
zN=#ZSQxeu8(FYHIeRmY}|4{xj?{{e}R+Bcsb;Q^7Z=WA4HsF|Dk`4c06j%A&A7rs)
zDe~RbP>b+PAOL?As3R<Ud1;4&D&-F={*fLU)0NSZl^2+RzlsTGEMv;LIbK#Li@z{g
z&@!*30RO;SvdL!-oImc?DGyD#x%~VCiIs<bFz10eKRC29G0+ma{Q93CUOF>*|A8y|
ze63fwBj?<^;rhF8*th=P4H5ShptpNoN5{P3KNnr_fK9KrJ#fLIOQ%-~Lgn;Jf#!{i
zW^8H>XgO(I>*@)+-u&#yoJHH#&YBnS&Y8J(+rruX!@nyBehccjhrgQd9DNnGB&3R`
z6FKuUCXF3Mpfmu<xkMIH5dL)}qmsg7xt+y4mSG$r1?m(KJJiAiv=_vJzUat;A;p!=
zF)!tpi&)GZcJ8a_V5)S9Oa7f0WfG-J3qVL5yppCe*oC;zfT}piHdM*)l^<#!Ol8ZB
zG`m#nEV~IV3zQejH#*IMiej+A{&;_`Dn~(6bkaSojq;7rNx8}_?XRgK^BSASM_x#k
zP<4c5h?r1A1a5@jLAL@A7zye}nX8~zfMyRwBfpqWQhr|WW%=cx#_1}k))ZX+z~u#+
z@wHA_r})xLSA1!vuRZ#iJoMSowP*{N&yIdPl4$+43vamLLUaRko9<Psx?N6lHF%>>
zxte_XGQMnW?lx$+9`W6dT{k;{@l)*m*y93!F8_nNX`Hp=)ml{-xSSeXS2_Mat6QX?
z+MKDD2Hgf#6>9&tb<-2y{c>#O&-fwYF82MalnlAjMBju-mmK<^)kHB0f+zk*g;(V~
zv{7c6_V2es!i@0mDlt<5e>lJ?5D>mvIw1-vQAi4+67i5p!h~8GbtAw1cIwdkhf;6L
zZ-a`r>EzoWHR>9iTt}*-dUz3>@?;WJfCm6(F*jw`MetaR{iyL=IhR^NZJ>5gmy(s&
zd#J~V6(7|J4F{+m@w{|6FOBk`_lDA_7Qxf!IpguurP=(nC7X`oeTlG>jkF1vd(7xx
z(mY^B|I|H(G7lkvk?t|4v**bMjJ=!L%9OgF+oIcU!WVptrq$`uZwYoLM$iPCNRBV_
ze$!u$IwX&=qi%q*QUA&PB%c|_pAIGQAAS&xe-)8Bp{~{0sWNH-mew-9LA-_Vgb-{1
zFv4u8S_d=HaoEw6$)ZQZiQ8)?Vhj!L$p`n(X<Plk@?#%=bv%Cds(8GxqTzzUa|1=h
z-c=MpeTz*6bo}pbS~R&ZF?mztTKTILCedv676%qyeQ)QcUu+6Rb{@BDi;IiF-(c?&
zZ%zE-^n;sC!2-8nr#A;0ErSBFzx~tFh>hCY(`;B|nQZ~V=P6v&sMSb8_;J8$D{l$4
z#-&XL)+}0a>`$idEb75!R4p}`+Je7Bj<>}m@{7{pC>koYs5xw;QVtuc7dnaRYP0|U
zY8E>2#4E2o_R!n!(x3e8Mytfu8*8O1S4E)0?r=$KpV%N-%W5t-_Tc_X-wlHg{jb^z
zI#cE~&-8#tUeKKX+(x<n>1~w*oR%)+oV>*88HWBtV^qr>w?O{6C7S2Uz~}$FhQw=2
zNG>7k2PFy{=ZN(KyLDvzDeN3;K|#k<ioy^vgwlA_8aMVTid>l&d58OO<*DoWxy)ze
z`3)+^=<ww=yH$&3bWD<l1L-k@^_azk>&IGc)4@sdm5jsCYBVxnyOMxck6D5JW3NOp
zzLQ^}i!F@9$m*3ux_9i#<$U9xrEC~e2iP+3G`K<-w~_$XVIm5}Pg2D0dLuH~&=Zg-
zOAu@nal2?-Sl%j0oY7w%E#x#-jxK=ZHzwY>Yj_@T+wlj%i<2?BiYj|!NAOAV790sM
zqw%KQyXy@WpmBkN_f45)92}8PK3VwlV~VT_PaWg-umhBiDn)guL~T!794sBy0*T<a
z1_|d8W;}{v!XqSsORNVlcLN~bKGAce3A8pFz*q8(3s}3u;*i_qHng#`3*;NTVkP+Z
zht{G(+lS!al_G3ES*L3T6Ng%g9{{T+f~b6_Z14pQfB(B7=)+t|-Z+n`lE%pmoqU|i
zVDBc0k1>@4)%W=^;2Th|FW3vyNlPiKv%AwNdq5{zS;}a3izc4AXOId&HeiPdcSWfV
zCV5F1m%-Y^vN=SfNj*XE*8-nn0nD2De5x;nqUh#GsN<;j;dMOX^im1urjzLJ7?aGH
zDu()pSuW_g|3>{qtNof7c2L&ep}(Fy>jvGEXW{r-t3|p0J#<W@RQ@6+$D=Ymw~iu?
z@EOOxM+!$w5g-d-MBR&L#yJ}v`;b`7M%4oV`%Pv3!KcaQ=DG?v(0)a7Zbco^M(Zln
zO>A|1LRVSXLUx_x66R^LnM!_p>J}HsA6^_PFKwOVDp*{H6?b%quFIumldITL5G-q+
zr5;qU?vo^z(}=Y9Ad+;KQoYnRYOl%=tgbxTtq#Q}miV}Y^5jJ}8>0}$;96)<z|Q}1
zI~o}Pp9RZt06s*V5!=*21SanmAn(@fu!n-DPEmTNUaJKZetG>0)6zg*EG!EZ2psuQ
zo9zo=anEsIUsx!AE(UC%dtUmcFXS&&I2|COWAY;^Vh)&TgV*HUCjC$4*5IaL4+Pp%
z6zK_oY$AE#xC11A{{<K(2h6esMEP?!P{4J7^o0#QY5`m>0#OCrkw5>^hKjV{d~$*O
z6We-)G>Xc*<$c2*hR1^*^pOmab<JkQuXC8?8;@o}{!!xSuEIi-xfH}jA9h|%IgvEu
zBtM|JI6S2yJT8v*Ot!r<n`)P}OehabHHrq~y+&5k55{-jy>||9W-f5Tsj=lv&2GD6
zUV)`JC{@nAKHzSwE=v>@oMqPR)_IIT*V=niM%RY;d-h-+t$gGQg{C(%k=gJ!OOKr0
zlFAxz$dyQBsIXBYsc_LKKxA3i3y@R|W9d|gSxXE{O5iJ`R-zwImUm>tLnK<!r^9qe
zjp5F}y{8a_@opFtf*`ic27z|~pTs{5mnIo$0*Ho3EQ*!c4d|PhhU*%@(fx$t&;)$Z
zh(rgXJ_30ViM2tWEkH}a<|FRJOy(Vh6%HE`sS}CPmwa=?siA2=GeBp$O_q}{JhLBI
zuY@*qkk%Aj1;Fm7UxlBhWtyp*dDhIjrg4!f!M@%VoV)(KD{7`M>Wb5Uz5o89GOdB;
zwb1H3c|QmM^8+6-A+14cDEsIE`78Oi@c!4`g<_(wy{)R%7pe*C-AjW-6LzesU*6PM
z-t6mE<{=jQkkNZl-8#Qt-PqIDjsE_1`+Hhu=;3wiKIgnECaqdMjX87G-h16$2}aj!
z;`;W+j&L`r7eKn##jJuiM+LDDyB#mXkRA~t^B7(^O@i(;B|pM_WzrW6B}0vAD%561
zX&R+zlqNWPOw>QUaEPiH=SN!xZI$)D_sLk=t6*di^lXeLYxDD%6ebj{%f%jJVjneb
zpc?qY{-_0GWMDxT2QX&>mI*Bqri!uQ=EqnY3IPyO5EjoG*IC&SJkJa4djG|}RW0)Z
z;{xZ*o_D?{=&1^JuQ;p?YK;IwSRAAeujmd|q2uSz?>-0Rn%9!}Yc*h5;0#n$+8b)R
z%jYZsPtL}tE(+fqW|7#Ti#7y1Dm%x`TD)XVd3Q~Ny|N<UgbaiLFw}@k)si$sJtLl`
z%4JNFaM?x3_ek+JUxqE6IG~3p{B@F*cgm}#@s!{tQ-asdB<1(sBQS*OdIO-|li$P3
z2LxmhB~DSt<!_E-|64kd{6K!jxleJf+~)*SK2U}X1;3G?<gAsceaDaQgZLMF*CM%Q
zEAe-2$1^*+VYWD0pm@>qsL}HZIjRC-J|FYIZVdtj1Ra>x;1CUFy?oR0eeqb&+2=e%
z$~&q)yU&x+xIagyW8NZLd1w0i<NMa$2WPEWw^6A;6nf;FlKYNJJrT7cu3=R*cE~z(
zr3>EzZ_yoa4bRW|Nh>@_e#OrLeVvlUDzJp`GK)pdB;>@7<$p`HuiC$DPt<HEG?=4%
zw(Vclt~k8F1WXQI+cxcK`jIrX;K55Tn$zjRjBT#YITu~}-~we}ROKZqiw_aNwg89E
z;tP)Oei*$!B4S7t^s*_`qG)nCi9Wxa<0qZx1d0hSP7=1o<noD_K~LGBBS?Bn0WSg3
zAo5*adgdT8QL#9Zh%o0Vzg?u=Xd?3tAi1wA=U*OFVI6~2IMivlV{JT&kq6Yz8pow&
z9i)BeWRSqcK*h71{-Hr*U}!m^7fw+duTv(!-K)G!o2Il_8B3|z=&%@AseZ!x`hw;A
zmJ6Ut(1R4spsQHro%hHovz7-vP}Hw=JhF9&OjWeE??KPT>ZWNvO@KGlI(6RZ6DEme
z6}VQuV!a4^0I$V$D>>!m6uV?)u5Q4JrB@oW@DT(bq-tbSxcu>02{u0U6G0U?Z+dk0
z7Aq9wB(F8-6GnEv{9p3lX-?24EQSG{8SLumJ`UyqR<JUP#0rw%$~QjN-6LOS)(tRP
z{L-wTU_Q_$Br8Y?(7I*zv)4!&{~_*#qHh4&hq;o<@z#g_Xdl71=1$xzKl-S#&|UxF
ztMa3-%74PYw=hF%e$v!j1_#qDov8QvhNjTZ;6E^Bc4z0$hWo+b0f!34V|7Tw%3#%V
zBpM~()I(prR+8k`Ktz((VvVj*lE8~n9sI$FRn4pMSr9?_>Lh$cqmmiEds=*T<@xB*
zVHJ?xp;f`(^Pdl2LyuE#hi(fZ@@u3Z^yHDx$ECtWQ;PW-%7?Ew)AK<*mWg&zAn>&#
zp3hvJR~so;NiebjfYJgZ3kyaTV2pQ=X?|^{Ax6G~%2D-FUc$(w<<CeXjC^5m#~5vp
zAh9DB(!=7YXJJU1fW$_kLCF^eKAH_OedeL7s^Mz;3(p%Lwu3$ftgB65WRmOIWHSBJ
z^e^b652ru<C>p&={&Y211-(yzcTTRn`)<;I4W|;^f2$aBJ}s1dJd5rt`Qknxu^-C+
z9(q4Lc?uX;1bzrU?iiff$UGAooQj6GSLCmN9<09puDifoFz#n+TbX%<vtxeVx2lXo
z)qq2-6dr{`>j92DwK-1#wM8;kZc8hOXTWOdlrk!<wQ3lHe%TIrvs@={-my$8Fd8cw
zF?;M9jcIlJS2rrccH`v3Zy%oAsO;SMRr_j_Mq>v(g2;SK#-^cux!<mV+GW??fB&`1
zv`{%|mCUP`?6$(oiS&MtfBR(Y4LNzc{~mH6eW7*tlGSF(Dk|SUksAV|IJU4qCt)I0
zkpu`^FXPRTdU;jJK&AW2nZyVdaDwo8J%dY*pDw3{+p`oMpGYe?q}z~}GuyqCnNt5w
zXA@B%Y=K>keFA4IM5Sc;|DiJ&Mc}6jWbN6Y^+S9;oR__{BE9E~mL0O5f<*Tuox#%@
zr7@25ogU>&ovbe<?UceEpkt?LZzeV7PuAxJ<Z!)4mBVs|{rqx_^#gKc0KXk8na?@R
zQ*J7Xt*%+$7fiHC>_mhk0T9_E1gk&^W^o|L?To0L7|qZK6_;V~BcuGxCxX>ty!CxO
z5RFNr6<o}&{mCcthqnq^ooIX&EIq-K6FNO8&i9N|BKrNGfGI{`MdwAJfB#ma#cI42
z6o2xQwJgx-$Wi`;eDAA9QKzL}8|g2Zv*BT!lY9mYGL#c?9->Q(Vo7)uyI2+byk4`}
zVj6{<pT0?)CW3?{O2Kq8C~36lUB*sDxmVbii7bcSrIyXj7I=_WmV{%dZTWCU0wybA
z4!ad83eD-~<>$eA*oOvW%srAmjK=LgF-BiGv^}^XxTk(ofBo)YkiHV_?8ZBLf=sjg
zd>Uh|;;ZU#ZhTc8z8+pXv@M7(>feO&Z3xl_g6JZ&vpcw9Si2~?|HzQ#F??AShgo`*
zUoG)oRhAfrd#mR7_wxGouoZ?g_;uk0$|17mLn}ybIft%fKJO_U$gbDRwS*Q`$w}|c
zr$9yHBq|YolD(KJ#D3Q0AO}{Cy}<)H`d|8_Sen8?S2m5t(62RvM5<J@xIjW|MX%gV
z-xtIyrlQr9(!*phSPYVOyPWirxeUp{=ou95ZBl0aMs+2`RDu>Ckq~2E?EaN1Epf{!
zbW=IyvY<!GDM8<F)M{Bu5{B-Y=9STXL9#d$gh_o$uu8*afs#B~0EBb0z^Kpg7+kB)
z?v?+kiUU|CTATkCKZ9#kSpelxGT$oEKgfTdxpALEBfCv~rw$%Fr4x7s(tcXn0#q_1
z(`X;L8*Z+v?*VTK7Wo5<QLuo3MIMA+c_2MNCzlo$-dxySxD@seV`Y8l=DMDG@E=Be
ziD1N+q!Z8!(6=cMz@DY(ikk}ym-d|QyDz~0wW{AG&lP7FgW^D0Kp4|&+e_f#)1N90
z0qqAxx4{@5(d~NxQX<0Rif}&Cawwm~T3}gzNpj@~;#g^IX3!}Det}h%DB`g&#3aVb
z-YA5!&p;1)DgB;s>5gAqdUm}}cfVfXIXhj^SM|VEr3QlwhK4oQV<<lw33{-(q(9uY
zqG#ut<|qDWptVl0az|Ztf0>1asbP(k8~-7Cvm)go_7q?N7BqPS)$?!|4HXXLz(F@M
zMSJsH3`aR2f>bgIW~Kjhib5Ls2gFHH$qiSGn38jNZW!^ZQpM{~J{r^vBS(snt;Ad?
zI^>izQIb;*(NYSNr8ld7o<{8RIsDDh%L2u6!tDmB;y@tn9p)4|V*DCWCS|x#2Z=M6
z$x@n5mRdvynk6PmAmP}4`Z9rg0)ap=NV(l|qFDaj_b(IiQ&#N1F$XwfnG*Q^0p(f0
z&$oq+=-hYZHKhf&ZTjyt8Hvdi^y|ZUj<F!~FI1);G$J|doCyegz)yv<B6TR9O~xp~
z){TU2VlHJd2#6wtqk?h{C5acF3C0xDhK-H%n*rLOXBng9bfXs_eJbDGwgNZML`b*e
zLal5EXAi7hs@HOKIc+yGjLBNyE*AE@R14lVYjw1fb<0kg2CtZqgy4jtUfw<am5ara
z;zFC5VU0$^Uyc}Tn5KneS(br-{XjBqHcAcSMPZ8|z6B@;dcN@pHqQc@p=p@hWH1O@
zT)_^5!L&(l+P<G=(1if9Jg@5G^bl%~wwzb(@RfZ9<pmo8arhQTsIWQJVNHQtS66cA
zA=Km@f+!i!UV&@6;_IJ1a~P=z>$FCrjxFn{oZky-NFdo8;7(Dv8@<SD<?C?H!>Eg0
zEEz8q#6KSW!){H1?qWTFTDGucdDpw5aH&y}FMC1(H3n4ODT;mz=?^Ovp7pGViM<%x
zFz}OOyaLgS*IVgul?EH?vTIG4rCY6rN+pS*h3L0_bwm^{H%b$Cb$1l77SlT3Y|_Hb
zdxOE*yF9_}x>&e!X7$8zRRxyk?~sg_3u42D_GXc@7-nlsf{}K_TNjqCxWG~toL*HO
zt?!9X3cA3GTRw0-j9cSjZAE3oiJo=24njR#<<cyeRaomE=dhW@fV*N`L({Zz2j28N
zj$xu7;rzZbGbdUPnE<V$#Xyl`L5Hg%><&nx)lnU4ov=uKXM52*Yt6{u0^sc`Q*f9H
zXPt-RSpg=Lk;5~g;N`&Xz}A|*qVRy@?H}C_N(7z8_Di!?ejQ_dY}$91U7k<Y)b42b
z&+Bl}X!8AiQf)bkw865qf_U(8>!b3mW>GYNjjw8r7aOGob3_51*en?@!+BA%Wv)m-
z4UwpU%8R6RUqA)&S7A!B-AxfWYB9nxQeP#KM&oKE)6HzT4rk@yl7~>IATf%-t89NG
z|4gINiNBC^?@B@4IR0lE+s`aItw#RUyQI(k0r-_IstTAU3hRv0d{O8%N^qjtY!>B(
zp@q&x7I3d*7A)!KBxA22&X<hq1W|s{D5<>nir!IAbamYEF;_}{$+Dd>_vvI)%BaRj
zd;4%yS0C7zeo1}^d`lKAdC7Qx#zdX5TSNCt^tzWWk`v%AdCz~JKhlv69k>ydeY+s$
z@egSz1Cn+M&}e%e>KRf%vRfT>F)8kI_#)u|K7f=U<$$6i(xk`G0a{^_rn9BZjfZsR
zz4)YITRTr@7aVwOtB13XOa}mL3&`(#!ChAdCW9k0@1Bj0Z1l<R68!FW?&Y0Focs?@
z+>f?;3+#Ur*XLp1HF$IGVpgX!?{~3hfpur|&OJ_kB{+8(>)LPD>DVP3ahB`+kD)PR
zJ}5`(GlLnv9!e&YX{1Wa@1PxY=vXr8MZGkAv(pKC(XXI`y+qblR+hmclhNRmZw9?i
z<=0>|$q%R*uzp*AiemnX+A%^+C745YOnf3Rye$y*hiw6iAALq~Bn4R_p@0QDC^~B6
z(TFXEflxg(U022U2?%LzD~ET`)PQzcIp$jN#_ijTd}QXfi|5?hU3RNDReGs-W39%_
z>5N?)-%j{$ol|=2tew3rCp;BXnitj1(r6k(9W@iGYCO`Ef|BOi&hiO7+vJ~E(G)5X
z>Ex4Lg@>=4a?a#xJ9BCf3{j`RQxR|ofZ~pO0T}ukel^4wH=Uinqols1z`#NI$AD%H
zW|zMTeB+Dw96AmF`86~>Xaq-bm4b^wuqD)ZNo?eIuu9Be-jvKxb^+Wh2<ZpvOQAOl
z5#dGZ;BN&%?iK9b()z)H4B~^r=aIc{Df(`v;x={oEErUNc#O8yE}a3Ud*nWQ96htt
zE_CD<rT(R{peRPBnG(T{i=2KwS6Yl&mG)+JGa!tW#PX*f)oC|}QO--KiPRiaqX?!3
z3h-z$0tyaOMtxEy9immSnCL3j1~7#I_JYAI1^@{kHk>gkVTOWmfREs<6p@(we=^m8
zsqmQempb|9I-@}^r|?Q#iukf%x0jCe(_phfi%HWA;$JU-ars)#q!+ZdZ{CszrdR)~
zdb<4K<d5(EnCbmpwVAO3zhTgm0f910R+d0-oa`4b`{XQW5w%(x&|CkqIQ_Xs)I$h&
z(3kY}9X#0A2M?$F6x&aJz3XtjgSmRMr>!>_Q8W5G+u?iE`;K9?lTO<T*=ql3tXj)M
zx#}?&k7@!PlD~GK{_9t9)39FFKy_jax!`xa;^8X>BOM{mv=0Zyt}^4zUs=Gaev)+L
zB-xQk=L9LTbBZE6=(lIATIWH(|MLt<WxC7M-;}HW$XcGhJw~mdoME3CRsq>Nc5A@?
z5p^Ec8o74zW~;Jgtfl~4&fEZ`&$F+qeZC!g1P6(cpIGis-{*r?4DB5bh2x4G8V_Jz
zLN)3Me*hT30Lcj0?E>?WuoD+G)wOnZ)J{&{d74Up?yB$JKB=|JDTYnvU})YNGqlaF
z==;IJb9deAk<0G~kk^Q<b5gth*w!~~OIK{cSapuK?l^Z&jakEQ<{9Jmg^t2&*Q`JE
z9IW251w6t#S+l_?HZFK3y@eW8_c-x}&ei?9$GH*JlfJ7tzDM2P%&*@szoQ`-weo{M
z8msn0Bdf_q#%zxaZe&7Thh3U^>x#q1$aOy!qYT=4JK+-Jc#O>q2yHJh8xu%E495x;
zL|>Z~lY&7WFE3Fcmpd4AyF&dTmrQKD!0QSz{c#grWwDsT+Q!6XC0&+@w=bNrE8q&1
z6gYcpI((u_tL62DR>@V>S?x1vfh38vpkaV*<`!bLLHC62Yyb!PUC>tH?P{rS06jp$
zzi9|=n$!i0-L7%~f-ZPTK@h?%iG@C~Ian61XtqkW;@Z+?k2BO&;pd!IVT-!vkH-B3
zi7|7lIE>ksH&TNS+HFJ|h7RlmL*R@t`7cyxjMXN=?a@SI4mI+}TTj;z>*HYaO!;q&
zMxaH}3bZC)b!U}JvKH!jt=1*_I%;~I1tlR@VAqU=w@<Wmm0Xr+)P_wKOBGFLS|a@y
zr42}XJlwKq<`%)~<btI$LQYR}X>GAhvNl(Q%Yx0KZ((8!guw!Mi7N;|xyxM)yC!W4
zHlT*<@?sSF%vy$)*pbSq7StN6sf($rs5_}gsb3IY6YLp}SIHt6S}lkKM)ZG_MSrRh
zFQP8rTUgac2xY<IBVJ{&Su-p#Xh0-RutgwXv!dK}u{z9Ygo89{K^>u`^LYt6sS1AS
zCH)ME_k1`&z%XqQOms>-wvf1_EZkur4vSijfLe}G3wSpbS<Gfj(bE$rreEluHWU1$
zJsk9DxrqP>Ry%0p4dVj7_I7W{I0HWjX@fgjS7fsmt##Wj^E){pUy?{bo1~jqeueyZ
z`Lio3Cg`kI-GuV}FtooMrPIc<rbnVPd9Nm*p9XxkqMC@?W^+esifm7`w-Y$)c21A(
z4!+J`;Q8c^TJwPUs6P_<>tuN`xPS5<`MT1|LQ4?%<$pS%sTepn9;&mIjVl44-Bns<
zds15@*u~P2yXlf9cPLcU&^00A0tTC&uD?AJxxFq;|731O6KgWDO%)4|Ju<Jn8K;}e
z=h01|^q0SMEOo4l|N4TxjYa6%MzV1?gDvu3ip|go%<}JpqPr4khOgnGuLF&je<AU*
znf|eaT1D-q_EWb}4--8dqZFcd%_5<vt~MCKc)FH|Z;aQHd3jOPJEG*}1)~AdVOl_B
z)QgQ{h8sWHttAY&Jm)1{1Ve_SUg0G@1Vm_bcMP5!kurTx>1Vj_1;^;2^ebV9-R=m3
zIcJ?U)VM)@Y5i*8UA)-i7HP0pW2hP*1IM(MSZ(>@#g*e@7A=^w1PyCdkGaF`9pS>F
z@T93oQGx0H1q<LCE@4sQ(`nb!jf;&glx}(oeoWFsuC*7g7OI1VeN(`bg`tl2P+?)H
zy(3fzW-W=<Rv9%*04=&bpyWT>?V!@$QB~D(c=_`5ufXT>56Wz`7n~zsSmO+~EPtWX
zRUdmVy?%T=?w)Im=t?FnTsJEii3DdILz}4Et)+kQ)}%>qO-?WTbX!w5XR~qLO`AT)
zY2Iq(QJN9t&GJ8hY1)Bx^W<+QKRg><9qN9#8{cG(Y>c-Coe^+AzRm~j<zTnsONn`N
z|4m6a`X6wL1|64b!x@DcuL|2Ti!vYv@Ig3V_q99ph0Ur<18|o?uXTJ;>Y`uP>(gI?
zZoN)t|Dwz(9}^)c2>-)QuMy>GResD{fL@`=R0&p_Z9`{)^etA4sS=*&rLU>XjM2*2
zBxU(U@OlrnAlPWmfxWQefE)pKK=xu`fW&aeDC5f>Tk+GPhS%(VUaQrZpDC8;IB$8@
zBgt!!x^4A7E%F+zJOpmh{C?OXH4Q%S>kXFQ0{Mr6U@W0$8v^MtlzjoDV1xGo{7>^0
zqcLkJ9Zxa;MyXD+hA-7J#Q=leD{S^f08?|CfPnM_U#O%SDl-Y{*)1SM_~u)=NDTf8
zd?Xh>^8je*>;zuH=k$66P70$^0wD1vf*^RjP9GW}2IVW>klz?zQ&JL~;2fPp@Pa{b
z^T{+=r)3$M=5%I<i7QwdPh2;y^or}Qi!VkKvcsg~Xj;N7)eNii7K}P?#^*&!!NKBE
z>;Yn1#SF;BXjouuz!v7CAnHK>;x?@TDeRxiKa%Zig=|OqxZ`@T006KsJsT{LMft~U
z6__JC<Ojh*@QM6mS)^O!H{?HqHu<A-<lhrM_TV`^pb)dA$saMlmH#Zi2?Y6{@;~IC
zgCcs5{B!xAU_27u^=MrBiujo5(a5Bf2jf2nEa)#7XL(FXivMW9Yq94Ws~x<%pS`nx
zXpWCI`O=Hp;XCc=|6U8%u6+-Dkdy=IM`>>l7)U2!vf_^WZilWz^0DjSle^NVcG0`i
z7x%zRPTqCo$QZsCv#51BFP97$Z3gGI#2-R(5tfc<yOmS=fQOFN+OhNm;;nRupx9zL
zf~L%Q<D5A+%w^m(ydTR?fBZ3+3g*PRVzDlHig4xB3+ETrc3Jf%7PlO0(p$S~i{@WA
z^~%$qg6FZikKSA)#}>W$k&Y#4@G?$AJ8|d$_bN~Mm^>tw{GPWReo8)X^!-VC*mrFr
zI3FYZWg^+g*G#kup*m8&G;r%hk6d)oBk&Qj$?zB{U*OOK_?Y@H|2YuNUYG}5^05&u
zh{S!vT(ziQ%jdz^aycqTm-j*)7#xX|a7ccA06vzU(GP0IicjulFJbRN`UH-yY{z{8
z*tsx{Gm4>iSB1%P(Mv>cQ$p{#ghjmpJ5D2MQ6ljWNQR`*{M81KxZ?qw#1Y(uAUe$8
zGng|YUczGE54u{jJsK`543%`oHwrJVY@1Fq*DqbN^CRojiW>O?`Lpt>gy>lsZ~o~0
zw&>CY8k4c2WWgIRtgD(bCt)q{a^fFhe89$;pK#4*E6ROC@~z(-GTDqQ548cCOG_8|
z>q|VlkAq!c+-=Qf0Pkz-@>=H1v51By%Z4o#g%?g*lGJE!hCAH>t){w$*ZEzA0WDut
zsL=$5MAw@3PV4w;+M==gqk*31&DtAo;QaOU)A!3xPhFv9PsqK=P&Ce6r>%Wy*F#fX
zl^%~tUnK??R&`lh2@b6Ct~6w{Z$vsdVYdzuD&kn2gtL=SeF?V@9y77>fksuSE*1)-
zkH!QDhaqm*80J%8IbLaN4~>p9SXU8835MNsO3Fcbc-}P4qJ4cdj8{&+_DO4dxZ<`4
zD?;ryW0l|Y;#<Cw+Il@}x=Zf8+rYX^)pvaRnBQZ%Tx%)c^jrBK`<92wBaFsg!T}8@
z8rMGt=qH@T#msn6I?S4PYk8I3x?Xg|S|*-nSlV8*$XYxHG}>GoYqfHGfmL$yNU>n~
zf;7#C3z)t>&Twn}Y<JZvX+j_TRn#8$wYd#`lXbkO<EocS*gC6U-)${iVzh>AKo4q1
z%tL_cz%gK`S^d}^h=-Lb8cAYN)Sn2#pwH&BSUso(=|{R9k1XyzwrQsCfvH<M##>py
zGye@{$d4Mm?c-;@@mZi1!1|>ZT+j%;@46N)+qkfj<>f^~>64zis0YA&JHNsp8%9%G
z6^vSZQS8ux20k7Mg!oylV3aL%Q)@+2NnL>sfK$|Q4PXnRYdZFpFT8Elq|3qG`RzCT
zDLZhKj&p!(egP)yDi-uED7a5v-mtB20tDlk>fyFf`cwj@QQa|Wk9};F9)4vu%6IFG
zf=<4}sL@(gyg;P1ndPKT2a;w<Vu;ORFym7~!8Dt~_f-8>varc<HAoDmv-h!?jbJ&x
zJ6L68Bx#U1a5DoTGe9?&lV;@|B>>G+beh~VgMy#Iz;`I%89aqcFrrX!VE8ju3Zw>#
zA2Oi1lzLCaE<GGQAG7MDa1ln73SNqu;!Z)6Uj@`aS%3V^s69g@>QPnau&^HR(=e(^
z+gN5N8lS=u3NqZP3elazYG*fx=UtMlS+Zb4%k0^an{T{+^X8*d*Z2A>SFWA1V|iWO
ztiXf=@`pv9wpc9KPEViq2%ymnGhz4c=e=H^AMLRJ{OHg@kH_zyP?BhmEZ=<5i_FfJ
z>C@X{qMp0)oDJh>GtC&X{`>@sT#*haU<q0Xo0GbQKT0pae_V2CJ9h1YVtV^>SPB0t
zeJ+fqcMN^L8{SBtH}o;Q1G{xAxU=jYGT#>>NpuF%fhejrM&>6*-LlForgUxv%8~?B
zwqSLaEG~qJjSvS~V()tF$y$uv7;vCCPreNG!>F}`54;YC*A9+*?RKwYXt1ogX+d){
zGb>R!y?H_Nf#&kEW-zTP0e`$9IkYNy&J^BY<fpE9d&N}VXyCzNe7?D?yqPI-;QJ{5
z-e@k9=ae@$mxCXdHB0HWRf#|2y+13zi7I$2xH101_U$jkFE#R<VP9F<J_E-a(>G?W
zDsO5+^C*_Pz9pO+Cdv;qNEHZz2<Qa=Ab2VPOzBkX;6gmA6bRvQhv)G4-AXru5E9_A
zz@x}Jc$oy9#F7u0=|VAeIRy{$Xw;9#>Z0f{=dcE<P&dZJ^c?0u!kQsZ0-zkVc8&zE
zk|~zPV?T|j1fX!7pjjfM%m`@u#K9v1Ua`U6hE@TRA<>Sr;P*gENxUn`)gEYzp&14Z
zSm<gJ$d5A+18xk@L6KIZaNq*j?2cNVL%J`n5~EC2;W{+u`*G4?MHkm$VJ;wGu^&zQ
z_ztx(;DNX}fIzd*1iT0hlVPPP@B?roVCfJ<NfB}3Xx@q%l9UjyyOGtn5I#xP;ZVKf
z%KR81U^cv(*G?o)a$D3!xLMU3t1aze;Z1ri!%FN@#-wv<X!$mz1<*9F(=rwYKnNf`
zKhE$p4SApix@iHYZ=p{gE;a$Z)+QQ_K=2pX8OEv)o0>QcXD<jA>hvO#Dl7$d^9B)U
z#}&}PU+6A^Kx^T39HZwg09c(CD*$$_CJc<MPO$6T_Ubq+b9-5>o~5-0Yp1rtRS-kd
zg1Ml~67u`pb|Zuwr{|4y;jEb5R%WMxr^qNeW@#YcG&U~-IfjL>q>3$NtPg0-bg@TM
zCRBwPBL`@!uIhrzDja$PM9<`Gv;#s5w3|vm`^@xRw4T#KT1V4*8r%c57LL`j9HfOZ
zQLBGkXP`NTp#??*W2})jX|*g3fetc^M$iDW0OM9W<eiS7E2IgnD735%i4L9LQ?Wqm
zvQ|tfi4+#yn~)ME<xW=T2LKJ>I$?pu<FrM+5x>?bLIcYHKTZ3smjs-vCpgN>Y0;{?
zaC}Flo<W13=;1X%d&qj8U|?WfcX&dyucToTi{yk=@x>-2Zs>Jxcg!!kMXdnsA<=A=
zboFPIHnns{$LqshpN|%RU~-w=%o-p8&VY7JwBE?cbAZOevKl>VUmdN%FC5CZicV93
z+gzmc^X2UL^Q_jkySJ4>rgCRhxVcy~fYv#l61#1JUqgEUsI3F^!~)60GYQsHYSYr1
zJtm|;@(mLKXec&S6hm6C1x1qG1IkJmlVETF!NqDECOv=_V9;8$0*6XMbH$9rAPJOV
zOb!4HX33;ww2);Pj^=^T>@w(Ei?uXg&^ErKh<l(xT&r=~irWecB><QSYYbk-ak<u1
zRZ5$hYO0(a8nXtnTE5O~ni|q@RR!%x-Ilg_ZR;1i#GqGCmswm8YFS{i{zAjk46WmM
z0L^g*hy!|y1~3d@+%yY6g`5VOfYHb?MwX*dy8-6pONIi6-EOfOMMj$DHuIvk$c}n4
zdP{}g0sxwgsAn52ddEV&d3>-$YhZMu-{0x8vb51u#yJgky{SX6Xt@Fn=M`wKqHaRi
z^3%F$ey!7NFT!-*YhxYOYwI?>c-F3R8z^#@9qCxHWApl^Hy74SDTUA<M6Iro3`J~E
zm=~YCd%_gfR}&~e)hf{Ir%f>wM?7x5NsW)kvY0@5ksMt`)l#k00_;^34AB8>^v4`y
zbSTXD@GR|6=z!5!f(8mN8{+XG2mE}D#q&GbVWdzPUqwcfR#59<9I;^$1Z68BG{<h(
zb49@P^r!n;Y+m`-@?o&3yY~76yFx)mTzA1m2U1>8MZf>nuNIEmc*D>?(4-D$J@ZZ1
ztV_2}+Bv1!^bvgsXszwjcTXz7s}LnKCU-PP%RRcCBlNHmd?ja_vGAH1`or-0n$~5!
zaM6d07vHwLLofpNH}Bjx;h#5s(Omq+$J75pp9{cs_ewu{+chcHY?J+eeH0i95)GY&
z(K6PFx)+VK0~WqC79OM8ey!AUtbbI|)c|uRM`}H^;(LXeh#`)LEe3>J9>>kn89PcV
zREW1Y!ZfR(&ta)3h6x!(j6KKP7;aoNqo&tWSSFedmUonvRJf`eHa*nSk=)oGnzo?%
z&{=kG_k_sonzGuW+Q@%D*!hEv6TyZLkL>N8(Rr;r_}oTwx4HvZyaV2=og1rg>YY4q
zHoGh{oIbxZQ5j!cRou3*vt>zhP$;nr*3xjqTUqICu3UO)aPszpM?UN}Z+s50*LKe6
z-K*@#gLsGN=M_kIc!k8Wv{4--;wobgi4%PCT0&DC%CmCD;+zh<ln@7BfC=rg@Tqjn
z1?ay9*+N^o-cihffWzba!tSA+MyA*%{|>K4gR?~c$EF#r49D5swLbYDMy*C(Ztpb2
zyXMdrtVr1JWLjr1Gk@Xm`>lhIp$GK1Ohu->EjDy*Sy9mad8fQv{*}dUtFT*jTG?H|
zYwca^-uQ~XzM)SopaEP;jaYY3G?h`FnrFZ`#dc{TGlK!uVw>IT54lbflMIV~Qw*{9
z4pD@d91=?|vFFl4E>kEISBCws1_=M7VucFR0h?qeeoVv2S?c0aG(f9tZ6x*^$?}<)
zAC{^wjTHU4@@s9#m6}-9Uo|o13TeNt{Bu#HwB8J;&UGNUt`ksZx#!aVxb)Kh00X7<
z<zW6kd5uYQh2$@*CQhsZ=8#J?f!p@UN6YI=i<}_2VS}7>(mnWsOO>)RxU50qiK_~`
zfzxc2Hp}9(QT5&RiHS=ml0TH*)D4r}o8$pf8ag2>Jb67sn@CCCl*i*OeNZMCf1tm6
z(<bm*t{lpHv|(1kAnKB#a45rShZo!Ij*|QZ9u_P&TZ*bn7qmD_nwv_TEepm~6<N&8
zq7ehkr{F#Nw4P!Yl2=Mg3;n=V+%wI7%@|`u1=26xW>2Ah)QMOA2w@u<5NcaN5DhCh
z&Mh1yG1e?`3l4^`3n!K{<3Zvh%*F}XJi+i`i6gGV&Zd^!_Rgp8+_ps7fQ^h<e&1*k
z<o6%fd3BG=?+YfQ{JxoCwU0lpWf?OlK_@}U<66J=aZrLzf)e#4)aP!4Hc=DXBfoCe
z>A2<J7>(a7=X5$VsO@1*7Q;8+7|rM`s8!Ay49Z#gb#&Hj{N@{js{8$vy_gbF52b>5
zT*Jc}M@GO%ZAp-0)S*s{l@Li8LwsPzVIqk$pU3K-lwW?l_t&S^9{p_ZK{Q{6mdlq7
z+>R+`x4r<xTPiG~Z^4p7CvQ0aym7?>{|Ty1?8(%9&GL`m-TT?mwYz@#%D;BL4hnC-
z1vp;a&B1Zwif6vD^@fv&B4V*ns$iRODb=Q3u6i&MbG~nsAOEP>mP8(!23(u}1*0=3
z$r%pwVEs^m|D%Qo(g(4^f*<B^I0%l1_f$XE!=|W-*c*%@{0_XsZYA9Sjf?2B@K?d=
z4E16gP)Q$}fF+E-k79xlqyhv19|jWOdP1&&_BSO-jEOI@*2Kh><CBp!olS!2DQlrq
zl4#4zjSAeyF)36h9izLBNp&IV*nmr(oK8LqbkD-G>Ox0%oRI1yNqT`bkMp`PIGj5i
zHVSXp%wp8~=PmuXVj<;1<u>x~Aa&WZ&!P|f)F}$^yO}A}WyEI?uczUqORQNyr0TI;
z2+fT&8ucAkLV<yoeee;aW)a{VB(mT+690PW+ITBNup@}Vg?kFpX{-bfhOCO?)jY-i
z0Ubf4!|=Nu$DHFzJ;l6K<!8XvwKUIb%0j0oXToarbT>?J(mJPP0zAWrfvr;xZ(ims
z&;`!vy}FsB8B-Y$4R)3_Ypiu9b5X3kw9p7SQLAI2z;gx7M$v4K{>PlC)h+N43G|#r
z(1`xB)?jlrgG6%3S#`i0uI1=&5+8e`k+KGN84_vXrDw6Gkf(rQtp<Z_!K7*pV4Z<U
z<)#9Tm1t(%gm$M>S9(o9;I1~?Sx!Q-CPV9OwHpeHnitg+vOrVP*xOk;(P;2%p<U9u
zATY3&Vqat3;*h@8UtO$)jH`S}Ywv|R69yll0c1^D!WH}@?rU~Br6VI=H8r1FPhE_@
z#;i_^XJe8?`llm<_lX)cSOrRWj=>*dJXR7!dM_Fkacr%KcCk9>!A@(~D33l{qFO=^
zPys_@NV`;2${;yL4xtlRWydNyya$_pXWHyy$Lwtytx+iAEgr%1MCG40ZkSzNeWGvU
z3Zx_U%cl<gQU1N4?FZn{A3+d=rXBpboR&Y9|NEW2S0*0>i>FPfWH`aZaaaDPs<INY
zg3i#ev}4=60!dTuKn1fdYIBw`tjpO9<}ZwdwY4#qrm&>7^`V7@;|;}yyZ$-kpKKCb
zKK~@I`!=JSW%b5lfz>Zx+f(9yX2r6l?xH7}dv2I4I6gb1Y_93J_R`+g_8m{1vlTGO
z2Y)avah+g5y#O|~v~4vCdeosB*TWUdch#e(qcXJh7}3+6<5=UYp7d6?ORROzdAws%
zROE{5t2x*7eA!|PrKKdy7f<+Yk*4jzYo3tDq|7D2%%g$QVrN9=+@mi%fAqjF{efS~
zx20cw;(k!VM4xyy{TL{@-@knM!fy^9{Dy6j-9z%(tKJ39XThZ3q|4;LzPkz>83KRt
z{6>COS?fcx!%ifpZNO_UG!|7kiYF)^Xe<^WHXi`=am8?&#c8$}#G+L!()$?!X*g(j
z!fPV}{*XDGWOsTOE$>~md{(pBvROXzrsQ%-$3XeolBvrVtz0nIx8<eFx3m>RUA%ot
z$BH=%5|!NKi&rjaiTLa+W6-##)Yl22NawlDB`jwZH9S&}gzDI$6_<3taLdg3^SYWW
z7Dp}ToZh`-+cn@P-P>BcwBRYw={}Ob1+Gv5c;~nvYK#@r_ROue24;3uT-pz4NLz~P
zr)`~FXpzP>wYAll%sV?d>!fL$HecOQ(Aj;~qPde}CKI#N#XH)fjm6M0^Wr%z9ua*$
z^z~Qpj;5**tU+Rn4aqKlV=3ZEZYA+mM8X1!&pxpEEch>I%P=xAf7?2{K^{tfF?%cX
zo58Zo-`3gm%-LIkd*b{Z^1py_$NY(4@+s;Rn2LU`YHy#nV@IBxi4n?b)cBw=X-w^>
z3GQN&Dv@c1WK$tBeek;iz2G%t@R=U{u7Iy$GO=3L;cTq=WUS(8%ZfQmaRGBwteDBP
z|2qpipcWCdVP;f?kySqRouwTmzbk8|xnho#-$z*+sF2HQQNqqFRvbh79RX@7>|13}
z!^RAup%=eLJQ$C@{o-64zIYnO0M(vb_FcRIYIHsDekXl^>f^o)$>cUFh9g0VIEJOM
zxC76vR0Ip94l)|i3XoWwkc(nVgXFXMaI}|1pIX}}zxnL#^4GVW_>pDjA;3Sg=bi1)
z-FS*JnoBKT$feF8-2*kkg4o36y&XYtzr5ZIepPDu2rPT`u|M1fw6{M2%33dt{qeGA
z<Zt(W;M$Vp1K<Onlh#`bB5lhjPCA>H|Cme$<c487w!-TZ3x{a*`grU<sVr*ZrBR0x
zn}zKPk~qpc(V#o}U$ZMh^YzSCf%34?>)G41-hGa{u1nugYic%i^xW~M_fHOcpL>7H
zY2<%NJq_<a82j~e27Z~d$Jt)@Sp4_#$3O_U!NtQYXeyoqDkIi^t&maFu&jeo8;Ito
zGhtXra4AA^A8X4bEHO$w$t0hXkN>P+5Z|Rao!031B(oI-bP((?xg7Eib#ojr<S0!2
zOg{dcD8N+{0jD!39hxc2vZ<3;t9)V`YsGsPF3Tk30wb{g6npySV!s0_`m{|AGg2y(
z9gMP8vF{lVE-S2-az9aidz2WIo-;;=kIGN(^j*>7YFw-a<9LP%<6pO8eTynea1~H!
zjj@kC>McGZ!4Owez{k<#=D?A@K92Vz@e~N49MF+kIv`<)Uf^LOtS<!5Iq%LS`lR{B
z88aGr$(Tsqc^<R4>=N_hot2e47n?6B<D${o9UX)7>961WqG6M}P#$nCuIyP>bjKY<
z%X+F7xqz1us%tw-z)M5gZJ<AqsP;Jvpv7r{1x{aeBEj2fQ>3D#B4VQL{7}iJ63_S>
z#>>A6m5p~gu~#T~6AXYiv4<#Q^cC2;6YBSYu|(z&|785JVhvHTA|a(Rm&_0}v;jJo
z46AOeNW;t}Rd_qp5K=q_f;7v1(K>h8L-qW;rs^4{xcqWlGq1V2%M`z*$ksADUUB>S
z+g<kNIq`}+qRNRFh{ZJXapvgVHhc5@=88Mk-|HM20<rb-%kZ1oEob|h?zg#`7Q`y=
z>$}(Kz=?aJ+U^!~?f*yHcfdzgW&gi>-+S|>w>Q0J`lKf_nVIxXfRKa`dT60{2_PL|
zXkr5urKl)T5gT?aD7snuT2L3a;Ln1)xVyHs7a()_-}~N72+00)KmY$fFz?;^%6+$-
zbI&>769Z*&=?HR_*glK7a&$buXKoKElE}L~AsJqgKU5P(FP2Kt>A9d{{)Kxr*@7n3
z1v(-?mv&@d2GXwVL+Kuy>A-2c3`wM#O$4gJKqV6TgxlkNDK@RXep=ykg~}XxX_&4J
zmnO3Ndc&nvfx^c_v_tLSEk=XU!s8GP6uz4CbxqEk0Ec`A(>nj4L0PM^q(LcaA<h(L
zW|x<S1H-LZOKgyr>10Id1)q5Mpm{izktGVY2Q2Q*gQ*eJRBACr@puIbLIEL@7DPWm
zjku>lcqhI;$s6>={lta0XyS>feU>+wg*6a=TgdV8SP7NI;H4T8kewi2ZsJsyKaS%;
z;sXT7P3s%Lq8I<oN?DE6&a|M<3UYWg&%Zfry;3KkHOlst_n?2J)3_}8Trl$G8-QZ2
zJkiWBN{Jr#<{BjV5-{sFbkC*NOnLjE&nx=w01H6N*W0&$jSit3(IFB7qd_OA`s9i$
zK0z;_1Ly@3g2_8~_3=}{r9jGuDjl7wvlLxUv(V!Nav%drJ+B5*^c0fPwVBkOXXbT{
zNGL75UE@;v+4;v(t0Zh*7Sr+I3-6$Pv*3Yy=jXtZ^KRTCJj|&lulNL1UGNN<wMS@w
zJ<%5fIyUGhW5k~@N*JSoG3x*yNCZPM#>`ZsuTP?D{`?0p>G*N<DTsYWKM+WLcf*R?
zf$<IEqBLpPpW1QFPy1~LgD0-t^A8u>j%v{AB_o@h2R&;uI_84kDJ2!8iU{(6(U<PR
zz8LW6qPhXUbJ%fgCK#oA>E2|v<Fwq7odkGIN@o67II>USj0y=3{EPz<3MEAZkh4?@
z-}u~5geN5)?UET^(Mg$TyH4l@-XwIC1kaixiL}410I|9?8aO_!<B4<0WE)QeGJd@z
z|JE}H(Vx+N^yh<&9#)%5Oia7!Ob?@EQkUkIN@~i>p<Jfv)yU+qyu3~^7CmM%F<m&D
z>4Hbli-VRA!v8_#;~WRI1yY20!=v6?X8MN?3Zmg^1^!cmM}mWf2H#pUM_M2ST>zjS
z{Qe8iCfOTAofg0o0R<nVAdzQaHcM}=rV}JsOaSfZ399Pc>{?YAoqc#xc_go)X4~&`
z0@ru0ER4rW%N@18Hu(<Nkg8HB;0uGmOCWr;MziQk{A5+1-tgvFwK_Dt{BqsTX`eXk
z$HE#)0S_5v;(iw%S^j92nZr*Z5P6u+q7xpPf`3vzfgXDAR&?^{s#QmU<5rOOmv`1Y
zx#543$^Y3fcE{u<j|8>Ae>YSeNB8%V0-zi?j;{K{A69Jq2>txg#-bq;I|8C!nK(}n
zyH_vOCP*VpL^&`hDAAMswTM3r*c@Tg6sIXcfNg>y-b_4v3)rTZo}wjO+R(#{4@@-T
zkCk9<&_7_7z_Wvi8LZV-qkmUxwGzFgXw}MMi5?v*X^zF3!S7<tB{+1ZX@-B}<2A36
z#6aBk0WTSJXoIgL(iCt@faRr^frWGV!K{mnN3d9{sjk*&C6eM|$-DSsxG!}E$Tdqk
ziktkM5@62{l*F22kz&?}UgbIiO~t-)jorEZwb!<1Sv6(PTyQ}gIv)p1BY1Nn^Qq8I
z-gG;WW(s7Q$;9@D5<=qyLkTnacK@NNL~HxdFZGt_`&Fvg7crHJ)v`H9b671x1=R)l
zwfUe!JpZLKH^;sB=J@>}-%aE$MaE}!Oy$jsTzR>bSvL0Td++;NVs(S)dH55%@kQ}9
zC6b&R$u4(6flxDj9-LF@ZezX+W#!?k=jO0_^u44tt1`zGQCZEaA9!H3)uJi}Coj&I
zxbW;l5SbHc@Ueci6yXI$l@ljmV`)W|D!_$|qywF&CONJ1(w<8lLHq8d9V3?74ZIy(
zxr>}SD=)ocDHw4f|8m$~J-mC-aP*16Za1u4-LYhGJHU&ngO7i-dY!@U;Mdq3YucAA
z0S{cr)sQ*rPA<t#5}sSYMG_xcG_mh@UN1Z}$9gh3=7gBV1S>~X_C50G888F~QV%`c
z_X4;U3_0`YBYm4*z$tX;a-trS+WXMYXC4J|bUL@9A{Q>W|J&~mUQvEK`ti{-ryd5%
zs&e#gPDMq|Kz@bbeNX}7W?XcSdJ+1V?M>C9tVx?-FE}x2Q|-X-+XGI(-c6HGR;qRr
z<2+wsPl|swDaHH)_h=cuk4~_54+yw9WO?vdflmkUN<kZ=F`i&k;C}%fP8%2=@<!?l
zFk}t5>CHFa?10A9=U@nWiX_|&4LD~oIt&J{VgAvV4G-hI#pqgGW-vSqTyMOA{?^xV
zXUBdqu|GIqe8~iC)FR?rh!WUtV)HQ|q)h{PbGihv?SMkuCq{n3h?`nsxpqfR4E>M}
zz;zE_X5h_<v1^Y->o2?ek;|GJo<5eSx{NlTr$pJ9?9>3G4va`nAm>yuP(DYul~0kR
zHfJB@;anW`_dSJ!;OFz(S59T0m2q$4`E(<7gnErSO1)40o%$#BDfK1w72!c$G*Qr3
zL#}}J5lvDT=LRMm4T=UNC5dW?rw78K3Ys^JNNkfO5zqSqM{Ukf*ie#2=^%oV5Sc&(
z8#!}AO`8)1T&Mu%5Z5c1EOo&eU^HXmPFf@CED?oO%%#!fg7}F9$}VB%fCx+-s)kWK
zG)X2O#i=o)2Gl_2<zZJ&pIw*hnNT^XXw_bSUZp)$Fny?8!pJ0foSW6t5&!@v)zQAq
zSs@RkVMPLuME~w8>&$M4#E4vOtwpB>|Bxz-yq#st5{-?!Q>L@(G*19<m#Of&!bG9G
zF_-PA&P(JNjB<-ILWlExpo-OTYKfeaF`UMxFI2Capba<HI0s9WSy?8f>8G`hylksi
z?Nj7RIhZ}X?~uAQPe<qe6gnK2*_~!9T(zdE7M&_uI27DY`^uuF3}+l(=RkwHB=USE
zf6Oh<rdI(-{!O6^n^sI6QaUeD<x13O1A8AhvU4hASQ#7OoJyB9VDi{%vRiPUkZaw|
zCRJIL5!zyt*4<=aY~3cU#!Sysn^ba!g+P_13z&2o6CKvtp6n_1dufA3tLO8E+Oo8?
zTIF}wI;`O^RA~Op8l@TuCg35>fLxcyR$w0~ljS=AUV)}eG5SO1d|eseqLIbM-1TxU
zEtAXmIH%|vWy^KP3rg911?^WpQiR^t08XQjav&F~IC!Z+2b8I`BbAb30E8=xJgy#(
zv42x$Op{HbHsNJ0nBEN``m<ysU$C|m)SAUnCaBbLxRVIF<#A9#&})eL9g)WXL79yx
zBM4e?g2tC2z1GJ{aK96}Y$DAcG1s!ZYf1BlT2`via6syvKP{3yHkVW8@dk6O(Bdq%
zsbxAdt&yl@S~ah*`xH_+D>s8qxjEnENpAGphYlatomjdb!WL&kQ`xTNtFvrvb%PDQ
z!Yqd~w)SoGIeHuY<4?&@MaQs?LSEhMt8)4Cq#Mfe4(1yDqZ>vhLJ?kV@)lzb!ywOc
z&@|(*bIQ$yYK>f(XE8`Q15`0`MnXf4TBDONN>FIZ&v%R*1;XX!VE}HK*<E7L)wR|F
zP&Kp~(B6XVl}GoZfBtU4(pP|^XZ+o37Z0m-%B2BA*y0#J;+CMZ&91Tx8nS%d{nSA0
zEf-!TJE@g;KF~ll2xaVf6G6;Xn>mRAlM^*GZN`LxS7LC}Tp=s~i2@Nv2#<f0Xha$!
z+vy22A;1dhgquiIT!1!6IFn#GOteKcbf^Ya6NMUFktyie?W%iVw6=Tb=#}FKnF{KZ
zyA^>zU{1ib`}XIQdz67W%>n10p53?ab~WbNn>tsHZds}vbw53O<>=-m>M_qWDs~HH
zTzh)(KWA;Bv1KNl)nY4XP~wc{IYP$mdz=kVjZrLZ8@&>|)w9P{TVQPJTs3+~w|2~f
zb;>=8z?@)!6oh(m$L6`@j`*Le;qX`uey~;3nhk|#c8*>(d9Wj|Q7AGeeM4961EUp7
z8FTBUiqTItq@OpP)sSx+HfxpWw?o9t7(|VuCQwtT+0;DhO6pFspA#$;T-Aj{WzJAq
zLopE~)1ky5Dstj~g3&S2y~JaI$b|$QPf=x)78Epnq*OwXh9x4bIRpYa7MSS}o_5WE
z)!|P_ZXqDTi2EW!U1GY82N%!@qU=yfNGE8wBy?;f4`&*6a62#?40*X+Bh%0@!os*|
zNsDoVTGt4rv!o#xgn+e~EqXZvBmqTv;S4CRSIDdk18J*+wwBZ?FJl?iTQsK(x?DE1
zngO)OP~_)z@VT0+&-@IZNHsIZXFWdSue0)xp#oTiPTv*}Z`@Jt88!Ty8mU~$I6TbI
z2L?~MZnVZ7kb|9lr`4$fPQ?<1Xbon63m|56D;NWKjpn2>gOiQH*=<uakb%rN%M*6j
zl``Ok3MtXMld~Mh=p;HQp|x5c^f9y?0HqN|%Gk&Vhol68VsJvEGHaByS!2V)kWnk)
zj=$%mZu%D^{WKMK!|UCtf4MKIqbr^QYftM`J@q54%C-VdhNlia3=}*4oDMV6$uocW
zQSzM%Kqf8&64tK<$(JvgZ$y&?d*clD0<q~EOpV1oVFk67+D+X}JxTTU@AULLhh@))
zEGP5>@$F<h=SEM&W7qvk{Qq}(UIZ5N=s*_P&rFg7d!oE)*Sx--`pKnX*c0w@>~Vxs
zSpv|}e>?!{|1Q6)CtR9JGRevH=e#T5>0Lf3Ma|naxn4qrOT+jvy259Y{ndc_VnKA#
z)c>Xc*bb=Da1Wx0H*catFQL-1n;L33o&y$9>je*j4^h9P-l9Ijl-OCI0d7zTYA&+l
z*Y6}zY<Jy%8K?it@A+H$$Av&X|F_rsfBAf@psaF6)Kcj^=XT(KKO}!^!E*;l4e(6#
zn`;5;zrT}&3ffKy`&<%yL<1mazx}n~qy52)Lm*u|ct*fX5f1RbsMhyilsylI3G<q@
zXSGZ(+l5C-i0l|%pj1a>of%~zv&oRLGG+Fo_tUy{=zWL7Ioxp)bf0vzI~=G-RIqy=
zz2En$pjwwiNkO%)6!=L2$H|kV!Y86`9h>&OO!iZpg4AdPk$;JN52hUnUjjs5F(AE!
zvJpm4EGqEq=kwwW;xr~Opfte-2?)MnL~;t#XUgEXs+P5t_}IFp65ThdwPjP2Z~#{=
z2l}VHHTAiTU)9v7nxE{x`)x3!YFw~#O)ELB1v6SlHEn7k2PRxOzisK>q2zc=>R9{o
zMSGjuS1h`<@CEeg(t;|dqI3L?F~=TUeynYNW%Dgd@p0(hrE^xaH}74vyuJC>Ma2H<
zECq=#aHEL1$eYr}?&8DaXNSE@rsPAvt=Hy<`BRpR-gV!u(e&5XzZB?uUC;!J1zx&7
z`Q5Fzes>O2Bx85v##B7ev7vmRA|FviQcYup2%D&wYDvOmDp?DkPBo>P*wcP@s@75O
zNY%Ri1wq(r$}_><V8J9X39kKgF+vEYC|{)xCAC_R)K&UuDqODylvH|_QrC-6dHDWP
z(T~YFt7x3X288EeLHZoZ#L089WXBiNtYRSjfC1rvpHf(S@c{}>glfT!XaQQlzB?e2
zCx#EB!DujhD(FGA)><p7WoXEzgPvfn4?K#0z2>+X^!jqaqyC((UQoWj`+)}@NNvl6
zR^A2V`@5fg_SsYw>hf1>PpH)=ApRp~ZM7ft1Z%ZVgX{3IS1#|>)&^1c)7n~5rh=pt
z3-No)aJvVo0;-Pe)*3xDK{gH2n8J%fj~6pPl-MIVkHHl1L}DdAPs~Gjb)P3dJdfcV
zp~KQX4_Ar+INR6REdhJ<2Wpn<KA3?H|2YNNqgTB-6Q(X%dL|CSZ@z;52&`=ro<n`;
zbJ#KVie)timt0yra!Il&bu070TJ*=coiC)GtWBUdf%GqL1OAE+uhh8~t%}@z=((Y-
z*ZsxOux`TR9a#rf4O=s++?M`^nf*)`6`=C)n+z8G{9Lda^1|*D*;^nR4YV(YDOE%I
z#NslZc<day4}m74BW52Sdbm*rO2UqzZD8H9o@?iann$%heCLX(ho4;w<&8tYEnw${
z<o??(f3x~3#n9r#3dA(c12yRP=S#uR^?hG1U3^<kNq5=s936W8sm{shk>iW!WVH;E
z8#X_3aO2kfzw?H{C96y8fxI=tYjGKz`w&5A?e|(B?7^Bd`ez|RnS%icMF|7t1Hv3q
zh{u(nK0|<PDM`V#uU&iXYpHEJ=Gg6XTI<~IJuSu#L)P-abLh7pTetqP$JVcVY!~|B
z2pXn*e)FoQt^WX9hEG<R2*!ZonIk~KxJmtM&ph|`4oQxCcS~!nTk4Tk4y8X@_ZY7K
z=%eeOML(k7Z+LXir4zvew-!OL`xzibKTzlKj#B(S4OD9y34m;$QX)4fm@miiL&wi;
zgjHo2k3b~-oj97jeIT>HEVc<@4&PhSvv_e2(q7t8I@wxMP`T1-iB@%(3>|cz_$3Y+
zZkRIXW;qzY>)5efH~tZREaQh&qrZqB=%?+kZre6v<~BOJXYrEZ?TgW?2bPu>84UOu
zl`AbC7A_P&=1qepuDoV;-?5#$j=ggudJY6ufOl~^>Y1@^+pF8R5w!8MV<ca(XDJo#
zm-(1a9wwkB(Of_fzG4Q-WXBvctpPOAZjC2GfLI#=%%RadX#pUi10kMhC9*{7#Hm>>
zh*J`DAVCz@*f^%@O?0CMqKSCyD>#kJ3)}Jz-B2^N$W1fP=^!Wd4ZlW`JfbY-^@DGe
z{^J;T-`~nop~Cmj3;f51_OPYcS7a%IyWiC-OscTI%G0Fq{u7j~-TpqBwA<S;s8Xi`
zJKb@mA_Nwp>r76%EMPBf_D|%LupDifIOO`dql`u{(^jd|*IYIx^%=U!>7yBr-47Ol
zc@Jn!Ci>ADbj>qLFvIO&puv=9jiZ;)&On>b;5C`#dU^<0@WPiP(ba}A<8PkSpi%+a
zuF+J9eWX?@_Ia|e+i(sog7@IoB19zDpEA&J)RQqF%{UUl?MJ$YnW!*;6O%Vjp1gS@
z{quNek)<e^1+uh|g!JmJ?w;;G3Lm=E`c0D@bIo^5qp4|knCChsZ362^p~>I`m?`CX
zY04@_DTGP(Byqi&6pxsmOXAXZPF}x$GMcnWw5yep={8DLU_QQe0I&AHJg|tf>`8mX
zGV>X`S#a*%(<xlmq)iun^rVQ2mn1K6>a_T{GX}gj;}Ozea?>R861C*<YsKTampDPl
ztP|u_P?pe4V58Uoea{F{Ob=vX9_57aew3dKR96P;k8A=F_h||8X8lLepD<A(6p!qQ
zpbbTU+;2s_R=*seh%Ly29iIrtm&h?mVBwQ|(DoA8fsdbn9i1gX-L|0B=d%X4>4G@-
zhW<m6=Mk<DL<@z(fVsv<<x-7;E=(FUNu1@=X4vrrPW22(%@R_1oaz_$6Z=auf_pwN
zP&I9~>-T8O%{g`xo3(k--|pwtyrawaCHlinyNY~P&b4|2Fu!9_TYU?{>(HYQztLlM
zXS)^7Ef4Mk`Lm6@GxyC4;pdyO_@!Q1uE8m_&sNyK2phNMsG?S%)U#IQ1G+-<&|!sK
zz~#=71{$lB*%K}h1_9BRE&e7vp@xZHHjd^nj~&9H1fTFQ6ne)3%!tj~?n1{vp#^;k
z&fqY}XWmIY?M72w=qnc}go9mRp9|<*c<kx$?;07!TuQ0&3QIiNS5iZ$QPebQI<**c
zq}!<LsN1N6R4?@|@wP>Jsh1dyk{KIEaWj&(<!FOB<2)cnb_czM#I`qKCW<(*P@)9S
z_OzKZ_=NN*rrFPBxYLR|ID&IzfaeT?XC&ex*_602CPqZN@G?M?Y_bOOM2u<fk70V%
z#B;?$4Dzvf+8AHJZx*OJl0XSU3R;UvNR?csR;z(ZW&$}1rAn%ms(@S}k*O6j*_kg4
z2B?NQ9aN9A*`QQrHp`^IcEoB`$f3~)<%-E>GgPXKMwPM)$JG*<!61{U!3Ok^(J1G%
z5c5k~PCl9E6;d3+aj9Y&PBZX0qLRv#;L4XZ8VzO%)M|}EGhMCLnzTTv1X`2kPinnQ
z4<r&Ll*<%SP7Rq^2bT5yTcvl5?s@^Zbg{B!2ljsh6>_y&p8DY%xvJzCY}QIyR;rbx
zo&}!+Ij4|uDzG5AP9|HIlr_Eex=jAsTQWQ{KmXxNh2qN}lx*MkD%JOWD)(nUYGvGy
zpGjoM1Q(*sKXMBFk6^7{F&yQ6FIDj0gLipF7Lt5xG=2+C%T%hA4t|E<S8|P7@fAP{
zwc3RYUnsO%#TVcUrB;ii|5WMqswK<dT3RFHSgAgB<FdP;UPW&*%f0ASujv4l!6%>u
zAI5e8fs~@M{0ThOkRAFeVEW%<i~vq8MoZ$52k(KsD~_VuP#3!G=nAm+SK^03514i|
z6F*8*V@BO4>SNqDs_(u55s)(=!sOsnQjFo#fc;#avQa*2G9EjZ;<2+8&q=@BuQPKx
z5AmlgC|eT|E)b+;WD{4y8O1$w4hnwzh&?+X)*(i+2TN=YDquvgzsIkQ516u010XTu
zNsgGj$MC<9ful*$5V?wk4f@EKEMbp0!u<fs$#9orGgv8CqF0n)I<YlNQ4o2e73DX$
zv}y<>bw!ugd~p9w<25P^VC9T#@@TaTmLwYe7L`ijHUhI!FC)hA$^^2PjE)Wk8#F5X
zI08b260F_26PnnTsJ+w$S6D7>DN-}cW?_ph1H&A4G@>h<N>HXet!F4=&~}=FBWy0N
z*o2uY0D@tUr2?Jilz@@j!n5;b8VE;sU$L&^mPlA*ER;Z+b*&k+AK5LJhsV*Yb2_;I
z9cCDS>zZ(Tq~^x$m?&;oIA&3)!r}mcI<KFJ-)Pit`!>9h02<@gk44GmIt~kvezZgb
zd?f|MH5&m|C$yapw>TY*{c20kZQ8#t$<dIZ0ZS+M?QcTwc1~v@Wbo5V;B`x`gDhYe
z2-)eKzoFUa<owip@QJ~um0D=84B6q%`SVe;!Db}RcG)Z$^rSwLxg|!U%>bU5|I2n5
z`P<rom;(3+s3(yILpSh|I4w4Y0O3Z&4TV66^YpJa0>}r}VY68|i(i_7EJx380lvoG
z7aGu~&9fOLje8d(QOs*WA2vSw{BLN6&*sg$o#Um9gyCe&?epdV9k9)xzmMY?8ed1b
z54XwJ=#z|&%)s|A6?B1rYYSkGQuNb}DGh?`2z)v+atYYtufKB^7(D69mYjy+%{4_G
z=(>r3U9qynU0Ut_Z7+DY#+>XJvC_`ZPyGp4fKu=281L3x?45F`$Zwo^be>qk3>Z;e
z%J8eNz$E*qUb6Yo-qVd~(%<mhpcnP_k}An=QiULAW}Y>(FGHR;K{X2~>oK2^jrpAE
zv+>v8!AHQwbwIEX7PO$_d@M?wB*HWq4U<Gkko@S%|Ml&XNkqYI^QG5+c)ip(JvrRu
zJtFveW0C{@z^}b=GKr_MchH@7>&S%*M_TPQpf#DaA)DZzv0vwPz_%)+S_Eyj-?UB`
zGhQS69XBN61n5y45|PzRS^;$>6d_(g3jj$m2r0kbIWdt#d`BMGL>Plj2ejajo8PcO
z8#fqP-HaJJ)~J8hZWudO9}hylq=bjO;kV3A1yWP$1aT#Kx3F(~w<a~%vJdRpXO!r4
zG2<Ha{2F6StGUrIsc#Yw{V_w?jb(<IUU!i`9sRB2^uoO%Hq&YX8fG-|>r0{Fg%}A(
zdI4z`wG90PWU}A1j?u|XU4V}ezke@ze<1G!a@j?`e}WoD@RNSin^hCrQ9!iciG`_P
zzTz=)wBWZ05LI_#zKE$@OepYTS&|w0^^e~rwJD+sTKdEjQW^(r(!Z(k%c|9XyD%Ls
zS83o?(4?wKpMO(};41|2mA?B9Um=LE1oC<OhmKvCo|51z(&W-|9O(N!4q%=qbapp;
z9Jd$I(8c7D1d5J*<e2L**$C~F2=;qi$Af^VBn{l|V~@|ATK9)L3fnszb#rGd?HX$b
zcH6jBtB2paeES`5AA0n;a?aXNQKxs8M`E>qyrUYv^s@O1^zH4o{32a!$+aH?4qWoq
zduTWM>gBF`zZ?R>hkJiG*1K;#V3eV(*(1hwPM`4fU(zytPMp^ylpJ$Ydd!(x2{r%^
zbOAOIl7T>G!x{5#IyQi56rCaMRE)4BA`AUjH~~G19{>IC=_n3;haPPOTD*9DeKlxH
z-Nn55d-OO^rS77m-o7`DdB(msy<R$s12_RJLYIKqANe<I=zAaRIP}rwPdxF&q>sRC
zbP4)u1AzWRU<bM>H}zq*IrX7R1-<5M=*>1mFQ()_G-vQy@r$r4alafZ_DNya&gaR6
zf`p?Vz=P=B>v1L!m}jD`kiiRgvC;G{9+%Mp^La(DTGB;VesMRWq0bBkkiGAVOC~D!
zFPqXj41^v#04#Tc({J3f_R87X8f8OkqO~=aH=?d?=!nI2tM0yM&9&1e)wh(iH<#rO
zud5&0v8ZPCeXy_KmDT${1@eF1b;;B5Q0~$@%5Oe$JNn{Ii3NSVdi!+4P<35HJl2@g
z*wN9LbM1;%+ovw5t&f%s5)-zaZ+{?SZxXAT1mQo<HyZF~;a7>66Ce>RNrWU?DhnUI
zAx@ta7ktaIW;_9NCIfu!m#Y7;7j3@(`HuTKo<H-=^A5-Jov<FP6%$@dyNab}Jm1;*
zyhB1=L{nJZNh;y0q{97ZbLu%E0R%r5D@&ihU%Z^KUy~&{!TyDyK!9@!PI{uuPZ4~A
ztZK65ABve6z2wA||3tm02lf8*%I87*(GSoEX}`9!&<7tJ1?|tn<ijNM%722|hyMhY
ze(gS)k9z*GQFLRw@gJZo|D^kCw2kP5^LRe{H*Uk}xTnYUiAXUXg^Zv~A{ej(V&+aZ
zH50^qBQ9tI5rUCq3IVlX6)zgQ7ciLXiJFRCQnNm-Th2@W`VtGI;o4FUJ9J27PHVMR
z8**suDz!X2KS!;a6KXT?AY?S$-s1_;jA^*TF*~n==iOdIp=bPv!6swnPz#flQ=F|<
zsX2K#e|T|YZjplr^oQt@vxm{4&$qx`$H8hmLZs1IEB5R>FgOy@x^>#<rX@36PHVBp
zCXp=FHQDS%i?ZBLK3=fc>j@0j>6WU8IGv@p9InlG8$3E~Z0(A*-Lpql>2xaE>8+2n
zH_w{0aWG1u8UMKPXV4+iJwjhoVm>!awNsO*1=K3)O6n%!ZzJd@o)hqY%+zuC7}O@r
z5{{@{6Dvk87EgrY33Ht0h#{ARsP33?7fb|0L~EOLOOlI^5qtrB89Y&@i-qETN{f%8
z?j^2}AXS7~q$^MZjA0njIOaSxczWL3=(c&~&b+!C-`CZp{x;HNFPk>4%*A*3SZVn@
zblcmdb-MR&tjk;dsapLncf;Yb&Z3fuB}JWOha24gQma4p)E}-GSCqFPuV`Gw;d+!)
zS4xTpeP#1N7o(k4W;c!W`#N}6nW@YdBsVFodk1s@)z*{fMRWkYcyjC3lb{lGg36PR
zU1WgFs+YWV&|4fSyC-jq66ze4C7wgz=0l#+Qpb$$h3H@2gKtUdfpSdVJ!KI%p*?3z
zPW!~xI~w%g$mQSY8}0x{K)AnXohT$tYPq9P|FvBHwZ8F=78tCDiZMC&mgbat4!)JT
zAI&=CDXDbKUf4auQCjK=dT_?QIb#$M-x{x-<jJ-Ud|J5gV%quVWLX@g#Z=!QYA&^u
zXg3B7L`ocu(CM=&5tH~bYWGHh{!b1BUWBk6WEvJYkWieD3af^X&^K&M#Ep-bqA?#y
zBW?xA^cyw$aAjH$9*KgO_=PS|Vbi4f(`NabTU-6X18rrI$}!6;@`Blm!;LMuC%W3~
z#l@|i^1$FLA-s|Xr(JlOm-%FK>1&uuKcKakd(*p1gSF_@q9MhRreZi_ph)aweN8Rc
zIeJuQG;o>IxnxXaj)vAX#w>JTR(^v|d!(UO&AKglQq3j9Ee;u)YEOVo1!i**S{ae8
zGIo3nmvtB{?!sj>fX4&zil7C)=TF1~{#bnE1sJaqsu9maM+6LPt+0o=fLcMkdicD=
zzXDBGBoZJaL-3?7AhWPWt;Z{<CdUZ#5KGJP%@N=uTJ@nQQMC^k1yrk;E*kR+i2Vef
zALm4k#8sHikk<Sb*FQM&uG<douBfb7yLJUo`E#{9)`mm*gU5^+oR4-6T75~~6Ad*(
zraX5|SI0E)#D@&?Ap<83o?YD;aY`X)kr;zrlD|vt*OaM8kF835-BwoKKD?sbG-J+8
zdSX?_^;^N4uPNoZ+3O!OOM@YIw%O>)A6bUpwwBFrzN?bS9=*`PSneHh_2I(4=kmwH
zsgu2)38`DgKk{NIT-i0Q0!(3`<hho(FMI8C47y<xqrP<P*z$^T)Gz!}%Ycu@lLzes
zy67+LJ+gtk`&Nq~=a!X#n+gANo>IC2e22S2-b7G}cyxrm>U`g`WoIeo75t5y0#=X+
z4#q(u0VCU9K@qu;n4}O3aRD1ffSn}TyCSd<*<=>LkBMRhCPL`uCBrMD)v=%Qf!)aB
zVWKt$n;OGagSCr$z`ysR?{2GYFq&D`Z;X~reKgt9l6>@ed@7Nvg4y!gNqhgg{5GIs
z3_Xi|4a3nkWHEW5-LUSv-#xyuvU8X(r+sk&9@yXSRkHznXGWE-j!#pU%rS%wYJSc3
z6@T43aW7s6_33qxAT_5IWfKHigjjA%+(c`gjALL-Q&j|o(#H{aO|yvBly)g2DB9xQ
zCOVcO`{@Eu3=vg`jTF-YwbY~nI`!epu0FhFOL0eK#OpRFK|)V6tz$!enNep{XaOd&
zDux<HCZv#IYyTZvI-*u1Ro6<hAL#HkE+18Aa4RYdj2yzEl`58z>W5|nhM~>yJ>Fv|
z*P5!8SA*Qj`h+oF-qtj|y__A{pe|7YmIX`xupoDd#*k%nL%`fT$Pg&VVJwoVdK1q=
z27vr9t+B-e;gA!W0ECcMJX=j0vKtr~h!+4pLw8kUI`eq}C)|T+<e>tF>^Y)+pr{*O
zJQ?61L;8a-I73{*Pf$e&vK-M~F^iycT7gnE!Ny2-Zhd`jHf@cD?fLokaP*5}F$Eqh
z36Ydg3Hs3;x)+_i)9mxuimL4$veXdt;R~SkrH4V;F}Uc;Wr<gIHIf2%0>{0#1IPW0
zydx3~hoWeTBQM|X$j<{`U6^nmb2B=%x2>6`<%|xlfA4kRz85&|-27>(X4#*{KE5!p
z?OWjbcH6e^MEnxTS==<Pw69@-XARIIL{bd%3<Nn#z;=+F^hnN9tX-{Bs8GeXdbdi(
zo9V7I$I!9>4ZV`22CoP|Si+|%r&h`yM#s$z=P`gujIVF{9qQ~bPxs2s;U%19f5Mz-
z)_HdYnY*U%33$NDz`*;azCnN1JJmAYgu(%u_DPaH^!f*<XMuKl3i6)2`(Myuqj2{Z
zf3MCC8R%Z)X*HYM_tKScec#{Dn|DftIf2k0_{)jBY}Axi-4`_a@mDo*nVCp{3l=^u
zd%i<k(R^P*tv-rQ?mdWJTgU<Fm2!=i8~W~wInQ1-V#HO?&Y5<o=}O{`8r9l@;gD<N
ze8AtZ7dVclPG^+&P6$e9v;)0Lu(__^EVoLpl0o^DIk@`U_$q_zuX2ULM3<0w=H4)K
z(dwgnP`@@`S4MyBoc@ZP@D*yP73gqn0XWZ^Y$NIuDQkfQpLIXD{sO@vOX19ch0v3~
zkPTMjdp(cuwFT3YY3(y%mc%m%5z`4^ghtw6cF}3BZeWQJZa0EF3^Hz?@CXyQH==cJ
z<cVm{L*^pBBvb$|UP8F8WJlg3`FRiLS!~|Ca;*mdRUkDfr~)9Mt&N1OmcqjYx%cIm
zt?ul&#zU|#S*cp4sVwkYECq)Pa_-HsTD`fY8XvA`gU?uTMW22|)M~|-%srTEwfgeQ
zai&*WS?ISUIWF7kb}@3faRu0FlrxOnh_-Dv$tA$)w&ihLj>Y9-<#O}NGCH3wut&Th
zi$u;iguFbP%MK-S<JG9wsGw<u5!7Cd1Lj~l(*any`KrDVD~xguI$gFr0b|H=Hpw8|
z#(8P{2*Ld1oPxHmKSY%8MLXemHo?0<0ZW9jNoc=yfz^Ml&$htkyJ6b8`r2{hRxJV%
z@R8NeHVk#v0*O@-JCn5f{Z{7rGu7k_zE&2NuUfYKz{=&>0l&aUkUm8X@H;{@h#RQE
znA$OVVu4?13VUL_(HA3U`og>m_sVcN;-(UGp&lr>*Gl8M_4M_eI3b}@StrgV(#dmS
zSbO3`Uk}+K9RMO11UL?<WU>$cnDcTFH87SgCd#+dzUhfJ1@Rt&+mPVw;h7w-qXE)6
zvv4||omk8Xv2mt%%QMfQAD@9}&%|{&xMkf$Fb5L2Hxfj9AOv$JLW&f5W{c8vXbj03
zbI7C=tKpCZC!RM}15}Kn{GttP9J5TOsJNAkml`hP94{dl#QwsRkEJdfH>&Cz2*0Ts
zHSV&@9$p8(sUC>~<3?701J^waE*nTHr5;{azEZ2!t}I{oFfPJrSC(D&@MUEywcNPN
z=o16!Ca#}%)ZuSkO|?+ts2P}hpeSM6SJ>ed1QUrkFcX|Tjevk~j**KJT=j?>@WSSC
zT5HyXm(GE)xY&1v`7@MOT@j?}BDPD32#scdgA7I11qbrv2CGVuqxWtYWu>1g_`Z?n
zYsVAZRP;9j%PPRBK5=_3ALAR($dxMj1er{3lXuGBS6CFCa=FYdn;^^5s|DbbF7<<Y
zhaUgmJ%JRJ<6<_sjJ`Qykmns(U@elf;ZYmB3h+R|ca8XhwYNWUZRQ@pMQ~ro*YbQL
z$V*qmSGIp89A!evGs3ld(znv<2W9S$pD2w>K-!j}4CKp$084w|1zSKMPRxLLb1-CP
z0|^P2;E7SNIl=OrDUt~B0XP-7fqNmkmHp)&5VLUStgmY>-}O}teT+VieYI<A_1Cj@
zx<J#_moEEp*`-&5CiwQ-Z=;8q<V6_VGecfKLytcJ8k9#{*6!Q4w&kc2J$qt2edhJe
zVf5!gq0k_Z6Q%^;b!q?58JmKkg4YnT!*B=nD0PI)4jIqYX;<zS#KEuR2Qo@czF#Z(
z>-nBo3Cjq;4%G}^0bPvlf+D(p$Du&<5-GZhJQswu7fnt*?+8K|w8OLiO)Zd2A+!-~
zOd(ygecNL|1*(Da(6;ud?p&Fm9VP9-6a6~y1H6l(B^OKG5wvgEU=ODLiz?tMm3$5a
zGvz8>Nz1U-@<5=xby!OY8hft9D11qL;eNSa8W+JJXz!GzalrcLC7vJ}5kX%jK@cTG
z%%C6IjqMM?-k>dLLwG_y#aZCL2)wNr#WVRm7Ow9&fjR<N1nf5xVtP|JKP4;`kfP_B
zQ?;<SFNxBN0$wC2Gf1S}os*+T=L*m4BowECBicet2;c=OsILKLKm?JTaF+Z}Ab=L_
z>bVnD97eky2lLhz-r2JYTo;_z96;Tlf$M|wn2O-sAnL|t3fBrn4uh9Snd<}1^KsqJ
zz;yvZ_HR9_l>Afh+h?T81+PQ{Q4lWT>(a$y>LxD0d&bQX7p!LSsMm|ucL`b$`=|XS
z@PhLN7ci&S0HZDuH_>y~Ke`_O2S2Xs9KU}3_|A17*A72(&&Z1034<p@$2&&DM!STu
z`M5=Fjkz&6I6Abd`Q=q-M$NBZHm7Y21Ed}fFk^?$Synf9<e630oDid-CpR#kHcU2#
za%jiM6)Q%LTE2W#`iy>tw~QUyI59QF>@{g{P2iBwR@(%Enomm<TC>}-b2j?>p~b$e
z!sueq1fUe42bV+&v;0dA0sHKoff75E)9{HQvt|uRHEZl8q|IjF^>A-mPD}74aL*Fl
ziRt(RvB5VcfDU*#B7WuR<n_>f{q?CcV?fh!Of<Klr;i^;OBOP1s0}<yekm!U?PvaZ
z{5W%8p8~bv^X0%J_Tlko0ec^t!kl0(p0(PjnPjGdq^SiWO5}nC0MC#_0~o=sF^J=M
zF(M)^Ko-DIkQTr>(|#TZ=7r$o#!tSWp2blXPuda@ZB<aI!Nq76u*y*UtWU)NmZ{tg
zDm2Abi+vYeyb^t>^YKbns?YJMo*kSw%50^}xO<}koBF;&HLLR#f#t8aNgb(9wxYZg
zT`sj}gVyq}j1IzEXr~6f++YFb0=3HpnlFpU9D$-;lH=>q`>HIdY;umqs8q|FA8X<j
zGI{W1LK7MXz1B#}<BhP@srSlq(UJI{4Qitt7+Z}IW3CQ_>g}8fj+kZ8je}!+_S{Jt
zxlf<^{i`8^yhS60m>?+(gPHf&OL(36gEGOsUzFn{&$E57Q$9?$5}!5r>j_kzPJnrg
zo%bU&tguPw(HXe&ARRn0hC)P=pAsxJSPEgH>D&(!dBKvPBzc-ru&-m9uDktIvb`Hn
zq|#YT-O-d#kLs7l3%|Zvx>p1eW@^v$dfY+gy)%NYDpQ-pRdXm6_h$ib!Hws(5tuGZ
zk6NQ4;l<2K+KMJY^!)@NFaiI{=OxaF1@arOEkZhvDHt41<AR+_XAI#Tmvvk=2ez!=
zxPBO|-z{(Z;vZkM$#+v{70N6AwP*DG>t~ch-7fiNuo5J}%FXg!NTGNPtw*J3{bLG+
zZnyjy$Uqxpo{{fX-C)Sd%gZvXjo`msdX>C&+_+Y`O1}$erE{m}RafWj(ktbgckI|K
zSK>sC?ACqzZk3UOPrvcT)1)BLf)ng!gni6`QmGnh7&VfbPR*y*;K6x;PdMtoJQHk4
z5!EgdADA`}>rOjB2YVom3zEZ#UIchuI3e*w4;vV}Xd*qVWljtJk23W$=6EbV3Q4cG
zl$;hM=PW+P=83h*fAG3+Laz^uT{JP31m~pp@T{2CE5K5V{06#9NTaFK6e%YmN8%Ch
zEX95$A-H;jgnba`@e!Cj0v{k4L6MEg3Lv<@5hf6#WFfkAGWbH638aN4N@O(BF;V)J
z-ZU0@^Q=LZNkBGaJ!7=cGN0ZrV}qNv%zmhQR?MORG{X$Psi6JC#aDNB&d|e=K!J{%
zob<ogd?y^^U0*bRF}-@!O4R7F@#uiY=5ZNIPjr7&8i3}|+$p=8Y9utED;}G_;nR*V
z1fWZr`cdvNvA=T$ZG85AGKYuKYptBp;~6|mxGFQndmtUe%%6mVbUdNw^&~|Gv^4Q=
z6BKn1^x&|E2l6gdzy52b-azj!ZW;bam^t?G=OEXIs<IKq%$eDM-nWimcrBQ1^s!6n
zE*qv@XMw|@MC(Jhyz)GV1IGs^(Lr!6I+EhiVt5lBO7)^~Xe}&)3Xl)%TC2@~W{a{B
znP@knp)8aG^EiSZdf<x_31Y&`(ztJOOh9l8#76-g<$bJRDMG*<jG~G#XNsDLy0^HA
zA9sTQX5r{)B5E>6FYLwKlUJ!rXhumZPj4(&)S~YpNC3?pI@|IgTOR^!;J};%aL=Ij
zHG2WrQ538UjcGEOn-^`o6<$-ES6t8(*MQz+o$1F1eebfGo0BaiKMUPSijUA6*e;W2
z$rCF<D6Sel5jBr*TH!<xZb+?z8@2Z3lV=Sv`;D$FkK#HnSUF=}qt$CPd4N@VOFVU`
z%hXIie@3_%EA&lEf7=jiiCij5)nZP69G(egQ;Vt9)L!Z->J{n}>J(4_D{j+D&<w_b
zHQ;Kp3!QP!ftkY~)F&iRZ;tC>$fSpyu%{jq_SHZ%<}*f(6);A8OB<sxb2LF4b3v>E
z7^9&`G!ZW;1m0X6iADV-{X%_z#O!0lxfsXd>5$j#4S9otGzCwy#gUkx+FEQjnv9%-
z_>1>R0#PE#@^Yg0V|>+;Xv7JGlhGU{P)r#%y9VGp2T6uGA@2MN`{<Y*CC?uhHhGD+
zWFNi^c?IG~J7eWV@<QZJ(Q|jfS23kCL!wEMaNP@UdR~QeW+spG`pA|K*$prVo0AE`
z7$=BuH5el86#NCg&y?g%v!A_U#E2`7%(*GKY4Vgi*G-(Te*J`rlQvG7yeWCpoFgRf
z+1WS2nVgQJoeV3Hu(X6>rI4lxD2nh00UqpUOeS7$GU<76S0&p7wwf?~!|P9*{bsX&
zE76%G<;b2pV4zS5g40J_PHUD%?Y3xKE|1IUaUF0vbvEK?#G!e#P;IuF4N8;8<|<TK
z+*X6i>T!BDN>wVpsL17T6dGqbgCUp4q}Cg~+)V!_v(n{q%B3=yKIC!oYQ0WxHtTt<
z+TidUb-6TlXDH-!sJEDvPA4fQUGH>iN<$%sQ{6^1h9RLyAwx5e#Dpg#Pd$6!0AlVR
zjhkvVX_nFRK^3SRIUOBC?@pf%@<9HY`RE1o!aP!9&TL$w?>J5C3@VjDqf((VNXuD3
zT0zC;1ua%RZyB5A76Vqlm7JV_5uO5y?L(Aq$ur=G7>)BR7K3){Fu#8o`876Z4dLpr
z!Qz!bMy^p<)E0w>1a)e&&Z4$*rYd`Ow!JE{J?zd3@g|K&nH9qITYQXz!4<U@6|e*?
zN{jaD%%xUmvafDjJ=l<4nQfrS7b7hKg{L5Y<eNi5ml`mi44eu?|MbFKAjh)-+4-xd
z#!}O$d3YwcjJk@tS@3d55Mc#}-v%MT5<_@h#yLEjmLbQ_4JpA<sEBbbj4DBvoL2OS
zWd;S%seux*o^$j<K=4G*C&=ha|3FmGydt-Y{X%L8%KXksovzB^mwa8z8){CCoH2aL
zl;-?OS6v;b%}zLtcB9kc%`VHU^cMuAyu(yv&dD1btp%n)c5zKjL2fV{Zk|1>IfwbF
zZXbFP-HQweNj$b--vje@&6~Fi!0QHgjvu`J?Wa~OUAp2au(f?|OLghgIvMb^CVrMC
zT3Zv`&xuy}Q`BR7-|kkG%v{nu2|X5!jt8y(3g;Q*dbQSQ&kH2NzHF^ZqBI%odEwfs
z?AAbCq^Kd-YM8lWX6i|(36I;c;hLf#e39IAo)nBZaRS{ZEA1?8E<=x9qiriJL62>L
z{xizbwzg8{dweA1xW50}K}?aWF(2x{^mq_+qr<5Q)KThhcm`*I4ER9}m_|{2Gz1c4
zGRE^-z#KD|km)xP5KllnvC$B5>dyH>MqkLs`FOm_Ma>CdP&3{jo)AMECiKk-T+Qgy
zMUCRc`i;1BcwsaPb3G>e6A`i(<AU)_qRwXwk^jO}NY-8<#`W{KLI(bMjQDetA1Bx#
z;kvk|k%dCUNl%c6Hb^)ZaAFRhbPe(-5kW*Jq?N=AXd%%|c7+B!CP8o$J1{}KD-cno
zjYNiTin~C<D9PkW1bIX{&jn~*ra8Q^5}fJ{su=<MA|bR+Y{mF|Sl8Ti=l1QOYWlO`
zQ6sZ~C#PdXF8Yid!RzDm`b_nc%O-EOZnZXD+I7ji(XDWgLg%oAEZMSk?IX`pfNAe|
zYa#mJ`0+hA-pIZy_N_(Mg!Mgsu>m^ea$q*sW{;LxORazRK5@u;*nDbG_@JdYbxm&W
z%cgtV#BR7U>Utz$MlZTc-!V6S7LTAi!PrE}F=K`ML8+91x-$1Ym8pD-$*Qljcn8(p
zTvU!ew;FA_I)Is0v%abJree&O{PnN9Z@dwGSr31jwQil)TO9G0gg376`-+QwUs-A|
zyUb$^<OZy<@P_67^5Hj5T)o+LxpmlvEj3(@#;w#z?0)COsSBqsp~oypT|RtxaU$M!
z$?;0hps=$FeCw<XE+|Cbyo>)TD}e@`1>mWtQtujE1{DXvgw9T&89%<S6lltDz0^CO
zB!&-9zynoP1qFqL(}8-7S*ZlDs;ayktj@!KCj2*bYF^%BU@Iw^>NKVQ%FEH^6&2%E
zv!*lBu@=i2b66(xI^+2s<8+{LfqN`C?s3IrK8;DvO#>R>OkIlaT8i%q??vALP3qDy
z<yNhn3;IJjWmc^WNCN7azH+Nd30OtIMG_5+1lFT(Uw^%_a?4c}cy^WRoP03+C;T<3
zBS*;iRP>Ke1?IYZcwCO8E}^zi`=|%0!_*(r-l)?1M7T@)IKmMS#D{_D0_X@wO9<u&
z(PtB+WGo*Sk_T9C<1;Qn3B@%aBtVsr-fI>!65uyq$spF?V<kd)PJlZ}5Yuq+0ZkXq
z!|>B+!0C$w906K~nN=NB=uI{Ym=g6n{Ur7DJ+0L}Jgfs!Ns9sMfl{wE(PO58ST;#f
z)Aq(8GY6GBD)o$N5D%W0vaJekULLC(#!5r^phJbD)LF2uwR)dHxJZYR`Q=4ygUChj
zdO$AnfvQ;{6s_mssiABRo=KpB5Bs?#=h4;61I1a6K-9A`#|7pq7~{SEh!Edi5#!Mu
ziJZSgDyQMpzX4Vv_k<S=t!T0slrk+a%4PDsyR<SEF4@d<OI32vU7D_<y7ZS-fR@pM
zgFvl7U67UWfcKg3?abh#^Oj<=$I`zRYp4h{1h2#ss0Gxe)Ya52;yR2MR6_l-zPPXo
z3+rxr+2zuR+=P}53d?RH4idhYhK{DqC`E-XR#<@X<g1GkTuEM7!38VVP#R4#agKo(
zG9>Bx0{I&ZMSp?GDXB8@9<$!*C<9MiB8fy#eNo@&&kB~;>l->+3ySI*Lhd4Ghg(0S
zYeZ2LGh1C7^aZ-=yx`ER!YpMDxKg9aDwNAN?Xs0>3wP~;m*j^B*T$rqclonMMypU>
zL483%J^gS|WOCP{n#8=B722}Fxdt=)Gd!P5S~V!(lbvvlnf7T#omFL0+dSP_!BA6q
zokeZdx~=-f*@0}}TeQ`<L^}I_M)_Te<y_<?>(z9Ys}yB}h#Nfw{_^4KvXaum)Eet<
zMQI&)k=(fueZIJ+cJq>CWg<M=&GUt7_{e!5j;7R@C;nDK3FDj~E9uRofyjPvh>es8
zW0|Znz(in52pU_Q_@}C7h#QH_<`Z7L%tX~*VygPGr3BUPdUq!PlvZ0YI%_r)l>+(C
z56kV+Q8@54AL$rZ75eNsX=!_@bnSC7a0kwT2hrYFOIqgb+Bxr`tkD%(?a<khTDe_z
z>OLuyci{rJXL)lb-f-WySMLF=gEtWUdIPWDFbT}Z1w?zcbMIlobVM8373zQZs0^fC
zGipKq+a)|fI-w`l1HbxWjQA=;Q$NuQa~|I^>88#irZ@AVJK+xpsuop&hEc!zq7SEE
z4tx%O9=EJ!+JY!bqFV9AH#`HhQ_)`Lp03~e;{6!MY_ea@l^~i!#CM@Eh3Z7Kr(cT$
z4;~sG3CCvq3W@{7m+=9S5chH1#M29;E)LT)Fq}F8dW$$YdO^<7i}dO)(Sd^?a0Ia?
zO<Ne$hTAkvAg0#$KtYs~5~}`(F#YdkG6-cmak#H#<f>&O>8FI-+#M(>3EZt8fMuK~
zXgU&I1OhokiI6U|lTc3Hs)5>48L=AtPdX^fx}i%~mA#3+1lrfVBWHJ%YL{y_4Y}r#
zC$~3VBa^I<$oqaxM+F>R7-`GJ<L0f`fmUYE9+JOMt8L0Hesag|mx^+lIGK#j{WUF?
zfpT~?@zW~21KGq7Z1Y*7Y~mGXw)EDoUO=0y5j}C5O?bs5WpSt0QXa4Hu4IlRa2f)h
z;sCgEihg7M<eJsfs^(Aa>KP47n%7)2Ou}<h3LR|8zR9;gviWaY#$FMG3Ls;bvr-nW
zWUX0_@^SS=Xg_*CqX~cV5rs{fEd@|M>&zCxkDuV54~zr%z*7rWS1mX&wR`oJS9FUG
zPK!bi^F->${qDhAf&7-iwS1{WsbCeUn=O`*4ah=O%iA#ZKQYrp*U6xwSgBOWMs|`*
zf>Pi(x*Cn^*V_{I^?YPck1}bAO^`tYh&-Qo1Ytuw@rs!i+7o{lG7thrN#l{pAJ37?
z|0uV~=ceuo#9lv3)g}XQ!dx+J&PS8_UV^o~sa^?n1pPGWqd7S7k8+`GvKCOU$Aq#%
z+MJIkpRN_k_NMj7kRXT5PW$NKsLWnFhzpJzOq7pk+7eylL^UHB-ZVEK9ojN=)w;(g
z!gUpWPlvXS1PuD&FKeD#TFy0=R%^1=*1G0db0pNHrkZi7tJh38ygoS!HpI{T*s{Ph
z_)qBjNq4-loQ;IMf%-`me$9FE(ENThJprLQB4B8W5SK72#31Q5f|trPV6hAGMxui$
zV#jg<gxAF*gp(nfW}g0kB1a=?Q!%k~GR0p;IO-IY-yU?ha($Mt$>j967v#75T}E@r
z;>&e8g6*ARrdNpMr_1CQwELYVQ<#+bWfdV8*XeGrC4Ldaf3@x1XQ&~iv0=Q!>)?Z(
z@IOY9M5yDiTkIyambcm*POFvIs!ce-A*2c+P}?i!I&5O@1qE$ZyQ#Om8}y>u%&(i)
zwvHSYbLLsH+~vU=TmEB29P@&_iY0Wo$4I<DV749qq}0z8o(=$YDhYaFEe@VeGE`p@
z;=Y&a?e~q+E3AWByb@BF{1?1F;aM%pdx#$p{QVg{O+oKG^vSL7i1W=m&(Q431^ZLf
zJ9yrKm#02lurf0XrKnrcC-dMPG=(R)^PbI}c{Z|Skda1)TSypT#Q2UZ8N%~&R7krj
zwG|JPPf=Gd97+P<?NwTx5j>{Wi|=p(wHkFosZ1fUOh}*hx5QD*SgMOqk_5My5p{+o
zA>v)RAGAcY5y5L06xE@L6BH3`TOxqE5-F$81<hPABoLCUQZ9Fu_yb_jv7Hrj+gc)J
zu3|-2#kiFnT@TLs)2)w;D7BB$IKd`#_J$v>7<>IIbH`pcdu(|{PPwh?$`MP0H63He
zHJ2*rhZePsE&@uEi`igvn4626=vs--nQd3eCw#Nx_ksA7_VvRrcZ`@jF1+Z`uAZ-^
z)Wr69{b0{+0PL9i+U|+L>S;4BU%Dgy>eTj}$}G1zzhZ8aR(HvMhBoIY?D_2UVk0ot
zpSKo_6=e2A_b^nF*}n3bFex1p@kk5;@-1HYOoHMnOWMe66zBd#KXkD$%(>`AaO(Gb
z=JSVT3@rA?b-=(+3duc#qU~#;cIpggIARAQE2cJ?%R+;OCr8eFVjj&*dT`;>lMIT=
zoF(Iz?%6-5`_clb&y?*?l(yu|-!tbtKL#fssF$k(4yaN<f1yU>9~_rE4NKcOZPz%b
zRO86DvE@zI74Dq1Vn}iKQ!~JVCl+5~w=8TQ^5C+$_sm~moKilatTAN28h&!V!2_L^
z@roFtQR;lpyMD5<?;$EooCinsT0DahLkBJHB_2EtGRd?at9YUXtyr{f#no4@02}8#
zd(}H+ZA(#^RgNYhXgOCQbLvFjqc_m^og=OScV9ps46rAp1hjn00>rz+^wR*QU#%ar
zzWw)^)qij1(ev&IQ2Npt8shr%9!8k|iHZk45$j6}rj7_I7yiyQL=+;?lCcqrVlp3i
zIFp$XK>3O7f#460&<$C53dtfq$`T>6jFNtXQwYx{xTlTc(H}~O2;f>Y0#Bot!#>NA
zx*?m79NE0|;X9w!mx09~3uR58Yh>9Yn=7jx)W}U5qfh_fq$5BID$yyl9i1B9REPHI
zJujL2?m3K30q*dUnO6#`l^_Wo8~vfE80j$p#e|uML9!|9jQa@s`N;KOjjp*7Bsb6A
z`67@Wv7kP4iCW<V%#@9rj{xDi_)1eBsF{XxZTsH`99ROl#FN32V3LUD9jH5Rpj|a5
z^qgFRr$=2NPv$dVRJ25p1;g|F2>UL?x6+jm$tN)vGxHhwFeA!tokLikxo@7?#|~kG
zE+*&-{?lPdB@GUT0VWOLASs-p@F8iPEqesm!5CnFL^jt96a(bHPzjP|r_+p*u7U!1
zN!Z~CJ5m!;cO_%PhQ*TN5l-k{1YT}iURk-k4VBLl)`cr@-}@P_3k3vQfD(ti@a-@U
zE#g>3Jp=_xFeC7Yf-H}TA(Amb7z0s>68C|SIDb?Cf#CEL=pa0ouun$(sd|4T;)l=q
zfz;fWL&Eem<IsB#Jc5orWTyX268bJ32SN{Q{`SE+U}?m^Nw?{J^w!-!qWROGCAph%
z92DR41K2tJh(7}V-V}{CMaPU874i8a*WU9GdiRk`c=kizfX%+h=+Sqhw?5be<i{g^
zAqI*+*o1yO9wBxWinA2+L;Bm=asOW?V2aabeGK!4f~|A`el>!nWF`=M5?XLhO@vou
zU6Igfkycz+Lab5z;zoswNkjzrBoUGvj}s$K4u&MYwCgoY<eAb7kFZ^F&QMrX73WRn
zYE}>%(nLudifI0jKD=bvUBNPRjf)O=l{r52=007PrgGJ=BHl23_GYizoTUnu)jJK*
z+pHC*ZvFc$d+>KEMSoZtP%3j9$Byf8YB`Hm!#EnNvTDZ%Xy!_p)B{JvJMQ(ANLx#l
z&WD`2@g<`tJ62aYv+wL^+w{ByN(!<Ys)q*#ckHVg9#l`huW!$y?w#*3m!qeQ;Dv_L
zzV3Eujumnoy=592FK5A&_kDdo_zzrTQ(M}y+NagV(XH7v*YCgYUI258TJ*&+1?%#b
zICzGEJnwhdOqPNx2Dz8Ilu9T+3ORLb=-v@tPpxu}PU-z{d}8KWTeGWrwFVrW+deb(
zj839mf64VThfEu~05xf<Cr_%~h5DYmB&Q6h&iVTz>z|E^3pnu<hz?xLeCgGXEOdeY
zm=h0>%_kTNda?+Jyzm8ye-9Jm$s%Cy)quw|EUkM>eecFQ4nKX(jrXWtXRD%RHF8@#
zGzI?osQR8v`WsAjgrvtp#R;&`oiEWi;F#2{scT2GR-Gi@<;s`n&5}H@74UG{Sk|Ir
z3tYWFQ&4-`<Ntc~`OhEhscl-dtY}Ds|LO}9TAq08)hek{4{K@|jY?Yi$~$krQYBTZ
zSx;6SqgKl*U#4F_O{T5Py25thc5zY_qQ+wyAU!z1qoXj=1&_mOkXh_Ao*m<v2z^5E
zE!oqJz7_(QVSjt;$t@tc<>XdWMB+FRXuEra0DT?O3T3|T?m3erAr`acTTcET=Ds_y
zi6i@eXNy+77h9HP$+9F@xyX`igJs#6Vr;;eX1eL7n@)g$=p;ZwPk=zU5K;&!<eT0w
zxl2L{9LYfr5|TK%H13jIzPU>dY-#w-%u2RwxZHj3`~Bkw*6!@=?Ci|!%$qlF-upaI
z6WM{D(kdBY5l<ayVOj(m5H`UEBuF%PsGi!foPbr$#{sKRT>RFpuAIJ3MICZ4hPU2>
zqe)9idMC+ZL5CD*tn_WHwpgmy`6>+o#JW#NvKahEOVT97-3JWxpei4{=Bq-%w2D){
zs?}SXI?gw3+0w)oG;N`uTZnVP2iWebEH19}wHu9J<G8Oo&r1*ZDl2_(y20>Fb|rnN
z>*+0tz6)tIHDfJ8dkV1Q|B{>R3U|Ygc3%Yn_zD~VUjYHIhMskNX(Y7t`0=Go>(b-k
zb=n=d2XX%tD5D?hia(CKgQ*jbaS%0vnnX2IbE$>Ya<mHEK;1#@r1nwwQAel;sfVfK
z)RWW;)XUUs)M@Hn0qd9{7NJaR7t}7oKY^|>#Nd_@&<}LQI7%0zZFWEY39u77f}@L$
zsA3L)?f?>N3TWIS9@tGzlqZG(<sAVAm_R^h2Y$|rRyZajV-Elo@cMY8MvosdX#yG(
z$OpV8;1)R@oXH@eoo)@sdx1%pPorMLxZD!j$LJh7z*hj`j!p(lelca%pJkHurx|-v
zvKqE%iZyV7#%xMwPwSJJbNb{I{aYaYeKy@>)`D$nzZ%@7#dm*ivhgqLk|S=g5gxxA
z9tX|Z?8sO^pI5!|vO-Ni0$068XTxvRx%88O4QZ^#2)tAQmZ>Y@2rx(-Y2m;~xRpht
zWLF5jd+7AhM_3?!%(@?BefAl9_LPWOrjG8u2>*z_XJ&Ne7VvfU2;lr-0|SiWOPm<i
z0)M3SDEh~i7p%+tJ<U9}b`VFeHKeidK8Zw+PEU%(rgW`dueT?O<zNV#rk6;-R4z@A
z(tt+5f(#XyEfpu(4d|aeNhF5{fZeE2!dKX|$XPHM9#%6JRwCu#y`s0k*w@80XgzaA
z-7#FmRS%g7r0{GA?yvwqe3Vt8)F(w8SY8DxANu6glVZjPXrNY{1PU2^`w%Gm?o%<m
zHt=m)-u8J8d;^{aUe$K^<tMpdO9zb_!hqTfEC(zsgfD_$K7(IJ?tou`lt2BcADAg+
z(Pz$#-q*kg@)Cmok1_8k()~LJ1Nznpig?ejr@sbG&##aCef{(7`KLl2Xz_$9^O(l<
zr@-{~stvEbwjtvg@F>PGhk8#Rf!?e~<L!1zN<4dGc??T2m~laT3y0WVbb%I`KubA=
z3l1a2`Kf@2H!=^w-@^1|`m><vd;^#|zCT<UePjOkU<>VsM;Fl=FeOt7ufWi<8O-lb
zKe74XTrluGLwzMT>o%AQPmdmT9!xrWXXTg$(bI6{fH7blUDnYXOr`Zp$IVy{gYaXe
zzNm7z=`5(7ckhNLW3)j`vHu{tznGHi1TQ~iha?B+{D{r=du>>`lZnSOc%h3J8NoRn
zPrO5!{3d?d!S$=poc?0Zo-a<H39sS~wgLL;fdf|o4gY)XxkIZSd!udNzP2|WTQ&2x
zr^dW<;>1sZKkT{p)2EIsT=o8v_m7=;hh5$wE*-mP&)8D-+L~FjIvy&mWTJz&Zyy|C
za&jGW=A<)Q*?SIFMTU8crqAXCKKdA%o5yzATa5dk%b{<&?gCg%Kw2TR#R|A9R{eOr
zl^o!gR{b;_MhAH1)?seTcMo-BJoMe_nbO}Zm_9fUWWTyMvRk?N#4-94gVkz?I&eZ-
zhmX<k@ew?Zk8l_X&m!S{==jh>-+lMc;x~%Y-3xxx=lMVHj_j=}v42cqZAt1zP$byS
z2!7fO#8aD{_-f0e3Mn5|N|jTUR9~tF(dD6tGLNRlBkDYZnoZ587E#Nnm54%bL=<{E
zqS1S){nRn)A{r4`^y4H)pWT41*GxTs0TZA2!!C&ue*oix{mKvD_ZkBK<gN+pvl#eW
z{G4$Pi-6x)X}_S3=IGR?10t7z^=~wJ10E3;UW=&6wWyf8ul)?Ymp<BlW~ej%uR=9b
zm4<#+a&A@)nW>t&9Q|&Kog<YCfqoG%ECTw4<S!QPc)_{ofu8X{4qnumu`{}5?F%og
zUHAO+@Upvib#HgeBr}uNXJTrg#1W_;63EIlq}QkrH=ZG}D$PcDYQSd~QSCe66QH4z
zIUJb`KjJdqej9$cXwja8zq`}(?aFjdI{qo_p7eB&J%55H-GhJQ^V2=-`x!m{!4pFk
zb&pvzB%@oN=+E)|I-#`S_KYkE2Xux)Z$-A$n49Lw=YdRbND>)MWkAKq7!fTs<;DFA
zEJEXNJHdO%?y-iwm2qCojVxv~Cf?t6_;4Eo54YWae;a74$h&qauc9IkJeeD!e+uP-
zC-W-67JTn8PS~>GFk908N^V6(E?13@zxfS1#`w@oM87Vh^B6?ExH#Mq-?cwa1kD&9
zkQKZ{P>B#pG0g#=u*nfuWfvasbNc|h=Yx+9k2tVmVe^cI%kLd_;J4@RpL%HoXS0Zv
zhThZQ&ucb*z8R#PTYmBI&W)RnjhVi2?L_MgjXq8D$NS4>mluguhU8vPO*jSFQs%|?
z-q>~M{lK{88#XQ<7kGaEp_gjQ*;JiDndEDnv-rbJXMuXu)`uV2I%?&#iD9QzuN|zv
z|GYETX;A4>`qXs1=1f(^cv<X!9NQA)V2miD!a#gdrUIfW)(a4j5sXC=$FgT*XC3jd
zK>P}zj}RwyK@ec#G8HR}m*FgS(2J!O#D^~lM86hv$OTpMcWucX-vORWV(!IBB9z%>
zbkZl^6T~L!WR;BN0ejNyV!G#o1JOjqa;6nhNls=3pPD397hsG&v(j75G657+Xw!^N
z-qnR`kLxYy;|~*hn<}nGPduQRfUzh5{?j^hl&e^`8@+ZnVls7r!qC`MboYN;Yuzs3
z#5dr_yL2e$8<Y;`m;OJmyWmGd;NP(~PC2nPL$`Di#_rbHCA8gXX9z>@6t>KXXAg{1
zU@y8r&xaSlRWLr<?~eCiJ8Wa3DCX73>-6#W;1BeCFb1~4b}$-*m9#n%(w1o>AvLW8
zVXd7F+Zif4gWeyBFf8%65&4GRPXZu39a7qSO@z|xSxS?yr73L3i7Lr|kLIEp>K?@D
zQydn{^KJq~{p*K-U>y5T56;9y8U}BhYrNRar~yNOVjm5RrYrTodL=M8IUk;8cpdu4
z;W5L8Y5m$^!%+C29&n;xyFaWwFCkUv1C8E#GAwKZg-=@bnh$h|IsNMEKnP$HABg&k
zkfH9M{eI={ZTN0OgHG2F0!~n7E|->p9Bdp8FP2Hm&G1e5u@>EI_|;5UvjDjnAAelj
zmrEaNDMi_Js3mnO0Afxc(__9M1vico?0_0;XE7)s77U|1#~u@KdoiIEh%LrvF%}V!
z7C?Ypjl7q)GIXe^2{%Nz2~adG9ocUZZ{a8P8!07vx-#^~$T@{fqctfqJUXdDCYLFs
zI!}heq}9k2oSc!7RN#SKw?+2dwo8)g8R{GJp^<+515MuyTds9Z?>W|7TSi~a2e0!f
zA2w8s&Q^oga0r`7g~D_ZON(_htrOF%R>JT+YZsfvdS1@5$&U2o<a9?e%gT8@inOyl
z&qyLiZ@cr(+sYT-F>jLjN+=}PXO@&^2X|yUgF$EZj$n3aN#@WYpWD|QxjVLR5Jj}C
z4son4*xE%&W2*`m*(f0*P)CB`+tq0kZlz6jFP4M`$X+|{?lGYRV%1G}uL*Im0lVNL
zorv2rf&V5MyErPZUib2h-+Zr@4;j+GX`VCX2GzGy3|?24wDMVE4i+A~X-aM?O)VPn
zsnx}?uB514-*2HVWg5QuUyIi7xci-J7ZyEbf^RzXTFvhK+zqe1!i9nOmF_Zk@b?*~
zw$$;mFOSTBtN-l!FW05G<C5`|ym^S!r4*$a!+BPd)iQIT4!zdwI#H2gz8vk?IX}&o
zhE{Y~@cv3qaeK_a5f|p#5RW?q&xCfplD2th0Z+q-m28wOZ)LG3bONkFOc)tKR+Xr6
z(y5mhn=!cX%CkSi_MgwLtXjOhzd4uX(#&N|rI{+g6ii-s>cXjYlM5K2$}DXvGpBKE
zuDSp6#Z@ruGKT~cC)9eiJ`ncRHW6P}71PSo(#oe*6b|t_<R~kYp)@7Qq-JGl4y#^o
z%}A58$|O^Y6y=2SlRNxFm?0256blRc5%}k;tp$$=KC$RdpEW5&d&-U>`~(b3w;g@|
z6d?F=(V2_@&3PD@R>aHDjDU9&>@kc;+7x840G$GboRnpvJGI5y=nhT|78o5|zt=?R
zMnk%2SBaK(&wzK&7dv!$vbDbxIdapv#c=ct*cMznzdj?Qe*W5E8>A_bgkhtPXtneh
zTAN}3$<b+gvsn+mYH@%QI}d)M(bHTOY@naen^O$1;NZ?H*K%q?85yCPoNJheqi;}b
zn2QkG8VcwsUgM4T>P|sjC*H2c18CxXmepq9y(08u!|?Luwl2^ZA-L~vYvr=7pKm-4
zvY&`hLXX3HKTPW<@I};@5|Rq)M6CJ=pgp+h>s>0{F8F7yu$zOQO56v<wt(GzLK1Jt
zbh?Ko8^9(I1H$nNWuw$wtJy_f0N1S^d+_3)FCH9=PD|ds53GhAL|8c^UNm@}Lth&T
zYD*%x_P%$Q2&wTytHElLO?$YjE}gn4ET+xng6*8vfSS<oD^2KgQAFbmQ5>wYW5ra1
zP!e7gFEkU}c@j0MfY?A@D+DjY%O`gps}SileGTH=*6&(##i`{Qov0%EU{@vB-wl9&
zc^J3yhJ;5+a6=O4|H;F^FrewAIz>Ng-MU%&6!poDD+yI1{ejFiRn$Pd=Nwabk5>bO
z$Nh`?;V$B*FcEO#@g1)eOJSS&_}5r{tNQKz+d8=#*xp@wrIEU^NvVx)PWU#cv!Jg-
zy3D2<hu^++1yLu`9DEPtn3PrhpjO$@l=!viPTSJi7(L`asT=-w0XN?XIc(@AZI4d|
zflj1izpZ;CaR0gy&_`ZfJWXPj7D$0)=6rGo5g{ACxpCIW*o`rzhrzDH|6wcPZt(VD
z-+U<$=ZaILi&{33J|8dF><O_OQ%Y8^zNr<l?1#qsPF$2Kp@LK`)j)P;jI`)hq{IGC
zhzRZ>Xx21RXp(e`)Jzd!NL*y%1sW`q(|{rrM)N0OOGHq<_HX+VC<df@kQ)tfpFQ{3
zW9QBScVstWU0N5-IB;ObA~Lhm*Y8-i><&8gBCf@Y<OcKCgYbtZ)ZIwY%>?Nj$kQ1X
zEi&lfAENK92Xof1hkM{JrN_Q#d$?3+a>S6csv$#EFalz<q4eRlFOHRBz75<E@wmVB
zqw1*%)SO%OImAATC|;D|_Amiq>U4JMVRrAFrr3Z2#e`8Y1%Xp<G@(|b0(iFz(M1Xy
z7LrbE1)^>}t**kD27h|~19-I0lJmRk#gaR}*u3=P(WL(*rt6jd+%6IcDfWSn&|f6{
z=`jW<-}Qa688sx+iW(3_z@JbA+mzVXCjJn94o1wWADt4-IQr?b&41pj62@RCG1b6{
zl0_&E9?`p!+aD%}M<S+F>j$91xqKJA9^nxegkmgdAHdTn2DPCmwy!Y|wc$9b`B&Ny
z^_hQ*FcEhnLQ|5yM_9dpOO1P9XP;A}E*I|6gf{q(XFq#s$<~|3?7{1|o05UzrM8!L
zJ@IyIR8nCK6@aR<WZHoP)0Vu*lnR}XTy`I)sO_GCk(BgRgH<;VR?Ukb{ehQ(Dm8u8
zBr+PmiFHFTA9ugfhe7MZrIF6A2SX2+cGDf|MUdkY=S;p+S(5KQdj`5RCjaR?dU2aX
z;z2}c+u-i=>EIJW{E3UdKCgbbO=?C7CEJH|pI--`5aLf<{3r7)eS;<QY$@^QXrv5!
znkC!1T7SUT^^ti2)JdpDyq;a%f{xXP4qpcDC*X(2H-5fVhA9i#{5&#FD8xHxE%=U5
zpK-#C>s_^BRwcm~KY1Abd6!PL>+4Mif%XZt@Y#-y6P|fnr+Zt-XxuS!qa)mX9zrWR
zKFqF;*M*><3#CpVmm&)5@d@0P(d6~TH$m-jFsk^s;pggf@FPizBu^@R5q=b-@&BZZ
z!1bb3nuij1gu1Fk&qWo69|<>J6sRDYhn@i0o$Vt;z9_sU^8HQoD)}~8J|ysvoj`CD
zUJ)Rcx04OP>>?=%dO_^tNBM--B@ANpKB5yo70*<$UJ`w`$2$>$4YL?e7=yRRm{F>;
zJ7X;`3SRHzBR6;TR&)Xhb0+QUibp3Z0f#Lk!Pln78^DUM-T+Z0!~nxyO($^NV~(OC
z2fXbq>sR^JD=HRkIeO+y)Q;o0aFL_^xTA<3_U)dM67YM;kzJ2{8+{zz80jdYV(;QG
zeXGMeVR&7@8i~`<beCHx!p2ePrP@H3*j>;CXNl010GkWDwjQQ-!-+R%90uy+u7;&2
zW>jxVm1fAS#_S@eQliQk!`qtc%c~p5gaQ*P3R4sxKXnHFJvlYmYNS=(Avs3ou{o#i
zYA)Ugk2Jk-eC?o6iF<d>l$?f|B2IcJZQNI2jJ2|P*sh_$s`g;Tu%eO8OJ?Rjei}yK
z%55mfkyyqss)pHf<8tX0sO>hP^+XUOmQVsR3DG?#>+FEwj?7535do<X!5KmkOd`%L
zA24d;Fk~3-PDhlFnD@+&a<oQ0FTZr-<Q;Vb0MkFoB1+<QDzUhzFPC0jGEpv7wXC`N
z$keHiT!rYge8^9S5m^VOca|@I2VUL(+v9NJmO0Dcp^F+NoYbD<_675HwagwR9^1#r
zC=B{7yrD+Qi)%u@0v-;DWr9v?-aU48P%}3jX9CZ`tM4qIunFva`Vae2&cv@v41Y|(
z3(^r8u^Y7lTCoJ|KD!3}I!%=l!rD%p5#o=A{IH5Ig?}PjNqtF4eS1>Eh46RpbqecJ
z<6oG7(%egKu(o)J7E(rSSYSv~UB}LSM}ozjgDqz$n@f#x1wo93P0%8V&ja?j_6Tus
zZiow$IB$FfgEdmIXS|8<_0KUnKOF*13Y|^?kLVPw3LQLxFF+Hyh}!Ck0aZN%i-vfE
z&EIcYxlTXio~Q2_qStL0@mX;l9gYF~!~1W3TF5urT3q)-(Ve&XrY)H|u}`L^9R1TY
z)fLBeqWOQ2`gy653H8H0Q3V9F3;_$!S6o4c7)DzqG97%x{gvYh+(KeSjW$wE!hChr
z^V#bX$rg!1DY<@KqEw(D4)lnL8lH7JhZ#)WDtrJ8JfPQEQY~g@XMLle{qsz^VxD#S
zea>M_SLIi%(1=nzcE2-0FIG#L3H>6hlAxy_`-JhXXYbUc0h9>M?>DG+M97H{hz{+$
zuy5Z5Zsh0pM?>fmBcX)=Ci4XA3>xv>eWCk5N8xZ6mM*4aMxy1ycnx;mZm>&mUw7Mm
zUWTZ==+Laz+6sRNfEqXr9z_4AftmpPp|urIpbuC9`ao*VB@qQft>M;4D}zs<HHxZ*
zrmHx85#EF68V9D&ET+$hry-xJLU5~{;nl`Hi=uk7nD6g+=Av3{>}WHp)fb=XKz!Mc
z#EBEi8PWQeH%7wiUf|wQWoD}0;a*tBgg3t2-b#Enf%6#NsS|H5;oUicG~(9prxV^!
z{mZg^A^0o}McWuCxHJu6E0kLnOK|lHUdP3XCSJt%YVJgIXesf(Vj-9}8Ztq|+<9Xm
ziP0pXu@8B-6VKHWAVkt5l9M!Qm~Tkc>y%b-g9*{b=%3lymI4#(PbWuj<iZu8TH{d4
z=~R{-+c7)YA-*cjH?fQL7S#=knGrb*q;$WIFOt&~SD3Gu$f^GH3R-0m!Jp`E`0A>j
z`092|PfYc8st1xfdtA_dOQMF~5Q!h;Zp7@A^QmfT5ETI;pam(wiRgT9&>sv16Tlp>
z4Ez^(9b5)i0i+e^^I@bk7r{w0a#-4pJu$moq5ugKr)DA{4OT$#8-X{SkAdsBW80a<
zF0|C*gR~U@BjTNnLXNDHIH|_i?Raq!I~EJ;Tazy~?cu#p#Kz&NE(oyr$6Xxo#GXT|
zKE0JOVSptUPcW7|tUCk4ECswl23vQT1d%G>4Oj~ml^7@T27#5_At<O0J?|IZX~3v`
zsDLIv(BmVn8D1m_UKG(XDcx-}6`|U5MA5=Ud}o<Z!xUn>GW<jUaUMRAiL{dy%WeZM
zD&{}ISIoG0pU5c0yEyc7`$P`Gjfqo4JY1vnA|4fhHTg48a})<bIWUkn6U;!jQtS}9
zl?+D1aSJhc!Ea>z7+KJz1SaA05QSa*6k-yL1a8WK%4A}Ri+T}x#$hOO;%f1Jp8%JK
zeL$kDIKO}ms~3t1J{7yP$vzr1q@YR_^DbSo575I>jK)&MsPw#nn+r1Y+ZQTE3PBJ3
zHpp_Mr2AdP7OrJTeM?K*l)tS?nScAzq4ZB;9S_Ea{RNH2=+NlzOrr`%z6@wiCl)0u
zQ+SEYl4@0$EDp0)FXMfUGKoYrm`-<DIE6>a(9$faN@c1B!37qZL975qK)JsjXewhE
zn&r8a!h)jA75U}Uciy4TF182d^f2I?+<Qa@;CPm%0aIqG(V~gNGQW5KB&9}{Edi`L
zSHW3a>GTk#L@aOgNqL~xnjIFC(r!+XNyQe03H~f;u(Bx@y=|}~S<%O;;FuDxYM@n_
zEi)L^*6XiX8zgp}B_%VpT9NE<s=NVK@{+QbE+fxlPG&BPH4LNBWafe-*!Jy14}JTP
zf95Q}OH<dTNmvg4BxYFp0?mp<vh+>xUUgQfO3N@(uJ7xNa|19vbOIO-+8ID=s#N9@
zZyLw)Qd%V8<zls1$IdEc<yN&t#Qawh?a$AZi#3w6R4|m$RJ*foYvdg3{N9lY6Z_jY
zCLfz5GSO)gd9G9kXht`J*3;AA6Ls}sab@WIc>vfWY?4w37?mnpDM_Q%^7sDhO}dF|
zT%PUft6`)gz5aDu)lOcLtTR?|tk;kbZcM3^C>(arT#g%&o)BiMRN}l8M^TPRH*n_6
zJu^R=o7bmzjVN<&`xRN5NmH_*A5G_HCnskW(9FSMMs1o*Dlw*}N~B7?GF2?Mpiic%
zp{0F&uAHD<<CG?AIW5Bi4#-5AjEJS}X&Eggt9@!yDln^)l#G)0SXiy6%vYljs}y1-
zvl{+m_?=Q6qfAmMm6jw;@#@kRhs{n)=`2o;^5GbiW0KgVu~lSd`T9xd!Xy>yL>9Tk
zqSh)TQj66fW}Zw<woP@eOx3YVvp1G0Y)WNlnp!0Vi&in!n+m7el2f&;E_LPBG-cVw
zY>`SmwNg{LYCenFa`bG*?b@!>@?!n^-ZZ`b*y1I}jxAXXU8p0bEJcG##ti8565H5_
znq5D<fm6|EdM!&9i?r%Jsq{LNV*8tc!q@jJ3^ap5d}tnw$wos`tSIEfA`ZK@1QNYQ
zCu3-!DXox*Jqkr?25Oe*2Bo_HQkmR0+wZHV>E2f=N*0tCZ<)kOfQZ)WOfrRRSfBK>
z2E*<`hmm0nmfm5I@2_&%!Js<Sf0FcCmSe@QP3X1FKiemlE$gRN7NX+U3p_&~3E*BO
zoOv(e&%2wJ0<fZX^%hxKOp^E@=Rv0o56}I*Y0IQZTcV35ZE0%S5*<@Id-EN?Jqz5R
z^wQQp+%qYU$?iXA)u0!rrA{2*)Xya!asZxu1YWuF>bgbM)%N@x{Lm!w=p?SN_vl)0
zrb)?3O}6}!0Yj(FsXR2syLjUCq4mAJX=;X6TZ_E|dkqf^jq4o5{BorcRM1*#2KMGc
zb@x<+5goh1H0z2GD}wlTG|zikvRLFh#R*vXhPJWVxXrW9An4o)AlHcNk6*cLqMlfY
zY!-Y1zW3RN4WEHx&;W{YC_49Mr00cdwN0%CD`(X@QpplO)iG4CY>t~se?X$wzqFp5
z&%rC_m?oDw5{?6^bFCXbgYWft+wX3H3mqM-hWK4=>QJrEQKngl<pm2hWey)x+ruy$
z{ve3c#;;#LUI^_vcP?@lO;8aDRBzm#Od{aQn+RWr*J56cqeoNt2sdTusajQJ<ipp)
zJX(usmDh+8JWp)oYkd={uC-Q8m{7%sswVhqSqk&A(N+)^1o{!d_WcM9`)ZHiWDH4s
zq?YPYrj*Vy#pDq^ieN|vHx(7J^&CYL`=G>9^e7@K4n?=t`g#;0+SI*_!1jMp9tJIK
z|9>hEjX2W(v+~fL<uRdAOZ`tuBL4MKF#p#3u`G#WS0cJ$At;{cwYs>gOybeR74!UV
zV&@X~AM4(h>XS|;7syV*Gdi<eo|!3^r)a_VR(B@MK+(16HuxR7$7!;;wrmZj6Y#4U
zEbGHQ3Ty_9Sf$b1(b47>*&RNw&8I;}O)&|Z{OAr7g00~&2!%rM$CeiOV<-ed;V^7P
zXLU;pP=~m18*B<k+uFjrc7@w$TNoT6L7_S0b`5cF4><(&q8E{zVq6%ah@`<I6`g%{
z&On?n`!qg>!HEh&G+I$9i9g+#!8$$@`*njDjaV4&pdfZ`8|Em0v3jvcMTCAG!Wp92
z2uj6-v2)ZY>cKZqdh82Wc#5S!+&^wR7W$(I!RG@GMJdvQ!Zhwh_yJ15&OsGJbxP}$
z5qV=iEJk&&Rrk7S9Pt{0#9BHGUZ=gQs@Qw59sN*0^Vwrrq1CugLh6cZg8qb}Ggx$l
zHJ(tdqg1#ZMRMrZfo`BG2!1JWMEntkz!(e9;vY@UFy<VX96Mr7L6hx|sBj0hTkM^<
z0lL<L8jSA=G>M}FU5HF}+-rH3iZo#W6fTrmLR=Js+f_v`6g2=FY!YHiG9yhT0~%1I
zib}M#5fQ)26m|kv0sPLm^aImw>~OK0rO@(gsqz=)@F!sFKpndToXNDjU}?&XQ1Mp-
z>Y5a#IK-e10c@Ei%n@|22_?#m6$1BDQ38He68ff<)NpDlvAXO8B=mQNjb0;1oTZ>K
zX~5tRHm48ceHWAUB6fG>B9_bnV!GxNJZ@t@q#FCprcV6*X(q9B|9+|1q_CP8`PQwB
z4467*ep%ON&TYOeS=nF!{mztWb5^XFGi^#iv&FLJ`N_Gtlb>HRjj0(~RT^rjLhK|g
z1%DYhu{%Ujaj}!5x6#~_Md>V93)nVL4BsoO>D8iA17KfJ%!?<#G+E4hTjVO57G>5q
zEpDpM6tQ>t`*Mu9k0(&Ypmlc*<L`z)#C5h4#yT)l9x8}?fD-W^8K{yPKSeyBd5G&y
z8w-dbH?dIFvZ%H}`X;NXF|#&opeJvbH4BVA1b@1J+2upy520@y1WMX6|AoJ;hktkq
zUVickko^S6Tl@11^Fd=`ErFYUHtW?tzl#2{q64$Q`|x%66UyQ8vipJZ&>>j2_2-A0
z9)KUd^cej3__RmAV?^C?u$XSV8saUv9<==?{Ah!t%Ye;DaQnKjslqx%M=O?YvLS^o
zJfW(Cka`wP2WafX?;SZ3k8HxpV$tlNuEY~S@W_$)op3BJ=I>REX*bqo^-<;22x=~t
z#b7BN#*x=_%6~hhzG(T~c|lOd<4M@KOiS2tA&Q0mB9oQndPay^5$&X|V+u-vXO$J1
zG~vS9$?QfqWmYJmfy`ikF-%@H*#Q1Rwht?+^7E_m*&XBW+Pz`-UE}*LoZ8H4>$Gh1
z)P?;zs9VLdA?$r28e+mI%l4nU;E6aHdMOE&_U~Ux0_uF6ePmM2;wrnnYH^Kh+xySG
z#M|xsOV7Q(O?J!JL>XruH3;=uHO(8fag~QI7hGy>z(s2kHu1@A5M+FIG^R~fY;mV#
z40hDD-5!*L3tv2P<f70fq{vO3*PLKadFP-Vi~2>Vev5Vt(wR&;e8tAExG?O1^JmS1
z^I=B<Iui$Wq7ktZa0w_)y;Ijb{nLgGKRvxBmA7Zw`R<pAvei5?AN|j2m;>y3lO3B*
z({2Z<-@mL@TZED@KS-(<Y^(daZrg(Df4?SG!SeP#>;8IjO<LNTlYd>;T`r8v-s?Xr
zJA-<=1C4`!r|2V?kt0g|&(HXJ#`FGvzvSnhembJu{&sfu+uOVMr~d!D{v_h<uK%nv
z-7%YfW%eEayN=}Dxzj6jp@i?CqDrwxJFW*w2?WIfkJxQjig~Npr0a2)YwIfcWX7Cc
zR#;y=IyWaLcXV-mVOhGFVI#MSo!s?QNUIFvGdhF<%_AE_wRx3Ri^W=*R~u>^*&Mi4
z9M+YIKa`+5L7`cE7Wyt^w>RceUE>x4sMIFBPef=uDtbWYj{%MeY2ArIcM<UgP7dfn
z0@5W+3P7lKkx4M)W6<Kr7Ao*mk%I&H-7YhYmc`OJQW9I_R!Y#RvWOE8uPm+V)tsJU
zo4QRgSJYA;4G*6K->cg`MaGG?PAv8eV8gY(@c4p0RUSCZdIF!@@*VJ!y8<tJle03w
zGZ|UG;Aq?JnU!L?$`fAU9mIifQM$j7zkBL0-cneXlwaSnWH`vIncg;KJD9l6(6?)^
zrwM)ILJ9+N;bw6NwjjwM4#EgX%b;fQ#jHde3FpqX@Z%*C&j>7;8^o;sgl!5xb9h{p
zt!iA=0awUZi&b$$^i%16zK*LB;%(1tS(K(TP1!#49&w%W_My@G-g7fx*t>7m;G*qQ
zOu95KT;++j&}wWR8vXGGb=F(!%SnfnH#Z&ZwWWZch~4Oq@dWe^&+Glm+3iy_qHQyw
zGBXFx8PXicr>W|Zv-YKfr>AUZ%j5e%f)20?&7uRT$=HuEhu2qvm?dBrRK`1zrn#89
z63>Yk%zp~-MR-GobQzu_7`-?u2pDG^mYOrfFh>G-dy*k{1si`p=DVUCc!_Bw7W8mz
z;mM;FreF;RJ7(?MH)}!ez_I&gdGhGRXaMh<GZH>N?(Ty}tr=AwvmP`QR)7!=!A~vP
z9JRWlNUsG=){JkXOOuSg+B_$%jFJ^8ZMy22Kc}Gv49oGOCFpxwGH|<>7WehI;5*^%
zg+9)@q_0c5@4`NfWqtjueVV`Sn-!hfxYaPiM8DO4pfX_hR7np=>x*tsD6l~xHXEGA
zqLAc>GQeoAiEDkCRmwA=+F7-;-mJ)(9-(w2WPNk#`+T*l?S=4?C)m$({(Qe&@lap(
z0L}K!zDL%B83Z2>^(4^g#IGDUJDC;y5!^x;Xo^wSA}klin8o0R273%O$!jNC6|q$T
z9@e<unmCNk920)6DW8`?_g>mk55x5>@QdiD^(~Js0}p0L8>a3SSGLrPTE|C!>kdUK
z%`Qf*k$TgZP^1-w#RKx_@Yu`}E+j2VgMF(eps`%2R)F%PRIF5Pc8REx!pPt5KLZb8
zk1r?hZmG8|do;Xx%8(hh`j+dhV9KF2jH1|OwmCfdG?&d~&Q<1?m1L?^t*OolRW`GW
zKdkViyg>w50wx~j?TV<ym}a3hKN?Ns;EzGPrGOaJ8#btAVvr=*WXZu`?Q{nd2b0nz
z1W|+Oa5EJJfMBS{bG~9T2*klo7>5oA!MlTQ(@j%wi}_XKHS0$WTc;m3L%(j==#9#8
z%lVbkfUzLGFnQ*_(jv%Jk0^ANOCDUaQ&R3K2r(PXQzSuGeigHrXT?*+#di9+>~zpk
zQd^9M>e<i$h7IMr%O#7=`<RLw)Wlk_v(%es1fQf>$8V92m@{K2d=Q)%I%Cl&>7C<~
z9FXF3)K-~n&&*(p3vTd=!UeAANP3K`pekRbh<*a@b$Y8jN;yooEVjb=wk$JPnbW7Z
z#{Bi4SRe<P3au=^y1)gkbc<41P#xRz#qH`P2qaSo64$LMUAf?7+~G@@2ZR6`wQfT0
zyksWmnh0(te7cyIDg48-yL+;#iU$hB@0`)WjY}%2FA=7Qfqpbu4D`?5Ym`nIm|wi0
ze@g0vb(V4J=Bj9sKnVBF?B8qOpKZW~|2Q-sKnjN6@z)g-BA8+TElrazXZ0@0EXVUe
zXiQ*8t*?nL3k(S#oPCAvYZ%3Eo^W~bT(~1NR3L*h?{UzMS^L^!c4)#cVPD)yyx2~n
z))7xDiB<Gzn3xJv8W6BnF`%!JPZy~O6d~zErgS9}L$DO44%Dwu7c^k~_&|L65V|Ia
zwKzjiU);jF+D{f%Du9<>oVa)XcGC#M*2d`6S^NH~**B|xy+wlvRf?hSl9%iO<-q=d
zqIyJ|s-84D4Q8=ogS5(nqK`;I9hKs1({n1`L{zCZbVgZ~>8oWexqW3LblWupvVB9v
zx&6+c_w);T;H5(Q>RKOjo2laH$qD1&<0I$nL%b5bIL|X{-`Ih<3os#u9b8Qy!+P{!
zMImU=n>|&V)#@Cr1%8Ud8CKAw)fZKO8OEgO(!TROS7{TbyU{SMbmrBz|HYpJhSfBT
zh3~jLeTz%+te3F`zUQm$#DU?TVJRw^@Q;RDYwi>oIh~Owv2Gd0^-4!4;@HRS^63QN
zP#xKn)(My}qjd`Sp;ob3p@V-^=(I{ES)pT<gMdV;*d*5i&#Pj?a=ql0JfM|tR!Aj-
z(fKaD<cd_vDA-RV`t1rW)3!vRja(oP=V}#8lv<rMQlXGZHFCNRj?(GCW6`JO8mUyt
zoR({J(Q8R5yhB2Zb(**igRrKSP}x+OV29uq+&K76vAVdKE^o5}Aek@^8tERJBvir%
z3EnVawY}}bS3XcRp!lp<BG%oj7r%Z`s}%I0UE$z}$s=k+dGG@K@r@-*-T-Ql3)Cd^
z(Jgi%n94@G7Jf7EGTf?Bsx@FPd;sTzVQ`Yt?wdYtcZQVlFL?w0*dsq!+an_sO00Jt
zqBX?R6(|b$^Rba1nxME&c%wAzim3u|haOho73}|BvYVQw$NmvLet)x4mM7AxWh|@G
zr&yi3y2(ugoqg46nMy78DO8L)*VmA@=Xb9&a+Fk>C)WInq`TjE-F<UoMjyO+^9bZO
zYqbpumR2yVT&0xrQwP;eu_%=?K+6Z~b*wrqS$}%Ru2VRblKEGu*uq;hJ22eh8{%;k
zy3xkBayFt<LP=N?@0NgogmDK<62PPXbQ>mg(I)!HBTWOK4YZwxpV3F?Bhe;w4cegX
zG_W_pFx`fQocIPwhNIJPqF6Hg*yl|kOm&kR;di<b=|pcb@e*JPxFuY`9gqMw-?Qt|
zXMqY{ZES6VSAi*W)EZdE<bpS08T@ZxLb1REuV#*7>TXfV=ddwK<0+H`KNv=jRDn0q
zqyLSvJB6}C4>p49x9F5uR((Z6aT%zbI?59Bve}m!hI(kYyH|ktt|}K(FY^;8!o*h!
zNrkC?Ml9qN)a;dj0I&fJ%~fQj4aGq^uF0#jD~WnKmIh*t4zx5U@Wr%`sLj}k^K*J@
zz~v4E+^zt-E-*L{7#wjgII;l!v1=F94_Ub2NTl!4MT?I<`1MhC-O<I1j-rdmXYjvI
z-F{)!stdQDVjhF=19%!Pxv+oisJ-Xtq3|cT4!cwUt68unHz=8R0A4$|@!R_R2H6N(
z{nd>J;k5(vB*9!TcQ3f_i#Bj4og%zGK;yUjC*XH3SO7>FTFHx#0`&X(D9i+_foj#o
z_KT}n+5CB94_sKX=>2;qM0p&IJ_C9!%X-&%?|JDycx`{nl#-Rk+niGt><8leUb+Xx
zPhHT0`ponj6nlWsMIF``CSZ-|V9<9d=Kw3f9?5xAO!*zHK4Z$|0jzc8VFW!SD~o6;
zRxGjtrZ?OIe*sdk97y557uK(TVLixIu!_t)_o6d3KxVbd(?+KCIRk%A8;OExKsMmr
zh3>pelth|Q5VCXnssSyfV;^$5?4g1TdI^xe{0hqHmsef}2iK1uw|@P&@zIA<@-njQ
z$u))nBo~F%T73ro-HHMuaejuHWP4UdUW(qT)S6kP!)){>C!4iOYXW{4Px+}J(N>M`
z+IxVASJLUOd=kQ%M<%Q!gq>ue85LckqrW(x#{4g>cG*N~qwOZ~@%`gBj32)Nc%>P=
z(xk3c>z1aZr1i>>8Z-M0yW4wLq0uNYmK#qk9E6S%qw!Sn_Thap`@aVN{@QCmPOnIW
zI%OcvX?*k-eG-=}PRh*CYLmGneO|9zpR)L_f>;KN>Vzy`D^~h)djTzwzlL)I-*(40
z6=V=Epn7Wszjb(#Lo}fgIfywg@8rlOppz99rB;sF@)bP&<WunU*IUMg=+pTQu*ccA
z5Uu@Rg|9k1g?%%?UON{aTN%Cn6m0!^^X9KX=qZ{HjqA8%#{i3keeLia;J5cJ^rpjA
z_Lz?Py@&?Pz<rJb*wn`5b5R%&y4dBj8<e!kNSUybI*odpk244gTtvOjU+gPFs}2;!
zGe)fmcxaRWe<q6OK7^N(;m?)8*8q==G>l!G3+Vptp~Y%5xIHiJBctxaRM$}&^zLJ@
z&#}#`NUEL)LKk=If(z{z6<_h-MP>h9X7C;WTZ7S`>@(=+3!^tS0su}k`ge*JjpSV7
zBHB{s=oQ&9wHzGGc7rc{ed!{QPkTK5{#yOv-asMEXNUkOq=QAUpFIjS%yn0x5+JIQ
z%Wm%o)h6I+OQ|GkA>wLxB~U!P@>H@s2(nH+kFl{)`=eTtRY4lrZpDB&1Tq`ZE3#fv
zVLm^AF$vK{KJn~_Io*7+E)Ws-ZC30L7!BnLG%y7XkHi_f+ibu*Yfm=2(u+{G6C_JE
zZJo%#qx|v>+a}O=HZzuFR?%zVC+pRSArJxefPrs44w7^VG)U+Lhtv8>Wn8s#E^SX?
z70G)2ptcPvT7lB3`d7U7q+2d?&flL_B9*bF$`NZmgqPq;@Y08C)_e#uK|hfB;b*s)
zVCeN`7cP!{7~NMqch$PFqUbC9yp`+6_I~>~tyL+c=`DwBeNdLws+qLY$|_PbncB}c
zs2DkZ?SMY#9tTFXT%?oBTMk%JI<87Fw?v`{)qc88PU9*l27E(az9z9i^xA*MM}gSf
zYNXOJIu5`)YfcyXT>cCRFtP#0g=P}9)2O8p#c%>Y?asjXB#5vuxBvKuZ<j~SN8sPR
z@VhXWhZc=P2LR)NuP?xd-V*(;jG21w?yuqB!QMvMG+5Gp@?`r-5k;@q^n+XS@GkJk
z{g1;r(V2JeNrmP1>tM|lAPek+r{E{iVH=h7{Pmz>spuqr2#+fo_b={kvYTL|+%6g|
zteGGdQ3UW9Vu;Qs&70gJD>ekeSQ|<f&4X?$z-B=n95A7>vy{$AD*?-FhF`(HbIP>+
z?wui%EmUNGzu3Q?Pp<Wj5UXU#oM}vnYOB`Zt<UmKsBxB;O3?Djm}Tz$=<Nef9@#rP
zB}d#RZ`9Nj)y_KrA}K6A;(<%>>J19yU0V-^gT5eVJp4w<XofDN^M2o3j2J(_4R!FQ
z0_m%Lat4*8@Di_^X3H{YUaJr@6Nk#mbJA+2`^LWegv&Lo|8X#8{vbFTzOm*8b>+mA
zxGX1z;~x<GHL^s-6>EQ@`6)mQKU|pLVc6MT=(_<uO`sI~T3<2kCcYK5+{I(BAB5jc
zuN}>@qid%F{lV9d-3HG-nyP#f{_e|7xNkhiJOT>Ag9o-WFTG>wfw$f~ux#_P*_-d-
zEc14)8Q;D=dwcu%HM{1`Sq{W|egM@cpTj)~EQ?%gg^#VS7+wM<fB7dcxpY|N?eIiw
zeWFI+?MEty@=+C3KjQDkF05J++k#7t3W;?s0$Qht(Nbu2f`QC1433c@BpZJ>KxBSc
z!4=raq81Uwj<p}}neuoMc(~*%c<zyxAN}&7@AEX{-U9j;{#F5A1j$wvb>rz!^N51l
zY5ismpR?<>cl&y;zd32-qI*_6@0kp)(U-VOcklQkJ*uQ&*Bj%9-~acG!xjU6(UIPd
zg63a_!0*w7GZ8E?2PRi7KK>kdYS`p{`H#-u+_7rp_+bM+-E@{7c-L#M#pP^aUhp%5
zaRF|*t7*7tztESsF-_?d*U65hNZ8Gc+5p*zh>(p4&=j@d4NFm|Y67q^Bw+;aXEJ9a
zg8oZ<zabpcc@fHGMDyaGQMpWb=UC^(duf6aH2NQVdse5pqo3ihPM@1>wF$1T(Wr8|
z?tG(PNrp$sBx!Xl?X{Lpgg+KkSF_)OVst8a`hptf(E98_ft7W(?DBMnL8{e{=$$vH
z)a%fI3)NgWG@@kb#@UA^j@C(j82earbpe-zA8h}&p!x$aWm?|AeuZ*#RZ8`1M~|Kv
z?8*u$<T6u!p>67u!unQugW_%@@{)ekW7HdHR^<hV5J43hE0AL)?wDB=S;XNWS|J$u
zo2^#@G1C>3k<$~1;&hUU&q4Arc{MSMD?ybVMW%r`?6KgBNfSeF6E4vj61P_DGwQMB
zTMQ=#mw_?rJBx}_6U}xq5K)a5>^gAt*u8t^F9>GK*<vpTw3edjlfxT!+`Tb8NhDRt
z4H?i-RbjAbR8mQ>ij%6;v{qbIrM7AnBEGUxYfS-fdGdzVfB4gf^$j^HASo`AI(q|V
z%FI2x&%eK`%x_Vt(Q3~nYu+)SfAj4Ap?Mpcp59cmecM}Sw)v81vD9ufq!~2KT&p#5
z5oE6N%w2KYhxJ4AJZTb{%&d^`v!;djY+Re7MWj!$?$HPDy+bBi5DbMXT3U9^7-<oU
zEr1!*ch&UC{*saaDlyCGoOA;zv9!F3Q`0IXFRiRnr)s&XN{uyT;L>?Bht`i9SKrWV
z=TkIl%am#`jNZ~T<J_*@=hd<zub5#(ch8vCuYdi3MmVKU&8DX&zPWwdHeWg|lSsv!
zNku=RGR=dj*~4|7arHxIwt(|uy;@=B$7YulO7oKyYPK{~hWkwF4NCO62xE^0sl`~r
z=JXr&XgYADd$3zz;*{CMI{i+JHiI}c)Y%cYucRGHCYu%jZu~}!*_VbH5-crHGGv>c
z3kY8x4HPFaK(sOjpeM!%{&JvXL@Je0r3kLw|Jl-IKRk16YPy&eNflh{9Iz1_cn#bu
z)9BN^8m+{Tui*@KbFMB2h?HUpC&K!_qFF_rRd7R!)1_4WDRZz+CsVqXZP~HDIatzo
z`|@p5iVW$aM26nQy|wV8+%c<9PM`X~q{`%IQ@^U3;Z|j@=DC%<MWR%lIxw_PVQ}n{
z@mUg;gaho7!ly=NexRORI4nyk)#dFs@)GPqRB#qc)9L~dF9(mNRTX8+WNpqtdcDlp
zYgDGFVA$Pbhi@BSlVy?6YbtF%+URTur1V}or=hT@X8e%!=;4w1xyIzlc_k0f`uvHV
zHa}r9M|p{c*6akE&^W4cmu+rm$Qi@5^u;hPxgOVoe(A4RtH+GBh>Px+V{k+WF|ia*
zHxeB%C4|{<dzhgTkPH%n9937`rN7dI$!}BaDA=M48ifhrb}cqNq(eP(BEfF$qat1o
zyhMY|kT@q48L__Izs3Un7Y&Nqibaz`R8Sj1MTnqPA(ljURh>!nPZhpptDzWhB%Vea
z{eY!fZ>qBp9(?PDs_Wh-+=z1_eZtuVapodaxzqPh%nsdT)c>Eg!zgTJ{>m$Yjrpsu
z3RdUw>sMZpL~Q?A)7*3G>^iSu+yAb;^k^NGNtIx%Scw3d6l<lJwf_HA192uuNzGE&
zCKUY&5bDy=^q(~g-5XL839tzbf^s9-M$7(##sHl>Z)%K=05UblPYKcq&}w$kNg7l9
z=rUg?dh#O5WsYnFk1JhfD4aTkcytuximb5qAznwQqClsdJPv-~Bs(RYA|pR|Z9|Zl
zeGUhYfLwS1Ho^-ug)6h`oYta!6tt?M3-BxGyV*kFHpm5!)S-LlcHv~p9u;JoPV}8W
zCUcaN=-?0$RF}A=>tkW0rg*WssA&wi0ke??(fd;Ac1vbEu{Whdf>kP&X^Ff71QS(;
z;H0&;W?HtBlr(Bv_K)bRZ?|ATNP-0BGKVZ3SBQ?knQ0XO!ccOYrnOa&w~HyRgXk6G
zu}lej$vhCbom^aF+8;pN7w7bI8cyRx{{cGlUs{aXXgDb;dT;bzsZyswmo&Pho9Sj-
zM-m<CXrgUwTeOY)S#NI->uvlEN+$c|7fz<PbNCXFOT~c>>DTNpiVo>z_Luf3`^)7H
zX`*acgG%L#&o_9Zmb4@)kNp-g@r`gitZ=buN}<z08!tvD(8jahcDw9&L@c5ytxh2p
zL39!!X1zV67o*OjLvy=c3~-=l40D5$>e>;L&HxnP5YHapud(rXm}C1I6NMFGdw5id
zp9Sqsw}=xFQ_Mh+4`3w;tm;V%j#I$9-A_Nlsehk0?Qz&%oG#ZhY!c^G+Er$yire+@
zkKjJ=Ex3=aO@Q?j{(uKQ2roaTeY`}<0HsW2<m^hPxuBqrdrb81CxH90$2#qK6Uyx&
zh^{?sgW_krcY?-C8pd-&{5a;zGyG~7(05h{%c*@XzYDvR-~z-a6?O_^1-Go(RoDy<
zy?^(*Q7K8DdspU^_AP%8OnLu(Fcep~U+tT)y|9u~C9w<#q_mvo3k+FFR@tFvyF?xI
zvp3f}y!E>~THYO4)HHTz#T=JNy!AVv{SIz@0yT#C$v#RkqBE?TRUx)e>@$^k24s!~
zqJ8VWKQV3EiSNmGl&}={57Yxil$26nDy>0(AQ_M|HsgipKTUpUz>Nm(=t+2qSr$DB
zGTFm8Ob>yVaV(J=Hr!|xJ<f%Q9l8imj&#Pw(AaxxFlP0t71lQaKZ?|HM$zL^_!|7L
zukM<h+c;o^cJ830M?Ck9n7G)KYYbF+XG{|-R+NU8gJB&^`*&~>918d&pbCiUCL8X_
zyi+V$yA^&u^7?OnGh(Y5+#wTpu46?4E`yXHYuf>%v!f0yqS`68{F6_jn?Csjl%t7(
z0>|iOAPfF6dIvlo@7M8XwNxcFBKAB_Ft-ElfEzp7=FmzvfYp>^pdi==3$39Hb{|@G
zVvQYdz>$tQ>Ea*_d_+mlr?I1zTr3?f2eVCHo0dF#c5+&+e4@|hgZpgB;0Z_7fWnO%
zn(FjYMGa`(E8=JXPPx7ju`DA`p_lr3j)vcxhMDBbez^E-t9{tQ<kHgQg~RMkO-F6{
zhCr=Tx#;!*VKH2%lmotTq!Iv@m2zNxSR`WVQ&Li8k>8F)OCd%sqQ%pUydK`Al+coq
zLfxkl8ie<IhGH+HSkI7b$k<|=FfoXBr!ELg98oR7W5wrWSfbzn@a#h78Q@0?jP%&T
z6s;Ncg6Bb390pp?Q@x7h7vT<A4|iUad4r3Gjp+Rm$Xd)KDZv8mfSh1s<El~c>1L4o
zaoLDri`yR<wW_f(Sl-AW_Fih0WgR(kBui$M%49kBOlX{Nk8#zg#`0hz{dC#HWKYpS
zcy0fFAU>F%pFF9oVM)ckQd*)=GeezuD3?*efiP2YPx%t~4S7i;Y?4`JQfYQ(X0}u+
zO_SvmNhC$r@XJQ6B7M5=4O;XvYL@~meF!pm8wzVW*sToe)Ebc-v3?koD4+zq-S1)Z
z(F&?BP><O88UTB~0rTcJcN_#WANj){->w-4zlRTOfAwdY`SK41z18$eu`M{Hq1tHN
zeErP>^jE9Dd3W!~KfL+!jaTL$ZLpd9c;V*2K-ymentt~a7(Ti8`U!(p4=ORM0N{qK
zyC>dXiEh1sMxR1asHeqP3fv*F5lJVr<dskps;(gh2ODu<GZhiyQT~DAY;;o;tC)jy
zV#0#BptiQE37xu~FB7|!0zAJv$(9`M2!cP!0P!Xz2&@r#L@XX<PjEPDVjS2$rN|1D
zKveM2z@NA8zP4k;&bQ{RzgqXldGP*segi+cuzK|c;QGx)umFbWXBWd-_``E?3GZ`&
z1;=i`-`%vumM53y{W5>~ojb1Wn)lYu5x32`{n6Id7vM*TdY~*mr2D}mQTS08t%N^c
zg^P~>VorkE$%g9D7Q@qx;SmJvz^wskh|bY=!0nD67{`oifA$6Te*Ny~cVHZpM;--J
znO<PsJ&{irGh?F3O%o#zfg$vo$ftC#c-w@zAIX01?Wm&=kK~;$YdXUmwnQPCEa;4`
z5x*Kg`#R4-+UV7E`Xn|8a5?ChD(pTWVreMyTj_4kptC_EoawN-Nsaz!Dt?ZJTaL6u
zadhX8lk;j|v*+4vc`m~swWc?(?w6vi(Pb6^H81B9)6(iTb=O~14MJF94Ytxhs?{xY
z3p$XWh{p!Mn^g{z&1Q0_G*XpH{eeoMl5Yfn;YBU6gwY)>YQe`N>8rB@1T2BwDhGC>
z$;uJFJ`VCGtRzuC<FJ=5J5l%%ygXs4RUjzp1!BYp&%lm!C5zRevHM3cDj#eWizU1|
z@{rS`)})!zY?>y-sS}<bqNQY$tt{7LacgxZOKx5gyw`YVBUajJywlj6l$UEU>9lT(
zC%4Qt+b}tZD;=C{n60s)d^Bp0lO1DI(;tgn;#Q88YQtr-of$z}hPo-9xmMYvPw~6z
z+*!WTn)Kmw_FdRFXLx!|sV~c2=kllMOZ%g*(!W%lVGCwBXP1SwdRcef03MBEJK;%)
z@(ZQLHb7ny>Y>!KdPqq$S_0_j*TW&tMAy-qZ>6mgY#9s`@E?GEArb}(F!L6hCzys@
zM&HGaxZyHt5H*STAa;x5_)T~pOORC?O_<!fg)M%f0oUcdL+}x21t!4_Jbp~=b`cR(
zhPpEfi=7A;Aevk4<JEjtl3bo<k(yR~uyWHE{yFu=+>ohuCjK0(amf7rZ{OAN=SP1$
zvo{EWzx@jsYg)X&eUd3FNoSU8`}fz%iz~E~0JX`KWzv}y+BtKy3bQ$=1<&=GXvoV?
zvM|z8YySZ&-(RuoHp^gBDA!oK_rl)!gYP=?*GKn%X?)>J_}g!iU%u_h9d?DL!rTn#
zW^*t@VZN&xCcTxe&<4#9zW&<>%oQ4~JO%L-88;~I3fYIBhuBCm>*28~;4)$l2pl$l
z!Gbibo|^`UPg2&6x8Hqn5gWnya%2M!ODw*KS5qrvvWmGYtDjl3=9$%37ag?kx;poT
zm6QDrxx|t;Y*s^Vir8eC<IY^PPn+kTFuum3T71`xtgNw{-deHz%-S(7YmPrxLyL6g
z;tY>PuWEEUtEXg3UDc~c)!jb6rXXD>r4^&stQkFK&6-oHCzlQk4bJW}a(IJRsmrhQ
zW;pVDxs~bpDOMUxZ!qWOx{C7B6?|aK!aF7m-m!jCX>r4>nO;v#PO4O@b@@m6)j9xz
zgPln(e?hO*<Wheq(9d7vO|-)k?ALGFJ#hB8PISagw`!F)$l4R2Bj|n=?&)*8i6$et
zODGfzgBv|OYj^Q-g1$|FSkre}!&9~(P<zk<9;l7ZL|<u%vWD0-o!{N29UKOk?Ynlh
z!%OH0e!yjD?J5*Ga6Jp&@x-q7&Zh=<D|$k>8~=(u8s5~B-CUT55_15pzt&bawGY#y
zeg0|d1QKmE|5a<u>#EQHpb2{FM>(l-#B1n?K{J6@2Z(_uTHJyXeCN5yh=oIfCp^+d
zLfCIJiav2LI$i4ZaH>wnI7H(|ULQV^$w&qiSv27Tm7D?ByNX?iMx!H!;|jyKEJlOD
zXaS{6|HyTQPqHU^+_eAZ1||5Oz!WMTzW?*jV|I4<WFQDdy{H;&X9w^Ul>_2BzcCLO
zXzp?|9>ft5HEU<Q<VInXbcS_)tmDFn@TBJljDzTH#y$hlpT&ByIdPPKOrJ?9Rg1&}
zJROv0fOwG#UxR682W_LXit*8z431#O7sW0Rj-8uqw4*o+-E)|^WM{|f@f)V;wvBmM
z&{uzW%r@P$4dZ2f^B%^qUnnB4FN0e!I?L0$w};+`f{`{l%M6Z~9c-2vHYKNrP#D83
zG?C`%3L8*3i*?|OEIOV22u=krHqOVl=QqOs;J(}v94<lq-;Vm_XJidF1bfJGFnIIJ
z&e)4gMj~8dh&Cwd6^_mj?j=Nyln^3d+eV)8c7|{c%x57OVqgiM1YZn+fJ!Q5OE@!p
zaVVeErj|;W!4QQ$SCP=$_=Hk|{vjMDDMA0Cd~%yAmNFK?`AD!h>IMa_wI$u4<Vs~*
z5_|zoZ)#8yKchoi5)kfz0XPnxiJ#?iVf{H9%`<yr_L>@Eac|-^CZ3Tn8V2hM0yO@K
zwIv#)1Z9({*|T@=p7r27JO_$k!Hw}C1Y5^bH|XDo<{v-(%jx6uL-7Fk)1JM|w!M2I
zlfZdUg#Mq89-?lHho|5v^Z;l<WA&}KR}~hndK;9Y@meZ`g|V4=gJLdqmWy%*+?s$}
zhb0AAaT1;A;g6$#HZV2%75w8Iuo!Ne1G4Cp1t(5`c_&Up{~O*H{gQqQUYY}zfF*O_
zCHk%Cmx5hQOxFv`W3s41it3acbxM##1kF!}rC&sTh^1ecIJ2=k997p`SJxb^BPX`*
za{;Mut)in%XG1+u!P>|<+7!F<9!^)skmPkREe`D0s@JxoPHxs~IdpnC7ER<v%#Hq{
zDEA_flBiKhQ?Wl7?Dj>M1wbJtPyQl+-9AV_Ar70GnWV^lS|vXXoTK-^=b}Hp35(to
z7jXsCc%?RSACp8b#Y`|Fp_eLh44^n75si)BM^80HH^TP}Ig03=%s<eTDM8-WhQ0*e
zbt%MtQGE_TY{=ah@QNTza(cX67t|-y1?5S>?FXJL&|G@t2-CND>*niCpz+$CwJ?)l
z8-%BfhS3*RoGa7S>B`QncmYO7Px%oX0$+neKhmvj(F@};XfUz1seTdwx3{&vd~Euf
zL!ZuU1fX%|r-#-|Klbwb!ekJ~ZivfIgmspV%0&EtVDoKo_;kb*nZ4^rME$_c6XTQE
z6o*!39Qx~_w?{LPNQC(bJ_bf$wcKbE<CcqUaMK4Lz)d!>TrOrWiP4hnML3Jz`UyIG
zF*4YZ85}t>$X*JLq!)z4)QvT3AVxo+gmC0R{KO6FvB%Ju6nA8zJlF~Q_U+SmJvOqN
z&Pp1dl|XF6UX%u~wvNfl;(b#bLjw;-yKQn5kHOgtzyXxBhi1afC0oy@XN;D*-N9*%
zzFY~LTfcbG?%MqT6!|QJ-h&Nw3x@S7^VGW0Fggu<SMO}Fa!Q2)^l66Q7`HZ`*!vQF
z{&x-UEY@i<)z-9}X&WXC*NBJTd3@axTa}1O&oGpsk-xh4x<mI~c@q?E8PIa_k*|*b
zY1#1MCio&qrIVDjZ6uYT+m=suu!x6w$^&@T=5#5^Ub2!#^pz+eAPO4rVs&zFQ6Pw+
z?`b#Y@na*B?Xec=iBi;at-?)}=b2##{1$eY^W-V!*XPnHW{X5>OqM8f)ndOUTjLk2
zbCr^0qf}xsr_gg>H^b+NfRo-j|5fzl7qH{i`SV`|9IyiJRagtpz%S3OSaA+mKnbvr
z(3xAUe?}Cih=M^;N^zdZBR~A<=>CS}0x6rN-@1JHR(%#LEl4)>AN}cJxkq%Ah*KBz
zcoPoIS#b`2+2e(<;8tpAsMl8``u%dOjR&9@BQb{|s~;VKwRgufI8l3|ZZGlxqLYge
z8qwtDqy?pEJtzv0RRy*!#Cn28ZdEmx%a&(}nA}pvad%+P9b?b#+%)};<qrb!-e>KN
zWt{D==4vbWHbbt-ISUqL?P+e_Gc)qhtT9`6y}GAk*W#_c&(gp2%a2~pE&)uRT=2Mf
z!J13=-7#&`&U54LT$loKNBzdiRW+twH1S&al_9@R(YJc=Xfw{H{k8I~i+8o}d1cSm
z#<@GsQayeA4ko_fdieOoC;_~Z7B;&{bddRf)qM$k8^zi8&g`Z8T4`n7vQEo~WJ|K-
z+luWti5(}7bH|C}-1iANNr)lj;D!WJAmnO*aJD7Ta1|P$C6pFOxf@!V1m3ok5-60m
zkZAMG%*u}Kgwnq6_x^t0msmSHv$M0av(L;t&&=~Y|1|MyL12rBHcM1iGJ#$lG`OL+
z4kDJbKYvRv&p{OL$8LGtwM8MX%SvJvN5bPOFP@mJ2)hzWgIcjz#qjGtyz2ck(z#C`
znmhNQPXR+haO+^ExV^VT6F41juX0;VW~ZL)<2CuK1Ac?n7Vs2SJIwVOu7kI$jy?t&
zQE~l?m7W;HN~87&pQqW$L_VxTTuV2$k?md0K`ju%2w|vid4NC@T@4})JFs>S>2pX(
zqy^b0rw8!Z2criQ1SXHLAN%qlfO=S^1Bh5Ps2u#DXX@0RPH;m_qfWY&*D*A&UJnj5
z+Vt9Zxywew7uoTCMrAVdyx=jandqC=DXm^`KhGm(N?KCXnU@#f)G>cu0rs`Ff!^t%
zm1;A$Qu-yWplLPpi_RgL&d$t`tUvA-t>B1;hqOX_y|h<KA1$<VcAK`wVT6;x{(C;i
z3kX^OX^lBg4-r4Q(N~cD2dklh_P!M-E7H@v%??rH6%0x+U3#QU!9rFYQ9TSk1`LEs
z1@V1GQy(fR#)(E+HR7Jjs8(tYwF%E~G@H!X00E&7U4qC2AsKEBa{&G32t;!<@5k;l
zlTkXHaMPZDBgG2-`4FHd&FM}hI~QkP0D|s4ogn=#tujepSp+RCR+_*_otdsadrbO5
zXEy7A=4EgP&^v335}``F0RW)0SA>cpbuJ@(3Z>UwNVoN-AIasf7?=*A8z}FaxKP@#
z61<Yt;L_{H=mSRhmCpQ<bmebRANrflEX`I27R^{wRI+A4r^BIebxz$}9a}qZvfch4
zrpx=EY!CYd)j~~063W$RTEM{f*r`4NXAGk@2_@6mkq23UBxva{XWh;dXL(p8v|i9u
zs{;ZWv*e{6MDJD+5vu6Jh2RAsl49WH1SC?1a!F{G;Nb#0;w%(Or9NQo%JXSC6{`Tj
zAW*O>PV39-vIg`@r2@c!eWKTl<ciAC^)3%bmxV%Q6^{DLX*%PxnY|PD*+W7wh%x_K
zTP;tfOoFg{Igahxbr46U%$P9+N0(fF`I0-;U2Bz0i9?}Nt67WSVtS+=3<=4q)jEZv
zgi)^TQj4`3g~=EjpKjFfi%v*ioLICz+!+ACq|nsTheG8-5WOjeENp$NRroQ+nOg~J
zR^o(R(xhE4<AlyX1M1J6IB5x*@_r@#iTFu3<Ab87kJt4OY@;+)kLF^Gr!^hT$IGZS
zi1N2lH&frE_7OXKvZE5ng)kQmPXE??gLX8(E&g5Mx7`n*?78^+B#{5$_xq=1zkhL#
zuf4>}GF(mqY565$tQ=$q#4edL7X#g07oGs+K<c_UZ9wFlZohmt{sXsM962io^nlo<
zGRl8B-(}o6j_UIWKav_pEugNTZa}O+uGLb#NSS~Ky%tpRY)M=CjHOZpRt<MOV(mlL
z8;QKv+x9^@O;+lVmm|GmP{y6Z462O3CbD9$?q)7Qmizxej$;8e1xc)rkO=(Pnhf|o
zu8{uJJ}ikZ++|G!d<EfvjG2J)^kO$;Nq*3bg3Z&WUW0<yK;SiS9pUGMe7@;!i^5<`
zTAlzwrNyS!6dR_#D)I(H((=iDWYOU+dFi3#JT(PS+vEsUJ!?`d;t$m|ME0G+t1=5K
zXN)fmN0T$sGKvbWQw|v7eR2!Y_P{P4ak%5P*KWqFohTe$g&u?|aP1bt>Ydq*qUh;4
zJzV-crO4*=Eap)^BK&;L@||$IDeQqOMyzXc;EH(m(Gk;cJ}#@o;ueh)&3rW9g~CA@
z>JOu23Mo@M<;JE-d@6^Dht7z{{2+16M{}|^J6;7(_kJsKF7t?WM9m=W>${N1C09ey
z%HlzpQB>QEb;0u1fXY`ItTWo+WxZ$Bxhv8H<4Awq@I)!CrKj#GFggMzi^UXh7z_4H
z<qS^ggU@vO0^@$QPW<(4#@p9<M#p(ibL@&+3hEiQv|wCowEVJp0XzL@Uk<y!#ATE7
zFp5CBe=gI%cofh%fge8$W?;E5+*)3dukeI@<yYrINK%2xZ#R03VD{KRt5K;mwg$$|
zhS0H=_k)bJOuGiCcLU>W8(%ldUOjZ25j`8#Q&pmhn_4$WM{y46tKHIPvqis0&H+jT
zeK`W(QuY9wV}WWyJnU4w-%YfmLf$?-Da4!-Yzh)1JrRj^xqiwK^?$ja(s+*qaq+!&
zcNlMn4u!F*8{@?tMEdP(D7fayYv$uFgbAKNn*_oIzCgmdYayoLeW&yxm&YGST03`V
zUpSq8R^!v$uhDQBbokgltl_H8*R?))G)L|`a^w#_#Be+~BKMQ@jAS%iI(|mwLb9y6
zFVavK@<(EmW>ur!lf3~Ki%RurI1U}PAKQlAxuElPP5(7~Gc}2zE@21{+0S@xj|Xq@
z=U9O-X5}$U0Ez9stcC9P;k^ztKjI#hb9z!oe2M22#uFENN26zI5krW$LbJLm+1%u`
zI*s5DqqG)n=Qc=}eUVq(b$iQ!oi@OTy4I3Hi_0zYc|$$^O541N9XlplIDw_rtCy6H
z1~jXDa)5DO*3lS$Ij*JwoRyjMa7dRgRqC!_6>U&FJ>+A~c<WE5@7T*h-`M2LSYFI)
zL!FZsT}>UnNsAZmXcs4o8m`6!lu$p=Ob>CXLBvCyV9!%F#HUikUmcQYAO>bZ4TP<9
zOfvdvSiVA9k@oxgVA9Q)fN;~$X+&&=vPu_0(M))aX2{E~f!qN8iP5^O;qZdR#=y`R
z<J6c{(2y|*@C&_y6WcSMLr>~Cl}lmm+I+Zs+rIF`ROlX%AB}qRy(R7CMIy_qR4VY{
zH$$&@c4;yNR*z)qIR__*9$`K6dY;Rpw^m92xVCugs2BjOM%4z&+d8v{crBm}%4rHA
zaJ{GV(L1^hZ7=Ux(C7r#aC~?uzo35F>h3}%q`_CG7oUFNMnNgvF;n_}fUd05@;^m1
z1kn7qi9JizQXPnop)hJHUPi!DFe*7mNZ4l!_E1s+<gpE~L2`l}=UC&ifgBc)cxw#O
zy^8D}?5~a!fq)l*^#EJHlX04-<t;@ekV7FC7f=i0OsO;?vU;!MgW9qk1?u5k%$xnI
zv|kynOoad=Wg?Xj)`Y>+*?&ah99J1sfm70fP$|cy{G1LP{S9D%Rd0UUud_KUPoH1|
zX8;ZI)Lu`E<0i-fuZg}_&*)1v>4h+|qdfD0uP_n(#HRD*x8(tq^o_+5^tYP-x?OMa
z1xFd5pQCW+0S&B(ge&OjrrQcCAB@&Wv%E!2g}0(0m}0#(k#G`Z*i6J<Qq!fX4+ctL
zcMwFi8?9sVL$7QM!Vus93p}H2R<&~{U}4E(a7g<5h?e)OovFImgSCaXS%aV=e+=Tf
zz0!Vg%-=4U@_f=%FvdU1DA+^NjGyUQv*Bc<22{#ppqr=IndoaxL-GJ(VS+Mv0is6^
zO@(-^mDrl3ur`NCMg$^@BJmv(m;ZJkN5g2=!w_A5Y@JIJzyiS>v<3tiByJigOz~oF
zBt@Ss7`B4ZkeP6ArG;TsypA)$CxK?E@p6qxwPEUPpaQS&G@Come-9<81=WU()Wlas
z=zpG3YO5=0sUlpI2R5j6*D?!F7W<%={}G)m1I9-mmp*PB-X$${nkTGx7B~-IX$Boi
z{&86Oqp9w&(rhqmM1_?;yYeNipvoBjOOQVOlV_yorr&2?(wdbhVGW(+^Q^3tl7`br
z=H=-T&Vr(BBcm$jeh&7Om(#@>=_%FR&Sk&^EXy+wOkMaatS)e_pI~-6%~u{aGJLNd
z+4mTUU4Xd!7{SZMqp7T3N(KQd$LG{>y;yQerNyur>VYqeVV=Tb*b)l6kzj=v-LP7b
zJpAH;R0dXJ>^pD!!=HBS-2TPR?g?JLq3zIzr$EO^Z$o9|SNrzqT=`=+4KLBt>GX&#
zla^%1ww)L*z`_?7`F-~2vg$5JOP+TH_`$pT4jkC`?#_Sg@YH3Tf4~31Pd|Nda+@|V
zv-PO-+HAmjZ@mAFA9fD)?f*V}=XCXX>8aMWn}R~ut+rHkaGbr^Z5Us*;I<{TZHs#S
zW0ASTPDQ9Fnoq|O4<1B)jLW$Tz&IHMCE1&z3E&kkR)drg&lX{kO%ja*0&<AoILC?&
znk*Q*Gg2(x^{3r;UshhiSZjvd_4?}|`TAj~^28@rS}dyfLri<sRB%-yGInTtUdt92
zb7NDoDly7p1S9%S4&bv<Lv6}<X4S!it1f#$C@Qx6MtbF~w?Q^9R=@Vv%Vvo5^}ulX
zlJ+OUcSq(9pI{Y+4k-v4XAeoP2_;*~3qQYTPUwCA(L`@9+1rPp%%NlZ#oV-rZGEk>
zN)IPvdExaS?3oG@g&!Oc-6}G54&3fNFE-9~@!?oFXx0>{83k($Y#o1Wq>*J*ngW%@
zkFM~Ut>U#%p*Ls}I)A2kSfprpQO2)JXbn0AycU4Lt6|rOtbS5P;Pj%#B?>kJoGy&^
zkD7R|f3z?i>hsJNmqyfc!gVfIjEZcbpmh7)=ucrTU`23t@H!Zv^r#(HpmxBmkdkr0
zWJM-|J4hUGS#$7UP}Xb8*)z$_BsZH(>R5vU%8n)y@f>(L-M;nhN{3RXGc}l8sruG>
zO>pyQXVUpTuP|H9<HVrNTaBG#aArZ&=aY#hww;M>+qP}nwkDp~wrx8T+sP9@v8|nV
zYv1>++O68%`{DGdb8mm?TXpa0?th<OT4h$Ew0y1Hve(5xcY}DA)<9o;W6TE1+){kC
zLgxd#d6N9;c=y;-;CWrSHfC3t2YB|5G4aI`4^Qif%~Ez1mw_JgQe(A%GQbf{^n<nv
zQN7|mOD|jdpvNBWFBUtd7oHGLfXeAxrOhg0VbJNfhLvGG6j*BFDNz(qP%od@wccz{
z#*SP*40ClV@|MWe@gF7#ZX<L>K(sW3*xydMYL%wnEf8l88wnXm4nLs1$VF1F5C=m<
z^0OsOTsTCI{6`A{st_D%kTm&^5=GJIW^Y9UkVbiu{i@sYG83~Ws2;<>qZe*P#G8E-
znL~<9SX5X;dKeQTtz6N(b<u)Vi<(nzNTy|JYv5hDvr@4dbXBjHWETm$fw$z_=MslW
z5!{=RLfkg<oz<`l%`)C|@Xn@-cZ8_j_1cDhIp~%fAt8i}{{T$N(KNc$wl0=5T-G1k
zwffSaqC%A{3A9np#WE!gzw-3^?rNX*59yGs6a1Q;{1wzfE+smA=UcBNVn=a5aS)I+
zNEsn`#WO#$Uxo3^cH0_T%*7^hGX4Srn$wXMSB2)N+w3fa;s-u`c?{XdBA)@CYJ{<u
zpZ=Dfhl~4x1}KmpqA&f2NQ}^;44afy7D-?_<6lR`Nd71D`)_>r))Mh6VdCMgMcO#W
zmlgCpAM%=<uT+z{TwyGtHqSFQctMcQj*>GCZR~HrO(EF7dpp1UIy|O*d`jiF?{_kL
z1iLIm-L>4YyV1XBb&_g~0#eCdAnMD8i*VTrp|`PkKI|1gfG%-7F4~ly&yMp6J@*j^
zgf%n|udr@K609@35ia==-(d&*d}L_dE}ZIJ4*uIfC2j>*fw}99)|254Hj4T&b3Rv#
z0$21kaI*T-bA#ZnQ`R-QX|8A3&U@YXWKfAy0>@^B*~B#zv2wIgjsurBM#+4jTPdC_
z2>zH!lg84RpfJejhbqpwUihLt$mrnM#k!Zwb9I)v9bL!X8q?eJcfyu>K&S8F+K3wz
z&9wRHP<(CyMfQ7L{*N7ws%>_QU${8E9;Y1_51SC~FOwW|5AY0mFUQdvx0B*=RFe@5
z8`tuwWr;T)>lFQ%7KD;nSlchSy0N`u<@yHKTzdR0DGDiyDVD6d(lsUa1z(;68z8@>
z3bLPtSQquUnQ!nMxj5FXSXI-#d;V&v^wf&W8PO&<Y5tU%Bv_uC6GD?7-{vCg-JvlR
z761G*^7I(fi}@I}))4VqR9L*)l~PvRfH`sA6lDwrKe@w=WN9xbr@i=4j4O!Xr0V9C
zx;AbJO;q=4d<cT=Pvj>0s}Oh?TMy`5Ow!K#9=gNsf>B1mqqc`#*k+b^Ux~g)Sd(nm
z$5~c5?)IWe*|rJdwI;g^4V#6z`I*J)kXp@d*1Ee)XS0j_>tP_1(oAz4)XHck^{Fg{
zie54eQLKMM6jii_f()4k++#RJ8v)%kOA4IUmLeUDx@D=_6YtP)UE4eUGU}LmBMu!&
zT7r>6(6m8f?%+oSHAYpGAB%lSSNV9)f}ZZhSDM95%IDZIpR4m_F|>g1^ZSC13-!Ta
z-q;F6=$JOw-XwGt$9C(v$8^b!qwfRI)A+&i)b!aeI;-lLE~8HoK%MCBvKUR1CY8r(
z`m{Fiw=l*xz{E<02Z?w4-{XIyUQ<?g{Epg-C&jb4{8&x(-QkleOubghF+tMGgzoQ8
zt{R`dn7d<PQ0Rh8Id>C*D)}wPoQ$Go1EL*$TMoB6D5=ANd~KUtR;v!IxSJN+jziV|
zmS!+_d%q7SKA*o(Wc3?OsotPuLo|Q3lkd7rk56#)xw<@NuWR=0$Fj*tjV_0DfbnvG
zyBwIM=Pwyqi-q7hJm3~_Q3PQPi0d=`%7TrQ<*K}ZdX7op#|xOXc|VtU!aK#*`rgWE
zGC$RqZIx3tuxO3II@?ky=`?k#cmQ)xwDVH2P*AW~bk<R6AP|>DdjC6o@PHM(I8eC5
z8I&o#Ev{7R3FC&q{x{q#q1_uPteoE)z%kk|3)1)+%QR81$CeQ#vJyHUzr9c(yH*S;
zXHLZdSwyZ2FY-5u!p3V)G=fi)m>%RoZb#D%+YQ&%(PgdS4gXT#p({<LlKRpqKy{1r
z$<~Lg+*`F8CQensZmlcp(Hf6C`iCgJ4nMVe$JCm#{gbeozfw{}U#ZVVZn#$jxyIMV
zDdmRtM>qULZMb`r%^z-PN@ZHb(2E7iv4!K0)6>CNc(zsDhH6!AvTZT6rmJPP_DWbA
z<{-5uZf<k@JBz={U!h<PJ53kFb4e4XoOaO+D(THTb0e;Zd|MBh+VF-$I~P)c#XK#-
zZ<mef9fgU}SqtiFM&_;r#RP=wFJ@ouAK)>0^$XDPj8qJcJ-r1G=wU7Mmj%QoY9+Cm
zchaL}2pl7Ue5Miam&AHWELLunG}Nr4fjwI+!$>&!F36<1!w`^^vBS#M7O*wtpkhb~
zEvWUsQ{$fY?5Z6jlTxrWIZ*40yeg~qvSdZlw3RHZ?DYe#mEFCqeAIk=soNfQ9;c^M
zxx={MY5G0Nt;8gaG`^j<Hr2vw)7%;qu9Y^GaB8kVx-0qkD{D&ZWUZij?sSs{8@mfM
z?yOAIUYp%6r*1wB=T@g$>$24K&1CQYUVIAFsI4tYsRF@FEPdGmIC~zQRn?X4RF=L}
zl@4f-N7CE;^LI?Jm*dDB6YfEailXZa(=H}RB7Oo(tBBQu5Q|j`4MiDnWA=4TtMFR}
zMt*{0eRU)3hU&l-s(TSv=c|cD)S3>473l<nfa{2(N369(43;+vg^6rGVr;7OvLXg{
z7mV1^23oazmQacClz0H22F<g#bl2qj-lHp>@#AB`e`g_X_5Y#im(eBKSc#gnwTp&~
zlF!RU3z|d$#`<YY=lATiFXPNUGcMLTC$$<S|3YAPBgmUo8S7T9&Tk_2{$7hp73ha-
z+r73Ae7>ZKws~>EdQ0&?#A_%mdDaM355}(EG)PU;IQD=d;9m%u2vb%`y+?bO5_m`8
zIV$y4{W($SWX(qM%LY!3X6gqGKBN#%7!zxm^O`try(?0&7mbvBgjZq2pOqoTcsVT-
z&7z#6kAgeLNQ7mu3sVjL(hw&a8f|c6pk0G8A+D9}WR#wrp%BJ4oVNaL50q?waq3Ru
zjIZV!x-p53+rR10fh#AXu=$cFzYbzK`KgI{?H3}W4@@;m@x+7P@!|~z!W~E_Aq(sf
z+EkvGKl!ZWHH+dca#Faj9VQk6x}J_9hib5d7S58hx&31bZCBjU==_BZ-a9(jqxo?e
zp63aJgUoMKgC5w{Uik1&YM(d!xravA`p>3$!Mft4X}qm>=9kA`7KHEje0f9Y41r|`
zxjx4SSs1bwYiue4z*ovXTXY$Lp+*zL`iDGXa0ABvah3sSy!4qSvL<u@JbDlO)<nHB
zw!&&$#1=XooJvD-QC;z=9bB6;?(`tf`WJ6DZ0yIuL?zYbDwF2T{X|tkr0pr}R210>
zi4oE93d9LC*i5>_a_+(tc$zzf@x10>&N0em3BhB#c6tT=^LWnn*6%L>WKwNc)t+rQ
zkvX0nkc1p}+fPDKlgnqO9))~2p-lM*`z|BV$i-YEE}aSNO5b-3KN@q}DT4K_e8v@J
zcLrrGHc51`i^5~-k|M!FRatDw)EcxQZ_+9#A36He4}Vxf4U7Y~&V>G!-fxDO-rHqT
z49hO&!@6W1nW-*_a65r-gHijG7F%WJ&PnDs4N6qIG_BK1dj2Ij$ls2GK=nD86DlE}
z)ch#Ma*jpZxhi_$I$FNdDtsm{(_*Kc?$L#rFgvNyqE_m8fvOEKtffn6<|f~ZUFvqm
z)b^(V^&w#d3JKzS(pSqET;bRPbt9iW%8Mcp$(^51!Dc4_W$#ZX+`eD*3W!IIiy+2l
zD?Td@N0H288#Eot5>7@&Mh!*DRkrcz+R6#ivD<e^bUOZnFK<-~IuGk<j~LMe>OeX$
z)r)yslFRGsKoOETT0CzL#$Jp0YU$Am4w@A6o}`NGmU0W;>aj3~KVNevfj`oz9VcEu
zmN1ni_8b=S$d9fU$xOiXxBPV?NrQfa>+JujpvU(BTkFc>9Ve7{^%xEVZFYmkgiY&j
zF)B|@7A?`Hw_iK|4j~sqdvFsUeY?8O0~PTv$~ZcgHMsBHX89__fSgS@o_2p`JIv@^
z`K)BP)XgRa|6S1?fC@WRh3PH4+TVd?V~LjU6~amUI6>4ADv_EatsJgD8`DD_XAqUO
z%F6$^p%QDu9t|r5+m6z#o3+RuUS|I$>;3Wj7Z@63K<~Sn$mCiBUATtF_1hleo)I?u
z2b!c*o0P!UInl@<>?5-xXl44EbtHN8Yj7r+J6whffhCiU9Q1rvT!eE<Slu|;b|gBf
zhh%&}_+Qi1Eq|e!+o$kZj*yWofdC>6qqxD&WC{NmYTtXg0En8yr=}tO&trS7RpmF}
zm4iOSkheF&p*0^;{Kzkz%|K8Q{Z5Ub0pn818f8dO2Z(;g6L=R>%s*bN?Ecy!x04*X
zJ~yLj(YU3t@v#Ih+f8G6|K>o6oThpgg;KcB7u{-|Z!0-I?DD~R=h7DTUM}}~*L?x2
z#~f`_w99r|T!csB9MikdVOx{FE@#Ibd7vzPR;Uc0M@=0Z&#zhLW&yD5f8!s$-yg}D
z`15IuLN;VTcpeL^5P&cy)Em1tby%qDy_X$!o4H_6GX?W0sU5{Gp(~6Tgd-2JlHS6z
zq0oHM78<Rs>NAiE$jba(d6!?1zqlIe{F6@c)m?u52=}_ihpo4lLROP&QO;Sy<IPR<
zlO*k(++1$&+-1*3h=Y0`m3fV&$I*XRJh+Ft-hKl5$u&$RWoRZT7#P42(AHiPS29jH
zFO5ijhXD0Ta`g`+1+!}pWs6OdDtdLXWEYFyaYkN)@cXFP?2LJnek)|BO1HHHg@~?-
zb9)(GT-={5T+cBe(~@1T_EmjXxnKNR$0P1{z*Pwe*}ouyUyB}FlR-tXAA2*l5_a<I
zTlu(dGnrkDJZvutiI^o{azE`&1;0*EpVD`Xc^DzXxfR~%7?OR~l1&ARkd^dJ&Jq6{
zm!HFipSunb4}s?4GL1}R(aQJ%jqDKkODH_4XWjTDu2G6qpG%rZ|2W<u`#%uIh}zU*
z29>^|q?rb-fC3u?Hum6}s)Tmt{n3h{6<NFSyavy-hrR1oyLXUwdxPhR1|AB$c6#=j
z%2rVSsNo{%Q?gUBQ;P+L7%{eKG5VpHnGqNJv{ufIG<O8(7T03@wC^9H1fED}J<hK;
zxVfKi8z;qi4Aunm8$1M4O3D}Zf1^pmc`EWya1{#K!}KMHCXqVCyus#Q5udbr6R$0L
z^U3GW)ezl;8;ipmA2cHC6Q%>Sd{7)xQHHS!S%gy8ZU&)D*t)a|wNOZ$`f=!i|Ni>o
z!3?37a%L9klEJSXt3OyDo8)`&^$AeAA6X_>bdmEw?6{i}Yo5Di2$~{3=t~y}yxZp4
zxoj2h!xhm=u&n(4v;?VJRf(n+^c1LimCvDbfEe!M*<4ZLuIQS(aD_^ClPjaT<DlWy
zC|bo(S2YP9Sz_tK?sm(U<FL)xIBLYI^CL^C(*+i4E7Eie->0y2u{p+(<*hh?%h%(_
zK#dOnhyax5Z8}}xp2j=G<cV&=vpa>*;58Nz;x)LbTgGUW>?McY-p>E25LQQBjC%U>
zM%^=QTm=pXCbK=zY1vHA*;G3|)tJCu9-V8Dr{89Jn`!D*yp+F`t|$BthDSB>Rs2s+
zZPgOX!V$mKC-+a(zw>0(LJ;D=ruj%HIB|Rsy+T_+hf_6Qjdn-4M(g+BX!QLU&dYob
zTY(fG%8A@n(HO;B4(^NR6WB5S^L;1hZ~gO@f7(dGGtW<2Ykj(DLA1sfQ%L&WP`<%{
z0Yc0O)&&#mvRFbG95)zsGQIadoZmYjTYgj_KWb;&l2R{7DSjeQr!0QTl*B?8;c7BP
z720x2N={`-XZ_B*VPy(!#u6j8@Cpe)il?1c<5QdFlVbxmm!4whdzVV6-<=bm@JUPv
z*na4<Yzi9$*r%Ae%WbZpWDZJcRhrstrds5#-z7h=0rI#Tu?dD6Y>&(xb8K}*;B3G0
z%6Yo^-@om)2Obx`rMD+hQ@<ZO4FWy`%8ozJYf0}Lb>DkCi#iSk>NwusJ*@e>N22Dx
zonqnruw*?;pna+wO2w5>%jvD@TavZq^rY-c><itMe9Yo8^H((t(TdG%JA6%M{zywV
z8(+w#yGTtRUIZ%l-0m<^m4QQ+A<lf$JwNY^!NaWcs8wFbQFm2}lu#4Ut2R&RwV(5b
zVV{Q0!k>HB6k+N8O+$ApOAu5)oZd-O*-2pwt^oc0$s$ehCgF^23VTTP8AltR8*&y@
zX{3Sf@nyAAuLnCzB98C!h)-v<nqZtF%`JMB<vh<M6$N}vt)ifphSp0Crqg-%eT1k$
z2~Ouuwk~2P@p>0ObGJrxV|e`eXmX}?F@SmP`Pkq)tk}a4{#7otu~VQ+i4YY*KcJ@`
zf=7@mnTkFSK1|$ss=)5_=PlK_x8`Huw8yDd!aYt?fK&#)0<(F|iDfE1n>?v01h44d
z2Wq#&*Oc4T9$$*Q3xl2jJBJW?`AoP)+xs`TvEV5j`ClET-h+<Z=qvvNgVJ#YFo}5n
z`ZI`+(B;DRCCe6^JpIRhr5iBcX|ziZR=woJOH@R|*+IP`@Ei}rqr$YYPb`-S@Hl-}
zhp|4{Ki@xRBi-<+)P)ah!*S$m65P5yNoP>hXJDtW*g>m$_rKTtyg+W9LQRHvN%fB<
zwg}ZR<scTQNN1lj)Y8oiyw-FG`lCidyGWl5J!Pn*pA1y&1@qXw??g|t(@&U!i{|J)
zFZm$E^$dv=FMPftAMWBgviTYD1M@Bqh~>Z_z`aN8%2ugfmIWXlrk?}X-m{v@I0SmU
z?iT@oLMxczO-(N~wV}#1bz81VH8upLTQ6Ex%2I~l2R1@ozexcHh$M1aACKc?DwbV6
z?puFBKYF`#L7U_f@;ZH~c+gu4LMXE5s+W=Y52u5qh4Uh-5;6tsMM^f=<!hn!f-KPY
z5APD|5vS8nBLCy#`=z(G2qze|M!^#4OQ7b{16=Hvg-+>?L6NdpqBO*+v+=?4;;Qq<
zO5d?>(xm&yk4(g$neRl&W~{Q=V!I+cu?a`!Z~|M~2Ku1RTp*it${|M_{{1}^6aP|l
zqsXiKYe5wp))f_G!x%wU?|-rYF0@+M<<lxuIWyz}LrPE5>qQ{w`ezR;XuXcRGlEj-
zJrJhYv9mija`6^MNF&d{{o`tFl^$KT>>nNyfjEyKRK%14g@<aYAYb#(uz+XDl@E_<
zWxRlTg?qjcdYJoiK4*9JcU9lJ-MX`rIB>VrweM}>od3JkU`wdw154l}2<q@8Uy+T{
zU*6}I0uoV|+rdEBJEfo#>Th+A32y-zT&N$i4k5(th4d*~>pKcBZ#rz!x<SxE+WxAS
zGCOG};Ton*vURb)cu!c3tShkP9At8$)M-tAW@A;<c_`GU?)Nd#=`nZ<)T1Y{SS!dY
zHvqJPapz{(nP}%!6my<4_;G5Xpg!JG!$=ENC(jZ1qc_fpe%>)e$@xayog3zro17Sh
z4_m2sCTc}db1WZ}+>C^~bgj^j@#$yP3Z~^!XR%ObVf`HpgoE0R&nHeFd-44E0C)B<
zjVM_AP8$n)6f>P&1`?WA(BeGpbf2V74}Y!Uf?|PUQ4lD?oU0N<nKoywdBfr~6iRL)
zG`B^p5H2FDQjK~QHPxc<cu4*x`P<3MT^Sw|NQ%A#6?F_8X8wXrv-+VIt#(c@gXZ{;
zGWE%JvH1K5X#q65uwZ$b<nD)1i$QA%+xd^To89>cUpT*pv2jcr5rgVW7ji>ZjPw{=
z09}|c@xBHM&xf|1<oV(oTW0-eA5Iw!8l;nSDdnMU7T3T9f*`DglGZ~ZmjZK!9(R+q
z=0?66n4+?AT)C<j{;iXas&64JQx{o@1v7fIhW3(hE`DG;>h__r<;lbOq+6kp6z!Rh
zak@|q(|V<7k>YuHHcGvBDwHp&CV!jj&QYy!+`+-0x3f`5kH5Jm@?lXu)|*E87xMO%
z>FoZr@B^JP8~Gu<ZkjPjmT15Iy!a&Ng7Yj%k1-0)u#!iGVpI=iEhcY0FlCJ{(kip3
z<I9+g03V*)h|c!}@Q_*3F|YToAG~S3<ZMcBW5ZO2aedY77!0g(SyN<d_<6}_77hum
z4%W0_Fxv1Ya#{V_FI$g!j*#Iw$B(j>GhZte780f!AgQHB6E|7KC&ecmY$HJ=?<?i%
z;&!mB=)IW9+}2tMmd6{-C06a&7cY(MmD5>OPON5Sa@+OxDNJpI!mhe8s!VE8o>vVW
zDLkZzK&(EdtJ0jn5oAfUS{utL<D}uxdBnMR#IR4vP*jv3(Vej8_wP}GOu0xZdq_I;
zn=Z*kaHldGRa+1srs&)yC{ou*OCbH_=+dbL*l|Z_wD2?j_5OUE-Hv&S)$3j5rl!cA
zfhF+db!5iPl<D#=fFKy0KyC4B7csu7)VnLqt#{9FI<A*JWN}q2PYC$G1;Om~`_*p!
zm2)oA%l75_%XpAjfTijyI8Oy?kn7K@R%FWZ1bxWIPVuS%^SOFfX~~P)&9;%F$8$dq
zDTpgUIy;=^)dA&_lY+vOPm0WW+GPBe{b@=jG;;k(Q5ZxTrs_ooz&to$8ltdrVs(D)
z9)fUC+5joms$O551Tg;|(GbK&z&j_mwh((Vn7u1A-<yy(#0Xx<COsyIb`-LLXA&CG
z2olmxVh%rMU8F&;eZ+KS2ZF!Q{BEb8iH&KxiuoF~eenhFAWe9&N%d)0pkv^&``ju9
za|fFY=Xb<_SnFW^fZj{f>;JK0sQ9pnt@r9g)paR(*m;RNw3oHo>scyh;qdi&Ueddl
z6GS9FX$2Zt9Q#Ft!&^9nF`~z6N&}1Y7ll7eF@O<l+2q$|_K|m<2g6OsU%fuQPZvR&
zt)?_y);~`@bUk2IIluBGQ#`g<!Bfpg#l)<xL6JOd4uY>LJAM;m#1#b5V5wHn!P~I~
zp&O_>{Rt=6$rYknGe4aEnVE3~wisT{wlYUs4@%kAf}h6UL2F>AF>eSn7yL2`k>lP~
z%H?`FodpY9Am%XZ!pTal5IgAe9$SakZJWAS=1>70+bL@;zRTdLKh!h!728;-pHM)K
z60cIB$O#o2j?VvrHYY?L*fGV;J-r?TNu-{{A;NM?EXr;Qf(tPM`~g)%tT~3{>%}b=
z)?h%!QB*V!WnrT?M6PO=WwHSLR98s(rD%XQ#bUEeT~G4*VNlFa?7$!3O91;&iIkN7
z4S@yKIgtF1iZ#i!8Q}au@sDx<s>y#CzfiWoQ1VQ6D%sT)gYUK2RL1}Qe!8lCUuDg@
z(Dkh<Xu10``eYyN_Eb~W%HV(8FZ<$kE0SWAwr-@>z*?kX6*3Sk=%0&W8qjfiitY7#
zS|aE%cYJtU`_jp(igde#%Q0SLQgHV6<c56C#kv2ImtThIc)m~O8IK1<`s-=*`B=32
z;JSm>Kgo4@x4)PiBZc>|)gs{YO~G9@{A!&?KkZR!982U0^cF{&Z~jzY+)mifl<-j`
z3We66@JaEvr^H1E^Q}NE;&IrVrn;#A(Hev$iT;;B456MqC0l;q(JnHxKqV!o2im)A
z2@3>zB-7iKj^xjBf{+1#SYN=i?KcPZ2Ns6FMfH!ee44xf3CeS%(YX(HNWUx{#yYCa
zz0rDBbeKh<B6OSGP~*V0oTYu6;gP66C2pFbS89*HUZ~Vt!Rv?5@;OFAVy8u``f<zx
zQ}A3HV0Fqm8rCzA-}x~f1zWF{!R|O&r@>o@BIyFSo(sxqv}@??{kUsl5f^7tzPz_U
z?(cqu9~GEdb`U4#LBWre^vx_IMB6MX=p1m@ti1h`5b0?Fe^C8^dxa@-eZlGi!!%Wh
z>TnMHLOBBY%y-6fA3afIUZ4SAWIm!+-54175ZeevSF_&xQWQo9AMubGn@NY^3m#m$
zM_7UIEgLIF;teZh$-lEdt;wfG-snS0F_*K%JaU=W<kx7kP{99*hS}I&TrN+6N!sJa
zQQqw;w9wEcblV@iHn<Pc58?FMU|BaEGZm3lFABk!6itDSFiQ=Zgc3>48o|g5E37Fl
zexM%cm+P?W<hy)yz1tNiVbQ1Gf}2hVIaC~Cvs$qvQQQ`n-4rD6j36C{7wj=`S{2}8
zh%g)9`TD4KDBF?4J-a0RT%D-jaSeTXWYTIQcydJKx0{r|pDve8S|@OP^X*!$Pg1EB
z^^&gw)`ujo<2Br!3_?SQP)K;M=jaztDEo0!&^RWp#os0=B6PaE;N-Y}@0AxMCvfSB
zu(A&==PmRGn1;vQ0p}OB>*e@%rt&(-egFq1_9CjEq)o>TL6j#~txmn$UL`Zl#-5UR
z*Z~btbX}lpktV87Kn2416yyrcm7^=zmeiI+mQerEZL5}imL!(2AL7;^%Me1%B#m%%
z_Vc}PqOqDUu3@tHTtq{Ol!MihHOQ1rnFetv?)h@vlw&9v43<EN&Oo@3E4DfzR@zXd
z(uQGTNIJ=4nhsZZ3K>&Ix8ndQrASFZYsLvQa=k&x5{9vkjk<6^pWHP87tNU<<#jYv
znbf(9aSU~ix?wq%gfg$xG5)z_n3hZzD7^msX3Hfi57UBWBt(qgCYjsFr~$B(UaklT
zGvK;~>r*jyCsP=hU>vuZo*4}lZ2tB?E#}T`S?wGLf8*?6&X>;<+dwZBNo|=5OQa&R
zqKgRQM7WHziA-WDXc_lfJJdi<y>HfY^0~_ymDBepGuYnQZ$AU;_cmAMqMRnoqn|IN
za~5cmttM`bMh{(>n++McGkmb4wQi_r&0YN68-%W1mvG?TRPjH;nShV&IOWU&^E6^i
zN9yQlA(pw=hwCN^d^ovaLCC^_V3`F4scH>)@R}j$Krd1guI5t9g8NbUw!nfWY|Giz
zU^SSQxYY<*gGv!08%d{c{u0<wxP{f3yLB&Vy33ATI)SMfDT<gsykW?MKvn5q>CEmC
zqok%mO-#iVmW;4C=~~2oe2uyG*T##|jMb)Jk@DM7S%|93wgz14Twi~sZ8ioGGkWbp
z3yORQbnWRE3);vfRE5%n84Fj<LtU2535PUcd}&QeFuBj>ZFsWX_(j~acSh&Lb9Um+
zT(o7eA1e2gH68;%RAKj8K|nw}vrP<54Gj&Ac=`5x#Y}norZph#-64_MjeS>sihqB9
z=LIGGfge6HG&BY|0|7Dp1-ts6eN0|v`}_MRZU}#JVq*uAj0alLfcU^b%>26_t1e@M
zCWKV$^}rjGMH`OJ2Cgn8n@k&34ir1CC+LYJfQuyA7b6L#aIyZt{z4om>XYuSQDaf#
z+igy&mf^4L>g?QEPMTV@*f)4fq<j@qT?p878)&}aQ&{;y;UmCn;_H^npCN1HfmM5;
zN8>u{ah)-Rb*R5{YA;H^=x4L}?7bWTJM#gafp<|CtL8URQHJHfb(q8bfIkzRjPi8E
zbMR8VCO%i53l-dWqL7W)!85X@iGZepxh#AXr{ft}G->vWSuNRN5^Sw(N`&AoGqn9r
zW?ij-z<zc&G*_dhw-1U(6n`GH0!!?sSW6!D=irB^*<E`YmJV1S-(_;Dhgc1_OO4rC
zg%q2^=uocmcEp-QcHQt@7@vyphhi6`3(AbI24O7C%XlY74D>1>BhXKWad5}>P%oBA
zee$ustjIrTy}3#J#9{C~Y)5W=Y{|Lsq2}=SZQL~v=p;qh+u$8)mV&;8?DObZjaP?d
zlSB6~;@#)mi!BFgbrwVU_U8reVvKW{6N?`>pSwu^2S(U{NFC~>B%(N9H}Y74d)g)3
zZJyx0)xE9r9{sy>F>AL-$z3zT{X(7kOKIbUt*QE8b(Ac`mrjq_)4BW?`0gpA#!?^R
zkwYi?Y|@*RgA1-ktcN#ujrZ5qnNnSaRw&rL)@L3|>%ge;r`OcE3{eEXz}`L0uWR9$
zs+ecrFX_+T8gJ`TsFpW^kRx`87d^oqHBq`g#R&IletSSyj9WiXNXv@G^Ckpvi9n&I
z4$vcKCa%>x*Oa_^sk>$?m=jV<eMfxt`wX$C+)W^r;@mE#EAT#X<{EyA;<)jHi4*p7
z{E5HWBjD*x<YOpP*Stfnw9CY=;QGa%Z6<)=^%>1}dKxp*&ViPG*)QjrQ0uzjuF1Jv
zXGJC_;B;)tT=x;mtF7=;xK9G%(raUopur&}_j*-Cr>VT}>l7Yvy|L{Je$yw0GAkws
z({puNd#LNzjcUrfjpn^`&F~20d+V89lIo*6Yk@bmJ9{8c-w}?4V>K=O$21DbnD_uG
zx`U<3DoZZ>w^<D7Y6ojtjodijApr%eGh#<Xf>kZ?h1vH@z<Kub>sRmWeMk51_3XW$
z{6b#<!8a&VV#QAkN%kM6l3~F@xvHG1)MqfYk|Pq*WTQWxWE%DV!e=Mq6&5dml`umq
zYwb+lUP)?=jVOCLQ_mF%m#R9EP$p2%*EOc8mSi7_=Bjk6x;3lP{T!BBK0TT8hQG7M
zfO4!9V@SgWk#9LD;m%do!<<OL(r90XO+K@bv45}y;qbWIQb~|NjF(vOd2j$CdiD|`
ztlf(?ok&;wlQIugK=btgjz+pTT6*@*b7<L)JQf)R<ykn{MatsA^5bU7E4cL8PEL8y
z4*%86l=KH$LG#~$-B^$4(|ErpT`S~(yg(^-xiKU#v=n&YwnHh?B)qg<v>f#CIbAjt
z6P>vW21pQAs1%~f%33&g=J&z!b^+caq?CVV3j<cs@%3&iaCy6!Lav70EP4wrp7YHW
zd@sbdcV3pD4BixZ;A)K=Pi1rkKCUF<<13Kk;y@1(`^SR9Ky@L*KxPI2s#ZVQBIaDM
zwjv7rIGeD9c99)%pxYEG1fo7>*9fQAU+`x8@}IG0l)>+R6Fti~k1A0lx}g3RIM5<g
z*z%ZP06%8>(;_7glACnP7_}~@6adqq0^mZA6_}&IxmpA;=6qmVEhr4nnmS-`F-<Xr
z_pE2fYrc#$V!-BUt{8Krxc~(svN>5tm1q#+j|T$?PMrAf4f?AwxMiXNosq8}vUMXb
zO`+a0>pD>$lj&N#?|pz-XI2J@AsF-4AGtIctJG(tjw|X1J|rzDx6bg_HqON@584r<
zZc|Lq_EOpBkDkrB*Ct?F95?v3fxF_~cBU9v>67Lk8?xJUOB=z2I$RMtdpWW@?E7s4
zRz7b!7l9HmnI44>nA{#J4u~vU5rpqI)&d{OrzugpP&YRq+=%-DI2Ppa{1HI6NbZOV
z7w~^1K$(ciykWeO6D3!?kO0V*xT0^)d!C>bR9=OJ1JZMfd0!X>`KADzz8Szf_T3C~
znXIct;U1pN3BZlOVRmTmN3U+a1V(og!1vEuG_X4~b@D>*III1~NmaGMP};d=`%K4p
z_yPRB1M`8-@OGgG!g<>(#&uv95$5idQ|kA=?2g4XXfLnm;xA{ydwjlu2#OnDX@CBm
z6P0spi+!#h{kf(<hZ2xDhWTfd9frMcnCUuAA3a@hbh9YiM5;H*Qq5l3Teu7qFf-{?
zFj!M*t_e;wNE$O~pYh~9YI<C{gK>v3&y2fMW^`Xc_EpyySuzem+avva!P373*kzO%
zl_qADVt-W;Q=It8RE7v|s-@)V&Q^_Q!@4(ySBYEcx6a~{oy=xa2p%K;wjYhRLrr=r
z77@>iBZKV3){V2?f=e;$Lo@GGbC8v0RKa-^SP_sOL=)`tW?($rhr}C{%F=MY@l1lx
zHMwQV;v%(cmeSo`3ck-X3-R*wmleSZnow{;6?L)nx(bQ>1kkf=1LpV?$&=d&9N#JN
zkT#PDdb&ZFdgd2!uipR;g!@BtTbKl&Yq0T2rwVmnRLo$2S7<LVR5Qo|GscYw(+M~;
z`JqA6@F5E{9PvdTIJaKm%~eOj=vIgF?@PE0r$f;@ym<aAYL=jG=qZ;UEV+?&N#*Z+
zw@G{K8K0DQWq@5(e~BiJ*e$}0^9PQ=U0K%Y;Z3a<9Fe~D>@2RsvD@tE+Kwr2f|e81
zE+oC^^0xGLvMDEMoV3PPxY<;up%>MRqbW0p9*sgXbiaTc%6nWs6u>0DDT?#%zDM^<
zh)WBOgN6$R%B>l^?#f*+M$b90FYcN2Lvr5_mcU-jgn7qtHvRI#VQd#aI|3gl6Qly;
z=ds|hid)~BrR{SQz<~EW=pexLp5a05jgbFJ^ock~2EP;0Z}f&|#DG67vF97}hW)@h
zW2^9wR74!uvp97M*E8dsI<v1te)7os!Jx<jt6PlW5!NBvGwIk7g}6FC89oO8WdAm?
z6}(FKaMUjl!Qz(1?*a6R*!9>;kB;w{2;6uscO&$Bo==Vl=lyuYwL=8lCv-==e5ZFR
zy!huiUgZs5Qt=-RU1QtKdIbboKn$bhhxrV3AJTRgj%B^?yM<TZCbrBphVh!hBBsze
zOSk@m<v_2<+->ef*`D&QH_A62X}V0M)&MAU{=7&Be%INeD`-&=u2<GJE*F|r-FJ<W
zuV)qz>8+3{x3agKlm6|5oa`0x?IBu!8}8&wv||)m$zgk@UH3RJ<@01ORv*&UQkbKZ
zZfy{tOt4F&Jx3=#pY~UA&gvR}OT30%#Xtzm^tUHcX(ijzM!xP7WCy{w+cyKNn2&qT
zcNFx8dVwhWAp8I`>&bKdul$mGigY4>2IPmV;MC7hI5-4DelQSxN>I6fxnfGvt~II<
z+GyW)v7Ak@;k<Hpf{^Gy^mcPHMli>wz^R<2@y`;CGj<-SRPrt(_rwGn1Hl`JVH!fg
zZp`inHE_ZK2MQC^24OkLV-AbskJp)Xi26(3u#nfWG2BUnzb~fiV$i#^n2v}7beKx+
z1lsxor7CUR((g;o&<xuasjH5wehyyv9$O5llb(RD`tBf!ut2TseQu9B+0kr#+r1pK
zv^IVndH_?e4!!ZD6I~qu+HKk^<!Lol<^|Z@(j9K+VeW<hyp8y;|CN7BcMxXSkGKTm
zP;4~ghq;LGekNgABB`=saO7DCcclS@r@cR5a4+aG`Wfp|wTU)Y__yS73-hugJ-rxX
zd!kW`jK9r|+Zvm$e;YC)9aEx8n=8wiibmj^OJOneFNw-99Y$$q0u8B~T*u|2Qwc_^
ziA?F6O&xfDs$FgNV{eo%z9Xq!Z8YZqe#kjT^DN<5TzWfd+BMryU`~ry`E|vdh^vXW
zyy^w<S@Qtu8kaD$Wl~10NS?aE>WoEq=slB!NlQ#ikGxR3$aC@ytiRrm4@;Gf`0*F6
z2Rn6_6BSmEXX&E2NVFqL?KGOhnypc<6EAf|rP`0X;wmy!tPo7orDiH<Qsye={HQRB
zrcEVI2D>VlDfB8)wZs14g`Y`>YFE8D+t!j+#PKjUg{YS{_IVdIx7*Li&5~fuqR0}m
zzAGQmTp66he@C8Tn*nY3D&PF|^*Q6OM^3**Z@4PFG*A}3z6qH=LB+^39&TZ0qt}o<
zv;8z6To1+@-PAISDX=w5+oqD&QnP6l3^Ou%8n;{7Qt4ue7$>LxUGW)DOnrV+Q}yu~
zmBml8#~&{K@(ZNfz1w~c8dOxWpM3%^IG728XeIX2dU>7nZYF1`OEnd^%55d~kl?|r
zrbMt@<3mVj`9Fske-zcjr4GSpLgNmM)<fIEWDOkGL)b#=46M|{cSE;^T^jnVfx3t0
z7+S1BxQA^UdaQvxh4vUatU*16F=0iZBp3XEOjitpP7nPw4B!Mo2n_)ka)PT5pvexw
zO$`<}V&Nf3^#5^0!-F5|Z*auJL!{{c?TC^MSJq$Qh?9+A(VyXnkqv*+-=P?C-yiI4
z&H5;A4URJh4nb!r0%fZSujiN#<>xpM!UhllAr@tXx~~U`uE&^(fCUJ*|D+F>0Vub_
z(MQk#q}yR?!)*ZC?Fh9IxB&5XX!~#-fO<Q;eFP6cz8&@|+y|iFj(8OT1rYN5Nf0gp
zQ1XN$h@b#SdBWs|TL82?5pp9i0b-ue`r#S?HBXjqh#eS*khUQnK+X-lCr3Bb4(xTv
z^AHpu<c9c#u^W;wD1LAZaBu_tLh1{{|Bv=HJ9q-Pzkzrm=|(UJW*E`{RNb(>aQlMw
zLhlAU40!;$ZunmKKS2C{3Ir1lDFDiDSYEh3e)vQ81se=G0NQRKKM?#80|EsG^8m9q
zm@hOR@LveufdPYkfZZFy7lu+Kq(6+Y*i*&`_Z9e#KVdb8jqnDPbi*f|AZmwW9Zj~t
zIYy=(UABI-4c9o@Y(egZZtlCc^IZk<?8~>aTm^US+qd&v1^Mjjw{u*DyzgVhnLtl!
z3W3R0?}N+l`?m`a1VZf#c`_0NS2@CzIYC<7D)Pc1j{Ulk<b{bJHM!B`MTj3my%FW5
zdgRWHDFak^;^f9z05Uu=a$`>b9hyV;bA#OM^}k_s)<zLF+HtyohKTRL!U&tWF%Xd$
zM}!k6P)sMf+;~htm?yG+Od6oX6I(w{1CZj0t{=M!Xz|3?kLLiydZO;cv;k^7ad+Z8
z06CtRJF(Az9#6uZctk+R3le`!JfP?Wi$6{Qko1DaA3F<Zdcot5X8=UMp!CMn0jgfi
zePMgicf%dVJODhmdN20Ah`pG*5!Yjg0H|A$7b9Qzf1^JVzc+S^`Xcp#=8q!~k~cED
zcXA8+BIb+V7iutC2hg~+d2#!I^hfOr+a0|Ic-;ED_<ewWAq9jAjOGCpZY^G1J|MnO
z0>b)6cL5H!@E`bJ1pi*tu)tp4EyIh(2ksaCchL86z+T_2z>9%2G7^eXCUbHL-jP)#
zjB2qFPJxp4zZG|gn&MbXlZ{aJl4(nqjo{Ye8cUmv@Ey_31@~sYOF^Cm`DT_&;jRVy
zW}ZtSp9TG9j!TjE1*}+=-+xt!Lu4x#z~vVFn+5O%p%#Q(8S#ayETc-T!p%<=xnmH@
zegP%9qvA?UfSTNKab>7LQSRUJr7A#G?pXOU7N9J5^h~J>P`7g4%Ty@`XNgpd&RQkH
z_Marcxm?1}d7_BzP(_efj8)>kSunaeb*2m!DBKxIUn&Ds?u?-?qX9~HM%9+u0JS^g
zYRhne;+?<kOLc(iow4?1JV5!*=&Mp6pnhlkRT&ge$UBmtR062v9Yat?0hIEN$}P13
zYI(=ymSF<LynpMLY5<p)@H1LXAcRUWA>4oAQcgO!-c<^e;jOA<AUqGbB5C^zMP;6O
z?HO~!B<I<$%QFzVTgM%>p@-*WH(wHowq-r4&E}|dwA5}^t$+IJb}32PSEayTxbHfb
z@3pcNI6&mMj$Kyp&X!uIqLzwul`Ztzutj8D`R?w8!<|6o*d9uyG`zcc6acwajBAYE
z;U$>L%BmSps#5EM<@Hlh6oBoq_MJzXmp>dzPu;e9VPITpQ6E)fS5=neh_Mzf|DBY)
z#kE&CI#btGv20oVz$`wm-JF)0Z~Cwwy}$HNx6|Z1(m74tM11X7oZ2WjT8lL<#~9R>
zSih9ljNH6;XSqOo(dsgAQKi9?&xBt_Ofit<?(ODJY}SwvvTVaxY)mWMcDVC_mTx=o
zkkC;VnW$Jkz9@Be$=&|>%fO6p*<nq-z`~17tLm;vU4{G*_1LYl6yH2J?x;$(sOTkB
zwEho~s(y_<Tjzc1E}oT^Z)k|V|D5Dxfdy~0T>q$JkM887nJ=fm-`sDDg`61e8k{}G
z`>9v^#``})6gz_nC!#`fF-pL7zinD_@~BO&Hr&-;HY6hwgPf=E>z}Dv{lVdNssh0F
zy~uE~+JE(Y7O0nMzVfYJdwB@!iqcsR)DDx}4^K}Te(nE4A-r||;ZsxDLNbQEa+z<z
zHRIee=UAQFVy|`Dx^28kRW;%<tl`x%E^fjWUOex(B?y0C@o?$S<IgvAvaazOepK$i
zc-Pds?9kbxJ9PP|d0;zh{j8>mm924D!y}<ZxXG8TL5;Up<C8194uIv^GRCA9Af`Es
zqczIVf62ZR$->qE`j0(cw%8g>VjGXG;^1eHX19qvnK|DWGdK8c;mYF~m^km2)N0G#
z+acU}PYg(|{q}wgT&0F;lYKVrSRjl7lNxi@9^vdHWg?@vcaFqzy6{h%&cHL9i4I0^
zunBdDzvHr9I&{JlzVJ_-=$SEYuwxP7yA?vg4<$dSM|^QS>cupPrVuR(napy9y@iF&
z*m3l)U$td+VLy|BqiP&^Sr`Z9m_Yn-#`>yUkNa}-cG~HjZ7dSkG6IELDI8(8bQPDi
z->SP6)om(@U@EphzTquVyJbk4Yq$<6@~4ehvUCsYYDLX`=Y(f>B2;}2z7bE!i$%n3
zSG^`2y*!wcqk|%&^;%qCdxm+4;CJSFXCtSu;x8C2>3D^aJLB&)eeU{WRiT+Ob&DeR
zb*I`{|G{yg)xF5QO+9pX&p~$!%Ki4k`{t-sMGw{RX&VmCDT&xCq{;E~y>p(<TJ(P<
zHd@bHy*SQ|1)U}Y!`W1$A^2U;M|q|x<a&#xe)SGZvGCLMa^MZV3voO8wc=n-@cq{D
z^@7Zxlcxr&EAiT<$1R=ya&VTe?5cKB+SJ;?BhciTp~O27d9o?zY&~Az<hOBf5<N`U
za5P0`YZc?0bqaE`ubO{}v<ZP@&vr#EJ0?w8@t!6z8H&Tb*{kwJS}&kX#Z-YdX&v}2
zO*O+vFJU&3?8N<tZt2(N9)9yZ+!N_FoED#X+Z%k!Wrg`FLNuKgN>jCZx9f;keo|<~
zil$7BWv7x}^->yY{Ab&M<bEG~_*ww&gPB3t<I6sZp?@G{bpYGyzlG~X@s$SN3ge>C
zA-*>H_b7*h`X`Tzw!zGC_{SwFmVX8BH?Qx_6Fpe6KXXQc5g>dSC)2|FIpOG_Llzjy
zAr$P53h7~iWY=cF1Pr8$`&G+jxo3wPc;~!T87GXG?<5SnD0jz}TahBLT^$)GEXNmS
zTvo5fSW%e6bzGAxBRu$loav+!B)xs7kP;2VL6V&p()C6fr8XsJrcP4kRFKHKlD)mH
zW36##Qqcxkl!!j_8!gW6t=5$C`OF1)2f#OTy04qFwZB$z2q<!mndpgy))(YYil$Kb
z{7QKtIf=tfbC%A53+v=qzRlHJhN4jAB_b&KsZR$W%g{b?f9%19xF&ZF6SO1?E7_SO
z$Y<hk8+Pp&>O;t&twuT<gchV%|C$^Xyeujl&)yN$dANS2iDcI%B@iMW<Bz22+orP`
zkCD$F%tmrnk7*RD6EL7BCKFnK_dfa7kTsD(YF(qX)^_WWp}#KG`k+C`HNNxLJYh`4
zpDjI}R1mNqvS`8AbTv&LaH?XOc;Z*ha5SpZ%hl>~;5c*ENEE=ZfA)zq*8CZ8#0$}|
zor^Y6snM;KG=gJrW{*Ad{?(bJZ<rB*0hvc|zVl~jifx_tLur~gr|$uBAiA%iefOzG
zzjb7{Sud}eJR<J)?8R~$;rtI?PioMwf&<JXY69)!cG+frnONFWiJgVA{i-9Gw+ZyT
zlUZF4{_$J3N4>6$y=Y{*8|KT-!_@pPpp&x8KY|ZxgYgGfzq(Ts9l~Usv<xvcZ!;eZ
z$)6Qgm%G_mzOr(H7N^>*3=Q|~qX4|Ok4XkqnWEbrn~>>AO|v9ZsgUe*QZ5OCj3PM>
z-8;ci^6--vmFzz01Gd}o;Wf#`_5Gks8WA$8zsiy7sNra(XlhjC#pzRGe(!U)Y9_ub
zE1dDNFqVz9dZ2PJmdb)jKQhtg4oy4Nv7?dQtWt_8Wt61MvvAVlsKnHwpsB!F`N_k0
z@iFJx14n6;v6O!r>mnTlW3Ad`5iGU<q=RXoYf0M^|I1-a39F!uY$W;{OnH7Z4TQEB
zb;Iu?o@*@4W^%PV(<ZMQ$3r)&`Dr7jNplMpq|WN99tls(ZmKOJ7#;`*iv5Eb-1O&o
zLP=&YBZLvmAX;cenz!YLte|<yY!|u!s-hZ!DugQfe>7pG)U0YM`u37CmX*QjNW-B-
z!<gu|Vq(5Z$Ofwa>1H4e7ZZ^~5SNzA!WcIu+NT&}ucK{65&jgGHL9m-$4V<C71N4}
zLi_JgnxaC;+Cr1TVooDYWgJEc*BnHW!7_#xp*4zum6DQ_4n|_ZGKLhHGK|EAV+tWQ
zXB>tL|5vc?zk|>Q;#x>%Ldg)s1dM-!%YPP<L`D&bdW#fu{I{VFW&|hh#4YUlznM}Z
zS)oW^IMq)TBwFvP;h*&21BEU!NF<%ag}7=$su2I0|LOm~3=`GQ-{9e*KSW4^1`6Ax
z)zCMaS(!?0Ml(oys1~xg36ja-^s<;WQ;daSj#)-zN`VehU;n?xoT?+WM9n*_YSc|{
z!A)z`yQ1nrStFyf_Uzv|f{<7BQ*Y_j#m?OMM_XkDs~xIoo)WJz*6ZZsoP}<cOb_XM
z`TrxR0X4nQe4Mk=y_o5teJ^jbV>QiF<5k9X{l5jPOl+jaRu*E8bLP8QGBqUD665Mi
zu%~&7yewF+|5wyQ{C>uAM{Am=%FBZ7y81Y0xw|RTL;ZdxN`;*5w3<9;xwt9QRXu6O
SdSQM28?+M|D(2r_;{O0|uQ74}

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586
GIT binary patch
literal 77160
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

literal 0
HcmV?d00001

diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/animated.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/animated.less
new file mode 100644
index 0000000000..66ad52a5ba
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/animated.less
@@ -0,0 +1,34 @@
+// Animated Icons
+// --------------------------
+
+.@{fa-css-prefix}-spin {
+  -webkit-animation: fa-spin 2s infinite linear;
+          animation: fa-spin 2s infinite linear;
+}
+
+.@{fa-css-prefix}-pulse {
+  -webkit-animation: fa-spin 1s infinite steps(8);
+          animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+            transform: rotate(359deg);
+  }
+}
+
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+            transform: rotate(359deg);
+  }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/bordered-pulled.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/bordered-pulled.less
new file mode 100644
index 0000000000..f1c8ad75f5
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/bordered-pulled.less
@@ -0,0 +1,25 @@
+// Bordered & Pulled
+// -------------------------
+
+.@{fa-css-prefix}-border {
+  padding: .2em .25em .15em;
+  border: solid .08em @fa-border-color;
+  border-radius: .1em;
+}
+
+.@{fa-css-prefix}-pull-left { float: left; }
+.@{fa-css-prefix}-pull-right { float: right; }
+
+.@{fa-css-prefix} {
+  &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
+  &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right { float: right; }
+.pull-left { float: left; }
+
+.@{fa-css-prefix} {
+  &.pull-left { margin-right: .3em; }
+  &.pull-right { margin-left: .3em; }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/core.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/core.less
new file mode 100644
index 0000000000..c577ac84a6
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/core.less
@@ -0,0 +1,12 @@
+// Base Class Definition
+// -------------------------
+
+.@{fa-css-prefix} {
+  display: inline-block;
+  font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
+  font-size: inherit; // can't have font-size inherit on line above, so need to override
+  text-rendering: auto; // optimizelegibility throws things off #1094
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/fixed-width.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/fixed-width.less
new file mode 100644
index 0000000000..110289f2f4
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/fixed-width.less
@@ -0,0 +1,6 @@
+// Fixed Width Icons
+// -------------------------
+.@{fa-css-prefix}-fw {
+  width: (18em / 14);
+  text-align: center;
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/font-awesome.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/font-awesome.less
new file mode 100644
index 0000000000..c3677def31
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/font-awesome.less
@@ -0,0 +1,18 @@
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+@import "variables.less";
+@import "mixins.less";
+@import "path.less";
+@import "core.less";
+@import "larger.less";
+@import "fixed-width.less";
+@import "list.less";
+@import "bordered-pulled.less";
+@import "animated.less";
+@import "rotated-flipped.less";
+@import "stacked.less";
+@import "icons.less";
+@import "screen-reader.less";
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/icons.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/icons.less
new file mode 100644
index 0000000000..159d600425
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/icons.less
@@ -0,0 +1,789 @@
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+   readers do not read off random characters that represent icons */
+
+.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }
+.@{fa-css-prefix}-music:before { content: @fa-var-music; }
+.@{fa-css-prefix}-search:before { content: @fa-var-search; }
+.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }
+.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
+.@{fa-css-prefix}-star:before { content: @fa-var-star; }
+.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }
+.@{fa-css-prefix}-user:before { content: @fa-var-user; }
+.@{fa-css-prefix}-film:before { content: @fa-var-film; }
+.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
+.@{fa-css-prefix}-th:before { content: @fa-var-th; }
+.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
+.@{fa-css-prefix}-check:before { content: @fa-var-check; }
+.@{fa-css-prefix}-remove:before,
+.@{fa-css-prefix}-close:before,
+.@{fa-css-prefix}-times:before { content: @fa-var-times; }
+.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
+.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
+.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
+.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
+.@{fa-css-prefix}-gear:before,
+.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
+.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }
+.@{fa-css-prefix}-home:before { content: @fa-var-home; }
+.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }
+.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }
+.@{fa-css-prefix}-road:before { content: @fa-var-road; }
+.@{fa-css-prefix}-download:before { content: @fa-var-download; }
+.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }
+.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }
+.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
+.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }
+.@{fa-css-prefix}-rotate-right:before,
+.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }
+.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }
+.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
+.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
+.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
+.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
+.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
+.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
+.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
+.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
+.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
+.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
+.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
+.@{fa-css-prefix}-book:before { content: @fa-var-book; }
+.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
+.@{fa-css-prefix}-print:before { content: @fa-var-print; }
+.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
+.@{fa-css-prefix}-font:before { content: @fa-var-font; }
+.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
+.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
+.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
+.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
+.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
+.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
+.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
+.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
+.@{fa-css-prefix}-list:before { content: @fa-var-list; }
+.@{fa-css-prefix}-dedent:before,
+.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
+.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
+.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }
+.@{fa-css-prefix}-photo:before,
+.@{fa-css-prefix}-image:before,
+.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }
+.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }
+.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
+.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
+.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
+.@{fa-css-prefix}-edit:before,
+.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }
+.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }
+.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }
+.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }
+.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
+.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
+.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
+.@{fa-css-prefix}-play:before { content: @fa-var-play; }
+.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
+.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
+.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
+.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
+.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
+.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
+.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
+.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
+.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
+.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
+.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
+.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
+.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
+.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
+.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
+.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }
+.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }
+.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
+.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
+.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
+.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
+.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
+.@{fa-css-prefix}-mail-forward:before,
+.@{fa-css-prefix}-share:before { content: @fa-var-share; }
+.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
+.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
+.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
+.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
+.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
+.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
+.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
+.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
+.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
+.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
+.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
+.@{fa-css-prefix}-warning:before,
+.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
+.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
+.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
+.@{fa-css-prefix}-random:before { content: @fa-var-random; }
+.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
+.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
+.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
+.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
+.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
+.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
+.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
+.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
+.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }
+.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }
+.@{fa-css-prefix}-bar-chart-o:before,
+.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }
+.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
+.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
+.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
+.@{fa-css-prefix}-key:before { content: @fa-var-key; }
+.@{fa-css-prefix}-gears:before,
+.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
+.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
+.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }
+.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }
+.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
+.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }
+.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }
+.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }
+.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }
+.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }
+.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }
+.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
+.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
+.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
+.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }
+.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
+.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }
+.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }
+.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
+.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
+.@{fa-css-prefix}-facebook-f:before,
+.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
+.@{fa-css-prefix}-github:before { content: @fa-var-github; }
+.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
+.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
+.@{fa-css-prefix}-feed:before,
+.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
+.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }
+.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
+.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
+.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
+.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }
+.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }
+.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }
+.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }
+.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
+.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
+.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
+.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
+.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
+.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
+.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
+.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
+.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
+.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
+.@{fa-css-prefix}-group:before,
+.@{fa-css-prefix}-users:before { content: @fa-var-users; }
+.@{fa-css-prefix}-chain:before,
+.@{fa-css-prefix}-link:before { content: @fa-var-link; }
+.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
+.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
+.@{fa-css-prefix}-cut:before,
+.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }
+.@{fa-css-prefix}-copy:before,
+.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }
+.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
+.@{fa-css-prefix}-save:before,
+.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }
+.@{fa-css-prefix}-square:before { content: @fa-var-square; }
+.@{fa-css-prefix}-navicon:before,
+.@{fa-css-prefix}-reorder:before,
+.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
+.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
+.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
+.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
+.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
+.@{fa-css-prefix}-table:before { content: @fa-var-table; }
+.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
+.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
+.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
+.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
+.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
+.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
+.@{fa-css-prefix}-money:before { content: @fa-var-money; }
+.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
+.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
+.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
+.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
+.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
+.@{fa-css-prefix}-unsorted:before,
+.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
+.@{fa-css-prefix}-sort-down:before,
+.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }
+.@{fa-css-prefix}-sort-up:before,
+.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }
+.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
+.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
+.@{fa-css-prefix}-rotate-left:before,
+.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
+.@{fa-css-prefix}-legal:before,
+.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
+.@{fa-css-prefix}-dashboard:before,
+.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }
+.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }
+.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }
+.@{fa-css-prefix}-flash:before,
+.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
+.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
+.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
+.@{fa-css-prefix}-paste:before,
+.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
+.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }
+.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }
+.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }
+.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }
+.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
+.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
+.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
+.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }
+.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
+.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }
+.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }
+.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }
+.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }
+.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
+.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
+.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
+.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
+.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
+.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
+.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
+.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
+.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
+.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
+.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
+.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
+.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
+.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
+.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
+.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
+.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
+.@{fa-css-prefix}-mobile-phone:before,
+.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
+.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }
+.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
+.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
+.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
+.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
+.@{fa-css-prefix}-mail-reply:before,
+.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
+.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
+.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }
+.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }
+.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }
+.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }
+.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }
+.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
+.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }
+.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }
+.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
+.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
+.@{fa-css-prefix}-code:before { content: @fa-var-code; }
+.@{fa-css-prefix}-mail-reply-all:before,
+.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
+.@{fa-css-prefix}-star-half-empty:before,
+.@{fa-css-prefix}-star-half-full:before,
+.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }
+.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
+.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
+.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }
+.@{fa-css-prefix}-unlink:before,
+.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }
+.@{fa-css-prefix}-question:before { content: @fa-var-question; }
+.@{fa-css-prefix}-info:before { content: @fa-var-info; }
+.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
+.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
+.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
+.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
+.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
+.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
+.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
+.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }
+.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }
+.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
+.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
+.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
+.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
+.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
+.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
+.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
+.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
+.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
+.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
+.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
+.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
+.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
+.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
+.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
+.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
+.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }
+.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
+.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }
+.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }
+.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }
+.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
+.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }
+.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }
+.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
+.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
+.@{fa-css-prefix}-toggle-down:before,
+.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }
+.@{fa-css-prefix}-toggle-up:before,
+.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }
+.@{fa-css-prefix}-toggle-right:before,
+.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }
+.@{fa-css-prefix}-euro:before,
+.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }
+.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }
+.@{fa-css-prefix}-dollar:before,
+.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }
+.@{fa-css-prefix}-rupee:before,
+.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }
+.@{fa-css-prefix}-cny:before,
+.@{fa-css-prefix}-rmb:before,
+.@{fa-css-prefix}-yen:before,
+.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }
+.@{fa-css-prefix}-ruble:before,
+.@{fa-css-prefix}-rouble:before,
+.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }
+.@{fa-css-prefix}-won:before,
+.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }
+.@{fa-css-prefix}-bitcoin:before,
+.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
+.@{fa-css-prefix}-file:before { content: @fa-var-file; }
+.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }
+.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }
+.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }
+.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }
+.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }
+.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }
+.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }
+.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
+.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
+.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
+.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
+.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
+.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
+.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }
+.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
+.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
+.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
+.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
+.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
+.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
+.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }
+.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
+.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
+.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }
+.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }
+.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }
+.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }
+.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
+.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
+.@{fa-css-prefix}-android:before { content: @fa-var-android; }
+.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
+.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
+.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
+.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
+.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
+.@{fa-css-prefix}-female:before { content: @fa-var-female; }
+.@{fa-css-prefix}-male:before { content: @fa-var-male; }
+.@{fa-css-prefix}-gittip:before,
+.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }
+.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }
+.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }
+.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
+.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
+.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
+.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
+.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
+.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
+.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
+.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }
+.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }
+.@{fa-css-prefix}-toggle-left:before,
+.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }
+.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }
+.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
+.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
+.@{fa-css-prefix}-turkish-lira:before,
+.@{fa-css-prefix}-try:before { content: @fa-var-try; }
+.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }
+.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }
+.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }
+.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }
+.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }
+.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }
+.@{fa-css-prefix}-institution:before,
+.@{fa-css-prefix}-bank:before,
+.@{fa-css-prefix}-university:before { content: @fa-var-university; }
+.@{fa-css-prefix}-mortar-board:before,
+.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }
+.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }
+.@{fa-css-prefix}-google:before { content: @fa-var-google; }
+.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }
+.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }
+.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }
+.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }
+.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }
+.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }
+.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }
+.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }
+.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }
+.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }
+.@{fa-css-prefix}-language:before { content: @fa-var-language; }
+.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }
+.@{fa-css-prefix}-building:before { content: @fa-var-building; }
+.@{fa-css-prefix}-child:before { content: @fa-var-child; }
+.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }
+.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }
+.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }
+.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }
+.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }
+.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }
+.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }
+.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }
+.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }
+.@{fa-css-prefix}-automobile:before,
+.@{fa-css-prefix}-car:before { content: @fa-var-car; }
+.@{fa-css-prefix}-cab:before,
+.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }
+.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }
+.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }
+.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }
+.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }
+.@{fa-css-prefix}-database:before { content: @fa-var-database; }
+.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }
+.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }
+.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }
+.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }
+.@{fa-css-prefix}-file-photo-o:before,
+.@{fa-css-prefix}-file-picture-o:before,
+.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }
+.@{fa-css-prefix}-file-zip-o:before,
+.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }
+.@{fa-css-prefix}-file-sound-o:before,
+.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }
+.@{fa-css-prefix}-file-movie-o:before,
+.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }
+.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }
+.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }
+.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }
+.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }
+.@{fa-css-prefix}-life-bouy:before,
+.@{fa-css-prefix}-life-buoy:before,
+.@{fa-css-prefix}-life-saver:before,
+.@{fa-css-prefix}-support:before,
+.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }
+.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }
+.@{fa-css-prefix}-ra:before,
+.@{fa-css-prefix}-resistance:before,
+.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }
+.@{fa-css-prefix}-ge:before,
+.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }
+.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }
+.@{fa-css-prefix}-git:before { content: @fa-var-git; }
+.@{fa-css-prefix}-y-combinator-square:before,
+.@{fa-css-prefix}-yc-square:before,
+.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }
+.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }
+.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }
+.@{fa-css-prefix}-wechat:before,
+.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }
+.@{fa-css-prefix}-send:before,
+.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }
+.@{fa-css-prefix}-send-o:before,
+.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }
+.@{fa-css-prefix}-history:before { content: @fa-var-history; }
+.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }
+.@{fa-css-prefix}-header:before { content: @fa-var-header; }
+.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }
+.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }
+.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }
+.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }
+.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }
+.@{fa-css-prefix}-soccer-ball-o:before,
+.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }
+.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }
+.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }
+.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }
+.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }
+.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }
+.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }
+.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }
+.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }
+.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }
+.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }
+.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }
+.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }
+.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }
+.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }
+.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }
+.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }
+.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }
+.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }
+.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }
+.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }
+.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }
+.@{fa-css-prefix}-at:before { content: @fa-var-at; }
+.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }
+.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }
+.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }
+.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }
+.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }
+.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }
+.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }
+.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }
+.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }
+.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }
+.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }
+.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }
+.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }
+.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }
+.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }
+.@{fa-css-prefix}-shekel:before,
+.@{fa-css-prefix}-sheqel:before,
+.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }
+.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }
+.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }
+.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }
+.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }
+.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }
+.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }
+.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }
+.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }
+.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }
+.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }
+.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }
+.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }
+.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }
+.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }
+.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }
+.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }
+.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }
+.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }
+.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }
+.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }
+.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }
+.@{fa-css-prefix}-intersex:before,
+.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }
+.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }
+.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }
+.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }
+.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }
+.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }
+.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }
+.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }
+.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }
+.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }
+.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }
+.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }
+.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }
+.@{fa-css-prefix}-server:before { content: @fa-var-server; }
+.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }
+.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }
+.@{fa-css-prefix}-hotel:before,
+.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }
+.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }
+.@{fa-css-prefix}-train:before { content: @fa-var-train; }
+.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }
+.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }
+.@{fa-css-prefix}-yc:before,
+.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }
+.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }
+.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }
+.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }
+.@{fa-css-prefix}-battery-4:before,
+.@{fa-css-prefix}-battery:before,
+.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }
+.@{fa-css-prefix}-battery-3:before,
+.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }
+.@{fa-css-prefix}-battery-2:before,
+.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }
+.@{fa-css-prefix}-battery-1:before,
+.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }
+.@{fa-css-prefix}-battery-0:before,
+.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }
+.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }
+.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }
+.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }
+.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }
+.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }
+.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; }
+.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }
+.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }
+.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }
+.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }
+.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; }
+.@{fa-css-prefix}-hourglass-1:before,
+.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }
+.@{fa-css-prefix}-hourglass-2:before,
+.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }
+.@{fa-css-prefix}-hourglass-3:before,
+.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }
+.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }
+.@{fa-css-prefix}-hand-grab-o:before,
+.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; }
+.@{fa-css-prefix}-hand-stop-o:before,
+.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; }
+.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; }
+.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; }
+.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; }
+.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; }
+.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; }
+.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }
+.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }
+.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }
+.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }
+.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }
+.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }
+.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }
+.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }
+.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }
+.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }
+.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }
+.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }
+.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }
+.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }
+.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }
+.@{fa-css-prefix}-tv:before,
+.@{fa-css-prefix}-television:before { content: @fa-var-television; }
+.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }
+.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }
+.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }
+.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; }
+.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; }
+.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; }
+.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; }
+.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }
+.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }
+.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }
+.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; }
+.@{fa-css-prefix}-map:before { content: @fa-var-map; }
+.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; }
+.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; }
+.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }
+.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }
+.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }
+.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }
+.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }
+.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }
+.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; }
+.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }
+.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }
+.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }
+.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }
+.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }
+.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }
+.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }
+.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }
+.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; }
+.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }
+.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; }
+.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }
+.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }
+.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }
+.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }
+.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }
+.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }
+.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }
+.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }
+.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }
+.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }
+.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }
+.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; }
+.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; }
+.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }
+.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }
+.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; }
+.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }
+.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }
+.@{fa-css-prefix}-asl-interpreting:before,
+.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }
+.@{fa-css-prefix}-deafness:before,
+.@{fa-css-prefix}-hard-of-hearing:before,
+.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }
+.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }
+.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }
+.@{fa-css-prefix}-signing:before,
+.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }
+.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }
+.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }
+.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }
+.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }
+.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }
+.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }
+.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }
+.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }
+.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }
+.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }
+.@{fa-css-prefix}-google-plus-circle:before,
+.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; }
+.@{fa-css-prefix}-fa:before,
+.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }
+.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; }
+.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }
+.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; }
+.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }
+.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }
+.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; }
+.@{fa-css-prefix}-vcard:before,
+.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }
+.@{fa-css-prefix}-vcard-o:before,
+.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; }
+.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }
+.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; }
+.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; }
+.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }
+.@{fa-css-prefix}-drivers-license:before,
+.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }
+.@{fa-css-prefix}-drivers-license-o:before,
+.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; }
+.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }
+.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }
+.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }
+.@{fa-css-prefix}-thermometer-4:before,
+.@{fa-css-prefix}-thermometer:before,
+.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }
+.@{fa-css-prefix}-thermometer-3:before,
+.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }
+.@{fa-css-prefix}-thermometer-2:before,
+.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }
+.@{fa-css-prefix}-thermometer-1:before,
+.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }
+.@{fa-css-prefix}-thermometer-0:before,
+.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }
+.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }
+.@{fa-css-prefix}-bathtub:before,
+.@{fa-css-prefix}-s15:before,
+.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }
+.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }
+.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }
+.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }
+.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }
+.@{fa-css-prefix}-times-rectangle:before,
+.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }
+.@{fa-css-prefix}-times-rectangle-o:before,
+.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; }
+.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }
+.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }
+.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }
+.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }
+.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }
+.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; }
+.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }
+.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; }
+.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }
+.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }
+.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/larger.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/larger.less
new file mode 100644
index 0000000000..c9d646770e
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/larger.less
@@ -0,0 +1,13 @@
+// Icon Sizes
+// -------------------------
+
+/* makes the font 33% larger relative to the icon container */
+.@{fa-css-prefix}-lg {
+  font-size: (4em / 3);
+  line-height: (3em / 4);
+  vertical-align: -15%;
+}
+.@{fa-css-prefix}-2x { font-size: 2em; }
+.@{fa-css-prefix}-3x { font-size: 3em; }
+.@{fa-css-prefix}-4x { font-size: 4em; }
+.@{fa-css-prefix}-5x { font-size: 5em; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/list.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/list.less
new file mode 100644
index 0000000000..0b440382f6
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/list.less
@@ -0,0 +1,19 @@
+// List Icons
+// -------------------------
+
+.@{fa-css-prefix}-ul {
+  padding-left: 0;
+  margin-left: @fa-li-width;
+  list-style-type: none;
+  > li { position: relative; }
+}
+.@{fa-css-prefix}-li {
+  position: absolute;
+  left: -@fa-li-width;
+  width: @fa-li-width;
+  top: (2em / 14);
+  text-align: center;
+  &.@{fa-css-prefix}-lg {
+    left: (-@fa-li-width + (4em / 14));
+  }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/mixins.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/mixins.less
new file mode 100644
index 0000000000..beef231d0e
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/mixins.less
@@ -0,0 +1,60 @@
+// Mixins
+// --------------------------
+
+.fa-icon() {
+  display: inline-block;
+  font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
+  font-size: inherit; // can't have font-size inherit on line above, so need to override
+  text-rendering: auto; // optimizelegibility throws things off #1094
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+
+}
+
+.fa-icon-rotate(@degrees, @rotation) {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
+  -webkit-transform: rotate(@degrees);
+      -ms-transform: rotate(@degrees);
+          transform: rotate(@degrees);
+}
+
+.fa-icon-flip(@horiz, @vert, @rotation) {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
+  -webkit-transform: scale(@horiz, @vert);
+      -ms-transform: scale(@horiz, @vert);
+          transform: scale(@horiz, @vert);
+}
+
+
+// Only display content to screen readers. A la Bootstrap 4.
+//
+// See: http://a11yproject.com/posts/how-to-hide-content/
+
+.sr-only() {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0,0,0,0);
+  border: 0;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+//
+// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+//
+// Credit: HTML5 Boilerplate
+
+.sr-only-focusable() {
+  &:active,
+  &:focus {
+    position: static;
+    width: auto;
+    height: auto;
+    margin: 0;
+    overflow: visible;
+    clip: auto;
+  }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/path.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/path.less
new file mode 100644
index 0000000000..835be41f81
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/path.less
@@ -0,0 +1,15 @@
+/* FONT PATH
+ * -------------------------- */
+
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
+  src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
+    url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
+    url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
+    url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
+    url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
+  // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
+  font-weight: normal;
+  font-style: normal;
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/rotated-flipped.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/rotated-flipped.less
new file mode 100644
index 0000000000..f6ba81475b
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/rotated-flipped.less
@@ -0,0 +1,20 @@
+// Rotated & Flipped Icons
+// -------------------------
+
+.@{fa-css-prefix}-rotate-90  { .fa-icon-rotate(90deg, 1);  }
+.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
+.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
+
+.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
+.@{fa-css-prefix}-flip-vertical   { .fa-icon-flip(1, -1, 2); }
+
+// Hook for IE8-9
+// -------------------------
+
+:root .@{fa-css-prefix}-rotate-90,
+:root .@{fa-css-prefix}-rotate-180,
+:root .@{fa-css-prefix}-rotate-270,
+:root .@{fa-css-prefix}-flip-horizontal,
+:root .@{fa-css-prefix}-flip-vertical {
+  filter: none;
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/screen-reader.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/screen-reader.less
new file mode 100644
index 0000000000..11c188196d
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/screen-reader.less
@@ -0,0 +1,5 @@
+// Screen Readers
+// -------------------------
+
+.sr-only { .sr-only(); }
+.sr-only-focusable { .sr-only-focusable(); }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/stacked.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/stacked.less
new file mode 100644
index 0000000000..fc53fb0e7a
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/stacked.less
@@ -0,0 +1,20 @@
+// Stacked Icons
+// -------------------------
+
+.@{fa-css-prefix}-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.@{fa-css-prefix}-stack-1x { line-height: inherit; }
+.@{fa-css-prefix}-stack-2x { font-size: 2em; }
+.@{fa-css-prefix}-inverse { color: @fa-inverse; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/variables.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/variables.less
new file mode 100644
index 0000000000..7ddbbc0115
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/variables.less
@@ -0,0 +1,800 @@
+// Variables
+// --------------------------
+
+@fa-font-path:        "../fonts";
+@fa-font-size-base:   14px;
+@fa-line-height-base: 1;
+//@fa-font-path:        "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly
+@fa-css-prefix:       fa;
+@fa-version:          "4.7.0";
+@fa-border-color:     #eee;
+@fa-inverse:          #fff;
+@fa-li-width:         (30em / 14);
+
+@fa-var-500px: "\f26e";
+@fa-var-address-book: "\f2b9";
+@fa-var-address-book-o: "\f2ba";
+@fa-var-address-card: "\f2bb";
+@fa-var-address-card-o: "\f2bc";
+@fa-var-adjust: "\f042";
+@fa-var-adn: "\f170";
+@fa-var-align-center: "\f037";
+@fa-var-align-justify: "\f039";
+@fa-var-align-left: "\f036";
+@fa-var-align-right: "\f038";
+@fa-var-amazon: "\f270";
+@fa-var-ambulance: "\f0f9";
+@fa-var-american-sign-language-interpreting: "\f2a3";
+@fa-var-anchor: "\f13d";
+@fa-var-android: "\f17b";
+@fa-var-angellist: "\f209";
+@fa-var-angle-double-down: "\f103";
+@fa-var-angle-double-left: "\f100";
+@fa-var-angle-double-right: "\f101";
+@fa-var-angle-double-up: "\f102";
+@fa-var-angle-down: "\f107";
+@fa-var-angle-left: "\f104";
+@fa-var-angle-right: "\f105";
+@fa-var-angle-up: "\f106";
+@fa-var-apple: "\f179";
+@fa-var-archive: "\f187";
+@fa-var-area-chart: "\f1fe";
+@fa-var-arrow-circle-down: "\f0ab";
+@fa-var-arrow-circle-left: "\f0a8";
+@fa-var-arrow-circle-o-down: "\f01a";
+@fa-var-arrow-circle-o-left: "\f190";
+@fa-var-arrow-circle-o-right: "\f18e";
+@fa-var-arrow-circle-o-up: "\f01b";
+@fa-var-arrow-circle-right: "\f0a9";
+@fa-var-arrow-circle-up: "\f0aa";
+@fa-var-arrow-down: "\f063";
+@fa-var-arrow-left: "\f060";
+@fa-var-arrow-right: "\f061";
+@fa-var-arrow-up: "\f062";
+@fa-var-arrows: "\f047";
+@fa-var-arrows-alt: "\f0b2";
+@fa-var-arrows-h: "\f07e";
+@fa-var-arrows-v: "\f07d";
+@fa-var-asl-interpreting: "\f2a3";
+@fa-var-assistive-listening-systems: "\f2a2";
+@fa-var-asterisk: "\f069";
+@fa-var-at: "\f1fa";
+@fa-var-audio-description: "\f29e";
+@fa-var-automobile: "\f1b9";
+@fa-var-backward: "\f04a";
+@fa-var-balance-scale: "\f24e";
+@fa-var-ban: "\f05e";
+@fa-var-bandcamp: "\f2d5";
+@fa-var-bank: "\f19c";
+@fa-var-bar-chart: "\f080";
+@fa-var-bar-chart-o: "\f080";
+@fa-var-barcode: "\f02a";
+@fa-var-bars: "\f0c9";
+@fa-var-bath: "\f2cd";
+@fa-var-bathtub: "\f2cd";
+@fa-var-battery: "\f240";
+@fa-var-battery-0: "\f244";
+@fa-var-battery-1: "\f243";
+@fa-var-battery-2: "\f242";
+@fa-var-battery-3: "\f241";
+@fa-var-battery-4: "\f240";
+@fa-var-battery-empty: "\f244";
+@fa-var-battery-full: "\f240";
+@fa-var-battery-half: "\f242";
+@fa-var-battery-quarter: "\f243";
+@fa-var-battery-three-quarters: "\f241";
+@fa-var-bed: "\f236";
+@fa-var-beer: "\f0fc";
+@fa-var-behance: "\f1b4";
+@fa-var-behance-square: "\f1b5";
+@fa-var-bell: "\f0f3";
+@fa-var-bell-o: "\f0a2";
+@fa-var-bell-slash: "\f1f6";
+@fa-var-bell-slash-o: "\f1f7";
+@fa-var-bicycle: "\f206";
+@fa-var-binoculars: "\f1e5";
+@fa-var-birthday-cake: "\f1fd";
+@fa-var-bitbucket: "\f171";
+@fa-var-bitbucket-square: "\f172";
+@fa-var-bitcoin: "\f15a";
+@fa-var-black-tie: "\f27e";
+@fa-var-blind: "\f29d";
+@fa-var-bluetooth: "\f293";
+@fa-var-bluetooth-b: "\f294";
+@fa-var-bold: "\f032";
+@fa-var-bolt: "\f0e7";
+@fa-var-bomb: "\f1e2";
+@fa-var-book: "\f02d";
+@fa-var-bookmark: "\f02e";
+@fa-var-bookmark-o: "\f097";
+@fa-var-braille: "\f2a1";
+@fa-var-briefcase: "\f0b1";
+@fa-var-btc: "\f15a";
+@fa-var-bug: "\f188";
+@fa-var-building: "\f1ad";
+@fa-var-building-o: "\f0f7";
+@fa-var-bullhorn: "\f0a1";
+@fa-var-bullseye: "\f140";
+@fa-var-bus: "\f207";
+@fa-var-buysellads: "\f20d";
+@fa-var-cab: "\f1ba";
+@fa-var-calculator: "\f1ec";
+@fa-var-calendar: "\f073";
+@fa-var-calendar-check-o: "\f274";
+@fa-var-calendar-minus-o: "\f272";
+@fa-var-calendar-o: "\f133";
+@fa-var-calendar-plus-o: "\f271";
+@fa-var-calendar-times-o: "\f273";
+@fa-var-camera: "\f030";
+@fa-var-camera-retro: "\f083";
+@fa-var-car: "\f1b9";
+@fa-var-caret-down: "\f0d7";
+@fa-var-caret-left: "\f0d9";
+@fa-var-caret-right: "\f0da";
+@fa-var-caret-square-o-down: "\f150";
+@fa-var-caret-square-o-left: "\f191";
+@fa-var-caret-square-o-right: "\f152";
+@fa-var-caret-square-o-up: "\f151";
+@fa-var-caret-up: "\f0d8";
+@fa-var-cart-arrow-down: "\f218";
+@fa-var-cart-plus: "\f217";
+@fa-var-cc: "\f20a";
+@fa-var-cc-amex: "\f1f3";
+@fa-var-cc-diners-club: "\f24c";
+@fa-var-cc-discover: "\f1f2";
+@fa-var-cc-jcb: "\f24b";
+@fa-var-cc-mastercard: "\f1f1";
+@fa-var-cc-paypal: "\f1f4";
+@fa-var-cc-stripe: "\f1f5";
+@fa-var-cc-visa: "\f1f0";
+@fa-var-certificate: "\f0a3";
+@fa-var-chain: "\f0c1";
+@fa-var-chain-broken: "\f127";
+@fa-var-check: "\f00c";
+@fa-var-check-circle: "\f058";
+@fa-var-check-circle-o: "\f05d";
+@fa-var-check-square: "\f14a";
+@fa-var-check-square-o: "\f046";
+@fa-var-chevron-circle-down: "\f13a";
+@fa-var-chevron-circle-left: "\f137";
+@fa-var-chevron-circle-right: "\f138";
+@fa-var-chevron-circle-up: "\f139";
+@fa-var-chevron-down: "\f078";
+@fa-var-chevron-left: "\f053";
+@fa-var-chevron-right: "\f054";
+@fa-var-chevron-up: "\f077";
+@fa-var-child: "\f1ae";
+@fa-var-chrome: "\f268";
+@fa-var-circle: "\f111";
+@fa-var-circle-o: "\f10c";
+@fa-var-circle-o-notch: "\f1ce";
+@fa-var-circle-thin: "\f1db";
+@fa-var-clipboard: "\f0ea";
+@fa-var-clock-o: "\f017";
+@fa-var-clone: "\f24d";
+@fa-var-close: "\f00d";
+@fa-var-cloud: "\f0c2";
+@fa-var-cloud-download: "\f0ed";
+@fa-var-cloud-upload: "\f0ee";
+@fa-var-cny: "\f157";
+@fa-var-code: "\f121";
+@fa-var-code-fork: "\f126";
+@fa-var-codepen: "\f1cb";
+@fa-var-codiepie: "\f284";
+@fa-var-coffee: "\f0f4";
+@fa-var-cog: "\f013";
+@fa-var-cogs: "\f085";
+@fa-var-columns: "\f0db";
+@fa-var-comment: "\f075";
+@fa-var-comment-o: "\f0e5";
+@fa-var-commenting: "\f27a";
+@fa-var-commenting-o: "\f27b";
+@fa-var-comments: "\f086";
+@fa-var-comments-o: "\f0e6";
+@fa-var-compass: "\f14e";
+@fa-var-compress: "\f066";
+@fa-var-connectdevelop: "\f20e";
+@fa-var-contao: "\f26d";
+@fa-var-copy: "\f0c5";
+@fa-var-copyright: "\f1f9";
+@fa-var-creative-commons: "\f25e";
+@fa-var-credit-card: "\f09d";
+@fa-var-credit-card-alt: "\f283";
+@fa-var-crop: "\f125";
+@fa-var-crosshairs: "\f05b";
+@fa-var-css3: "\f13c";
+@fa-var-cube: "\f1b2";
+@fa-var-cubes: "\f1b3";
+@fa-var-cut: "\f0c4";
+@fa-var-cutlery: "\f0f5";
+@fa-var-dashboard: "\f0e4";
+@fa-var-dashcube: "\f210";
+@fa-var-database: "\f1c0";
+@fa-var-deaf: "\f2a4";
+@fa-var-deafness: "\f2a4";
+@fa-var-dedent: "\f03b";
+@fa-var-delicious: "\f1a5";
+@fa-var-desktop: "\f108";
+@fa-var-deviantart: "\f1bd";
+@fa-var-diamond: "\f219";
+@fa-var-digg: "\f1a6";
+@fa-var-dollar: "\f155";
+@fa-var-dot-circle-o: "\f192";
+@fa-var-download: "\f019";
+@fa-var-dribbble: "\f17d";
+@fa-var-drivers-license: "\f2c2";
+@fa-var-drivers-license-o: "\f2c3";
+@fa-var-dropbox: "\f16b";
+@fa-var-drupal: "\f1a9";
+@fa-var-edge: "\f282";
+@fa-var-edit: "\f044";
+@fa-var-eercast: "\f2da";
+@fa-var-eject: "\f052";
+@fa-var-ellipsis-h: "\f141";
+@fa-var-ellipsis-v: "\f142";
+@fa-var-empire: "\f1d1";
+@fa-var-envelope: "\f0e0";
+@fa-var-envelope-o: "\f003";
+@fa-var-envelope-open: "\f2b6";
+@fa-var-envelope-open-o: "\f2b7";
+@fa-var-envelope-square: "\f199";
+@fa-var-envira: "\f299";
+@fa-var-eraser: "\f12d";
+@fa-var-etsy: "\f2d7";
+@fa-var-eur: "\f153";
+@fa-var-euro: "\f153";
+@fa-var-exchange: "\f0ec";
+@fa-var-exclamation: "\f12a";
+@fa-var-exclamation-circle: "\f06a";
+@fa-var-exclamation-triangle: "\f071";
+@fa-var-expand: "\f065";
+@fa-var-expeditedssl: "\f23e";
+@fa-var-external-link: "\f08e";
+@fa-var-external-link-square: "\f14c";
+@fa-var-eye: "\f06e";
+@fa-var-eye-slash: "\f070";
+@fa-var-eyedropper: "\f1fb";
+@fa-var-fa: "\f2b4";
+@fa-var-facebook: "\f09a";
+@fa-var-facebook-f: "\f09a";
+@fa-var-facebook-official: "\f230";
+@fa-var-facebook-square: "\f082";
+@fa-var-fast-backward: "\f049";
+@fa-var-fast-forward: "\f050";
+@fa-var-fax: "\f1ac";
+@fa-var-feed: "\f09e";
+@fa-var-female: "\f182";
+@fa-var-fighter-jet: "\f0fb";
+@fa-var-file: "\f15b";
+@fa-var-file-archive-o: "\f1c6";
+@fa-var-file-audio-o: "\f1c7";
+@fa-var-file-code-o: "\f1c9";
+@fa-var-file-excel-o: "\f1c3";
+@fa-var-file-image-o: "\f1c5";
+@fa-var-file-movie-o: "\f1c8";
+@fa-var-file-o: "\f016";
+@fa-var-file-pdf-o: "\f1c1";
+@fa-var-file-photo-o: "\f1c5";
+@fa-var-file-picture-o: "\f1c5";
+@fa-var-file-powerpoint-o: "\f1c4";
+@fa-var-file-sound-o: "\f1c7";
+@fa-var-file-text: "\f15c";
+@fa-var-file-text-o: "\f0f6";
+@fa-var-file-video-o: "\f1c8";
+@fa-var-file-word-o: "\f1c2";
+@fa-var-file-zip-o: "\f1c6";
+@fa-var-files-o: "\f0c5";
+@fa-var-film: "\f008";
+@fa-var-filter: "\f0b0";
+@fa-var-fire: "\f06d";
+@fa-var-fire-extinguisher: "\f134";
+@fa-var-firefox: "\f269";
+@fa-var-first-order: "\f2b0";
+@fa-var-flag: "\f024";
+@fa-var-flag-checkered: "\f11e";
+@fa-var-flag-o: "\f11d";
+@fa-var-flash: "\f0e7";
+@fa-var-flask: "\f0c3";
+@fa-var-flickr: "\f16e";
+@fa-var-floppy-o: "\f0c7";
+@fa-var-folder: "\f07b";
+@fa-var-folder-o: "\f114";
+@fa-var-folder-open: "\f07c";
+@fa-var-folder-open-o: "\f115";
+@fa-var-font: "\f031";
+@fa-var-font-awesome: "\f2b4";
+@fa-var-fonticons: "\f280";
+@fa-var-fort-awesome: "\f286";
+@fa-var-forumbee: "\f211";
+@fa-var-forward: "\f04e";
+@fa-var-foursquare: "\f180";
+@fa-var-free-code-camp: "\f2c5";
+@fa-var-frown-o: "\f119";
+@fa-var-futbol-o: "\f1e3";
+@fa-var-gamepad: "\f11b";
+@fa-var-gavel: "\f0e3";
+@fa-var-gbp: "\f154";
+@fa-var-ge: "\f1d1";
+@fa-var-gear: "\f013";
+@fa-var-gears: "\f085";
+@fa-var-genderless: "\f22d";
+@fa-var-get-pocket: "\f265";
+@fa-var-gg: "\f260";
+@fa-var-gg-circle: "\f261";
+@fa-var-gift: "\f06b";
+@fa-var-git: "\f1d3";
+@fa-var-git-square: "\f1d2";
+@fa-var-github: "\f09b";
+@fa-var-github-alt: "\f113";
+@fa-var-github-square: "\f092";
+@fa-var-gitlab: "\f296";
+@fa-var-gittip: "\f184";
+@fa-var-glass: "\f000";
+@fa-var-glide: "\f2a5";
+@fa-var-glide-g: "\f2a6";
+@fa-var-globe: "\f0ac";
+@fa-var-google: "\f1a0";
+@fa-var-google-plus: "\f0d5";
+@fa-var-google-plus-circle: "\f2b3";
+@fa-var-google-plus-official: "\f2b3";
+@fa-var-google-plus-square: "\f0d4";
+@fa-var-google-wallet: "\f1ee";
+@fa-var-graduation-cap: "\f19d";
+@fa-var-gratipay: "\f184";
+@fa-var-grav: "\f2d6";
+@fa-var-group: "\f0c0";
+@fa-var-h-square: "\f0fd";
+@fa-var-hacker-news: "\f1d4";
+@fa-var-hand-grab-o: "\f255";
+@fa-var-hand-lizard-o: "\f258";
+@fa-var-hand-o-down: "\f0a7";
+@fa-var-hand-o-left: "\f0a5";
+@fa-var-hand-o-right: "\f0a4";
+@fa-var-hand-o-up: "\f0a6";
+@fa-var-hand-paper-o: "\f256";
+@fa-var-hand-peace-o: "\f25b";
+@fa-var-hand-pointer-o: "\f25a";
+@fa-var-hand-rock-o: "\f255";
+@fa-var-hand-scissors-o: "\f257";
+@fa-var-hand-spock-o: "\f259";
+@fa-var-hand-stop-o: "\f256";
+@fa-var-handshake-o: "\f2b5";
+@fa-var-hard-of-hearing: "\f2a4";
+@fa-var-hashtag: "\f292";
+@fa-var-hdd-o: "\f0a0";
+@fa-var-header: "\f1dc";
+@fa-var-headphones: "\f025";
+@fa-var-heart: "\f004";
+@fa-var-heart-o: "\f08a";
+@fa-var-heartbeat: "\f21e";
+@fa-var-history: "\f1da";
+@fa-var-home: "\f015";
+@fa-var-hospital-o: "\f0f8";
+@fa-var-hotel: "\f236";
+@fa-var-hourglass: "\f254";
+@fa-var-hourglass-1: "\f251";
+@fa-var-hourglass-2: "\f252";
+@fa-var-hourglass-3: "\f253";
+@fa-var-hourglass-end: "\f253";
+@fa-var-hourglass-half: "\f252";
+@fa-var-hourglass-o: "\f250";
+@fa-var-hourglass-start: "\f251";
+@fa-var-houzz: "\f27c";
+@fa-var-html5: "\f13b";
+@fa-var-i-cursor: "\f246";
+@fa-var-id-badge: "\f2c1";
+@fa-var-id-card: "\f2c2";
+@fa-var-id-card-o: "\f2c3";
+@fa-var-ils: "\f20b";
+@fa-var-image: "\f03e";
+@fa-var-imdb: "\f2d8";
+@fa-var-inbox: "\f01c";
+@fa-var-indent: "\f03c";
+@fa-var-industry: "\f275";
+@fa-var-info: "\f129";
+@fa-var-info-circle: "\f05a";
+@fa-var-inr: "\f156";
+@fa-var-instagram: "\f16d";
+@fa-var-institution: "\f19c";
+@fa-var-internet-explorer: "\f26b";
+@fa-var-intersex: "\f224";
+@fa-var-ioxhost: "\f208";
+@fa-var-italic: "\f033";
+@fa-var-joomla: "\f1aa";
+@fa-var-jpy: "\f157";
+@fa-var-jsfiddle: "\f1cc";
+@fa-var-key: "\f084";
+@fa-var-keyboard-o: "\f11c";
+@fa-var-krw: "\f159";
+@fa-var-language: "\f1ab";
+@fa-var-laptop: "\f109";
+@fa-var-lastfm: "\f202";
+@fa-var-lastfm-square: "\f203";
+@fa-var-leaf: "\f06c";
+@fa-var-leanpub: "\f212";
+@fa-var-legal: "\f0e3";
+@fa-var-lemon-o: "\f094";
+@fa-var-level-down: "\f149";
+@fa-var-level-up: "\f148";
+@fa-var-life-bouy: "\f1cd";
+@fa-var-life-buoy: "\f1cd";
+@fa-var-life-ring: "\f1cd";
+@fa-var-life-saver: "\f1cd";
+@fa-var-lightbulb-o: "\f0eb";
+@fa-var-line-chart: "\f201";
+@fa-var-link: "\f0c1";
+@fa-var-linkedin: "\f0e1";
+@fa-var-linkedin-square: "\f08c";
+@fa-var-linode: "\f2b8";
+@fa-var-linux: "\f17c";
+@fa-var-list: "\f03a";
+@fa-var-list-alt: "\f022";
+@fa-var-list-ol: "\f0cb";
+@fa-var-list-ul: "\f0ca";
+@fa-var-location-arrow: "\f124";
+@fa-var-lock: "\f023";
+@fa-var-long-arrow-down: "\f175";
+@fa-var-long-arrow-left: "\f177";
+@fa-var-long-arrow-right: "\f178";
+@fa-var-long-arrow-up: "\f176";
+@fa-var-low-vision: "\f2a8";
+@fa-var-magic: "\f0d0";
+@fa-var-magnet: "\f076";
+@fa-var-mail-forward: "\f064";
+@fa-var-mail-reply: "\f112";
+@fa-var-mail-reply-all: "\f122";
+@fa-var-male: "\f183";
+@fa-var-map: "\f279";
+@fa-var-map-marker: "\f041";
+@fa-var-map-o: "\f278";
+@fa-var-map-pin: "\f276";
+@fa-var-map-signs: "\f277";
+@fa-var-mars: "\f222";
+@fa-var-mars-double: "\f227";
+@fa-var-mars-stroke: "\f229";
+@fa-var-mars-stroke-h: "\f22b";
+@fa-var-mars-stroke-v: "\f22a";
+@fa-var-maxcdn: "\f136";
+@fa-var-meanpath: "\f20c";
+@fa-var-medium: "\f23a";
+@fa-var-medkit: "\f0fa";
+@fa-var-meetup: "\f2e0";
+@fa-var-meh-o: "\f11a";
+@fa-var-mercury: "\f223";
+@fa-var-microchip: "\f2db";
+@fa-var-microphone: "\f130";
+@fa-var-microphone-slash: "\f131";
+@fa-var-minus: "\f068";
+@fa-var-minus-circle: "\f056";
+@fa-var-minus-square: "\f146";
+@fa-var-minus-square-o: "\f147";
+@fa-var-mixcloud: "\f289";
+@fa-var-mobile: "\f10b";
+@fa-var-mobile-phone: "\f10b";
+@fa-var-modx: "\f285";
+@fa-var-money: "\f0d6";
+@fa-var-moon-o: "\f186";
+@fa-var-mortar-board: "\f19d";
+@fa-var-motorcycle: "\f21c";
+@fa-var-mouse-pointer: "\f245";
+@fa-var-music: "\f001";
+@fa-var-navicon: "\f0c9";
+@fa-var-neuter: "\f22c";
+@fa-var-newspaper-o: "\f1ea";
+@fa-var-object-group: "\f247";
+@fa-var-object-ungroup: "\f248";
+@fa-var-odnoklassniki: "\f263";
+@fa-var-odnoklassniki-square: "\f264";
+@fa-var-opencart: "\f23d";
+@fa-var-openid: "\f19b";
+@fa-var-opera: "\f26a";
+@fa-var-optin-monster: "\f23c";
+@fa-var-outdent: "\f03b";
+@fa-var-pagelines: "\f18c";
+@fa-var-paint-brush: "\f1fc";
+@fa-var-paper-plane: "\f1d8";
+@fa-var-paper-plane-o: "\f1d9";
+@fa-var-paperclip: "\f0c6";
+@fa-var-paragraph: "\f1dd";
+@fa-var-paste: "\f0ea";
+@fa-var-pause: "\f04c";
+@fa-var-pause-circle: "\f28b";
+@fa-var-pause-circle-o: "\f28c";
+@fa-var-paw: "\f1b0";
+@fa-var-paypal: "\f1ed";
+@fa-var-pencil: "\f040";
+@fa-var-pencil-square: "\f14b";
+@fa-var-pencil-square-o: "\f044";
+@fa-var-percent: "\f295";
+@fa-var-phone: "\f095";
+@fa-var-phone-square: "\f098";
+@fa-var-photo: "\f03e";
+@fa-var-picture-o: "\f03e";
+@fa-var-pie-chart: "\f200";
+@fa-var-pied-piper: "\f2ae";
+@fa-var-pied-piper-alt: "\f1a8";
+@fa-var-pied-piper-pp: "\f1a7";
+@fa-var-pinterest: "\f0d2";
+@fa-var-pinterest-p: "\f231";
+@fa-var-pinterest-square: "\f0d3";
+@fa-var-plane: "\f072";
+@fa-var-play: "\f04b";
+@fa-var-play-circle: "\f144";
+@fa-var-play-circle-o: "\f01d";
+@fa-var-plug: "\f1e6";
+@fa-var-plus: "\f067";
+@fa-var-plus-circle: "\f055";
+@fa-var-plus-square: "\f0fe";
+@fa-var-plus-square-o: "\f196";
+@fa-var-podcast: "\f2ce";
+@fa-var-power-off: "\f011";
+@fa-var-print: "\f02f";
+@fa-var-product-hunt: "\f288";
+@fa-var-puzzle-piece: "\f12e";
+@fa-var-qq: "\f1d6";
+@fa-var-qrcode: "\f029";
+@fa-var-question: "\f128";
+@fa-var-question-circle: "\f059";
+@fa-var-question-circle-o: "\f29c";
+@fa-var-quora: "\f2c4";
+@fa-var-quote-left: "\f10d";
+@fa-var-quote-right: "\f10e";
+@fa-var-ra: "\f1d0";
+@fa-var-random: "\f074";
+@fa-var-ravelry: "\f2d9";
+@fa-var-rebel: "\f1d0";
+@fa-var-recycle: "\f1b8";
+@fa-var-reddit: "\f1a1";
+@fa-var-reddit-alien: "\f281";
+@fa-var-reddit-square: "\f1a2";
+@fa-var-refresh: "\f021";
+@fa-var-registered: "\f25d";
+@fa-var-remove: "\f00d";
+@fa-var-renren: "\f18b";
+@fa-var-reorder: "\f0c9";
+@fa-var-repeat: "\f01e";
+@fa-var-reply: "\f112";
+@fa-var-reply-all: "\f122";
+@fa-var-resistance: "\f1d0";
+@fa-var-retweet: "\f079";
+@fa-var-rmb: "\f157";
+@fa-var-road: "\f018";
+@fa-var-rocket: "\f135";
+@fa-var-rotate-left: "\f0e2";
+@fa-var-rotate-right: "\f01e";
+@fa-var-rouble: "\f158";
+@fa-var-rss: "\f09e";
+@fa-var-rss-square: "\f143";
+@fa-var-rub: "\f158";
+@fa-var-ruble: "\f158";
+@fa-var-rupee: "\f156";
+@fa-var-s15: "\f2cd";
+@fa-var-safari: "\f267";
+@fa-var-save: "\f0c7";
+@fa-var-scissors: "\f0c4";
+@fa-var-scribd: "\f28a";
+@fa-var-search: "\f002";
+@fa-var-search-minus: "\f010";
+@fa-var-search-plus: "\f00e";
+@fa-var-sellsy: "\f213";
+@fa-var-send: "\f1d8";
+@fa-var-send-o: "\f1d9";
+@fa-var-server: "\f233";
+@fa-var-share: "\f064";
+@fa-var-share-alt: "\f1e0";
+@fa-var-share-alt-square: "\f1e1";
+@fa-var-share-square: "\f14d";
+@fa-var-share-square-o: "\f045";
+@fa-var-shekel: "\f20b";
+@fa-var-sheqel: "\f20b";
+@fa-var-shield: "\f132";
+@fa-var-ship: "\f21a";
+@fa-var-shirtsinbulk: "\f214";
+@fa-var-shopping-bag: "\f290";
+@fa-var-shopping-basket: "\f291";
+@fa-var-shopping-cart: "\f07a";
+@fa-var-shower: "\f2cc";
+@fa-var-sign-in: "\f090";
+@fa-var-sign-language: "\f2a7";
+@fa-var-sign-out: "\f08b";
+@fa-var-signal: "\f012";
+@fa-var-signing: "\f2a7";
+@fa-var-simplybuilt: "\f215";
+@fa-var-sitemap: "\f0e8";
+@fa-var-skyatlas: "\f216";
+@fa-var-skype: "\f17e";
+@fa-var-slack: "\f198";
+@fa-var-sliders: "\f1de";
+@fa-var-slideshare: "\f1e7";
+@fa-var-smile-o: "\f118";
+@fa-var-snapchat: "\f2ab";
+@fa-var-snapchat-ghost: "\f2ac";
+@fa-var-snapchat-square: "\f2ad";
+@fa-var-snowflake-o: "\f2dc";
+@fa-var-soccer-ball-o: "\f1e3";
+@fa-var-sort: "\f0dc";
+@fa-var-sort-alpha-asc: "\f15d";
+@fa-var-sort-alpha-desc: "\f15e";
+@fa-var-sort-amount-asc: "\f160";
+@fa-var-sort-amount-desc: "\f161";
+@fa-var-sort-asc: "\f0de";
+@fa-var-sort-desc: "\f0dd";
+@fa-var-sort-down: "\f0dd";
+@fa-var-sort-numeric-asc: "\f162";
+@fa-var-sort-numeric-desc: "\f163";
+@fa-var-sort-up: "\f0de";
+@fa-var-soundcloud: "\f1be";
+@fa-var-space-shuttle: "\f197";
+@fa-var-spinner: "\f110";
+@fa-var-spoon: "\f1b1";
+@fa-var-spotify: "\f1bc";
+@fa-var-square: "\f0c8";
+@fa-var-square-o: "\f096";
+@fa-var-stack-exchange: "\f18d";
+@fa-var-stack-overflow: "\f16c";
+@fa-var-star: "\f005";
+@fa-var-star-half: "\f089";
+@fa-var-star-half-empty: "\f123";
+@fa-var-star-half-full: "\f123";
+@fa-var-star-half-o: "\f123";
+@fa-var-star-o: "\f006";
+@fa-var-steam: "\f1b6";
+@fa-var-steam-square: "\f1b7";
+@fa-var-step-backward: "\f048";
+@fa-var-step-forward: "\f051";
+@fa-var-stethoscope: "\f0f1";
+@fa-var-sticky-note: "\f249";
+@fa-var-sticky-note-o: "\f24a";
+@fa-var-stop: "\f04d";
+@fa-var-stop-circle: "\f28d";
+@fa-var-stop-circle-o: "\f28e";
+@fa-var-street-view: "\f21d";
+@fa-var-strikethrough: "\f0cc";
+@fa-var-stumbleupon: "\f1a4";
+@fa-var-stumbleupon-circle: "\f1a3";
+@fa-var-subscript: "\f12c";
+@fa-var-subway: "\f239";
+@fa-var-suitcase: "\f0f2";
+@fa-var-sun-o: "\f185";
+@fa-var-superpowers: "\f2dd";
+@fa-var-superscript: "\f12b";
+@fa-var-support: "\f1cd";
+@fa-var-table: "\f0ce";
+@fa-var-tablet: "\f10a";
+@fa-var-tachometer: "\f0e4";
+@fa-var-tag: "\f02b";
+@fa-var-tags: "\f02c";
+@fa-var-tasks: "\f0ae";
+@fa-var-taxi: "\f1ba";
+@fa-var-telegram: "\f2c6";
+@fa-var-television: "\f26c";
+@fa-var-tencent-weibo: "\f1d5";
+@fa-var-terminal: "\f120";
+@fa-var-text-height: "\f034";
+@fa-var-text-width: "\f035";
+@fa-var-th: "\f00a";
+@fa-var-th-large: "\f009";
+@fa-var-th-list: "\f00b";
+@fa-var-themeisle: "\f2b2";
+@fa-var-thermometer: "\f2c7";
+@fa-var-thermometer-0: "\f2cb";
+@fa-var-thermometer-1: "\f2ca";
+@fa-var-thermometer-2: "\f2c9";
+@fa-var-thermometer-3: "\f2c8";
+@fa-var-thermometer-4: "\f2c7";
+@fa-var-thermometer-empty: "\f2cb";
+@fa-var-thermometer-full: "\f2c7";
+@fa-var-thermometer-half: "\f2c9";
+@fa-var-thermometer-quarter: "\f2ca";
+@fa-var-thermometer-three-quarters: "\f2c8";
+@fa-var-thumb-tack: "\f08d";
+@fa-var-thumbs-down: "\f165";
+@fa-var-thumbs-o-down: "\f088";
+@fa-var-thumbs-o-up: "\f087";
+@fa-var-thumbs-up: "\f164";
+@fa-var-ticket: "\f145";
+@fa-var-times: "\f00d";
+@fa-var-times-circle: "\f057";
+@fa-var-times-circle-o: "\f05c";
+@fa-var-times-rectangle: "\f2d3";
+@fa-var-times-rectangle-o: "\f2d4";
+@fa-var-tint: "\f043";
+@fa-var-toggle-down: "\f150";
+@fa-var-toggle-left: "\f191";
+@fa-var-toggle-off: "\f204";
+@fa-var-toggle-on: "\f205";
+@fa-var-toggle-right: "\f152";
+@fa-var-toggle-up: "\f151";
+@fa-var-trademark: "\f25c";
+@fa-var-train: "\f238";
+@fa-var-transgender: "\f224";
+@fa-var-transgender-alt: "\f225";
+@fa-var-trash: "\f1f8";
+@fa-var-trash-o: "\f014";
+@fa-var-tree: "\f1bb";
+@fa-var-trello: "\f181";
+@fa-var-tripadvisor: "\f262";
+@fa-var-trophy: "\f091";
+@fa-var-truck: "\f0d1";
+@fa-var-try: "\f195";
+@fa-var-tty: "\f1e4";
+@fa-var-tumblr: "\f173";
+@fa-var-tumblr-square: "\f174";
+@fa-var-turkish-lira: "\f195";
+@fa-var-tv: "\f26c";
+@fa-var-twitch: "\f1e8";
+@fa-var-twitter: "\f099";
+@fa-var-twitter-square: "\f081";
+@fa-var-umbrella: "\f0e9";
+@fa-var-underline: "\f0cd";
+@fa-var-undo: "\f0e2";
+@fa-var-universal-access: "\f29a";
+@fa-var-university: "\f19c";
+@fa-var-unlink: "\f127";
+@fa-var-unlock: "\f09c";
+@fa-var-unlock-alt: "\f13e";
+@fa-var-unsorted: "\f0dc";
+@fa-var-upload: "\f093";
+@fa-var-usb: "\f287";
+@fa-var-usd: "\f155";
+@fa-var-user: "\f007";
+@fa-var-user-circle: "\f2bd";
+@fa-var-user-circle-o: "\f2be";
+@fa-var-user-md: "\f0f0";
+@fa-var-user-o: "\f2c0";
+@fa-var-user-plus: "\f234";
+@fa-var-user-secret: "\f21b";
+@fa-var-user-times: "\f235";
+@fa-var-users: "\f0c0";
+@fa-var-vcard: "\f2bb";
+@fa-var-vcard-o: "\f2bc";
+@fa-var-venus: "\f221";
+@fa-var-venus-double: "\f226";
+@fa-var-venus-mars: "\f228";
+@fa-var-viacoin: "\f237";
+@fa-var-viadeo: "\f2a9";
+@fa-var-viadeo-square: "\f2aa";
+@fa-var-video-camera: "\f03d";
+@fa-var-vimeo: "\f27d";
+@fa-var-vimeo-square: "\f194";
+@fa-var-vine: "\f1ca";
+@fa-var-vk: "\f189";
+@fa-var-volume-control-phone: "\f2a0";
+@fa-var-volume-down: "\f027";
+@fa-var-volume-off: "\f026";
+@fa-var-volume-up: "\f028";
+@fa-var-warning: "\f071";
+@fa-var-wechat: "\f1d7";
+@fa-var-weibo: "\f18a";
+@fa-var-weixin: "\f1d7";
+@fa-var-whatsapp: "\f232";
+@fa-var-wheelchair: "\f193";
+@fa-var-wheelchair-alt: "\f29b";
+@fa-var-wifi: "\f1eb";
+@fa-var-wikipedia-w: "\f266";
+@fa-var-window-close: "\f2d3";
+@fa-var-window-close-o: "\f2d4";
+@fa-var-window-maximize: "\f2d0";
+@fa-var-window-minimize: "\f2d1";
+@fa-var-window-restore: "\f2d2";
+@fa-var-windows: "\f17a";
+@fa-var-won: "\f159";
+@fa-var-wordpress: "\f19a";
+@fa-var-wpbeginner: "\f297";
+@fa-var-wpexplorer: "\f2de";
+@fa-var-wpforms: "\f298";
+@fa-var-wrench: "\f0ad";
+@fa-var-xing: "\f168";
+@fa-var-xing-square: "\f169";
+@fa-var-y-combinator: "\f23b";
+@fa-var-y-combinator-square: "\f1d4";
+@fa-var-yahoo: "\f19e";
+@fa-var-yc: "\f23b";
+@fa-var-yc-square: "\f1d4";
+@fa-var-yelp: "\f1e9";
+@fa-var-yen: "\f157";
+@fa-var-yoast: "\f2b1";
+@fa-var-youtube: "\f167";
+@fa-var-youtube-play: "\f16a";
+@fa-var-youtube-square: "\f166";
+
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_animated.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_animated.scss
new file mode 100644
index 0000000000..8a020dbfff
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_animated.scss
@@ -0,0 +1,34 @@
+// Spinning Icons
+// --------------------------
+
+.#{$fa-css-prefix}-spin {
+  -webkit-animation: fa-spin 2s infinite linear;
+          animation: fa-spin 2s infinite linear;
+}
+
+.#{$fa-css-prefix}-pulse {
+  -webkit-animation: fa-spin 1s infinite steps(8);
+          animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+            transform: rotate(359deg);
+  }
+}
+
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+            transform: rotate(359deg);
+  }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_bordered-pulled.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_bordered-pulled.scss
new file mode 100644
index 0000000000..d4b85a02f2
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_bordered-pulled.scss
@@ -0,0 +1,25 @@
+// Bordered & Pulled
+// -------------------------
+
+.#{$fa-css-prefix}-border {
+  padding: .2em .25em .15em;
+  border: solid .08em $fa-border-color;
+  border-radius: .1em;
+}
+
+.#{$fa-css-prefix}-pull-left { float: left; }
+.#{$fa-css-prefix}-pull-right { float: right; }
+
+.#{$fa-css-prefix} {
+  &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
+  &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right { float: right; }
+.pull-left { float: left; }
+
+.#{$fa-css-prefix} {
+  &.pull-left { margin-right: .3em; }
+  &.pull-right { margin-left: .3em; }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_core.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_core.scss
new file mode 100644
index 0000000000..7425ef85fc
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_core.scss
@@ -0,0 +1,12 @@
+// Base Class Definition
+// -------------------------
+
+.#{$fa-css-prefix} {
+  display: inline-block;
+  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
+  font-size: inherit; // can't have font-size inherit on line above, so need to override
+  text-rendering: auto; // optimizelegibility throws things off #1094
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_fixed-width.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_fixed-width.scss
new file mode 100644
index 0000000000..b221c98133
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_fixed-width.scss
@@ -0,0 +1,6 @@
+// Fixed Width Icons
+// -------------------------
+.#{$fa-css-prefix}-fw {
+  width: (18em / 14);
+  text-align: center;
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_icons.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_icons.scss
new file mode 100644
index 0000000000..e63e702c4d
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_icons.scss
@@ -0,0 +1,789 @@
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+   readers do not read off random characters that represent icons */
+
+.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
+.#{$fa-css-prefix}-music:before { content: $fa-var-music; }
+.#{$fa-css-prefix}-search:before { content: $fa-var-search; }
+.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
+.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
+.#{$fa-css-prefix}-star:before { content: $fa-var-star; }
+.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
+.#{$fa-css-prefix}-user:before { content: $fa-var-user; }
+.#{$fa-css-prefix}-film:before { content: $fa-var-film; }
+.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
+.#{$fa-css-prefix}-th:before { content: $fa-var-th; }
+.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
+.#{$fa-css-prefix}-check:before { content: $fa-var-check; }
+.#{$fa-css-prefix}-remove:before,
+.#{$fa-css-prefix}-close:before,
+.#{$fa-css-prefix}-times:before { content: $fa-var-times; }
+.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
+.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
+.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
+.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
+.#{$fa-css-prefix}-gear:before,
+.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
+.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
+.#{$fa-css-prefix}-home:before { content: $fa-var-home; }
+.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
+.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
+.#{$fa-css-prefix}-road:before { content: $fa-var-road; }
+.#{$fa-css-prefix}-download:before { content: $fa-var-download; }
+.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
+.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
+.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
+.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
+.#{$fa-css-prefix}-rotate-right:before,
+.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
+.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
+.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
+.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
+.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
+.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
+.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
+.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
+.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
+.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
+.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
+.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
+.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
+.#{$fa-css-prefix}-book:before { content: $fa-var-book; }
+.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
+.#{$fa-css-prefix}-print:before { content: $fa-var-print; }
+.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
+.#{$fa-css-prefix}-font:before { content: $fa-var-font; }
+.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
+.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
+.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
+.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
+.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
+.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
+.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
+.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
+.#{$fa-css-prefix}-list:before { content: $fa-var-list; }
+.#{$fa-css-prefix}-dedent:before,
+.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
+.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
+.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
+.#{$fa-css-prefix}-photo:before,
+.#{$fa-css-prefix}-image:before,
+.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
+.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
+.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
+.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
+.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
+.#{$fa-css-prefix}-edit:before,
+.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
+.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
+.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
+.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
+.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
+.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
+.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
+.#{$fa-css-prefix}-play:before { content: $fa-var-play; }
+.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
+.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
+.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
+.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
+.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
+.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
+.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
+.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
+.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
+.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
+.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
+.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
+.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
+.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
+.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
+.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
+.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
+.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
+.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
+.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
+.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
+.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
+.#{$fa-css-prefix}-mail-forward:before,
+.#{$fa-css-prefix}-share:before { content: $fa-var-share; }
+.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
+.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
+.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
+.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
+.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
+.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
+.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
+.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
+.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
+.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
+.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
+.#{$fa-css-prefix}-warning:before,
+.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
+.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
+.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
+.#{$fa-css-prefix}-random:before { content: $fa-var-random; }
+.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
+.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
+.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
+.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
+.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
+.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
+.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
+.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
+.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
+.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
+.#{$fa-css-prefix}-bar-chart-o:before,
+.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
+.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
+.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
+.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
+.#{$fa-css-prefix}-key:before { content: $fa-var-key; }
+.#{$fa-css-prefix}-gears:before,
+.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
+.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
+.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
+.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
+.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
+.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
+.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
+.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
+.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
+.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
+.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
+.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
+.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
+.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
+.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
+.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
+.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
+.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
+.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
+.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
+.#{$fa-css-prefix}-facebook-f:before,
+.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
+.#{$fa-css-prefix}-github:before { content: $fa-var-github; }
+.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
+.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
+.#{$fa-css-prefix}-feed:before,
+.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
+.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
+.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
+.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
+.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
+.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
+.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
+.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
+.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
+.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
+.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
+.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
+.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
+.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
+.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
+.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
+.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
+.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
+.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
+.#{$fa-css-prefix}-group:before,
+.#{$fa-css-prefix}-users:before { content: $fa-var-users; }
+.#{$fa-css-prefix}-chain:before,
+.#{$fa-css-prefix}-link:before { content: $fa-var-link; }
+.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
+.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
+.#{$fa-css-prefix}-cut:before,
+.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
+.#{$fa-css-prefix}-copy:before,
+.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
+.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
+.#{$fa-css-prefix}-save:before,
+.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
+.#{$fa-css-prefix}-square:before { content: $fa-var-square; }
+.#{$fa-css-prefix}-navicon:before,
+.#{$fa-css-prefix}-reorder:before,
+.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
+.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
+.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
+.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
+.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
+.#{$fa-css-prefix}-table:before { content: $fa-var-table; }
+.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
+.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
+.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
+.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
+.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
+.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
+.#{$fa-css-prefix}-money:before { content: $fa-var-money; }
+.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
+.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
+.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
+.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
+.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
+.#{$fa-css-prefix}-unsorted:before,
+.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
+.#{$fa-css-prefix}-sort-down:before,
+.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
+.#{$fa-css-prefix}-sort-up:before,
+.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
+.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
+.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
+.#{$fa-css-prefix}-rotate-left:before,
+.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
+.#{$fa-css-prefix}-legal:before,
+.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
+.#{$fa-css-prefix}-dashboard:before,
+.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
+.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
+.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
+.#{$fa-css-prefix}-flash:before,
+.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
+.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
+.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
+.#{$fa-css-prefix}-paste:before,
+.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
+.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
+.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
+.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
+.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
+.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
+.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
+.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
+.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
+.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
+.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
+.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
+.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
+.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
+.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
+.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
+.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
+.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
+.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
+.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
+.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
+.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
+.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
+.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
+.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
+.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
+.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
+.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
+.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
+.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
+.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
+.#{$fa-css-prefix}-mobile-phone:before,
+.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
+.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
+.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
+.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
+.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
+.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
+.#{$fa-css-prefix}-mail-reply:before,
+.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
+.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
+.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
+.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
+.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
+.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
+.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
+.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
+.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
+.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
+.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
+.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
+.#{$fa-css-prefix}-code:before { content: $fa-var-code; }
+.#{$fa-css-prefix}-mail-reply-all:before,
+.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
+.#{$fa-css-prefix}-star-half-empty:before,
+.#{$fa-css-prefix}-star-half-full:before,
+.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
+.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
+.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
+.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
+.#{$fa-css-prefix}-unlink:before,
+.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
+.#{$fa-css-prefix}-question:before { content: $fa-var-question; }
+.#{$fa-css-prefix}-info:before { content: $fa-var-info; }
+.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
+.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
+.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
+.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
+.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
+.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
+.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
+.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
+.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
+.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
+.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
+.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
+.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
+.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
+.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
+.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
+.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
+.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
+.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
+.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
+.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
+.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
+.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
+.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
+.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
+.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
+.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
+.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
+.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
+.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
+.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
+.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
+.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
+.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
+.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
+.#{$fa-css-prefix}-toggle-down:before,
+.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
+.#{$fa-css-prefix}-toggle-up:before,
+.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
+.#{$fa-css-prefix}-toggle-right:before,
+.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
+.#{$fa-css-prefix}-euro:before,
+.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
+.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
+.#{$fa-css-prefix}-dollar:before,
+.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
+.#{$fa-css-prefix}-rupee:before,
+.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
+.#{$fa-css-prefix}-cny:before,
+.#{$fa-css-prefix}-rmb:before,
+.#{$fa-css-prefix}-yen:before,
+.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
+.#{$fa-css-prefix}-ruble:before,
+.#{$fa-css-prefix}-rouble:before,
+.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
+.#{$fa-css-prefix}-won:before,
+.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
+.#{$fa-css-prefix}-bitcoin:before,
+.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
+.#{$fa-css-prefix}-file:before { content: $fa-var-file; }
+.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
+.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
+.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
+.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
+.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
+.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
+.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
+.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
+.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
+.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
+.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
+.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
+.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
+.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
+.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
+.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
+.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
+.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
+.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
+.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
+.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
+.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
+.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
+.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
+.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
+.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
+.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
+.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
+.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
+.#{$fa-css-prefix}-android:before { content: $fa-var-android; }
+.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
+.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
+.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
+.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
+.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
+.#{$fa-css-prefix}-female:before { content: $fa-var-female; }
+.#{$fa-css-prefix}-male:before { content: $fa-var-male; }
+.#{$fa-css-prefix}-gittip:before,
+.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
+.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
+.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
+.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
+.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
+.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
+.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
+.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
+.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
+.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
+.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
+.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
+.#{$fa-css-prefix}-toggle-left:before,
+.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
+.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
+.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
+.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
+.#{$fa-css-prefix}-turkish-lira:before,
+.#{$fa-css-prefix}-try:before { content: $fa-var-try; }
+.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
+.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
+.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
+.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
+.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
+.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
+.#{$fa-css-prefix}-institution:before,
+.#{$fa-css-prefix}-bank:before,
+.#{$fa-css-prefix}-university:before { content: $fa-var-university; }
+.#{$fa-css-prefix}-mortar-board:before,
+.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
+.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
+.#{$fa-css-prefix}-google:before { content: $fa-var-google; }
+.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
+.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
+.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
+.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
+.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
+.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
+.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }
+.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
+.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
+.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
+.#{$fa-css-prefix}-language:before { content: $fa-var-language; }
+.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
+.#{$fa-css-prefix}-building:before { content: $fa-var-building; }
+.#{$fa-css-prefix}-child:before { content: $fa-var-child; }
+.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
+.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
+.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
+.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
+.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
+.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
+.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
+.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
+.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
+.#{$fa-css-prefix}-automobile:before,
+.#{$fa-css-prefix}-car:before { content: $fa-var-car; }
+.#{$fa-css-prefix}-cab:before,
+.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
+.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
+.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
+.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
+.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
+.#{$fa-css-prefix}-database:before { content: $fa-var-database; }
+.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
+.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
+.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
+.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
+.#{$fa-css-prefix}-file-photo-o:before,
+.#{$fa-css-prefix}-file-picture-o:before,
+.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
+.#{$fa-css-prefix}-file-zip-o:before,
+.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
+.#{$fa-css-prefix}-file-sound-o:before,
+.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
+.#{$fa-css-prefix}-file-movie-o:before,
+.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
+.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
+.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
+.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
+.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
+.#{$fa-css-prefix}-life-bouy:before,
+.#{$fa-css-prefix}-life-buoy:before,
+.#{$fa-css-prefix}-life-saver:before,
+.#{$fa-css-prefix}-support:before,
+.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
+.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
+.#{$fa-css-prefix}-ra:before,
+.#{$fa-css-prefix}-resistance:before,
+.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
+.#{$fa-css-prefix}-ge:before,
+.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
+.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
+.#{$fa-css-prefix}-git:before { content: $fa-var-git; }
+.#{$fa-css-prefix}-y-combinator-square:before,
+.#{$fa-css-prefix}-yc-square:before,
+.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
+.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
+.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
+.#{$fa-css-prefix}-wechat:before,
+.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
+.#{$fa-css-prefix}-send:before,
+.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
+.#{$fa-css-prefix}-send-o:before,
+.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
+.#{$fa-css-prefix}-history:before { content: $fa-var-history; }
+.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
+.#{$fa-css-prefix}-header:before { content: $fa-var-header; }
+.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
+.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
+.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
+.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
+.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
+.#{$fa-css-prefix}-soccer-ball-o:before,
+.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
+.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
+.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
+.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
+.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
+.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
+.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
+.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
+.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
+.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
+.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
+.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
+.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
+.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
+.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
+.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
+.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
+.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
+.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
+.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
+.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
+.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
+.#{$fa-css-prefix}-at:before { content: $fa-var-at; }
+.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
+.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
+.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
+.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
+.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
+.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
+.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
+.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
+.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
+.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
+.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
+.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
+.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
+.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
+.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
+.#{$fa-css-prefix}-shekel:before,
+.#{$fa-css-prefix}-sheqel:before,
+.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
+.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
+.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
+.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
+.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
+.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
+.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
+.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
+.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
+.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
+.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
+.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
+.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
+.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
+.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
+.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
+.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
+.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
+.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
+.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
+.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
+.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
+.#{$fa-css-prefix}-intersex:before,
+.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
+.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
+.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
+.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
+.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
+.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
+.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
+.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
+.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
+.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }
+.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
+.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
+.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
+.#{$fa-css-prefix}-server:before { content: $fa-var-server; }
+.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
+.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
+.#{$fa-css-prefix}-hotel:before,
+.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
+.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
+.#{$fa-css-prefix}-train:before { content: $fa-var-train; }
+.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
+.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }
+.#{$fa-css-prefix}-yc:before,
+.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }
+.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }
+.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
+.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
+.#{$fa-css-prefix}-battery-4:before,
+.#{$fa-css-prefix}-battery:before,
+.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
+.#{$fa-css-prefix}-battery-3:before,
+.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
+.#{$fa-css-prefix}-battery-2:before,
+.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }
+.#{$fa-css-prefix}-battery-1:before,
+.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }
+.#{$fa-css-prefix}-battery-0:before,
+.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }
+.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }
+.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }
+.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }
+.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }
+.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }
+.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }
+.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }
+.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }
+.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }
+.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }
+.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }
+.#{$fa-css-prefix}-hourglass-1:before,
+.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }
+.#{$fa-css-prefix}-hourglass-2:before,
+.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }
+.#{$fa-css-prefix}-hourglass-3:before,
+.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }
+.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }
+.#{$fa-css-prefix}-hand-grab-o:before,
+.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }
+.#{$fa-css-prefix}-hand-stop-o:before,
+.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }
+.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }
+.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }
+.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }
+.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }
+.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }
+.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }
+.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }
+.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }
+.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }
+.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }
+.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }
+.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }
+.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }
+.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }
+.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }
+.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }
+.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }
+.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }
+.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }
+.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }
+.#{$fa-css-prefix}-tv:before,
+.#{$fa-css-prefix}-television:before { content: $fa-var-television; }
+.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }
+.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }
+.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }
+.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }
+.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }
+.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }
+.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }
+.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }
+.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }
+.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }
+.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }
+.#{$fa-css-prefix}-map:before { content: $fa-var-map; }
+.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }
+.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }
+.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }
+.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }
+.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }
+.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }
+.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }
+.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }
+.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }
+.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }
+.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }
+.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }
+.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }
+.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }
+.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }
+.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }
+.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }
+.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }
+.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }
+.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }
+.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }
+.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }
+.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }
+.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }
+.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }
+.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }
+.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }
+.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }
+.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }
+.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }
+.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }
+.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }
+.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }
+.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }
+.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }
+.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }
+.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }
+.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }
+.#{$fa-css-prefix}-asl-interpreting:before,
+.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }
+.#{$fa-css-prefix}-deafness:before,
+.#{$fa-css-prefix}-hard-of-hearing:before,
+.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }
+.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }
+.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }
+.#{$fa-css-prefix}-signing:before,
+.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }
+.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }
+.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }
+.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }
+.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }
+.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }
+.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }
+.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
+.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }
+.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }
+.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }
+.#{$fa-css-prefix}-google-plus-circle:before,
+.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
+.#{$fa-css-prefix}-fa:before,
+.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
+.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }
+.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }
+.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }
+.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }
+.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }
+.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }
+.#{$fa-css-prefix}-vcard:before,
+.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }
+.#{$fa-css-prefix}-vcard-o:before,
+.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }
+.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }
+.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }
+.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }
+.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }
+.#{$fa-css-prefix}-drivers-license:before,
+.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }
+.#{$fa-css-prefix}-drivers-license-o:before,
+.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }
+.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }
+.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }
+.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }
+.#{$fa-css-prefix}-thermometer-4:before,
+.#{$fa-css-prefix}-thermometer:before,
+.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }
+.#{$fa-css-prefix}-thermometer-3:before,
+.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }
+.#{$fa-css-prefix}-thermometer-2:before,
+.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }
+.#{$fa-css-prefix}-thermometer-1:before,
+.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }
+.#{$fa-css-prefix}-thermometer-0:before,
+.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }
+.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }
+.#{$fa-css-prefix}-bathtub:before,
+.#{$fa-css-prefix}-s15:before,
+.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }
+.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }
+.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }
+.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }
+.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }
+.#{$fa-css-prefix}-times-rectangle:before,
+.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }
+.#{$fa-css-prefix}-times-rectangle-o:before,
+.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }
+.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }
+.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }
+.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }
+.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }
+.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }
+.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }
+.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }
+.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }
+.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }
+.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }
+.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_larger.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_larger.scss
new file mode 100644
index 0000000000..41e9a8184a
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_larger.scss
@@ -0,0 +1,13 @@
+// Icon Sizes
+// -------------------------
+
+/* makes the font 33% larger relative to the icon container */
+.#{$fa-css-prefix}-lg {
+  font-size: (4em / 3);
+  line-height: (3em / 4);
+  vertical-align: -15%;
+}
+.#{$fa-css-prefix}-2x { font-size: 2em; }
+.#{$fa-css-prefix}-3x { font-size: 3em; }
+.#{$fa-css-prefix}-4x { font-size: 4em; }
+.#{$fa-css-prefix}-5x { font-size: 5em; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_list.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_list.scss
new file mode 100644
index 0000000000..7d1e4d54d6
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_list.scss
@@ -0,0 +1,19 @@
+// List Icons
+// -------------------------
+
+.#{$fa-css-prefix}-ul {
+  padding-left: 0;
+  margin-left: $fa-li-width;
+  list-style-type: none;
+  > li { position: relative; }
+}
+.#{$fa-css-prefix}-li {
+  position: absolute;
+  left: -$fa-li-width;
+  width: $fa-li-width;
+  top: (2em / 14);
+  text-align: center;
+  &.#{$fa-css-prefix}-lg {
+    left: -$fa-li-width + (4em / 14);
+  }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_mixins.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_mixins.scss
new file mode 100644
index 0000000000..c3bbd5745d
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_mixins.scss
@@ -0,0 +1,60 @@
+// Mixins
+// --------------------------
+
+@mixin fa-icon() {
+  display: inline-block;
+  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
+  font-size: inherit; // can't have font-size inherit on line above, so need to override
+  text-rendering: auto; // optimizelegibility throws things off #1094
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+
+}
+
+@mixin fa-icon-rotate($degrees, $rotation) {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
+  -webkit-transform: rotate($degrees);
+      -ms-transform: rotate($degrees);
+          transform: rotate($degrees);
+}
+
+@mixin fa-icon-flip($horiz, $vert, $rotation) {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
+  -webkit-transform: scale($horiz, $vert);
+      -ms-transform: scale($horiz, $vert);
+          transform: scale($horiz, $vert);
+}
+
+
+// Only display content to screen readers. A la Bootstrap 4.
+//
+// See: http://a11yproject.com/posts/how-to-hide-content/
+
+@mixin sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0,0,0,0);
+  border: 0;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+//
+// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+//
+// Credit: HTML5 Boilerplate
+
+@mixin sr-only-focusable {
+  &:active,
+  &:focus {
+    position: static;
+    width: auto;
+    height: auto;
+    margin: 0;
+    overflow: visible;
+    clip: auto;
+  }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_path.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_path.scss
new file mode 100644
index 0000000000..bb457c23a8
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_path.scss
@@ -0,0 +1,15 @@
+/* FONT PATH
+ * -------------------------- */
+
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
+  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
+    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
+    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
+    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
+    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
+//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
+  font-weight: normal;
+  font-style: normal;
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_rotated-flipped.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_rotated-flipped.scss
new file mode 100644
index 0000000000..a3558fd09c
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_rotated-flipped.scss
@@ -0,0 +1,20 @@
+// Rotated & Flipped Icons
+// -------------------------
+
+.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }
+.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
+.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
+
+.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
+.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }
+
+// Hook for IE8-9
+// -------------------------
+
+:root .#{$fa-css-prefix}-rotate-90,
+:root .#{$fa-css-prefix}-rotate-180,
+:root .#{$fa-css-prefix}-rotate-270,
+:root .#{$fa-css-prefix}-flip-horizontal,
+:root .#{$fa-css-prefix}-flip-vertical {
+  filter: none;
+}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_screen-reader.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_screen-reader.scss
new file mode 100644
index 0000000000..637426f0da
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_screen-reader.scss
@@ -0,0 +1,5 @@
+// Screen Readers
+// -------------------------
+
+.sr-only { @include sr-only(); }
+.sr-only-focusable { @include sr-only-focusable(); }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_stacked.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_stacked.scss
new file mode 100644
index 0000000000..aef7403660
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_stacked.scss
@@ -0,0 +1,20 @@
+// Stacked Icons
+// -------------------------
+
+.#{$fa-css-prefix}-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
+.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
+.#{$fa-css-prefix}-inverse { color: $fa-inverse; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_variables.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_variables.scss
new file mode 100644
index 0000000000..498fc4a087
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_variables.scss
@@ -0,0 +1,800 @@
+// Variables
+// --------------------------
+
+$fa-font-path:        "../fonts" !default;
+$fa-font-size-base:   14px !default;
+$fa-line-height-base: 1 !default;
+//$fa-font-path:        "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
+$fa-css-prefix:       fa !default;
+$fa-version:          "4.7.0" !default;
+$fa-border-color:     #eee !default;
+$fa-inverse:          #fff !default;
+$fa-li-width:         (30em / 14) !default;
+
+$fa-var-500px: "\f26e";
+$fa-var-address-book: "\f2b9";
+$fa-var-address-book-o: "\f2ba";
+$fa-var-address-card: "\f2bb";
+$fa-var-address-card-o: "\f2bc";
+$fa-var-adjust: "\f042";
+$fa-var-adn: "\f170";
+$fa-var-align-center: "\f037";
+$fa-var-align-justify: "\f039";
+$fa-var-align-left: "\f036";
+$fa-var-align-right: "\f038";
+$fa-var-amazon: "\f270";
+$fa-var-ambulance: "\f0f9";
+$fa-var-american-sign-language-interpreting: "\f2a3";
+$fa-var-anchor: "\f13d";
+$fa-var-android: "\f17b";
+$fa-var-angellist: "\f209";
+$fa-var-angle-double-down: "\f103";
+$fa-var-angle-double-left: "\f100";
+$fa-var-angle-double-right: "\f101";
+$fa-var-angle-double-up: "\f102";
+$fa-var-angle-down: "\f107";
+$fa-var-angle-left: "\f104";
+$fa-var-angle-right: "\f105";
+$fa-var-angle-up: "\f106";
+$fa-var-apple: "\f179";
+$fa-var-archive: "\f187";
+$fa-var-area-chart: "\f1fe";
+$fa-var-arrow-circle-down: "\f0ab";
+$fa-var-arrow-circle-left: "\f0a8";
+$fa-var-arrow-circle-o-down: "\f01a";
+$fa-var-arrow-circle-o-left: "\f190";
+$fa-var-arrow-circle-o-right: "\f18e";
+$fa-var-arrow-circle-o-up: "\f01b";
+$fa-var-arrow-circle-right: "\f0a9";
+$fa-var-arrow-circle-up: "\f0aa";
+$fa-var-arrow-down: "\f063";
+$fa-var-arrow-left: "\f060";
+$fa-var-arrow-right: "\f061";
+$fa-var-arrow-up: "\f062";
+$fa-var-arrows: "\f047";
+$fa-var-arrows-alt: "\f0b2";
+$fa-var-arrows-h: "\f07e";
+$fa-var-arrows-v: "\f07d";
+$fa-var-asl-interpreting: "\f2a3";
+$fa-var-assistive-listening-systems: "\f2a2";
+$fa-var-asterisk: "\f069";
+$fa-var-at: "\f1fa";
+$fa-var-audio-description: "\f29e";
+$fa-var-automobile: "\f1b9";
+$fa-var-backward: "\f04a";
+$fa-var-balance-scale: "\f24e";
+$fa-var-ban: "\f05e";
+$fa-var-bandcamp: "\f2d5";
+$fa-var-bank: "\f19c";
+$fa-var-bar-chart: "\f080";
+$fa-var-bar-chart-o: "\f080";
+$fa-var-barcode: "\f02a";
+$fa-var-bars: "\f0c9";
+$fa-var-bath: "\f2cd";
+$fa-var-bathtub: "\f2cd";
+$fa-var-battery: "\f240";
+$fa-var-battery-0: "\f244";
+$fa-var-battery-1: "\f243";
+$fa-var-battery-2: "\f242";
+$fa-var-battery-3: "\f241";
+$fa-var-battery-4: "\f240";
+$fa-var-battery-empty: "\f244";
+$fa-var-battery-full: "\f240";
+$fa-var-battery-half: "\f242";
+$fa-var-battery-quarter: "\f243";
+$fa-var-battery-three-quarters: "\f241";
+$fa-var-bed: "\f236";
+$fa-var-beer: "\f0fc";
+$fa-var-behance: "\f1b4";
+$fa-var-behance-square: "\f1b5";
+$fa-var-bell: "\f0f3";
+$fa-var-bell-o: "\f0a2";
+$fa-var-bell-slash: "\f1f6";
+$fa-var-bell-slash-o: "\f1f7";
+$fa-var-bicycle: "\f206";
+$fa-var-binoculars: "\f1e5";
+$fa-var-birthday-cake: "\f1fd";
+$fa-var-bitbucket: "\f171";
+$fa-var-bitbucket-square: "\f172";
+$fa-var-bitcoin: "\f15a";
+$fa-var-black-tie: "\f27e";
+$fa-var-blind: "\f29d";
+$fa-var-bluetooth: "\f293";
+$fa-var-bluetooth-b: "\f294";
+$fa-var-bold: "\f032";
+$fa-var-bolt: "\f0e7";
+$fa-var-bomb: "\f1e2";
+$fa-var-book: "\f02d";
+$fa-var-bookmark: "\f02e";
+$fa-var-bookmark-o: "\f097";
+$fa-var-braille: "\f2a1";
+$fa-var-briefcase: "\f0b1";
+$fa-var-btc: "\f15a";
+$fa-var-bug: "\f188";
+$fa-var-building: "\f1ad";
+$fa-var-building-o: "\f0f7";
+$fa-var-bullhorn: "\f0a1";
+$fa-var-bullseye: "\f140";
+$fa-var-bus: "\f207";
+$fa-var-buysellads: "\f20d";
+$fa-var-cab: "\f1ba";
+$fa-var-calculator: "\f1ec";
+$fa-var-calendar: "\f073";
+$fa-var-calendar-check-o: "\f274";
+$fa-var-calendar-minus-o: "\f272";
+$fa-var-calendar-o: "\f133";
+$fa-var-calendar-plus-o: "\f271";
+$fa-var-calendar-times-o: "\f273";
+$fa-var-camera: "\f030";
+$fa-var-camera-retro: "\f083";
+$fa-var-car: "\f1b9";
+$fa-var-caret-down: "\f0d7";
+$fa-var-caret-left: "\f0d9";
+$fa-var-caret-right: "\f0da";
+$fa-var-caret-square-o-down: "\f150";
+$fa-var-caret-square-o-left: "\f191";
+$fa-var-caret-square-o-right: "\f152";
+$fa-var-caret-square-o-up: "\f151";
+$fa-var-caret-up: "\f0d8";
+$fa-var-cart-arrow-down: "\f218";
+$fa-var-cart-plus: "\f217";
+$fa-var-cc: "\f20a";
+$fa-var-cc-amex: "\f1f3";
+$fa-var-cc-diners-club: "\f24c";
+$fa-var-cc-discover: "\f1f2";
+$fa-var-cc-jcb: "\f24b";
+$fa-var-cc-mastercard: "\f1f1";
+$fa-var-cc-paypal: "\f1f4";
+$fa-var-cc-stripe: "\f1f5";
+$fa-var-cc-visa: "\f1f0";
+$fa-var-certificate: "\f0a3";
+$fa-var-chain: "\f0c1";
+$fa-var-chain-broken: "\f127";
+$fa-var-check: "\f00c";
+$fa-var-check-circle: "\f058";
+$fa-var-check-circle-o: "\f05d";
+$fa-var-check-square: "\f14a";
+$fa-var-check-square-o: "\f046";
+$fa-var-chevron-circle-down: "\f13a";
+$fa-var-chevron-circle-left: "\f137";
+$fa-var-chevron-circle-right: "\f138";
+$fa-var-chevron-circle-up: "\f139";
+$fa-var-chevron-down: "\f078";
+$fa-var-chevron-left: "\f053";
+$fa-var-chevron-right: "\f054";
+$fa-var-chevron-up: "\f077";
+$fa-var-child: "\f1ae";
+$fa-var-chrome: "\f268";
+$fa-var-circle: "\f111";
+$fa-var-circle-o: "\f10c";
+$fa-var-circle-o-notch: "\f1ce";
+$fa-var-circle-thin: "\f1db";
+$fa-var-clipboard: "\f0ea";
+$fa-var-clock-o: "\f017";
+$fa-var-clone: "\f24d";
+$fa-var-close: "\f00d";
+$fa-var-cloud: "\f0c2";
+$fa-var-cloud-download: "\f0ed";
+$fa-var-cloud-upload: "\f0ee";
+$fa-var-cny: "\f157";
+$fa-var-code: "\f121";
+$fa-var-code-fork: "\f126";
+$fa-var-codepen: "\f1cb";
+$fa-var-codiepie: "\f284";
+$fa-var-coffee: "\f0f4";
+$fa-var-cog: "\f013";
+$fa-var-cogs: "\f085";
+$fa-var-columns: "\f0db";
+$fa-var-comment: "\f075";
+$fa-var-comment-o: "\f0e5";
+$fa-var-commenting: "\f27a";
+$fa-var-commenting-o: "\f27b";
+$fa-var-comments: "\f086";
+$fa-var-comments-o: "\f0e6";
+$fa-var-compass: "\f14e";
+$fa-var-compress: "\f066";
+$fa-var-connectdevelop: "\f20e";
+$fa-var-contao: "\f26d";
+$fa-var-copy: "\f0c5";
+$fa-var-copyright: "\f1f9";
+$fa-var-creative-commons: "\f25e";
+$fa-var-credit-card: "\f09d";
+$fa-var-credit-card-alt: "\f283";
+$fa-var-crop: "\f125";
+$fa-var-crosshairs: "\f05b";
+$fa-var-css3: "\f13c";
+$fa-var-cube: "\f1b2";
+$fa-var-cubes: "\f1b3";
+$fa-var-cut: "\f0c4";
+$fa-var-cutlery: "\f0f5";
+$fa-var-dashboard: "\f0e4";
+$fa-var-dashcube: "\f210";
+$fa-var-database: "\f1c0";
+$fa-var-deaf: "\f2a4";
+$fa-var-deafness: "\f2a4";
+$fa-var-dedent: "\f03b";
+$fa-var-delicious: "\f1a5";
+$fa-var-desktop: "\f108";
+$fa-var-deviantart: "\f1bd";
+$fa-var-diamond: "\f219";
+$fa-var-digg: "\f1a6";
+$fa-var-dollar: "\f155";
+$fa-var-dot-circle-o: "\f192";
+$fa-var-download: "\f019";
+$fa-var-dribbble: "\f17d";
+$fa-var-drivers-license: "\f2c2";
+$fa-var-drivers-license-o: "\f2c3";
+$fa-var-dropbox: "\f16b";
+$fa-var-drupal: "\f1a9";
+$fa-var-edge: "\f282";
+$fa-var-edit: "\f044";
+$fa-var-eercast: "\f2da";
+$fa-var-eject: "\f052";
+$fa-var-ellipsis-h: "\f141";
+$fa-var-ellipsis-v: "\f142";
+$fa-var-empire: "\f1d1";
+$fa-var-envelope: "\f0e0";
+$fa-var-envelope-o: "\f003";
+$fa-var-envelope-open: "\f2b6";
+$fa-var-envelope-open-o: "\f2b7";
+$fa-var-envelope-square: "\f199";
+$fa-var-envira: "\f299";
+$fa-var-eraser: "\f12d";
+$fa-var-etsy: "\f2d7";
+$fa-var-eur: "\f153";
+$fa-var-euro: "\f153";
+$fa-var-exchange: "\f0ec";
+$fa-var-exclamation: "\f12a";
+$fa-var-exclamation-circle: "\f06a";
+$fa-var-exclamation-triangle: "\f071";
+$fa-var-expand: "\f065";
+$fa-var-expeditedssl: "\f23e";
+$fa-var-external-link: "\f08e";
+$fa-var-external-link-square: "\f14c";
+$fa-var-eye: "\f06e";
+$fa-var-eye-slash: "\f070";
+$fa-var-eyedropper: "\f1fb";
+$fa-var-fa: "\f2b4";
+$fa-var-facebook: "\f09a";
+$fa-var-facebook-f: "\f09a";
+$fa-var-facebook-official: "\f230";
+$fa-var-facebook-square: "\f082";
+$fa-var-fast-backward: "\f049";
+$fa-var-fast-forward: "\f050";
+$fa-var-fax: "\f1ac";
+$fa-var-feed: "\f09e";
+$fa-var-female: "\f182";
+$fa-var-fighter-jet: "\f0fb";
+$fa-var-file: "\f15b";
+$fa-var-file-archive-o: "\f1c6";
+$fa-var-file-audio-o: "\f1c7";
+$fa-var-file-code-o: "\f1c9";
+$fa-var-file-excel-o: "\f1c3";
+$fa-var-file-image-o: "\f1c5";
+$fa-var-file-movie-o: "\f1c8";
+$fa-var-file-o: "\f016";
+$fa-var-file-pdf-o: "\f1c1";
+$fa-var-file-photo-o: "\f1c5";
+$fa-var-file-picture-o: "\f1c5";
+$fa-var-file-powerpoint-o: "\f1c4";
+$fa-var-file-sound-o: "\f1c7";
+$fa-var-file-text: "\f15c";
+$fa-var-file-text-o: "\f0f6";
+$fa-var-file-video-o: "\f1c8";
+$fa-var-file-word-o: "\f1c2";
+$fa-var-file-zip-o: "\f1c6";
+$fa-var-files-o: "\f0c5";
+$fa-var-film: "\f008";
+$fa-var-filter: "\f0b0";
+$fa-var-fire: "\f06d";
+$fa-var-fire-extinguisher: "\f134";
+$fa-var-firefox: "\f269";
+$fa-var-first-order: "\f2b0";
+$fa-var-flag: "\f024";
+$fa-var-flag-checkered: "\f11e";
+$fa-var-flag-o: "\f11d";
+$fa-var-flash: "\f0e7";
+$fa-var-flask: "\f0c3";
+$fa-var-flickr: "\f16e";
+$fa-var-floppy-o: "\f0c7";
+$fa-var-folder: "\f07b";
+$fa-var-folder-o: "\f114";
+$fa-var-folder-open: "\f07c";
+$fa-var-folder-open-o: "\f115";
+$fa-var-font: "\f031";
+$fa-var-font-awesome: "\f2b4";
+$fa-var-fonticons: "\f280";
+$fa-var-fort-awesome: "\f286";
+$fa-var-forumbee: "\f211";
+$fa-var-forward: "\f04e";
+$fa-var-foursquare: "\f180";
+$fa-var-free-code-camp: "\f2c5";
+$fa-var-frown-o: "\f119";
+$fa-var-futbol-o: "\f1e3";
+$fa-var-gamepad: "\f11b";
+$fa-var-gavel: "\f0e3";
+$fa-var-gbp: "\f154";
+$fa-var-ge: "\f1d1";
+$fa-var-gear: "\f013";
+$fa-var-gears: "\f085";
+$fa-var-genderless: "\f22d";
+$fa-var-get-pocket: "\f265";
+$fa-var-gg: "\f260";
+$fa-var-gg-circle: "\f261";
+$fa-var-gift: "\f06b";
+$fa-var-git: "\f1d3";
+$fa-var-git-square: "\f1d2";
+$fa-var-github: "\f09b";
+$fa-var-github-alt: "\f113";
+$fa-var-github-square: "\f092";
+$fa-var-gitlab: "\f296";
+$fa-var-gittip: "\f184";
+$fa-var-glass: "\f000";
+$fa-var-glide: "\f2a5";
+$fa-var-glide-g: "\f2a6";
+$fa-var-globe: "\f0ac";
+$fa-var-google: "\f1a0";
+$fa-var-google-plus: "\f0d5";
+$fa-var-google-plus-circle: "\f2b3";
+$fa-var-google-plus-official: "\f2b3";
+$fa-var-google-plus-square: "\f0d4";
+$fa-var-google-wallet: "\f1ee";
+$fa-var-graduation-cap: "\f19d";
+$fa-var-gratipay: "\f184";
+$fa-var-grav: "\f2d6";
+$fa-var-group: "\f0c0";
+$fa-var-h-square: "\f0fd";
+$fa-var-hacker-news: "\f1d4";
+$fa-var-hand-grab-o: "\f255";
+$fa-var-hand-lizard-o: "\f258";
+$fa-var-hand-o-down: "\f0a7";
+$fa-var-hand-o-left: "\f0a5";
+$fa-var-hand-o-right: "\f0a4";
+$fa-var-hand-o-up: "\f0a6";
+$fa-var-hand-paper-o: "\f256";
+$fa-var-hand-peace-o: "\f25b";
+$fa-var-hand-pointer-o: "\f25a";
+$fa-var-hand-rock-o: "\f255";
+$fa-var-hand-scissors-o: "\f257";
+$fa-var-hand-spock-o: "\f259";
+$fa-var-hand-stop-o: "\f256";
+$fa-var-handshake-o: "\f2b5";
+$fa-var-hard-of-hearing: "\f2a4";
+$fa-var-hashtag: "\f292";
+$fa-var-hdd-o: "\f0a0";
+$fa-var-header: "\f1dc";
+$fa-var-headphones: "\f025";
+$fa-var-heart: "\f004";
+$fa-var-heart-o: "\f08a";
+$fa-var-heartbeat: "\f21e";
+$fa-var-history: "\f1da";
+$fa-var-home: "\f015";
+$fa-var-hospital-o: "\f0f8";
+$fa-var-hotel: "\f236";
+$fa-var-hourglass: "\f254";
+$fa-var-hourglass-1: "\f251";
+$fa-var-hourglass-2: "\f252";
+$fa-var-hourglass-3: "\f253";
+$fa-var-hourglass-end: "\f253";
+$fa-var-hourglass-half: "\f252";
+$fa-var-hourglass-o: "\f250";
+$fa-var-hourglass-start: "\f251";
+$fa-var-houzz: "\f27c";
+$fa-var-html5: "\f13b";
+$fa-var-i-cursor: "\f246";
+$fa-var-id-badge: "\f2c1";
+$fa-var-id-card: "\f2c2";
+$fa-var-id-card-o: "\f2c3";
+$fa-var-ils: "\f20b";
+$fa-var-image: "\f03e";
+$fa-var-imdb: "\f2d8";
+$fa-var-inbox: "\f01c";
+$fa-var-indent: "\f03c";
+$fa-var-industry: "\f275";
+$fa-var-info: "\f129";
+$fa-var-info-circle: "\f05a";
+$fa-var-inr: "\f156";
+$fa-var-instagram: "\f16d";
+$fa-var-institution: "\f19c";
+$fa-var-internet-explorer: "\f26b";
+$fa-var-intersex: "\f224";
+$fa-var-ioxhost: "\f208";
+$fa-var-italic: "\f033";
+$fa-var-joomla: "\f1aa";
+$fa-var-jpy: "\f157";
+$fa-var-jsfiddle: "\f1cc";
+$fa-var-key: "\f084";
+$fa-var-keyboard-o: "\f11c";
+$fa-var-krw: "\f159";
+$fa-var-language: "\f1ab";
+$fa-var-laptop: "\f109";
+$fa-var-lastfm: "\f202";
+$fa-var-lastfm-square: "\f203";
+$fa-var-leaf: "\f06c";
+$fa-var-leanpub: "\f212";
+$fa-var-legal: "\f0e3";
+$fa-var-lemon-o: "\f094";
+$fa-var-level-down: "\f149";
+$fa-var-level-up: "\f148";
+$fa-var-life-bouy: "\f1cd";
+$fa-var-life-buoy: "\f1cd";
+$fa-var-life-ring: "\f1cd";
+$fa-var-life-saver: "\f1cd";
+$fa-var-lightbulb-o: "\f0eb";
+$fa-var-line-chart: "\f201";
+$fa-var-link: "\f0c1";
+$fa-var-linkedin: "\f0e1";
+$fa-var-linkedin-square: "\f08c";
+$fa-var-linode: "\f2b8";
+$fa-var-linux: "\f17c";
+$fa-var-list: "\f03a";
+$fa-var-list-alt: "\f022";
+$fa-var-list-ol: "\f0cb";
+$fa-var-list-ul: "\f0ca";
+$fa-var-location-arrow: "\f124";
+$fa-var-lock: "\f023";
+$fa-var-long-arrow-down: "\f175";
+$fa-var-long-arrow-left: "\f177";
+$fa-var-long-arrow-right: "\f178";
+$fa-var-long-arrow-up: "\f176";
+$fa-var-low-vision: "\f2a8";
+$fa-var-magic: "\f0d0";
+$fa-var-magnet: "\f076";
+$fa-var-mail-forward: "\f064";
+$fa-var-mail-reply: "\f112";
+$fa-var-mail-reply-all: "\f122";
+$fa-var-male: "\f183";
+$fa-var-map: "\f279";
+$fa-var-map-marker: "\f041";
+$fa-var-map-o: "\f278";
+$fa-var-map-pin: "\f276";
+$fa-var-map-signs: "\f277";
+$fa-var-mars: "\f222";
+$fa-var-mars-double: "\f227";
+$fa-var-mars-stroke: "\f229";
+$fa-var-mars-stroke-h: "\f22b";
+$fa-var-mars-stroke-v: "\f22a";
+$fa-var-maxcdn: "\f136";
+$fa-var-meanpath: "\f20c";
+$fa-var-medium: "\f23a";
+$fa-var-medkit: "\f0fa";
+$fa-var-meetup: "\f2e0";
+$fa-var-meh-o: "\f11a";
+$fa-var-mercury: "\f223";
+$fa-var-microchip: "\f2db";
+$fa-var-microphone: "\f130";
+$fa-var-microphone-slash: "\f131";
+$fa-var-minus: "\f068";
+$fa-var-minus-circle: "\f056";
+$fa-var-minus-square: "\f146";
+$fa-var-minus-square-o: "\f147";
+$fa-var-mixcloud: "\f289";
+$fa-var-mobile: "\f10b";
+$fa-var-mobile-phone: "\f10b";
+$fa-var-modx: "\f285";
+$fa-var-money: "\f0d6";
+$fa-var-moon-o: "\f186";
+$fa-var-mortar-board: "\f19d";
+$fa-var-motorcycle: "\f21c";
+$fa-var-mouse-pointer: "\f245";
+$fa-var-music: "\f001";
+$fa-var-navicon: "\f0c9";
+$fa-var-neuter: "\f22c";
+$fa-var-newspaper-o: "\f1ea";
+$fa-var-object-group: "\f247";
+$fa-var-object-ungroup: "\f248";
+$fa-var-odnoklassniki: "\f263";
+$fa-var-odnoklassniki-square: "\f264";
+$fa-var-opencart: "\f23d";
+$fa-var-openid: "\f19b";
+$fa-var-opera: "\f26a";
+$fa-var-optin-monster: "\f23c";
+$fa-var-outdent: "\f03b";
+$fa-var-pagelines: "\f18c";
+$fa-var-paint-brush: "\f1fc";
+$fa-var-paper-plane: "\f1d8";
+$fa-var-paper-plane-o: "\f1d9";
+$fa-var-paperclip: "\f0c6";
+$fa-var-paragraph: "\f1dd";
+$fa-var-paste: "\f0ea";
+$fa-var-pause: "\f04c";
+$fa-var-pause-circle: "\f28b";
+$fa-var-pause-circle-o: "\f28c";
+$fa-var-paw: "\f1b0";
+$fa-var-paypal: "\f1ed";
+$fa-var-pencil: "\f040";
+$fa-var-pencil-square: "\f14b";
+$fa-var-pencil-square-o: "\f044";
+$fa-var-percent: "\f295";
+$fa-var-phone: "\f095";
+$fa-var-phone-square: "\f098";
+$fa-var-photo: "\f03e";
+$fa-var-picture-o: "\f03e";
+$fa-var-pie-chart: "\f200";
+$fa-var-pied-piper: "\f2ae";
+$fa-var-pied-piper-alt: "\f1a8";
+$fa-var-pied-piper-pp: "\f1a7";
+$fa-var-pinterest: "\f0d2";
+$fa-var-pinterest-p: "\f231";
+$fa-var-pinterest-square: "\f0d3";
+$fa-var-plane: "\f072";
+$fa-var-play: "\f04b";
+$fa-var-play-circle: "\f144";
+$fa-var-play-circle-o: "\f01d";
+$fa-var-plug: "\f1e6";
+$fa-var-plus: "\f067";
+$fa-var-plus-circle: "\f055";
+$fa-var-plus-square: "\f0fe";
+$fa-var-plus-square-o: "\f196";
+$fa-var-podcast: "\f2ce";
+$fa-var-power-off: "\f011";
+$fa-var-print: "\f02f";
+$fa-var-product-hunt: "\f288";
+$fa-var-puzzle-piece: "\f12e";
+$fa-var-qq: "\f1d6";
+$fa-var-qrcode: "\f029";
+$fa-var-question: "\f128";
+$fa-var-question-circle: "\f059";
+$fa-var-question-circle-o: "\f29c";
+$fa-var-quora: "\f2c4";
+$fa-var-quote-left: "\f10d";
+$fa-var-quote-right: "\f10e";
+$fa-var-ra: "\f1d0";
+$fa-var-random: "\f074";
+$fa-var-ravelry: "\f2d9";
+$fa-var-rebel: "\f1d0";
+$fa-var-recycle: "\f1b8";
+$fa-var-reddit: "\f1a1";
+$fa-var-reddit-alien: "\f281";
+$fa-var-reddit-square: "\f1a2";
+$fa-var-refresh: "\f021";
+$fa-var-registered: "\f25d";
+$fa-var-remove: "\f00d";
+$fa-var-renren: "\f18b";
+$fa-var-reorder: "\f0c9";
+$fa-var-repeat: "\f01e";
+$fa-var-reply: "\f112";
+$fa-var-reply-all: "\f122";
+$fa-var-resistance: "\f1d0";
+$fa-var-retweet: "\f079";
+$fa-var-rmb: "\f157";
+$fa-var-road: "\f018";
+$fa-var-rocket: "\f135";
+$fa-var-rotate-left: "\f0e2";
+$fa-var-rotate-right: "\f01e";
+$fa-var-rouble: "\f158";
+$fa-var-rss: "\f09e";
+$fa-var-rss-square: "\f143";
+$fa-var-rub: "\f158";
+$fa-var-ruble: "\f158";
+$fa-var-rupee: "\f156";
+$fa-var-s15: "\f2cd";
+$fa-var-safari: "\f267";
+$fa-var-save: "\f0c7";
+$fa-var-scissors: "\f0c4";
+$fa-var-scribd: "\f28a";
+$fa-var-search: "\f002";
+$fa-var-search-minus: "\f010";
+$fa-var-search-plus: "\f00e";
+$fa-var-sellsy: "\f213";
+$fa-var-send: "\f1d8";
+$fa-var-send-o: "\f1d9";
+$fa-var-server: "\f233";
+$fa-var-share: "\f064";
+$fa-var-share-alt: "\f1e0";
+$fa-var-share-alt-square: "\f1e1";
+$fa-var-share-square: "\f14d";
+$fa-var-share-square-o: "\f045";
+$fa-var-shekel: "\f20b";
+$fa-var-sheqel: "\f20b";
+$fa-var-shield: "\f132";
+$fa-var-ship: "\f21a";
+$fa-var-shirtsinbulk: "\f214";
+$fa-var-shopping-bag: "\f290";
+$fa-var-shopping-basket: "\f291";
+$fa-var-shopping-cart: "\f07a";
+$fa-var-shower: "\f2cc";
+$fa-var-sign-in: "\f090";
+$fa-var-sign-language: "\f2a7";
+$fa-var-sign-out: "\f08b";
+$fa-var-signal: "\f012";
+$fa-var-signing: "\f2a7";
+$fa-var-simplybuilt: "\f215";
+$fa-var-sitemap: "\f0e8";
+$fa-var-skyatlas: "\f216";
+$fa-var-skype: "\f17e";
+$fa-var-slack: "\f198";
+$fa-var-sliders: "\f1de";
+$fa-var-slideshare: "\f1e7";
+$fa-var-smile-o: "\f118";
+$fa-var-snapchat: "\f2ab";
+$fa-var-snapchat-ghost: "\f2ac";
+$fa-var-snapchat-square: "\f2ad";
+$fa-var-snowflake-o: "\f2dc";
+$fa-var-soccer-ball-o: "\f1e3";
+$fa-var-sort: "\f0dc";
+$fa-var-sort-alpha-asc: "\f15d";
+$fa-var-sort-alpha-desc: "\f15e";
+$fa-var-sort-amount-asc: "\f160";
+$fa-var-sort-amount-desc: "\f161";
+$fa-var-sort-asc: "\f0de";
+$fa-var-sort-desc: "\f0dd";
+$fa-var-sort-down: "\f0dd";
+$fa-var-sort-numeric-asc: "\f162";
+$fa-var-sort-numeric-desc: "\f163";
+$fa-var-sort-up: "\f0de";
+$fa-var-soundcloud: "\f1be";
+$fa-var-space-shuttle: "\f197";
+$fa-var-spinner: "\f110";
+$fa-var-spoon: "\f1b1";
+$fa-var-spotify: "\f1bc";
+$fa-var-square: "\f0c8";
+$fa-var-square-o: "\f096";
+$fa-var-stack-exchange: "\f18d";
+$fa-var-stack-overflow: "\f16c";
+$fa-var-star: "\f005";
+$fa-var-star-half: "\f089";
+$fa-var-star-half-empty: "\f123";
+$fa-var-star-half-full: "\f123";
+$fa-var-star-half-o: "\f123";
+$fa-var-star-o: "\f006";
+$fa-var-steam: "\f1b6";
+$fa-var-steam-square: "\f1b7";
+$fa-var-step-backward: "\f048";
+$fa-var-step-forward: "\f051";
+$fa-var-stethoscope: "\f0f1";
+$fa-var-sticky-note: "\f249";
+$fa-var-sticky-note-o: "\f24a";
+$fa-var-stop: "\f04d";
+$fa-var-stop-circle: "\f28d";
+$fa-var-stop-circle-o: "\f28e";
+$fa-var-street-view: "\f21d";
+$fa-var-strikethrough: "\f0cc";
+$fa-var-stumbleupon: "\f1a4";
+$fa-var-stumbleupon-circle: "\f1a3";
+$fa-var-subscript: "\f12c";
+$fa-var-subway: "\f239";
+$fa-var-suitcase: "\f0f2";
+$fa-var-sun-o: "\f185";
+$fa-var-superpowers: "\f2dd";
+$fa-var-superscript: "\f12b";
+$fa-var-support: "\f1cd";
+$fa-var-table: "\f0ce";
+$fa-var-tablet: "\f10a";
+$fa-var-tachometer: "\f0e4";
+$fa-var-tag: "\f02b";
+$fa-var-tags: "\f02c";
+$fa-var-tasks: "\f0ae";
+$fa-var-taxi: "\f1ba";
+$fa-var-telegram: "\f2c6";
+$fa-var-television: "\f26c";
+$fa-var-tencent-weibo: "\f1d5";
+$fa-var-terminal: "\f120";
+$fa-var-text-height: "\f034";
+$fa-var-text-width: "\f035";
+$fa-var-th: "\f00a";
+$fa-var-th-large: "\f009";
+$fa-var-th-list: "\f00b";
+$fa-var-themeisle: "\f2b2";
+$fa-var-thermometer: "\f2c7";
+$fa-var-thermometer-0: "\f2cb";
+$fa-var-thermometer-1: "\f2ca";
+$fa-var-thermometer-2: "\f2c9";
+$fa-var-thermometer-3: "\f2c8";
+$fa-var-thermometer-4: "\f2c7";
+$fa-var-thermometer-empty: "\f2cb";
+$fa-var-thermometer-full: "\f2c7";
+$fa-var-thermometer-half: "\f2c9";
+$fa-var-thermometer-quarter: "\f2ca";
+$fa-var-thermometer-three-quarters: "\f2c8";
+$fa-var-thumb-tack: "\f08d";
+$fa-var-thumbs-down: "\f165";
+$fa-var-thumbs-o-down: "\f088";
+$fa-var-thumbs-o-up: "\f087";
+$fa-var-thumbs-up: "\f164";
+$fa-var-ticket: "\f145";
+$fa-var-times: "\f00d";
+$fa-var-times-circle: "\f057";
+$fa-var-times-circle-o: "\f05c";
+$fa-var-times-rectangle: "\f2d3";
+$fa-var-times-rectangle-o: "\f2d4";
+$fa-var-tint: "\f043";
+$fa-var-toggle-down: "\f150";
+$fa-var-toggle-left: "\f191";
+$fa-var-toggle-off: "\f204";
+$fa-var-toggle-on: "\f205";
+$fa-var-toggle-right: "\f152";
+$fa-var-toggle-up: "\f151";
+$fa-var-trademark: "\f25c";
+$fa-var-train: "\f238";
+$fa-var-transgender: "\f224";
+$fa-var-transgender-alt: "\f225";
+$fa-var-trash: "\f1f8";
+$fa-var-trash-o: "\f014";
+$fa-var-tree: "\f1bb";
+$fa-var-trello: "\f181";
+$fa-var-tripadvisor: "\f262";
+$fa-var-trophy: "\f091";
+$fa-var-truck: "\f0d1";
+$fa-var-try: "\f195";
+$fa-var-tty: "\f1e4";
+$fa-var-tumblr: "\f173";
+$fa-var-tumblr-square: "\f174";
+$fa-var-turkish-lira: "\f195";
+$fa-var-tv: "\f26c";
+$fa-var-twitch: "\f1e8";
+$fa-var-twitter: "\f099";
+$fa-var-twitter-square: "\f081";
+$fa-var-umbrella: "\f0e9";
+$fa-var-underline: "\f0cd";
+$fa-var-undo: "\f0e2";
+$fa-var-universal-access: "\f29a";
+$fa-var-university: "\f19c";
+$fa-var-unlink: "\f127";
+$fa-var-unlock: "\f09c";
+$fa-var-unlock-alt: "\f13e";
+$fa-var-unsorted: "\f0dc";
+$fa-var-upload: "\f093";
+$fa-var-usb: "\f287";
+$fa-var-usd: "\f155";
+$fa-var-user: "\f007";
+$fa-var-user-circle: "\f2bd";
+$fa-var-user-circle-o: "\f2be";
+$fa-var-user-md: "\f0f0";
+$fa-var-user-o: "\f2c0";
+$fa-var-user-plus: "\f234";
+$fa-var-user-secret: "\f21b";
+$fa-var-user-times: "\f235";
+$fa-var-users: "\f0c0";
+$fa-var-vcard: "\f2bb";
+$fa-var-vcard-o: "\f2bc";
+$fa-var-venus: "\f221";
+$fa-var-venus-double: "\f226";
+$fa-var-venus-mars: "\f228";
+$fa-var-viacoin: "\f237";
+$fa-var-viadeo: "\f2a9";
+$fa-var-viadeo-square: "\f2aa";
+$fa-var-video-camera: "\f03d";
+$fa-var-vimeo: "\f27d";
+$fa-var-vimeo-square: "\f194";
+$fa-var-vine: "\f1ca";
+$fa-var-vk: "\f189";
+$fa-var-volume-control-phone: "\f2a0";
+$fa-var-volume-down: "\f027";
+$fa-var-volume-off: "\f026";
+$fa-var-volume-up: "\f028";
+$fa-var-warning: "\f071";
+$fa-var-wechat: "\f1d7";
+$fa-var-weibo: "\f18a";
+$fa-var-weixin: "\f1d7";
+$fa-var-whatsapp: "\f232";
+$fa-var-wheelchair: "\f193";
+$fa-var-wheelchair-alt: "\f29b";
+$fa-var-wifi: "\f1eb";
+$fa-var-wikipedia-w: "\f266";
+$fa-var-window-close: "\f2d3";
+$fa-var-window-close-o: "\f2d4";
+$fa-var-window-maximize: "\f2d0";
+$fa-var-window-minimize: "\f2d1";
+$fa-var-window-restore: "\f2d2";
+$fa-var-windows: "\f17a";
+$fa-var-won: "\f159";
+$fa-var-wordpress: "\f19a";
+$fa-var-wpbeginner: "\f297";
+$fa-var-wpexplorer: "\f2de";
+$fa-var-wpforms: "\f298";
+$fa-var-wrench: "\f0ad";
+$fa-var-xing: "\f168";
+$fa-var-xing-square: "\f169";
+$fa-var-y-combinator: "\f23b";
+$fa-var-y-combinator-square: "\f1d4";
+$fa-var-yahoo: "\f19e";
+$fa-var-yc: "\f23b";
+$fa-var-yc-square: "\f1d4";
+$fa-var-yelp: "\f1e9";
+$fa-var-yen: "\f157";
+$fa-var-yoast: "\f2b1";
+$fa-var-youtube: "\f167";
+$fa-var-youtube-play: "\f16a";
+$fa-var-youtube-square: "\f166";
+
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/font-awesome.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/font-awesome.scss
new file mode 100644
index 0000000000..f1c83aaa5d
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/font-awesome.scss
@@ -0,0 +1,18 @@
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+@import "variables";
+@import "mixins";
+@import "path";
+@import "core";
+@import "larger";
+@import "fixed-width";
+@import "list";
+@import "bordered-pulled";
+@import "animated";
+@import "rotated-flipped";
+@import "stacked";
+@import "icons";
+@import "screen-reader";
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index b49e6cd61d..4cc88760bb 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -29,6 +29,7 @@
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/themes/default/theme.min.css' />
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/select2.css' />
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/select2-bootstrap.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.min.css' />
   <tmpl_if name='logged_in' value='n'><link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/login.css' /></tmpl_if>
 </head>
 
-- 
GitLab


From 3f058ea1311d2906b31c0616205ede623e2522fb Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 18:49:05 +0200
Subject: [PATCH 409/571] Remove unnecessary files

---
 .../font-awesome-4.7.0/HELP-US-OUT.txt        |    7 -
 .../font-awesome-4.7.0/css/font-awesome.css   | 2337 -----------------
 .../font-awesome-4.7.0/less/animated.less     |   34 -
 .../less/bordered-pulled.less                 |   25 -
 .../font-awesome-4.7.0/less/core.less         |   12 -
 .../font-awesome-4.7.0/less/fixed-width.less  |    6 -
 .../font-awesome-4.7.0/less/font-awesome.less |   18 -
 .../font-awesome-4.7.0/less/icons.less        |  789 ------
 .../font-awesome-4.7.0/less/larger.less       |   13 -
 .../font-awesome-4.7.0/less/list.less         |   19 -
 .../font-awesome-4.7.0/less/mixins.less       |   60 -
 .../font-awesome-4.7.0/less/path.less         |   15 -
 .../less/rotated-flipped.less                 |   20 -
 .../less/screen-reader.less                   |    5 -
 .../font-awesome-4.7.0/less/stacked.less      |   20 -
 .../font-awesome-4.7.0/less/variables.less    |  800 ------
 .../font-awesome-4.7.0/scss/_animated.scss    |   34 -
 .../scss/_bordered-pulled.scss                |   25 -
 .../font-awesome-4.7.0/scss/_core.scss        |   12 -
 .../font-awesome-4.7.0/scss/_fixed-width.scss |    6 -
 .../font-awesome-4.7.0/scss/_icons.scss       |  789 ------
 .../font-awesome-4.7.0/scss/_larger.scss      |   13 -
 .../font-awesome-4.7.0/scss/_list.scss        |   19 -
 .../font-awesome-4.7.0/scss/_mixins.scss      |   60 -
 .../font-awesome-4.7.0/scss/_path.scss        |   15 -
 .../scss/_rotated-flipped.scss                |   20 -
 .../scss/_screen-reader.scss                  |    5 -
 .../font-awesome-4.7.0/scss/_stacked.scss     |   20 -
 .../font-awesome-4.7.0/scss/_variables.scss   |  800 ------
 .../font-awesome-4.7.0/scss/font-awesome.scss |   18 -
 30 files changed, 6016 deletions(-)
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/HELP-US-OUT.txt
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.css
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/animated.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/bordered-pulled.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/core.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/fixed-width.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/font-awesome.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/icons.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/larger.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/list.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/mixins.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/path.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/rotated-flipped.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/screen-reader.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/stacked.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/variables.less
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_animated.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_bordered-pulled.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_core.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_fixed-width.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_icons.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_larger.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_list.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_mixins.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_path.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_rotated-flipped.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_screen-reader.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_stacked.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_variables.scss
 delete mode 100644 interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/font-awesome.scss

diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/HELP-US-OUT.txt b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/HELP-US-OUT.txt
deleted file mode 100644
index 83d083dd77..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/HELP-US-OUT.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
-Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
-comprehensive icon sets or copy and paste your own.
-
-Please. Check it out.
-
--Dave Gandy
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.css b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.css
deleted file mode 100644
index ee906a8196..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/css/font-awesome.css
+++ /dev/null
@@ -1,2337 +0,0 @@
-/*!
- *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
-  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-.fa {
-  display: inline-block;
-  font: normal normal normal 14px/1 FontAwesome;
-  font-size: inherit;
-  text-rendering: auto;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-/* makes the font 33% larger relative to the icon container */
-.fa-lg {
-  font-size: 1.33333333em;
-  line-height: 0.75em;
-  vertical-align: -15%;
-}
-.fa-2x {
-  font-size: 2em;
-}
-.fa-3x {
-  font-size: 3em;
-}
-.fa-4x {
-  font-size: 4em;
-}
-.fa-5x {
-  font-size: 5em;
-}
-.fa-fw {
-  width: 1.28571429em;
-  text-align: center;
-}
-.fa-ul {
-  padding-left: 0;
-  margin-left: 2.14285714em;
-  list-style-type: none;
-}
-.fa-ul > li {
-  position: relative;
-}
-.fa-li {
-  position: absolute;
-  left: -2.14285714em;
-  width: 2.14285714em;
-  top: 0.14285714em;
-  text-align: center;
-}
-.fa-li.fa-lg {
-  left: -1.85714286em;
-}
-.fa-border {
-  padding: .2em .25em .15em;
-  border: solid 0.08em #eeeeee;
-  border-radius: .1em;
-}
-.fa-pull-left {
-  float: left;
-}
-.fa-pull-right {
-  float: right;
-}
-.fa.fa-pull-left {
-  margin-right: .3em;
-}
-.fa.fa-pull-right {
-  margin-left: .3em;
-}
-/* Deprecated as of 4.4.0 */
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-.fa.pull-left {
-  margin-right: .3em;
-}
-.fa.pull-right {
-  margin-left: .3em;
-}
-.fa-spin {
-  -webkit-animation: fa-spin 2s infinite linear;
-  animation: fa-spin 2s infinite linear;
-}
-.fa-pulse {
-  -webkit-animation: fa-spin 1s infinite steps(8);
-  animation: fa-spin 1s infinite steps(8);
-}
-@-webkit-keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-    transform: rotate(359deg);
-  }
-}
-@keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-    transform: rotate(359deg);
-  }
-}
-.fa-rotate-90 {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
-  -webkit-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  transform: rotate(90deg);
-}
-.fa-rotate-180 {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
-  -webkit-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  transform: rotate(180deg);
-}
-.fa-rotate-270 {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
-  -webkit-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  transform: rotate(270deg);
-}
-.fa-flip-horizontal {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
-  -webkit-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-.fa-flip-vertical {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-  -webkit-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-:root .fa-rotate-90,
-:root .fa-rotate-180,
-:root .fa-rotate-270,
-:root .fa-flip-horizontal,
-:root .fa-flip-vertical {
-  filter: none;
-}
-.fa-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.fa-stack-1x,
-.fa-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.fa-stack-1x {
-  line-height: inherit;
-}
-.fa-stack-2x {
-  font-size: 2em;
-}
-.fa-inverse {
-  color: #ffffff;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-.fa-glass:before {
-  content: "\f000";
-}
-.fa-music:before {
-  content: "\f001";
-}
-.fa-search:before {
-  content: "\f002";
-}
-.fa-envelope-o:before {
-  content: "\f003";
-}
-.fa-heart:before {
-  content: "\f004";
-}
-.fa-star:before {
-  content: "\f005";
-}
-.fa-star-o:before {
-  content: "\f006";
-}
-.fa-user:before {
-  content: "\f007";
-}
-.fa-film:before {
-  content: "\f008";
-}
-.fa-th-large:before {
-  content: "\f009";
-}
-.fa-th:before {
-  content: "\f00a";
-}
-.fa-th-list:before {
-  content: "\f00b";
-}
-.fa-check:before {
-  content: "\f00c";
-}
-.fa-remove:before,
-.fa-close:before,
-.fa-times:before {
-  content: "\f00d";
-}
-.fa-search-plus:before {
-  content: "\f00e";
-}
-.fa-search-minus:before {
-  content: "\f010";
-}
-.fa-power-off:before {
-  content: "\f011";
-}
-.fa-signal:before {
-  content: "\f012";
-}
-.fa-gear:before,
-.fa-cog:before {
-  content: "\f013";
-}
-.fa-trash-o:before {
-  content: "\f014";
-}
-.fa-home:before {
-  content: "\f015";
-}
-.fa-file-o:before {
-  content: "\f016";
-}
-.fa-clock-o:before {
-  content: "\f017";
-}
-.fa-road:before {
-  content: "\f018";
-}
-.fa-download:before {
-  content: "\f019";
-}
-.fa-arrow-circle-o-down:before {
-  content: "\f01a";
-}
-.fa-arrow-circle-o-up:before {
-  content: "\f01b";
-}
-.fa-inbox:before {
-  content: "\f01c";
-}
-.fa-play-circle-o:before {
-  content: "\f01d";
-}
-.fa-rotate-right:before,
-.fa-repeat:before {
-  content: "\f01e";
-}
-.fa-refresh:before {
-  content: "\f021";
-}
-.fa-list-alt:before {
-  content: "\f022";
-}
-.fa-lock:before {
-  content: "\f023";
-}
-.fa-flag:before {
-  content: "\f024";
-}
-.fa-headphones:before {
-  content: "\f025";
-}
-.fa-volume-off:before {
-  content: "\f026";
-}
-.fa-volume-down:before {
-  content: "\f027";
-}
-.fa-volume-up:before {
-  content: "\f028";
-}
-.fa-qrcode:before {
-  content: "\f029";
-}
-.fa-barcode:before {
-  content: "\f02a";
-}
-.fa-tag:before {
-  content: "\f02b";
-}
-.fa-tags:before {
-  content: "\f02c";
-}
-.fa-book:before {
-  content: "\f02d";
-}
-.fa-bookmark:before {
-  content: "\f02e";
-}
-.fa-print:before {
-  content: "\f02f";
-}
-.fa-camera:before {
-  content: "\f030";
-}
-.fa-font:before {
-  content: "\f031";
-}
-.fa-bold:before {
-  content: "\f032";
-}
-.fa-italic:before {
-  content: "\f033";
-}
-.fa-text-height:before {
-  content: "\f034";
-}
-.fa-text-width:before {
-  content: "\f035";
-}
-.fa-align-left:before {
-  content: "\f036";
-}
-.fa-align-center:before {
-  content: "\f037";
-}
-.fa-align-right:before {
-  content: "\f038";
-}
-.fa-align-justify:before {
-  content: "\f039";
-}
-.fa-list:before {
-  content: "\f03a";
-}
-.fa-dedent:before,
-.fa-outdent:before {
-  content: "\f03b";
-}
-.fa-indent:before {
-  content: "\f03c";
-}
-.fa-video-camera:before {
-  content: "\f03d";
-}
-.fa-photo:before,
-.fa-image:before,
-.fa-picture-o:before {
-  content: "\f03e";
-}
-.fa-pencil:before {
-  content: "\f040";
-}
-.fa-map-marker:before {
-  content: "\f041";
-}
-.fa-adjust:before {
-  content: "\f042";
-}
-.fa-tint:before {
-  content: "\f043";
-}
-.fa-edit:before,
-.fa-pencil-square-o:before {
-  content: "\f044";
-}
-.fa-share-square-o:before {
-  content: "\f045";
-}
-.fa-check-square-o:before {
-  content: "\f046";
-}
-.fa-arrows:before {
-  content: "\f047";
-}
-.fa-step-backward:before {
-  content: "\f048";
-}
-.fa-fast-backward:before {
-  content: "\f049";
-}
-.fa-backward:before {
-  content: "\f04a";
-}
-.fa-play:before {
-  content: "\f04b";
-}
-.fa-pause:before {
-  content: "\f04c";
-}
-.fa-stop:before {
-  content: "\f04d";
-}
-.fa-forward:before {
-  content: "\f04e";
-}
-.fa-fast-forward:before {
-  content: "\f050";
-}
-.fa-step-forward:before {
-  content: "\f051";
-}
-.fa-eject:before {
-  content: "\f052";
-}
-.fa-chevron-left:before {
-  content: "\f053";
-}
-.fa-chevron-right:before {
-  content: "\f054";
-}
-.fa-plus-circle:before {
-  content: "\f055";
-}
-.fa-minus-circle:before {
-  content: "\f056";
-}
-.fa-times-circle:before {
-  content: "\f057";
-}
-.fa-check-circle:before {
-  content: "\f058";
-}
-.fa-question-circle:before {
-  content: "\f059";
-}
-.fa-info-circle:before {
-  content: "\f05a";
-}
-.fa-crosshairs:before {
-  content: "\f05b";
-}
-.fa-times-circle-o:before {
-  content: "\f05c";
-}
-.fa-check-circle-o:before {
-  content: "\f05d";
-}
-.fa-ban:before {
-  content: "\f05e";
-}
-.fa-arrow-left:before {
-  content: "\f060";
-}
-.fa-arrow-right:before {
-  content: "\f061";
-}
-.fa-arrow-up:before {
-  content: "\f062";
-}
-.fa-arrow-down:before {
-  content: "\f063";
-}
-.fa-mail-forward:before,
-.fa-share:before {
-  content: "\f064";
-}
-.fa-expand:before {
-  content: "\f065";
-}
-.fa-compress:before {
-  content: "\f066";
-}
-.fa-plus:before {
-  content: "\f067";
-}
-.fa-minus:before {
-  content: "\f068";
-}
-.fa-asterisk:before {
-  content: "\f069";
-}
-.fa-exclamation-circle:before {
-  content: "\f06a";
-}
-.fa-gift:before {
-  content: "\f06b";
-}
-.fa-leaf:before {
-  content: "\f06c";
-}
-.fa-fire:before {
-  content: "\f06d";
-}
-.fa-eye:before {
-  content: "\f06e";
-}
-.fa-eye-slash:before {
-  content: "\f070";
-}
-.fa-warning:before,
-.fa-exclamation-triangle:before {
-  content: "\f071";
-}
-.fa-plane:before {
-  content: "\f072";
-}
-.fa-calendar:before {
-  content: "\f073";
-}
-.fa-random:before {
-  content: "\f074";
-}
-.fa-comment:before {
-  content: "\f075";
-}
-.fa-magnet:before {
-  content: "\f076";
-}
-.fa-chevron-up:before {
-  content: "\f077";
-}
-.fa-chevron-down:before {
-  content: "\f078";
-}
-.fa-retweet:before {
-  content: "\f079";
-}
-.fa-shopping-cart:before {
-  content: "\f07a";
-}
-.fa-folder:before {
-  content: "\f07b";
-}
-.fa-folder-open:before {
-  content: "\f07c";
-}
-.fa-arrows-v:before {
-  content: "\f07d";
-}
-.fa-arrows-h:before {
-  content: "\f07e";
-}
-.fa-bar-chart-o:before,
-.fa-bar-chart:before {
-  content: "\f080";
-}
-.fa-twitter-square:before {
-  content: "\f081";
-}
-.fa-facebook-square:before {
-  content: "\f082";
-}
-.fa-camera-retro:before {
-  content: "\f083";
-}
-.fa-key:before {
-  content: "\f084";
-}
-.fa-gears:before,
-.fa-cogs:before {
-  content: "\f085";
-}
-.fa-comments:before {
-  content: "\f086";
-}
-.fa-thumbs-o-up:before {
-  content: "\f087";
-}
-.fa-thumbs-o-down:before {
-  content: "\f088";
-}
-.fa-star-half:before {
-  content: "\f089";
-}
-.fa-heart-o:before {
-  content: "\f08a";
-}
-.fa-sign-out:before {
-  content: "\f08b";
-}
-.fa-linkedin-square:before {
-  content: "\f08c";
-}
-.fa-thumb-tack:before {
-  content: "\f08d";
-}
-.fa-external-link:before {
-  content: "\f08e";
-}
-.fa-sign-in:before {
-  content: "\f090";
-}
-.fa-trophy:before {
-  content: "\f091";
-}
-.fa-github-square:before {
-  content: "\f092";
-}
-.fa-upload:before {
-  content: "\f093";
-}
-.fa-lemon-o:before {
-  content: "\f094";
-}
-.fa-phone:before {
-  content: "\f095";
-}
-.fa-square-o:before {
-  content: "\f096";
-}
-.fa-bookmark-o:before {
-  content: "\f097";
-}
-.fa-phone-square:before {
-  content: "\f098";
-}
-.fa-twitter:before {
-  content: "\f099";
-}
-.fa-facebook-f:before,
-.fa-facebook:before {
-  content: "\f09a";
-}
-.fa-github:before {
-  content: "\f09b";
-}
-.fa-unlock:before {
-  content: "\f09c";
-}
-.fa-credit-card:before {
-  content: "\f09d";
-}
-.fa-feed:before,
-.fa-rss:before {
-  content: "\f09e";
-}
-.fa-hdd-o:before {
-  content: "\f0a0";
-}
-.fa-bullhorn:before {
-  content: "\f0a1";
-}
-.fa-bell:before {
-  content: "\f0f3";
-}
-.fa-certificate:before {
-  content: "\f0a3";
-}
-.fa-hand-o-right:before {
-  content: "\f0a4";
-}
-.fa-hand-o-left:before {
-  content: "\f0a5";
-}
-.fa-hand-o-up:before {
-  content: "\f0a6";
-}
-.fa-hand-o-down:before {
-  content: "\f0a7";
-}
-.fa-arrow-circle-left:before {
-  content: "\f0a8";
-}
-.fa-arrow-circle-right:before {
-  content: "\f0a9";
-}
-.fa-arrow-circle-up:before {
-  content: "\f0aa";
-}
-.fa-arrow-circle-down:before {
-  content: "\f0ab";
-}
-.fa-globe:before {
-  content: "\f0ac";
-}
-.fa-wrench:before {
-  content: "\f0ad";
-}
-.fa-tasks:before {
-  content: "\f0ae";
-}
-.fa-filter:before {
-  content: "\f0b0";
-}
-.fa-briefcase:before {
-  content: "\f0b1";
-}
-.fa-arrows-alt:before {
-  content: "\f0b2";
-}
-.fa-group:before,
-.fa-users:before {
-  content: "\f0c0";
-}
-.fa-chain:before,
-.fa-link:before {
-  content: "\f0c1";
-}
-.fa-cloud:before {
-  content: "\f0c2";
-}
-.fa-flask:before {
-  content: "\f0c3";
-}
-.fa-cut:before,
-.fa-scissors:before {
-  content: "\f0c4";
-}
-.fa-copy:before,
-.fa-files-o:before {
-  content: "\f0c5";
-}
-.fa-paperclip:before {
-  content: "\f0c6";
-}
-.fa-save:before,
-.fa-floppy-o:before {
-  content: "\f0c7";
-}
-.fa-square:before {
-  content: "\f0c8";
-}
-.fa-navicon:before,
-.fa-reorder:before,
-.fa-bars:before {
-  content: "\f0c9";
-}
-.fa-list-ul:before {
-  content: "\f0ca";
-}
-.fa-list-ol:before {
-  content: "\f0cb";
-}
-.fa-strikethrough:before {
-  content: "\f0cc";
-}
-.fa-underline:before {
-  content: "\f0cd";
-}
-.fa-table:before {
-  content: "\f0ce";
-}
-.fa-magic:before {
-  content: "\f0d0";
-}
-.fa-truck:before {
-  content: "\f0d1";
-}
-.fa-pinterest:before {
-  content: "\f0d2";
-}
-.fa-pinterest-square:before {
-  content: "\f0d3";
-}
-.fa-google-plus-square:before {
-  content: "\f0d4";
-}
-.fa-google-plus:before {
-  content: "\f0d5";
-}
-.fa-money:before {
-  content: "\f0d6";
-}
-.fa-caret-down:before {
-  content: "\f0d7";
-}
-.fa-caret-up:before {
-  content: "\f0d8";
-}
-.fa-caret-left:before {
-  content: "\f0d9";
-}
-.fa-caret-right:before {
-  content: "\f0da";
-}
-.fa-columns:before {
-  content: "\f0db";
-}
-.fa-unsorted:before,
-.fa-sort:before {
-  content: "\f0dc";
-}
-.fa-sort-down:before,
-.fa-sort-desc:before {
-  content: "\f0dd";
-}
-.fa-sort-up:before,
-.fa-sort-asc:before {
-  content: "\f0de";
-}
-.fa-envelope:before {
-  content: "\f0e0";
-}
-.fa-linkedin:before {
-  content: "\f0e1";
-}
-.fa-rotate-left:before,
-.fa-undo:before {
-  content: "\f0e2";
-}
-.fa-legal:before,
-.fa-gavel:before {
-  content: "\f0e3";
-}
-.fa-dashboard:before,
-.fa-tachometer:before {
-  content: "\f0e4";
-}
-.fa-comment-o:before {
-  content: "\f0e5";
-}
-.fa-comments-o:before {
-  content: "\f0e6";
-}
-.fa-flash:before,
-.fa-bolt:before {
-  content: "\f0e7";
-}
-.fa-sitemap:before {
-  content: "\f0e8";
-}
-.fa-umbrella:before {
-  content: "\f0e9";
-}
-.fa-paste:before,
-.fa-clipboard:before {
-  content: "\f0ea";
-}
-.fa-lightbulb-o:before {
-  content: "\f0eb";
-}
-.fa-exchange:before {
-  content: "\f0ec";
-}
-.fa-cloud-download:before {
-  content: "\f0ed";
-}
-.fa-cloud-upload:before {
-  content: "\f0ee";
-}
-.fa-user-md:before {
-  content: "\f0f0";
-}
-.fa-stethoscope:before {
-  content: "\f0f1";
-}
-.fa-suitcase:before {
-  content: "\f0f2";
-}
-.fa-bell-o:before {
-  content: "\f0a2";
-}
-.fa-coffee:before {
-  content: "\f0f4";
-}
-.fa-cutlery:before {
-  content: "\f0f5";
-}
-.fa-file-text-o:before {
-  content: "\f0f6";
-}
-.fa-building-o:before {
-  content: "\f0f7";
-}
-.fa-hospital-o:before {
-  content: "\f0f8";
-}
-.fa-ambulance:before {
-  content: "\f0f9";
-}
-.fa-medkit:before {
-  content: "\f0fa";
-}
-.fa-fighter-jet:before {
-  content: "\f0fb";
-}
-.fa-beer:before {
-  content: "\f0fc";
-}
-.fa-h-square:before {
-  content: "\f0fd";
-}
-.fa-plus-square:before {
-  content: "\f0fe";
-}
-.fa-angle-double-left:before {
-  content: "\f100";
-}
-.fa-angle-double-right:before {
-  content: "\f101";
-}
-.fa-angle-double-up:before {
-  content: "\f102";
-}
-.fa-angle-double-down:before {
-  content: "\f103";
-}
-.fa-angle-left:before {
-  content: "\f104";
-}
-.fa-angle-right:before {
-  content: "\f105";
-}
-.fa-angle-up:before {
-  content: "\f106";
-}
-.fa-angle-down:before {
-  content: "\f107";
-}
-.fa-desktop:before {
-  content: "\f108";
-}
-.fa-laptop:before {
-  content: "\f109";
-}
-.fa-tablet:before {
-  content: "\f10a";
-}
-.fa-mobile-phone:before,
-.fa-mobile:before {
-  content: "\f10b";
-}
-.fa-circle-o:before {
-  content: "\f10c";
-}
-.fa-quote-left:before {
-  content: "\f10d";
-}
-.fa-quote-right:before {
-  content: "\f10e";
-}
-.fa-spinner:before {
-  content: "\f110";
-}
-.fa-circle:before {
-  content: "\f111";
-}
-.fa-mail-reply:before,
-.fa-reply:before {
-  content: "\f112";
-}
-.fa-github-alt:before {
-  content: "\f113";
-}
-.fa-folder-o:before {
-  content: "\f114";
-}
-.fa-folder-open-o:before {
-  content: "\f115";
-}
-.fa-smile-o:before {
-  content: "\f118";
-}
-.fa-frown-o:before {
-  content: "\f119";
-}
-.fa-meh-o:before {
-  content: "\f11a";
-}
-.fa-gamepad:before {
-  content: "\f11b";
-}
-.fa-keyboard-o:before {
-  content: "\f11c";
-}
-.fa-flag-o:before {
-  content: "\f11d";
-}
-.fa-flag-checkered:before {
-  content: "\f11e";
-}
-.fa-terminal:before {
-  content: "\f120";
-}
-.fa-code:before {
-  content: "\f121";
-}
-.fa-mail-reply-all:before,
-.fa-reply-all:before {
-  content: "\f122";
-}
-.fa-star-half-empty:before,
-.fa-star-half-full:before,
-.fa-star-half-o:before {
-  content: "\f123";
-}
-.fa-location-arrow:before {
-  content: "\f124";
-}
-.fa-crop:before {
-  content: "\f125";
-}
-.fa-code-fork:before {
-  content: "\f126";
-}
-.fa-unlink:before,
-.fa-chain-broken:before {
-  content: "\f127";
-}
-.fa-question:before {
-  content: "\f128";
-}
-.fa-info:before {
-  content: "\f129";
-}
-.fa-exclamation:before {
-  content: "\f12a";
-}
-.fa-superscript:before {
-  content: "\f12b";
-}
-.fa-subscript:before {
-  content: "\f12c";
-}
-.fa-eraser:before {
-  content: "\f12d";
-}
-.fa-puzzle-piece:before {
-  content: "\f12e";
-}
-.fa-microphone:before {
-  content: "\f130";
-}
-.fa-microphone-slash:before {
-  content: "\f131";
-}
-.fa-shield:before {
-  content: "\f132";
-}
-.fa-calendar-o:before {
-  content: "\f133";
-}
-.fa-fire-extinguisher:before {
-  content: "\f134";
-}
-.fa-rocket:before {
-  content: "\f135";
-}
-.fa-maxcdn:before {
-  content: "\f136";
-}
-.fa-chevron-circle-left:before {
-  content: "\f137";
-}
-.fa-chevron-circle-right:before {
-  content: "\f138";
-}
-.fa-chevron-circle-up:before {
-  content: "\f139";
-}
-.fa-chevron-circle-down:before {
-  content: "\f13a";
-}
-.fa-html5:before {
-  content: "\f13b";
-}
-.fa-css3:before {
-  content: "\f13c";
-}
-.fa-anchor:before {
-  content: "\f13d";
-}
-.fa-unlock-alt:before {
-  content: "\f13e";
-}
-.fa-bullseye:before {
-  content: "\f140";
-}
-.fa-ellipsis-h:before {
-  content: "\f141";
-}
-.fa-ellipsis-v:before {
-  content: "\f142";
-}
-.fa-rss-square:before {
-  content: "\f143";
-}
-.fa-play-circle:before {
-  content: "\f144";
-}
-.fa-ticket:before {
-  content: "\f145";
-}
-.fa-minus-square:before {
-  content: "\f146";
-}
-.fa-minus-square-o:before {
-  content: "\f147";
-}
-.fa-level-up:before {
-  content: "\f148";
-}
-.fa-level-down:before {
-  content: "\f149";
-}
-.fa-check-square:before {
-  content: "\f14a";
-}
-.fa-pencil-square:before {
-  content: "\f14b";
-}
-.fa-external-link-square:before {
-  content: "\f14c";
-}
-.fa-share-square:before {
-  content: "\f14d";
-}
-.fa-compass:before {
-  content: "\f14e";
-}
-.fa-toggle-down:before,
-.fa-caret-square-o-down:before {
-  content: "\f150";
-}
-.fa-toggle-up:before,
-.fa-caret-square-o-up:before {
-  content: "\f151";
-}
-.fa-toggle-right:before,
-.fa-caret-square-o-right:before {
-  content: "\f152";
-}
-.fa-euro:before,
-.fa-eur:before {
-  content: "\f153";
-}
-.fa-gbp:before {
-  content: "\f154";
-}
-.fa-dollar:before,
-.fa-usd:before {
-  content: "\f155";
-}
-.fa-rupee:before,
-.fa-inr:before {
-  content: "\f156";
-}
-.fa-cny:before,
-.fa-rmb:before,
-.fa-yen:before,
-.fa-jpy:before {
-  content: "\f157";
-}
-.fa-ruble:before,
-.fa-rouble:before,
-.fa-rub:before {
-  content: "\f158";
-}
-.fa-won:before,
-.fa-krw:before {
-  content: "\f159";
-}
-.fa-bitcoin:before,
-.fa-btc:before {
-  content: "\f15a";
-}
-.fa-file:before {
-  content: "\f15b";
-}
-.fa-file-text:before {
-  content: "\f15c";
-}
-.fa-sort-alpha-asc:before {
-  content: "\f15d";
-}
-.fa-sort-alpha-desc:before {
-  content: "\f15e";
-}
-.fa-sort-amount-asc:before {
-  content: "\f160";
-}
-.fa-sort-amount-desc:before {
-  content: "\f161";
-}
-.fa-sort-numeric-asc:before {
-  content: "\f162";
-}
-.fa-sort-numeric-desc:before {
-  content: "\f163";
-}
-.fa-thumbs-up:before {
-  content: "\f164";
-}
-.fa-thumbs-down:before {
-  content: "\f165";
-}
-.fa-youtube-square:before {
-  content: "\f166";
-}
-.fa-youtube:before {
-  content: "\f167";
-}
-.fa-xing:before {
-  content: "\f168";
-}
-.fa-xing-square:before {
-  content: "\f169";
-}
-.fa-youtube-play:before {
-  content: "\f16a";
-}
-.fa-dropbox:before {
-  content: "\f16b";
-}
-.fa-stack-overflow:before {
-  content: "\f16c";
-}
-.fa-instagram:before {
-  content: "\f16d";
-}
-.fa-flickr:before {
-  content: "\f16e";
-}
-.fa-adn:before {
-  content: "\f170";
-}
-.fa-bitbucket:before {
-  content: "\f171";
-}
-.fa-bitbucket-square:before {
-  content: "\f172";
-}
-.fa-tumblr:before {
-  content: "\f173";
-}
-.fa-tumblr-square:before {
-  content: "\f174";
-}
-.fa-long-arrow-down:before {
-  content: "\f175";
-}
-.fa-long-arrow-up:before {
-  content: "\f176";
-}
-.fa-long-arrow-left:before {
-  content: "\f177";
-}
-.fa-long-arrow-right:before {
-  content: "\f178";
-}
-.fa-apple:before {
-  content: "\f179";
-}
-.fa-windows:before {
-  content: "\f17a";
-}
-.fa-android:before {
-  content: "\f17b";
-}
-.fa-linux:before {
-  content: "\f17c";
-}
-.fa-dribbble:before {
-  content: "\f17d";
-}
-.fa-skype:before {
-  content: "\f17e";
-}
-.fa-foursquare:before {
-  content: "\f180";
-}
-.fa-trello:before {
-  content: "\f181";
-}
-.fa-female:before {
-  content: "\f182";
-}
-.fa-male:before {
-  content: "\f183";
-}
-.fa-gittip:before,
-.fa-gratipay:before {
-  content: "\f184";
-}
-.fa-sun-o:before {
-  content: "\f185";
-}
-.fa-moon-o:before {
-  content: "\f186";
-}
-.fa-archive:before {
-  content: "\f187";
-}
-.fa-bug:before {
-  content: "\f188";
-}
-.fa-vk:before {
-  content: "\f189";
-}
-.fa-weibo:before {
-  content: "\f18a";
-}
-.fa-renren:before {
-  content: "\f18b";
-}
-.fa-pagelines:before {
-  content: "\f18c";
-}
-.fa-stack-exchange:before {
-  content: "\f18d";
-}
-.fa-arrow-circle-o-right:before {
-  content: "\f18e";
-}
-.fa-arrow-circle-o-left:before {
-  content: "\f190";
-}
-.fa-toggle-left:before,
-.fa-caret-square-o-left:before {
-  content: "\f191";
-}
-.fa-dot-circle-o:before {
-  content: "\f192";
-}
-.fa-wheelchair:before {
-  content: "\f193";
-}
-.fa-vimeo-square:before {
-  content: "\f194";
-}
-.fa-turkish-lira:before,
-.fa-try:before {
-  content: "\f195";
-}
-.fa-plus-square-o:before {
-  content: "\f196";
-}
-.fa-space-shuttle:before {
-  content: "\f197";
-}
-.fa-slack:before {
-  content: "\f198";
-}
-.fa-envelope-square:before {
-  content: "\f199";
-}
-.fa-wordpress:before {
-  content: "\f19a";
-}
-.fa-openid:before {
-  content: "\f19b";
-}
-.fa-institution:before,
-.fa-bank:before,
-.fa-university:before {
-  content: "\f19c";
-}
-.fa-mortar-board:before,
-.fa-graduation-cap:before {
-  content: "\f19d";
-}
-.fa-yahoo:before {
-  content: "\f19e";
-}
-.fa-google:before {
-  content: "\f1a0";
-}
-.fa-reddit:before {
-  content: "\f1a1";
-}
-.fa-reddit-square:before {
-  content: "\f1a2";
-}
-.fa-stumbleupon-circle:before {
-  content: "\f1a3";
-}
-.fa-stumbleupon:before {
-  content: "\f1a4";
-}
-.fa-delicious:before {
-  content: "\f1a5";
-}
-.fa-digg:before {
-  content: "\f1a6";
-}
-.fa-pied-piper-pp:before {
-  content: "\f1a7";
-}
-.fa-pied-piper-alt:before {
-  content: "\f1a8";
-}
-.fa-drupal:before {
-  content: "\f1a9";
-}
-.fa-joomla:before {
-  content: "\f1aa";
-}
-.fa-language:before {
-  content: "\f1ab";
-}
-.fa-fax:before {
-  content: "\f1ac";
-}
-.fa-building:before {
-  content: "\f1ad";
-}
-.fa-child:before {
-  content: "\f1ae";
-}
-.fa-paw:before {
-  content: "\f1b0";
-}
-.fa-spoon:before {
-  content: "\f1b1";
-}
-.fa-cube:before {
-  content: "\f1b2";
-}
-.fa-cubes:before {
-  content: "\f1b3";
-}
-.fa-behance:before {
-  content: "\f1b4";
-}
-.fa-behance-square:before {
-  content: "\f1b5";
-}
-.fa-steam:before {
-  content: "\f1b6";
-}
-.fa-steam-square:before {
-  content: "\f1b7";
-}
-.fa-recycle:before {
-  content: "\f1b8";
-}
-.fa-automobile:before,
-.fa-car:before {
-  content: "\f1b9";
-}
-.fa-cab:before,
-.fa-taxi:before {
-  content: "\f1ba";
-}
-.fa-tree:before {
-  content: "\f1bb";
-}
-.fa-spotify:before {
-  content: "\f1bc";
-}
-.fa-deviantart:before {
-  content: "\f1bd";
-}
-.fa-soundcloud:before {
-  content: "\f1be";
-}
-.fa-database:before {
-  content: "\f1c0";
-}
-.fa-file-pdf-o:before {
-  content: "\f1c1";
-}
-.fa-file-word-o:before {
-  content: "\f1c2";
-}
-.fa-file-excel-o:before {
-  content: "\f1c3";
-}
-.fa-file-powerpoint-o:before {
-  content: "\f1c4";
-}
-.fa-file-photo-o:before,
-.fa-file-picture-o:before,
-.fa-file-image-o:before {
-  content: "\f1c5";
-}
-.fa-file-zip-o:before,
-.fa-file-archive-o:before {
-  content: "\f1c6";
-}
-.fa-file-sound-o:before,
-.fa-file-audio-o:before {
-  content: "\f1c7";
-}
-.fa-file-movie-o:before,
-.fa-file-video-o:before {
-  content: "\f1c8";
-}
-.fa-file-code-o:before {
-  content: "\f1c9";
-}
-.fa-vine:before {
-  content: "\f1ca";
-}
-.fa-codepen:before {
-  content: "\f1cb";
-}
-.fa-jsfiddle:before {
-  content: "\f1cc";
-}
-.fa-life-bouy:before,
-.fa-life-buoy:before,
-.fa-life-saver:before,
-.fa-support:before,
-.fa-life-ring:before {
-  content: "\f1cd";
-}
-.fa-circle-o-notch:before {
-  content: "\f1ce";
-}
-.fa-ra:before,
-.fa-resistance:before,
-.fa-rebel:before {
-  content: "\f1d0";
-}
-.fa-ge:before,
-.fa-empire:before {
-  content: "\f1d1";
-}
-.fa-git-square:before {
-  content: "\f1d2";
-}
-.fa-git:before {
-  content: "\f1d3";
-}
-.fa-y-combinator-square:before,
-.fa-yc-square:before,
-.fa-hacker-news:before {
-  content: "\f1d4";
-}
-.fa-tencent-weibo:before {
-  content: "\f1d5";
-}
-.fa-qq:before {
-  content: "\f1d6";
-}
-.fa-wechat:before,
-.fa-weixin:before {
-  content: "\f1d7";
-}
-.fa-send:before,
-.fa-paper-plane:before {
-  content: "\f1d8";
-}
-.fa-send-o:before,
-.fa-paper-plane-o:before {
-  content: "\f1d9";
-}
-.fa-history:before {
-  content: "\f1da";
-}
-.fa-circle-thin:before {
-  content: "\f1db";
-}
-.fa-header:before {
-  content: "\f1dc";
-}
-.fa-paragraph:before {
-  content: "\f1dd";
-}
-.fa-sliders:before {
-  content: "\f1de";
-}
-.fa-share-alt:before {
-  content: "\f1e0";
-}
-.fa-share-alt-square:before {
-  content: "\f1e1";
-}
-.fa-bomb:before {
-  content: "\f1e2";
-}
-.fa-soccer-ball-o:before,
-.fa-futbol-o:before {
-  content: "\f1e3";
-}
-.fa-tty:before {
-  content: "\f1e4";
-}
-.fa-binoculars:before {
-  content: "\f1e5";
-}
-.fa-plug:before {
-  content: "\f1e6";
-}
-.fa-slideshare:before {
-  content: "\f1e7";
-}
-.fa-twitch:before {
-  content: "\f1e8";
-}
-.fa-yelp:before {
-  content: "\f1e9";
-}
-.fa-newspaper-o:before {
-  content: "\f1ea";
-}
-.fa-wifi:before {
-  content: "\f1eb";
-}
-.fa-calculator:before {
-  content: "\f1ec";
-}
-.fa-paypal:before {
-  content: "\f1ed";
-}
-.fa-google-wallet:before {
-  content: "\f1ee";
-}
-.fa-cc-visa:before {
-  content: "\f1f0";
-}
-.fa-cc-mastercard:before {
-  content: "\f1f1";
-}
-.fa-cc-discover:before {
-  content: "\f1f2";
-}
-.fa-cc-amex:before {
-  content: "\f1f3";
-}
-.fa-cc-paypal:before {
-  content: "\f1f4";
-}
-.fa-cc-stripe:before {
-  content: "\f1f5";
-}
-.fa-bell-slash:before {
-  content: "\f1f6";
-}
-.fa-bell-slash-o:before {
-  content: "\f1f7";
-}
-.fa-trash:before {
-  content: "\f1f8";
-}
-.fa-copyright:before {
-  content: "\f1f9";
-}
-.fa-at:before {
-  content: "\f1fa";
-}
-.fa-eyedropper:before {
-  content: "\f1fb";
-}
-.fa-paint-brush:before {
-  content: "\f1fc";
-}
-.fa-birthday-cake:before {
-  content: "\f1fd";
-}
-.fa-area-chart:before {
-  content: "\f1fe";
-}
-.fa-pie-chart:before {
-  content: "\f200";
-}
-.fa-line-chart:before {
-  content: "\f201";
-}
-.fa-lastfm:before {
-  content: "\f202";
-}
-.fa-lastfm-square:before {
-  content: "\f203";
-}
-.fa-toggle-off:before {
-  content: "\f204";
-}
-.fa-toggle-on:before {
-  content: "\f205";
-}
-.fa-bicycle:before {
-  content: "\f206";
-}
-.fa-bus:before {
-  content: "\f207";
-}
-.fa-ioxhost:before {
-  content: "\f208";
-}
-.fa-angellist:before {
-  content: "\f209";
-}
-.fa-cc:before {
-  content: "\f20a";
-}
-.fa-shekel:before,
-.fa-sheqel:before,
-.fa-ils:before {
-  content: "\f20b";
-}
-.fa-meanpath:before {
-  content: "\f20c";
-}
-.fa-buysellads:before {
-  content: "\f20d";
-}
-.fa-connectdevelop:before {
-  content: "\f20e";
-}
-.fa-dashcube:before {
-  content: "\f210";
-}
-.fa-forumbee:before {
-  content: "\f211";
-}
-.fa-leanpub:before {
-  content: "\f212";
-}
-.fa-sellsy:before {
-  content: "\f213";
-}
-.fa-shirtsinbulk:before {
-  content: "\f214";
-}
-.fa-simplybuilt:before {
-  content: "\f215";
-}
-.fa-skyatlas:before {
-  content: "\f216";
-}
-.fa-cart-plus:before {
-  content: "\f217";
-}
-.fa-cart-arrow-down:before {
-  content: "\f218";
-}
-.fa-diamond:before {
-  content: "\f219";
-}
-.fa-ship:before {
-  content: "\f21a";
-}
-.fa-user-secret:before {
-  content: "\f21b";
-}
-.fa-motorcycle:before {
-  content: "\f21c";
-}
-.fa-street-view:before {
-  content: "\f21d";
-}
-.fa-heartbeat:before {
-  content: "\f21e";
-}
-.fa-venus:before {
-  content: "\f221";
-}
-.fa-mars:before {
-  content: "\f222";
-}
-.fa-mercury:before {
-  content: "\f223";
-}
-.fa-intersex:before,
-.fa-transgender:before {
-  content: "\f224";
-}
-.fa-transgender-alt:before {
-  content: "\f225";
-}
-.fa-venus-double:before {
-  content: "\f226";
-}
-.fa-mars-double:before {
-  content: "\f227";
-}
-.fa-venus-mars:before {
-  content: "\f228";
-}
-.fa-mars-stroke:before {
-  content: "\f229";
-}
-.fa-mars-stroke-v:before {
-  content: "\f22a";
-}
-.fa-mars-stroke-h:before {
-  content: "\f22b";
-}
-.fa-neuter:before {
-  content: "\f22c";
-}
-.fa-genderless:before {
-  content: "\f22d";
-}
-.fa-facebook-official:before {
-  content: "\f230";
-}
-.fa-pinterest-p:before {
-  content: "\f231";
-}
-.fa-whatsapp:before {
-  content: "\f232";
-}
-.fa-server:before {
-  content: "\f233";
-}
-.fa-user-plus:before {
-  content: "\f234";
-}
-.fa-user-times:before {
-  content: "\f235";
-}
-.fa-hotel:before,
-.fa-bed:before {
-  content: "\f236";
-}
-.fa-viacoin:before {
-  content: "\f237";
-}
-.fa-train:before {
-  content: "\f238";
-}
-.fa-subway:before {
-  content: "\f239";
-}
-.fa-medium:before {
-  content: "\f23a";
-}
-.fa-yc:before,
-.fa-y-combinator:before {
-  content: "\f23b";
-}
-.fa-optin-monster:before {
-  content: "\f23c";
-}
-.fa-opencart:before {
-  content: "\f23d";
-}
-.fa-expeditedssl:before {
-  content: "\f23e";
-}
-.fa-battery-4:before,
-.fa-battery:before,
-.fa-battery-full:before {
-  content: "\f240";
-}
-.fa-battery-3:before,
-.fa-battery-three-quarters:before {
-  content: "\f241";
-}
-.fa-battery-2:before,
-.fa-battery-half:before {
-  content: "\f242";
-}
-.fa-battery-1:before,
-.fa-battery-quarter:before {
-  content: "\f243";
-}
-.fa-battery-0:before,
-.fa-battery-empty:before {
-  content: "\f244";
-}
-.fa-mouse-pointer:before {
-  content: "\f245";
-}
-.fa-i-cursor:before {
-  content: "\f246";
-}
-.fa-object-group:before {
-  content: "\f247";
-}
-.fa-object-ungroup:before {
-  content: "\f248";
-}
-.fa-sticky-note:before {
-  content: "\f249";
-}
-.fa-sticky-note-o:before {
-  content: "\f24a";
-}
-.fa-cc-jcb:before {
-  content: "\f24b";
-}
-.fa-cc-diners-club:before {
-  content: "\f24c";
-}
-.fa-clone:before {
-  content: "\f24d";
-}
-.fa-balance-scale:before {
-  content: "\f24e";
-}
-.fa-hourglass-o:before {
-  content: "\f250";
-}
-.fa-hourglass-1:before,
-.fa-hourglass-start:before {
-  content: "\f251";
-}
-.fa-hourglass-2:before,
-.fa-hourglass-half:before {
-  content: "\f252";
-}
-.fa-hourglass-3:before,
-.fa-hourglass-end:before {
-  content: "\f253";
-}
-.fa-hourglass:before {
-  content: "\f254";
-}
-.fa-hand-grab-o:before,
-.fa-hand-rock-o:before {
-  content: "\f255";
-}
-.fa-hand-stop-o:before,
-.fa-hand-paper-o:before {
-  content: "\f256";
-}
-.fa-hand-scissors-o:before {
-  content: "\f257";
-}
-.fa-hand-lizard-o:before {
-  content: "\f258";
-}
-.fa-hand-spock-o:before {
-  content: "\f259";
-}
-.fa-hand-pointer-o:before {
-  content: "\f25a";
-}
-.fa-hand-peace-o:before {
-  content: "\f25b";
-}
-.fa-trademark:before {
-  content: "\f25c";
-}
-.fa-registered:before {
-  content: "\f25d";
-}
-.fa-creative-commons:before {
-  content: "\f25e";
-}
-.fa-gg:before {
-  content: "\f260";
-}
-.fa-gg-circle:before {
-  content: "\f261";
-}
-.fa-tripadvisor:before {
-  content: "\f262";
-}
-.fa-odnoklassniki:before {
-  content: "\f263";
-}
-.fa-odnoklassniki-square:before {
-  content: "\f264";
-}
-.fa-get-pocket:before {
-  content: "\f265";
-}
-.fa-wikipedia-w:before {
-  content: "\f266";
-}
-.fa-safari:before {
-  content: "\f267";
-}
-.fa-chrome:before {
-  content: "\f268";
-}
-.fa-firefox:before {
-  content: "\f269";
-}
-.fa-opera:before {
-  content: "\f26a";
-}
-.fa-internet-explorer:before {
-  content: "\f26b";
-}
-.fa-tv:before,
-.fa-television:before {
-  content: "\f26c";
-}
-.fa-contao:before {
-  content: "\f26d";
-}
-.fa-500px:before {
-  content: "\f26e";
-}
-.fa-amazon:before {
-  content: "\f270";
-}
-.fa-calendar-plus-o:before {
-  content: "\f271";
-}
-.fa-calendar-minus-o:before {
-  content: "\f272";
-}
-.fa-calendar-times-o:before {
-  content: "\f273";
-}
-.fa-calendar-check-o:before {
-  content: "\f274";
-}
-.fa-industry:before {
-  content: "\f275";
-}
-.fa-map-pin:before {
-  content: "\f276";
-}
-.fa-map-signs:before {
-  content: "\f277";
-}
-.fa-map-o:before {
-  content: "\f278";
-}
-.fa-map:before {
-  content: "\f279";
-}
-.fa-commenting:before {
-  content: "\f27a";
-}
-.fa-commenting-o:before {
-  content: "\f27b";
-}
-.fa-houzz:before {
-  content: "\f27c";
-}
-.fa-vimeo:before {
-  content: "\f27d";
-}
-.fa-black-tie:before {
-  content: "\f27e";
-}
-.fa-fonticons:before {
-  content: "\f280";
-}
-.fa-reddit-alien:before {
-  content: "\f281";
-}
-.fa-edge:before {
-  content: "\f282";
-}
-.fa-credit-card-alt:before {
-  content: "\f283";
-}
-.fa-codiepie:before {
-  content: "\f284";
-}
-.fa-modx:before {
-  content: "\f285";
-}
-.fa-fort-awesome:before {
-  content: "\f286";
-}
-.fa-usb:before {
-  content: "\f287";
-}
-.fa-product-hunt:before {
-  content: "\f288";
-}
-.fa-mixcloud:before {
-  content: "\f289";
-}
-.fa-scribd:before {
-  content: "\f28a";
-}
-.fa-pause-circle:before {
-  content: "\f28b";
-}
-.fa-pause-circle-o:before {
-  content: "\f28c";
-}
-.fa-stop-circle:before {
-  content: "\f28d";
-}
-.fa-stop-circle-o:before {
-  content: "\f28e";
-}
-.fa-shopping-bag:before {
-  content: "\f290";
-}
-.fa-shopping-basket:before {
-  content: "\f291";
-}
-.fa-hashtag:before {
-  content: "\f292";
-}
-.fa-bluetooth:before {
-  content: "\f293";
-}
-.fa-bluetooth-b:before {
-  content: "\f294";
-}
-.fa-percent:before {
-  content: "\f295";
-}
-.fa-gitlab:before {
-  content: "\f296";
-}
-.fa-wpbeginner:before {
-  content: "\f297";
-}
-.fa-wpforms:before {
-  content: "\f298";
-}
-.fa-envira:before {
-  content: "\f299";
-}
-.fa-universal-access:before {
-  content: "\f29a";
-}
-.fa-wheelchair-alt:before {
-  content: "\f29b";
-}
-.fa-question-circle-o:before {
-  content: "\f29c";
-}
-.fa-blind:before {
-  content: "\f29d";
-}
-.fa-audio-description:before {
-  content: "\f29e";
-}
-.fa-volume-control-phone:before {
-  content: "\f2a0";
-}
-.fa-braille:before {
-  content: "\f2a1";
-}
-.fa-assistive-listening-systems:before {
-  content: "\f2a2";
-}
-.fa-asl-interpreting:before,
-.fa-american-sign-language-interpreting:before {
-  content: "\f2a3";
-}
-.fa-deafness:before,
-.fa-hard-of-hearing:before,
-.fa-deaf:before {
-  content: "\f2a4";
-}
-.fa-glide:before {
-  content: "\f2a5";
-}
-.fa-glide-g:before {
-  content: "\f2a6";
-}
-.fa-signing:before,
-.fa-sign-language:before {
-  content: "\f2a7";
-}
-.fa-low-vision:before {
-  content: "\f2a8";
-}
-.fa-viadeo:before {
-  content: "\f2a9";
-}
-.fa-viadeo-square:before {
-  content: "\f2aa";
-}
-.fa-snapchat:before {
-  content: "\f2ab";
-}
-.fa-snapchat-ghost:before {
-  content: "\f2ac";
-}
-.fa-snapchat-square:before {
-  content: "\f2ad";
-}
-.fa-pied-piper:before {
-  content: "\f2ae";
-}
-.fa-first-order:before {
-  content: "\f2b0";
-}
-.fa-yoast:before {
-  content: "\f2b1";
-}
-.fa-themeisle:before {
-  content: "\f2b2";
-}
-.fa-google-plus-circle:before,
-.fa-google-plus-official:before {
-  content: "\f2b3";
-}
-.fa-fa:before,
-.fa-font-awesome:before {
-  content: "\f2b4";
-}
-.fa-handshake-o:before {
-  content: "\f2b5";
-}
-.fa-envelope-open:before {
-  content: "\f2b6";
-}
-.fa-envelope-open-o:before {
-  content: "\f2b7";
-}
-.fa-linode:before {
-  content: "\f2b8";
-}
-.fa-address-book:before {
-  content: "\f2b9";
-}
-.fa-address-book-o:before {
-  content: "\f2ba";
-}
-.fa-vcard:before,
-.fa-address-card:before {
-  content: "\f2bb";
-}
-.fa-vcard-o:before,
-.fa-address-card-o:before {
-  content: "\f2bc";
-}
-.fa-user-circle:before {
-  content: "\f2bd";
-}
-.fa-user-circle-o:before {
-  content: "\f2be";
-}
-.fa-user-o:before {
-  content: "\f2c0";
-}
-.fa-id-badge:before {
-  content: "\f2c1";
-}
-.fa-drivers-license:before,
-.fa-id-card:before {
-  content: "\f2c2";
-}
-.fa-drivers-license-o:before,
-.fa-id-card-o:before {
-  content: "\f2c3";
-}
-.fa-quora:before {
-  content: "\f2c4";
-}
-.fa-free-code-camp:before {
-  content: "\f2c5";
-}
-.fa-telegram:before {
-  content: "\f2c6";
-}
-.fa-thermometer-4:before,
-.fa-thermometer:before,
-.fa-thermometer-full:before {
-  content: "\f2c7";
-}
-.fa-thermometer-3:before,
-.fa-thermometer-three-quarters:before {
-  content: "\f2c8";
-}
-.fa-thermometer-2:before,
-.fa-thermometer-half:before {
-  content: "\f2c9";
-}
-.fa-thermometer-1:before,
-.fa-thermometer-quarter:before {
-  content: "\f2ca";
-}
-.fa-thermometer-0:before,
-.fa-thermometer-empty:before {
-  content: "\f2cb";
-}
-.fa-shower:before {
-  content: "\f2cc";
-}
-.fa-bathtub:before,
-.fa-s15:before,
-.fa-bath:before {
-  content: "\f2cd";
-}
-.fa-podcast:before {
-  content: "\f2ce";
-}
-.fa-window-maximize:before {
-  content: "\f2d0";
-}
-.fa-window-minimize:before {
-  content: "\f2d1";
-}
-.fa-window-restore:before {
-  content: "\f2d2";
-}
-.fa-times-rectangle:before,
-.fa-window-close:before {
-  content: "\f2d3";
-}
-.fa-times-rectangle-o:before,
-.fa-window-close-o:before {
-  content: "\f2d4";
-}
-.fa-bandcamp:before {
-  content: "\f2d5";
-}
-.fa-grav:before {
-  content: "\f2d6";
-}
-.fa-etsy:before {
-  content: "\f2d7";
-}
-.fa-imdb:before {
-  content: "\f2d8";
-}
-.fa-ravelry:before {
-  content: "\f2d9";
-}
-.fa-eercast:before {
-  content: "\f2da";
-}
-.fa-microchip:before {
-  content: "\f2db";
-}
-.fa-snowflake-o:before {
-  content: "\f2dc";
-}
-.fa-superpowers:before {
-  content: "\f2dd";
-}
-.fa-wpexplorer:before {
-  content: "\f2de";
-}
-.fa-meetup:before {
-  content: "\f2e0";
-}
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
-  position: static;
-  width: auto;
-  height: auto;
-  margin: 0;
-  overflow: visible;
-  clip: auto;
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/animated.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/animated.less
deleted file mode 100644
index 66ad52a5ba..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/animated.less
+++ /dev/null
@@ -1,34 +0,0 @@
-// Animated Icons
-// --------------------------
-
-.@{fa-css-prefix}-spin {
-  -webkit-animation: fa-spin 2s infinite linear;
-          animation: fa-spin 2s infinite linear;
-}
-
-.@{fa-css-prefix}-pulse {
-  -webkit-animation: fa-spin 1s infinite steps(8);
-          animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-            transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-            transform: rotate(359deg);
-  }
-}
-
-@keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-            transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-            transform: rotate(359deg);
-  }
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/bordered-pulled.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/bordered-pulled.less
deleted file mode 100644
index f1c8ad75f5..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/bordered-pulled.less
+++ /dev/null
@@ -1,25 +0,0 @@
-// Bordered & Pulled
-// -------------------------
-
-.@{fa-css-prefix}-border {
-  padding: .2em .25em .15em;
-  border: solid .08em @fa-border-color;
-  border-radius: .1em;
-}
-
-.@{fa-css-prefix}-pull-left { float: left; }
-.@{fa-css-prefix}-pull-right { float: right; }
-
-.@{fa-css-prefix} {
-  &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
-  &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
-}
-
-/* Deprecated as of 4.4.0 */
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-.@{fa-css-prefix} {
-  &.pull-left { margin-right: .3em; }
-  &.pull-right { margin-left: .3em; }
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/core.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/core.less
deleted file mode 100644
index c577ac84a6..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/core.less
+++ /dev/null
@@ -1,12 +0,0 @@
-// Base Class Definition
-// -------------------------
-
-.@{fa-css-prefix} {
-  display: inline-block;
-  font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
-  font-size: inherit; // can't have font-size inherit on line above, so need to override
-  text-rendering: auto; // optimizelegibility throws things off #1094
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/fixed-width.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/fixed-width.less
deleted file mode 100644
index 110289f2f4..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/fixed-width.less
+++ /dev/null
@@ -1,6 +0,0 @@
-// Fixed Width Icons
-// -------------------------
-.@{fa-css-prefix}-fw {
-  width: (18em / 14);
-  text-align: center;
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/font-awesome.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/font-awesome.less
deleted file mode 100644
index c3677def31..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/font-awesome.less
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-
-@import "variables.less";
-@import "mixins.less";
-@import "path.less";
-@import "core.less";
-@import "larger.less";
-@import "fixed-width.less";
-@import "list.less";
-@import "bordered-pulled.less";
-@import "animated.less";
-@import "rotated-flipped.less";
-@import "stacked.less";
-@import "icons.less";
-@import "screen-reader.less";
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/icons.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/icons.less
deleted file mode 100644
index 159d600425..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/icons.less
+++ /dev/null
@@ -1,789 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-
-.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }
-.@{fa-css-prefix}-music:before { content: @fa-var-music; }
-.@{fa-css-prefix}-search:before { content: @fa-var-search; }
-.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }
-.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
-.@{fa-css-prefix}-star:before { content: @fa-var-star; }
-.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }
-.@{fa-css-prefix}-user:before { content: @fa-var-user; }
-.@{fa-css-prefix}-film:before { content: @fa-var-film; }
-.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
-.@{fa-css-prefix}-th:before { content: @fa-var-th; }
-.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
-.@{fa-css-prefix}-check:before { content: @fa-var-check; }
-.@{fa-css-prefix}-remove:before,
-.@{fa-css-prefix}-close:before,
-.@{fa-css-prefix}-times:before { content: @fa-var-times; }
-.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
-.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
-.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
-.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
-.@{fa-css-prefix}-gear:before,
-.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
-.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }
-.@{fa-css-prefix}-home:before { content: @fa-var-home; }
-.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }
-.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }
-.@{fa-css-prefix}-road:before { content: @fa-var-road; }
-.@{fa-css-prefix}-download:before { content: @fa-var-download; }
-.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }
-.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }
-.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
-.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }
-.@{fa-css-prefix}-rotate-right:before,
-.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }
-.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }
-.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
-.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
-.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
-.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
-.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
-.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
-.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
-.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
-.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
-.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
-.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
-.@{fa-css-prefix}-book:before { content: @fa-var-book; }
-.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
-.@{fa-css-prefix}-print:before { content: @fa-var-print; }
-.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
-.@{fa-css-prefix}-font:before { content: @fa-var-font; }
-.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
-.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
-.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
-.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
-.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
-.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
-.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
-.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
-.@{fa-css-prefix}-list:before { content: @fa-var-list; }
-.@{fa-css-prefix}-dedent:before,
-.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
-.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
-.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }
-.@{fa-css-prefix}-photo:before,
-.@{fa-css-prefix}-image:before,
-.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }
-.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }
-.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
-.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
-.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
-.@{fa-css-prefix}-edit:before,
-.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }
-.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }
-.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }
-.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }
-.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
-.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
-.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
-.@{fa-css-prefix}-play:before { content: @fa-var-play; }
-.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
-.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
-.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
-.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
-.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
-.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
-.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
-.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
-.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
-.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
-.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
-.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
-.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
-.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
-.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
-.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }
-.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }
-.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
-.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
-.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
-.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
-.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
-.@{fa-css-prefix}-mail-forward:before,
-.@{fa-css-prefix}-share:before { content: @fa-var-share; }
-.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
-.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
-.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
-.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
-.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
-.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
-.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
-.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
-.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
-.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
-.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
-.@{fa-css-prefix}-warning:before,
-.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
-.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
-.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
-.@{fa-css-prefix}-random:before { content: @fa-var-random; }
-.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
-.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
-.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
-.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
-.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
-.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
-.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
-.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
-.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }
-.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }
-.@{fa-css-prefix}-bar-chart-o:before,
-.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }
-.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
-.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
-.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
-.@{fa-css-prefix}-key:before { content: @fa-var-key; }
-.@{fa-css-prefix}-gears:before,
-.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
-.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
-.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }
-.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }
-.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
-.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }
-.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }
-.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }
-.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }
-.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }
-.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }
-.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
-.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
-.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
-.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }
-.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
-.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }
-.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }
-.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
-.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
-.@{fa-css-prefix}-facebook-f:before,
-.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
-.@{fa-css-prefix}-github:before { content: @fa-var-github; }
-.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
-.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
-.@{fa-css-prefix}-feed:before,
-.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
-.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }
-.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
-.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
-.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
-.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }
-.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }
-.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }
-.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }
-.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
-.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
-.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
-.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
-.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
-.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
-.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
-.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
-.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
-.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
-.@{fa-css-prefix}-group:before,
-.@{fa-css-prefix}-users:before { content: @fa-var-users; }
-.@{fa-css-prefix}-chain:before,
-.@{fa-css-prefix}-link:before { content: @fa-var-link; }
-.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
-.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
-.@{fa-css-prefix}-cut:before,
-.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }
-.@{fa-css-prefix}-copy:before,
-.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }
-.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
-.@{fa-css-prefix}-save:before,
-.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }
-.@{fa-css-prefix}-square:before { content: @fa-var-square; }
-.@{fa-css-prefix}-navicon:before,
-.@{fa-css-prefix}-reorder:before,
-.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
-.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
-.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
-.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
-.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
-.@{fa-css-prefix}-table:before { content: @fa-var-table; }
-.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
-.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
-.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
-.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
-.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
-.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
-.@{fa-css-prefix}-money:before { content: @fa-var-money; }
-.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
-.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
-.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
-.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
-.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
-.@{fa-css-prefix}-unsorted:before,
-.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
-.@{fa-css-prefix}-sort-down:before,
-.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }
-.@{fa-css-prefix}-sort-up:before,
-.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }
-.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
-.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
-.@{fa-css-prefix}-rotate-left:before,
-.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
-.@{fa-css-prefix}-legal:before,
-.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
-.@{fa-css-prefix}-dashboard:before,
-.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }
-.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }
-.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }
-.@{fa-css-prefix}-flash:before,
-.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
-.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
-.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
-.@{fa-css-prefix}-paste:before,
-.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
-.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }
-.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }
-.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }
-.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }
-.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
-.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
-.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
-.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }
-.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
-.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }
-.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }
-.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }
-.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }
-.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
-.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
-.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
-.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
-.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
-.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
-.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
-.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
-.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
-.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
-.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
-.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
-.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
-.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
-.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
-.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
-.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
-.@{fa-css-prefix}-mobile-phone:before,
-.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
-.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }
-.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
-.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
-.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
-.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
-.@{fa-css-prefix}-mail-reply:before,
-.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
-.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
-.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }
-.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }
-.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }
-.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }
-.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }
-.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
-.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }
-.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }
-.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
-.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
-.@{fa-css-prefix}-code:before { content: @fa-var-code; }
-.@{fa-css-prefix}-mail-reply-all:before,
-.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
-.@{fa-css-prefix}-star-half-empty:before,
-.@{fa-css-prefix}-star-half-full:before,
-.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }
-.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
-.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
-.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }
-.@{fa-css-prefix}-unlink:before,
-.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }
-.@{fa-css-prefix}-question:before { content: @fa-var-question; }
-.@{fa-css-prefix}-info:before { content: @fa-var-info; }
-.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
-.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
-.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
-.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
-.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
-.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
-.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
-.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }
-.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }
-.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
-.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
-.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
-.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
-.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
-.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
-.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
-.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
-.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
-.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
-.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
-.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
-.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
-.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
-.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
-.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
-.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }
-.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
-.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }
-.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }
-.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }
-.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
-.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }
-.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }
-.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
-.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
-.@{fa-css-prefix}-toggle-down:before,
-.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }
-.@{fa-css-prefix}-toggle-up:before,
-.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }
-.@{fa-css-prefix}-toggle-right:before,
-.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }
-.@{fa-css-prefix}-euro:before,
-.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }
-.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }
-.@{fa-css-prefix}-dollar:before,
-.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }
-.@{fa-css-prefix}-rupee:before,
-.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }
-.@{fa-css-prefix}-cny:before,
-.@{fa-css-prefix}-rmb:before,
-.@{fa-css-prefix}-yen:before,
-.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }
-.@{fa-css-prefix}-ruble:before,
-.@{fa-css-prefix}-rouble:before,
-.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }
-.@{fa-css-prefix}-won:before,
-.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }
-.@{fa-css-prefix}-bitcoin:before,
-.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
-.@{fa-css-prefix}-file:before { content: @fa-var-file; }
-.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }
-.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }
-.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }
-.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }
-.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }
-.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }
-.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }
-.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
-.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
-.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
-.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
-.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
-.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
-.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }
-.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
-.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
-.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
-.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
-.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
-.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
-.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }
-.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
-.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
-.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }
-.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }
-.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }
-.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }
-.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
-.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
-.@{fa-css-prefix}-android:before { content: @fa-var-android; }
-.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
-.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
-.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
-.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
-.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
-.@{fa-css-prefix}-female:before { content: @fa-var-female; }
-.@{fa-css-prefix}-male:before { content: @fa-var-male; }
-.@{fa-css-prefix}-gittip:before,
-.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }
-.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }
-.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }
-.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
-.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
-.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
-.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
-.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
-.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
-.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
-.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }
-.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }
-.@{fa-css-prefix}-toggle-left:before,
-.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }
-.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }
-.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
-.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
-.@{fa-css-prefix}-turkish-lira:before,
-.@{fa-css-prefix}-try:before { content: @fa-var-try; }
-.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }
-.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }
-.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }
-.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }
-.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }
-.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }
-.@{fa-css-prefix}-institution:before,
-.@{fa-css-prefix}-bank:before,
-.@{fa-css-prefix}-university:before { content: @fa-var-university; }
-.@{fa-css-prefix}-mortar-board:before,
-.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }
-.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }
-.@{fa-css-prefix}-google:before { content: @fa-var-google; }
-.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }
-.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }
-.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }
-.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }
-.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }
-.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }
-.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }
-.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }
-.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }
-.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }
-.@{fa-css-prefix}-language:before { content: @fa-var-language; }
-.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }
-.@{fa-css-prefix}-building:before { content: @fa-var-building; }
-.@{fa-css-prefix}-child:before { content: @fa-var-child; }
-.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }
-.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }
-.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }
-.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }
-.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }
-.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }
-.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }
-.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }
-.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }
-.@{fa-css-prefix}-automobile:before,
-.@{fa-css-prefix}-car:before { content: @fa-var-car; }
-.@{fa-css-prefix}-cab:before,
-.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }
-.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }
-.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }
-.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }
-.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }
-.@{fa-css-prefix}-database:before { content: @fa-var-database; }
-.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }
-.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }
-.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }
-.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }
-.@{fa-css-prefix}-file-photo-o:before,
-.@{fa-css-prefix}-file-picture-o:before,
-.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }
-.@{fa-css-prefix}-file-zip-o:before,
-.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }
-.@{fa-css-prefix}-file-sound-o:before,
-.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }
-.@{fa-css-prefix}-file-movie-o:before,
-.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }
-.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }
-.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }
-.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }
-.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }
-.@{fa-css-prefix}-life-bouy:before,
-.@{fa-css-prefix}-life-buoy:before,
-.@{fa-css-prefix}-life-saver:before,
-.@{fa-css-prefix}-support:before,
-.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }
-.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }
-.@{fa-css-prefix}-ra:before,
-.@{fa-css-prefix}-resistance:before,
-.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }
-.@{fa-css-prefix}-ge:before,
-.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }
-.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }
-.@{fa-css-prefix}-git:before { content: @fa-var-git; }
-.@{fa-css-prefix}-y-combinator-square:before,
-.@{fa-css-prefix}-yc-square:before,
-.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }
-.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }
-.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }
-.@{fa-css-prefix}-wechat:before,
-.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }
-.@{fa-css-prefix}-send:before,
-.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }
-.@{fa-css-prefix}-send-o:before,
-.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }
-.@{fa-css-prefix}-history:before { content: @fa-var-history; }
-.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }
-.@{fa-css-prefix}-header:before { content: @fa-var-header; }
-.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }
-.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }
-.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }
-.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }
-.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }
-.@{fa-css-prefix}-soccer-ball-o:before,
-.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }
-.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }
-.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }
-.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }
-.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }
-.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }
-.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }
-.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }
-.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }
-.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }
-.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }
-.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }
-.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }
-.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }
-.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }
-.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }
-.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }
-.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }
-.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }
-.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }
-.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }
-.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }
-.@{fa-css-prefix}-at:before { content: @fa-var-at; }
-.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }
-.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }
-.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }
-.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }
-.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }
-.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }
-.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }
-.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }
-.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }
-.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }
-.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }
-.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }
-.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }
-.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }
-.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }
-.@{fa-css-prefix}-shekel:before,
-.@{fa-css-prefix}-sheqel:before,
-.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }
-.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }
-.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }
-.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }
-.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }
-.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }
-.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }
-.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }
-.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }
-.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }
-.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }
-.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }
-.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }
-.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }
-.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }
-.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }
-.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }
-.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }
-.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }
-.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }
-.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }
-.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }
-.@{fa-css-prefix}-intersex:before,
-.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }
-.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }
-.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }
-.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }
-.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }
-.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }
-.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }
-.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }
-.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }
-.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }
-.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }
-.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }
-.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }
-.@{fa-css-prefix}-server:before { content: @fa-var-server; }
-.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }
-.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }
-.@{fa-css-prefix}-hotel:before,
-.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }
-.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }
-.@{fa-css-prefix}-train:before { content: @fa-var-train; }
-.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }
-.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }
-.@{fa-css-prefix}-yc:before,
-.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }
-.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }
-.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }
-.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }
-.@{fa-css-prefix}-battery-4:before,
-.@{fa-css-prefix}-battery:before,
-.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }
-.@{fa-css-prefix}-battery-3:before,
-.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }
-.@{fa-css-prefix}-battery-2:before,
-.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }
-.@{fa-css-prefix}-battery-1:before,
-.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }
-.@{fa-css-prefix}-battery-0:before,
-.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }
-.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }
-.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }
-.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }
-.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }
-.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }
-.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; }
-.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }
-.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }
-.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }
-.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }
-.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; }
-.@{fa-css-prefix}-hourglass-1:before,
-.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }
-.@{fa-css-prefix}-hourglass-2:before,
-.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }
-.@{fa-css-prefix}-hourglass-3:before,
-.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }
-.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }
-.@{fa-css-prefix}-hand-grab-o:before,
-.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; }
-.@{fa-css-prefix}-hand-stop-o:before,
-.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; }
-.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; }
-.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; }
-.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; }
-.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; }
-.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; }
-.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }
-.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }
-.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }
-.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }
-.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }
-.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }
-.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }
-.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }
-.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }
-.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }
-.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }
-.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }
-.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }
-.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }
-.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }
-.@{fa-css-prefix}-tv:before,
-.@{fa-css-prefix}-television:before { content: @fa-var-television; }
-.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }
-.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }
-.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }
-.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; }
-.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; }
-.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; }
-.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; }
-.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }
-.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }
-.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }
-.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; }
-.@{fa-css-prefix}-map:before { content: @fa-var-map; }
-.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; }
-.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; }
-.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }
-.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }
-.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }
-.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }
-.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }
-.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }
-.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; }
-.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }
-.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }
-.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }
-.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }
-.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }
-.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }
-.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }
-.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }
-.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; }
-.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }
-.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; }
-.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }
-.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }
-.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }
-.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }
-.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }
-.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }
-.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }
-.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }
-.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }
-.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }
-.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }
-.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; }
-.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; }
-.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }
-.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }
-.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; }
-.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }
-.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }
-.@{fa-css-prefix}-asl-interpreting:before,
-.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }
-.@{fa-css-prefix}-deafness:before,
-.@{fa-css-prefix}-hard-of-hearing:before,
-.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }
-.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }
-.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }
-.@{fa-css-prefix}-signing:before,
-.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }
-.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }
-.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }
-.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }
-.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }
-.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }
-.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }
-.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }
-.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }
-.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }
-.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }
-.@{fa-css-prefix}-google-plus-circle:before,
-.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; }
-.@{fa-css-prefix}-fa:before,
-.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }
-.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; }
-.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }
-.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; }
-.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }
-.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }
-.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; }
-.@{fa-css-prefix}-vcard:before,
-.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }
-.@{fa-css-prefix}-vcard-o:before,
-.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; }
-.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }
-.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; }
-.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; }
-.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }
-.@{fa-css-prefix}-drivers-license:before,
-.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }
-.@{fa-css-prefix}-drivers-license-o:before,
-.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; }
-.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }
-.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }
-.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }
-.@{fa-css-prefix}-thermometer-4:before,
-.@{fa-css-prefix}-thermometer:before,
-.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }
-.@{fa-css-prefix}-thermometer-3:before,
-.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }
-.@{fa-css-prefix}-thermometer-2:before,
-.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }
-.@{fa-css-prefix}-thermometer-1:before,
-.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }
-.@{fa-css-prefix}-thermometer-0:before,
-.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }
-.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }
-.@{fa-css-prefix}-bathtub:before,
-.@{fa-css-prefix}-s15:before,
-.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }
-.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }
-.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }
-.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }
-.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }
-.@{fa-css-prefix}-times-rectangle:before,
-.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }
-.@{fa-css-prefix}-times-rectangle-o:before,
-.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; }
-.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }
-.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }
-.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }
-.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }
-.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }
-.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; }
-.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }
-.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; }
-.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }
-.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }
-.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/larger.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/larger.less
deleted file mode 100644
index c9d646770e..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/larger.less
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon Sizes
-// -------------------------
-
-/* makes the font 33% larger relative to the icon container */
-.@{fa-css-prefix}-lg {
-  font-size: (4em / 3);
-  line-height: (3em / 4);
-  vertical-align: -15%;
-}
-.@{fa-css-prefix}-2x { font-size: 2em; }
-.@{fa-css-prefix}-3x { font-size: 3em; }
-.@{fa-css-prefix}-4x { font-size: 4em; }
-.@{fa-css-prefix}-5x { font-size: 5em; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/list.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/list.less
deleted file mode 100644
index 0b440382f6..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/list.less
+++ /dev/null
@@ -1,19 +0,0 @@
-// List Icons
-// -------------------------
-
-.@{fa-css-prefix}-ul {
-  padding-left: 0;
-  margin-left: @fa-li-width;
-  list-style-type: none;
-  > li { position: relative; }
-}
-.@{fa-css-prefix}-li {
-  position: absolute;
-  left: -@fa-li-width;
-  width: @fa-li-width;
-  top: (2em / 14);
-  text-align: center;
-  &.@{fa-css-prefix}-lg {
-    left: (-@fa-li-width + (4em / 14));
-  }
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/mixins.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/mixins.less
deleted file mode 100644
index beef231d0e..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/mixins.less
+++ /dev/null
@@ -1,60 +0,0 @@
-// Mixins
-// --------------------------
-
-.fa-icon() {
-  display: inline-block;
-  font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
-  font-size: inherit; // can't have font-size inherit on line above, so need to override
-  text-rendering: auto; // optimizelegibility throws things off #1094
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-
-}
-
-.fa-icon-rotate(@degrees, @rotation) {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
-  -webkit-transform: rotate(@degrees);
-      -ms-transform: rotate(@degrees);
-          transform: rotate(@degrees);
-}
-
-.fa-icon-flip(@horiz, @vert, @rotation) {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
-  -webkit-transform: scale(@horiz, @vert);
-      -ms-transform: scale(@horiz, @vert);
-          transform: scale(@horiz, @vert);
-}
-
-
-// Only display content to screen readers. A la Bootstrap 4.
-//
-// See: http://a11yproject.com/posts/how-to-hide-content/
-
-.sr-only() {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0,0,0,0);
-  border: 0;
-}
-
-// Use in conjunction with .sr-only to only display content when it's focused.
-//
-// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
-//
-// Credit: HTML5 Boilerplate
-
-.sr-only-focusable() {
-  &:active,
-  &:focus {
-    position: static;
-    width: auto;
-    height: auto;
-    margin: 0;
-    overflow: visible;
-    clip: auto;
-  }
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/path.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/path.less
deleted file mode 100644
index 835be41f81..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/path.less
+++ /dev/null
@@ -1,15 +0,0 @@
-/* FONT PATH
- * -------------------------- */
-
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
-  src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
-    url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
-    url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
-    url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
-    url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
-  // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
-  font-weight: normal;
-  font-style: normal;
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/rotated-flipped.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/rotated-flipped.less
deleted file mode 100644
index f6ba81475b..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/rotated-flipped.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Rotated & Flipped Icons
-// -------------------------
-
-.@{fa-css-prefix}-rotate-90  { .fa-icon-rotate(90deg, 1);  }
-.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
-.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
-
-.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
-.@{fa-css-prefix}-flip-vertical   { .fa-icon-flip(1, -1, 2); }
-
-// Hook for IE8-9
-// -------------------------
-
-:root .@{fa-css-prefix}-rotate-90,
-:root .@{fa-css-prefix}-rotate-180,
-:root .@{fa-css-prefix}-rotate-270,
-:root .@{fa-css-prefix}-flip-horizontal,
-:root .@{fa-css-prefix}-flip-vertical {
-  filter: none;
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/screen-reader.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/screen-reader.less
deleted file mode 100644
index 11c188196d..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/screen-reader.less
+++ /dev/null
@@ -1,5 +0,0 @@
-// Screen Readers
-// -------------------------
-
-.sr-only { .sr-only(); }
-.sr-only-focusable { .sr-only-focusable(); }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/stacked.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/stacked.less
deleted file mode 100644
index fc53fb0e7a..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/stacked.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Stacked Icons
-// -------------------------
-
-.@{fa-css-prefix}-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.@{fa-css-prefix}-stack-1x { line-height: inherit; }
-.@{fa-css-prefix}-stack-2x { font-size: 2em; }
-.@{fa-css-prefix}-inverse { color: @fa-inverse; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/variables.less b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/variables.less
deleted file mode 100644
index 7ddbbc0115..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/less/variables.less
+++ /dev/null
@@ -1,800 +0,0 @@
-// Variables
-// --------------------------
-
-@fa-font-path:        "../fonts";
-@fa-font-size-base:   14px;
-@fa-line-height-base: 1;
-//@fa-font-path:        "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly
-@fa-css-prefix:       fa;
-@fa-version:          "4.7.0";
-@fa-border-color:     #eee;
-@fa-inverse:          #fff;
-@fa-li-width:         (30em / 14);
-
-@fa-var-500px: "\f26e";
-@fa-var-address-book: "\f2b9";
-@fa-var-address-book-o: "\f2ba";
-@fa-var-address-card: "\f2bb";
-@fa-var-address-card-o: "\f2bc";
-@fa-var-adjust: "\f042";
-@fa-var-adn: "\f170";
-@fa-var-align-center: "\f037";
-@fa-var-align-justify: "\f039";
-@fa-var-align-left: "\f036";
-@fa-var-align-right: "\f038";
-@fa-var-amazon: "\f270";
-@fa-var-ambulance: "\f0f9";
-@fa-var-american-sign-language-interpreting: "\f2a3";
-@fa-var-anchor: "\f13d";
-@fa-var-android: "\f17b";
-@fa-var-angellist: "\f209";
-@fa-var-angle-double-down: "\f103";
-@fa-var-angle-double-left: "\f100";
-@fa-var-angle-double-right: "\f101";
-@fa-var-angle-double-up: "\f102";
-@fa-var-angle-down: "\f107";
-@fa-var-angle-left: "\f104";
-@fa-var-angle-right: "\f105";
-@fa-var-angle-up: "\f106";
-@fa-var-apple: "\f179";
-@fa-var-archive: "\f187";
-@fa-var-area-chart: "\f1fe";
-@fa-var-arrow-circle-down: "\f0ab";
-@fa-var-arrow-circle-left: "\f0a8";
-@fa-var-arrow-circle-o-down: "\f01a";
-@fa-var-arrow-circle-o-left: "\f190";
-@fa-var-arrow-circle-o-right: "\f18e";
-@fa-var-arrow-circle-o-up: "\f01b";
-@fa-var-arrow-circle-right: "\f0a9";
-@fa-var-arrow-circle-up: "\f0aa";
-@fa-var-arrow-down: "\f063";
-@fa-var-arrow-left: "\f060";
-@fa-var-arrow-right: "\f061";
-@fa-var-arrow-up: "\f062";
-@fa-var-arrows: "\f047";
-@fa-var-arrows-alt: "\f0b2";
-@fa-var-arrows-h: "\f07e";
-@fa-var-arrows-v: "\f07d";
-@fa-var-asl-interpreting: "\f2a3";
-@fa-var-assistive-listening-systems: "\f2a2";
-@fa-var-asterisk: "\f069";
-@fa-var-at: "\f1fa";
-@fa-var-audio-description: "\f29e";
-@fa-var-automobile: "\f1b9";
-@fa-var-backward: "\f04a";
-@fa-var-balance-scale: "\f24e";
-@fa-var-ban: "\f05e";
-@fa-var-bandcamp: "\f2d5";
-@fa-var-bank: "\f19c";
-@fa-var-bar-chart: "\f080";
-@fa-var-bar-chart-o: "\f080";
-@fa-var-barcode: "\f02a";
-@fa-var-bars: "\f0c9";
-@fa-var-bath: "\f2cd";
-@fa-var-bathtub: "\f2cd";
-@fa-var-battery: "\f240";
-@fa-var-battery-0: "\f244";
-@fa-var-battery-1: "\f243";
-@fa-var-battery-2: "\f242";
-@fa-var-battery-3: "\f241";
-@fa-var-battery-4: "\f240";
-@fa-var-battery-empty: "\f244";
-@fa-var-battery-full: "\f240";
-@fa-var-battery-half: "\f242";
-@fa-var-battery-quarter: "\f243";
-@fa-var-battery-three-quarters: "\f241";
-@fa-var-bed: "\f236";
-@fa-var-beer: "\f0fc";
-@fa-var-behance: "\f1b4";
-@fa-var-behance-square: "\f1b5";
-@fa-var-bell: "\f0f3";
-@fa-var-bell-o: "\f0a2";
-@fa-var-bell-slash: "\f1f6";
-@fa-var-bell-slash-o: "\f1f7";
-@fa-var-bicycle: "\f206";
-@fa-var-binoculars: "\f1e5";
-@fa-var-birthday-cake: "\f1fd";
-@fa-var-bitbucket: "\f171";
-@fa-var-bitbucket-square: "\f172";
-@fa-var-bitcoin: "\f15a";
-@fa-var-black-tie: "\f27e";
-@fa-var-blind: "\f29d";
-@fa-var-bluetooth: "\f293";
-@fa-var-bluetooth-b: "\f294";
-@fa-var-bold: "\f032";
-@fa-var-bolt: "\f0e7";
-@fa-var-bomb: "\f1e2";
-@fa-var-book: "\f02d";
-@fa-var-bookmark: "\f02e";
-@fa-var-bookmark-o: "\f097";
-@fa-var-braille: "\f2a1";
-@fa-var-briefcase: "\f0b1";
-@fa-var-btc: "\f15a";
-@fa-var-bug: "\f188";
-@fa-var-building: "\f1ad";
-@fa-var-building-o: "\f0f7";
-@fa-var-bullhorn: "\f0a1";
-@fa-var-bullseye: "\f140";
-@fa-var-bus: "\f207";
-@fa-var-buysellads: "\f20d";
-@fa-var-cab: "\f1ba";
-@fa-var-calculator: "\f1ec";
-@fa-var-calendar: "\f073";
-@fa-var-calendar-check-o: "\f274";
-@fa-var-calendar-minus-o: "\f272";
-@fa-var-calendar-o: "\f133";
-@fa-var-calendar-plus-o: "\f271";
-@fa-var-calendar-times-o: "\f273";
-@fa-var-camera: "\f030";
-@fa-var-camera-retro: "\f083";
-@fa-var-car: "\f1b9";
-@fa-var-caret-down: "\f0d7";
-@fa-var-caret-left: "\f0d9";
-@fa-var-caret-right: "\f0da";
-@fa-var-caret-square-o-down: "\f150";
-@fa-var-caret-square-o-left: "\f191";
-@fa-var-caret-square-o-right: "\f152";
-@fa-var-caret-square-o-up: "\f151";
-@fa-var-caret-up: "\f0d8";
-@fa-var-cart-arrow-down: "\f218";
-@fa-var-cart-plus: "\f217";
-@fa-var-cc: "\f20a";
-@fa-var-cc-amex: "\f1f3";
-@fa-var-cc-diners-club: "\f24c";
-@fa-var-cc-discover: "\f1f2";
-@fa-var-cc-jcb: "\f24b";
-@fa-var-cc-mastercard: "\f1f1";
-@fa-var-cc-paypal: "\f1f4";
-@fa-var-cc-stripe: "\f1f5";
-@fa-var-cc-visa: "\f1f0";
-@fa-var-certificate: "\f0a3";
-@fa-var-chain: "\f0c1";
-@fa-var-chain-broken: "\f127";
-@fa-var-check: "\f00c";
-@fa-var-check-circle: "\f058";
-@fa-var-check-circle-o: "\f05d";
-@fa-var-check-square: "\f14a";
-@fa-var-check-square-o: "\f046";
-@fa-var-chevron-circle-down: "\f13a";
-@fa-var-chevron-circle-left: "\f137";
-@fa-var-chevron-circle-right: "\f138";
-@fa-var-chevron-circle-up: "\f139";
-@fa-var-chevron-down: "\f078";
-@fa-var-chevron-left: "\f053";
-@fa-var-chevron-right: "\f054";
-@fa-var-chevron-up: "\f077";
-@fa-var-child: "\f1ae";
-@fa-var-chrome: "\f268";
-@fa-var-circle: "\f111";
-@fa-var-circle-o: "\f10c";
-@fa-var-circle-o-notch: "\f1ce";
-@fa-var-circle-thin: "\f1db";
-@fa-var-clipboard: "\f0ea";
-@fa-var-clock-o: "\f017";
-@fa-var-clone: "\f24d";
-@fa-var-close: "\f00d";
-@fa-var-cloud: "\f0c2";
-@fa-var-cloud-download: "\f0ed";
-@fa-var-cloud-upload: "\f0ee";
-@fa-var-cny: "\f157";
-@fa-var-code: "\f121";
-@fa-var-code-fork: "\f126";
-@fa-var-codepen: "\f1cb";
-@fa-var-codiepie: "\f284";
-@fa-var-coffee: "\f0f4";
-@fa-var-cog: "\f013";
-@fa-var-cogs: "\f085";
-@fa-var-columns: "\f0db";
-@fa-var-comment: "\f075";
-@fa-var-comment-o: "\f0e5";
-@fa-var-commenting: "\f27a";
-@fa-var-commenting-o: "\f27b";
-@fa-var-comments: "\f086";
-@fa-var-comments-o: "\f0e6";
-@fa-var-compass: "\f14e";
-@fa-var-compress: "\f066";
-@fa-var-connectdevelop: "\f20e";
-@fa-var-contao: "\f26d";
-@fa-var-copy: "\f0c5";
-@fa-var-copyright: "\f1f9";
-@fa-var-creative-commons: "\f25e";
-@fa-var-credit-card: "\f09d";
-@fa-var-credit-card-alt: "\f283";
-@fa-var-crop: "\f125";
-@fa-var-crosshairs: "\f05b";
-@fa-var-css3: "\f13c";
-@fa-var-cube: "\f1b2";
-@fa-var-cubes: "\f1b3";
-@fa-var-cut: "\f0c4";
-@fa-var-cutlery: "\f0f5";
-@fa-var-dashboard: "\f0e4";
-@fa-var-dashcube: "\f210";
-@fa-var-database: "\f1c0";
-@fa-var-deaf: "\f2a4";
-@fa-var-deafness: "\f2a4";
-@fa-var-dedent: "\f03b";
-@fa-var-delicious: "\f1a5";
-@fa-var-desktop: "\f108";
-@fa-var-deviantart: "\f1bd";
-@fa-var-diamond: "\f219";
-@fa-var-digg: "\f1a6";
-@fa-var-dollar: "\f155";
-@fa-var-dot-circle-o: "\f192";
-@fa-var-download: "\f019";
-@fa-var-dribbble: "\f17d";
-@fa-var-drivers-license: "\f2c2";
-@fa-var-drivers-license-o: "\f2c3";
-@fa-var-dropbox: "\f16b";
-@fa-var-drupal: "\f1a9";
-@fa-var-edge: "\f282";
-@fa-var-edit: "\f044";
-@fa-var-eercast: "\f2da";
-@fa-var-eject: "\f052";
-@fa-var-ellipsis-h: "\f141";
-@fa-var-ellipsis-v: "\f142";
-@fa-var-empire: "\f1d1";
-@fa-var-envelope: "\f0e0";
-@fa-var-envelope-o: "\f003";
-@fa-var-envelope-open: "\f2b6";
-@fa-var-envelope-open-o: "\f2b7";
-@fa-var-envelope-square: "\f199";
-@fa-var-envira: "\f299";
-@fa-var-eraser: "\f12d";
-@fa-var-etsy: "\f2d7";
-@fa-var-eur: "\f153";
-@fa-var-euro: "\f153";
-@fa-var-exchange: "\f0ec";
-@fa-var-exclamation: "\f12a";
-@fa-var-exclamation-circle: "\f06a";
-@fa-var-exclamation-triangle: "\f071";
-@fa-var-expand: "\f065";
-@fa-var-expeditedssl: "\f23e";
-@fa-var-external-link: "\f08e";
-@fa-var-external-link-square: "\f14c";
-@fa-var-eye: "\f06e";
-@fa-var-eye-slash: "\f070";
-@fa-var-eyedropper: "\f1fb";
-@fa-var-fa: "\f2b4";
-@fa-var-facebook: "\f09a";
-@fa-var-facebook-f: "\f09a";
-@fa-var-facebook-official: "\f230";
-@fa-var-facebook-square: "\f082";
-@fa-var-fast-backward: "\f049";
-@fa-var-fast-forward: "\f050";
-@fa-var-fax: "\f1ac";
-@fa-var-feed: "\f09e";
-@fa-var-female: "\f182";
-@fa-var-fighter-jet: "\f0fb";
-@fa-var-file: "\f15b";
-@fa-var-file-archive-o: "\f1c6";
-@fa-var-file-audio-o: "\f1c7";
-@fa-var-file-code-o: "\f1c9";
-@fa-var-file-excel-o: "\f1c3";
-@fa-var-file-image-o: "\f1c5";
-@fa-var-file-movie-o: "\f1c8";
-@fa-var-file-o: "\f016";
-@fa-var-file-pdf-o: "\f1c1";
-@fa-var-file-photo-o: "\f1c5";
-@fa-var-file-picture-o: "\f1c5";
-@fa-var-file-powerpoint-o: "\f1c4";
-@fa-var-file-sound-o: "\f1c7";
-@fa-var-file-text: "\f15c";
-@fa-var-file-text-o: "\f0f6";
-@fa-var-file-video-o: "\f1c8";
-@fa-var-file-word-o: "\f1c2";
-@fa-var-file-zip-o: "\f1c6";
-@fa-var-files-o: "\f0c5";
-@fa-var-film: "\f008";
-@fa-var-filter: "\f0b0";
-@fa-var-fire: "\f06d";
-@fa-var-fire-extinguisher: "\f134";
-@fa-var-firefox: "\f269";
-@fa-var-first-order: "\f2b0";
-@fa-var-flag: "\f024";
-@fa-var-flag-checkered: "\f11e";
-@fa-var-flag-o: "\f11d";
-@fa-var-flash: "\f0e7";
-@fa-var-flask: "\f0c3";
-@fa-var-flickr: "\f16e";
-@fa-var-floppy-o: "\f0c7";
-@fa-var-folder: "\f07b";
-@fa-var-folder-o: "\f114";
-@fa-var-folder-open: "\f07c";
-@fa-var-folder-open-o: "\f115";
-@fa-var-font: "\f031";
-@fa-var-font-awesome: "\f2b4";
-@fa-var-fonticons: "\f280";
-@fa-var-fort-awesome: "\f286";
-@fa-var-forumbee: "\f211";
-@fa-var-forward: "\f04e";
-@fa-var-foursquare: "\f180";
-@fa-var-free-code-camp: "\f2c5";
-@fa-var-frown-o: "\f119";
-@fa-var-futbol-o: "\f1e3";
-@fa-var-gamepad: "\f11b";
-@fa-var-gavel: "\f0e3";
-@fa-var-gbp: "\f154";
-@fa-var-ge: "\f1d1";
-@fa-var-gear: "\f013";
-@fa-var-gears: "\f085";
-@fa-var-genderless: "\f22d";
-@fa-var-get-pocket: "\f265";
-@fa-var-gg: "\f260";
-@fa-var-gg-circle: "\f261";
-@fa-var-gift: "\f06b";
-@fa-var-git: "\f1d3";
-@fa-var-git-square: "\f1d2";
-@fa-var-github: "\f09b";
-@fa-var-github-alt: "\f113";
-@fa-var-github-square: "\f092";
-@fa-var-gitlab: "\f296";
-@fa-var-gittip: "\f184";
-@fa-var-glass: "\f000";
-@fa-var-glide: "\f2a5";
-@fa-var-glide-g: "\f2a6";
-@fa-var-globe: "\f0ac";
-@fa-var-google: "\f1a0";
-@fa-var-google-plus: "\f0d5";
-@fa-var-google-plus-circle: "\f2b3";
-@fa-var-google-plus-official: "\f2b3";
-@fa-var-google-plus-square: "\f0d4";
-@fa-var-google-wallet: "\f1ee";
-@fa-var-graduation-cap: "\f19d";
-@fa-var-gratipay: "\f184";
-@fa-var-grav: "\f2d6";
-@fa-var-group: "\f0c0";
-@fa-var-h-square: "\f0fd";
-@fa-var-hacker-news: "\f1d4";
-@fa-var-hand-grab-o: "\f255";
-@fa-var-hand-lizard-o: "\f258";
-@fa-var-hand-o-down: "\f0a7";
-@fa-var-hand-o-left: "\f0a5";
-@fa-var-hand-o-right: "\f0a4";
-@fa-var-hand-o-up: "\f0a6";
-@fa-var-hand-paper-o: "\f256";
-@fa-var-hand-peace-o: "\f25b";
-@fa-var-hand-pointer-o: "\f25a";
-@fa-var-hand-rock-o: "\f255";
-@fa-var-hand-scissors-o: "\f257";
-@fa-var-hand-spock-o: "\f259";
-@fa-var-hand-stop-o: "\f256";
-@fa-var-handshake-o: "\f2b5";
-@fa-var-hard-of-hearing: "\f2a4";
-@fa-var-hashtag: "\f292";
-@fa-var-hdd-o: "\f0a0";
-@fa-var-header: "\f1dc";
-@fa-var-headphones: "\f025";
-@fa-var-heart: "\f004";
-@fa-var-heart-o: "\f08a";
-@fa-var-heartbeat: "\f21e";
-@fa-var-history: "\f1da";
-@fa-var-home: "\f015";
-@fa-var-hospital-o: "\f0f8";
-@fa-var-hotel: "\f236";
-@fa-var-hourglass: "\f254";
-@fa-var-hourglass-1: "\f251";
-@fa-var-hourglass-2: "\f252";
-@fa-var-hourglass-3: "\f253";
-@fa-var-hourglass-end: "\f253";
-@fa-var-hourglass-half: "\f252";
-@fa-var-hourglass-o: "\f250";
-@fa-var-hourglass-start: "\f251";
-@fa-var-houzz: "\f27c";
-@fa-var-html5: "\f13b";
-@fa-var-i-cursor: "\f246";
-@fa-var-id-badge: "\f2c1";
-@fa-var-id-card: "\f2c2";
-@fa-var-id-card-o: "\f2c3";
-@fa-var-ils: "\f20b";
-@fa-var-image: "\f03e";
-@fa-var-imdb: "\f2d8";
-@fa-var-inbox: "\f01c";
-@fa-var-indent: "\f03c";
-@fa-var-industry: "\f275";
-@fa-var-info: "\f129";
-@fa-var-info-circle: "\f05a";
-@fa-var-inr: "\f156";
-@fa-var-instagram: "\f16d";
-@fa-var-institution: "\f19c";
-@fa-var-internet-explorer: "\f26b";
-@fa-var-intersex: "\f224";
-@fa-var-ioxhost: "\f208";
-@fa-var-italic: "\f033";
-@fa-var-joomla: "\f1aa";
-@fa-var-jpy: "\f157";
-@fa-var-jsfiddle: "\f1cc";
-@fa-var-key: "\f084";
-@fa-var-keyboard-o: "\f11c";
-@fa-var-krw: "\f159";
-@fa-var-language: "\f1ab";
-@fa-var-laptop: "\f109";
-@fa-var-lastfm: "\f202";
-@fa-var-lastfm-square: "\f203";
-@fa-var-leaf: "\f06c";
-@fa-var-leanpub: "\f212";
-@fa-var-legal: "\f0e3";
-@fa-var-lemon-o: "\f094";
-@fa-var-level-down: "\f149";
-@fa-var-level-up: "\f148";
-@fa-var-life-bouy: "\f1cd";
-@fa-var-life-buoy: "\f1cd";
-@fa-var-life-ring: "\f1cd";
-@fa-var-life-saver: "\f1cd";
-@fa-var-lightbulb-o: "\f0eb";
-@fa-var-line-chart: "\f201";
-@fa-var-link: "\f0c1";
-@fa-var-linkedin: "\f0e1";
-@fa-var-linkedin-square: "\f08c";
-@fa-var-linode: "\f2b8";
-@fa-var-linux: "\f17c";
-@fa-var-list: "\f03a";
-@fa-var-list-alt: "\f022";
-@fa-var-list-ol: "\f0cb";
-@fa-var-list-ul: "\f0ca";
-@fa-var-location-arrow: "\f124";
-@fa-var-lock: "\f023";
-@fa-var-long-arrow-down: "\f175";
-@fa-var-long-arrow-left: "\f177";
-@fa-var-long-arrow-right: "\f178";
-@fa-var-long-arrow-up: "\f176";
-@fa-var-low-vision: "\f2a8";
-@fa-var-magic: "\f0d0";
-@fa-var-magnet: "\f076";
-@fa-var-mail-forward: "\f064";
-@fa-var-mail-reply: "\f112";
-@fa-var-mail-reply-all: "\f122";
-@fa-var-male: "\f183";
-@fa-var-map: "\f279";
-@fa-var-map-marker: "\f041";
-@fa-var-map-o: "\f278";
-@fa-var-map-pin: "\f276";
-@fa-var-map-signs: "\f277";
-@fa-var-mars: "\f222";
-@fa-var-mars-double: "\f227";
-@fa-var-mars-stroke: "\f229";
-@fa-var-mars-stroke-h: "\f22b";
-@fa-var-mars-stroke-v: "\f22a";
-@fa-var-maxcdn: "\f136";
-@fa-var-meanpath: "\f20c";
-@fa-var-medium: "\f23a";
-@fa-var-medkit: "\f0fa";
-@fa-var-meetup: "\f2e0";
-@fa-var-meh-o: "\f11a";
-@fa-var-mercury: "\f223";
-@fa-var-microchip: "\f2db";
-@fa-var-microphone: "\f130";
-@fa-var-microphone-slash: "\f131";
-@fa-var-minus: "\f068";
-@fa-var-minus-circle: "\f056";
-@fa-var-minus-square: "\f146";
-@fa-var-minus-square-o: "\f147";
-@fa-var-mixcloud: "\f289";
-@fa-var-mobile: "\f10b";
-@fa-var-mobile-phone: "\f10b";
-@fa-var-modx: "\f285";
-@fa-var-money: "\f0d6";
-@fa-var-moon-o: "\f186";
-@fa-var-mortar-board: "\f19d";
-@fa-var-motorcycle: "\f21c";
-@fa-var-mouse-pointer: "\f245";
-@fa-var-music: "\f001";
-@fa-var-navicon: "\f0c9";
-@fa-var-neuter: "\f22c";
-@fa-var-newspaper-o: "\f1ea";
-@fa-var-object-group: "\f247";
-@fa-var-object-ungroup: "\f248";
-@fa-var-odnoklassniki: "\f263";
-@fa-var-odnoklassniki-square: "\f264";
-@fa-var-opencart: "\f23d";
-@fa-var-openid: "\f19b";
-@fa-var-opera: "\f26a";
-@fa-var-optin-monster: "\f23c";
-@fa-var-outdent: "\f03b";
-@fa-var-pagelines: "\f18c";
-@fa-var-paint-brush: "\f1fc";
-@fa-var-paper-plane: "\f1d8";
-@fa-var-paper-plane-o: "\f1d9";
-@fa-var-paperclip: "\f0c6";
-@fa-var-paragraph: "\f1dd";
-@fa-var-paste: "\f0ea";
-@fa-var-pause: "\f04c";
-@fa-var-pause-circle: "\f28b";
-@fa-var-pause-circle-o: "\f28c";
-@fa-var-paw: "\f1b0";
-@fa-var-paypal: "\f1ed";
-@fa-var-pencil: "\f040";
-@fa-var-pencil-square: "\f14b";
-@fa-var-pencil-square-o: "\f044";
-@fa-var-percent: "\f295";
-@fa-var-phone: "\f095";
-@fa-var-phone-square: "\f098";
-@fa-var-photo: "\f03e";
-@fa-var-picture-o: "\f03e";
-@fa-var-pie-chart: "\f200";
-@fa-var-pied-piper: "\f2ae";
-@fa-var-pied-piper-alt: "\f1a8";
-@fa-var-pied-piper-pp: "\f1a7";
-@fa-var-pinterest: "\f0d2";
-@fa-var-pinterest-p: "\f231";
-@fa-var-pinterest-square: "\f0d3";
-@fa-var-plane: "\f072";
-@fa-var-play: "\f04b";
-@fa-var-play-circle: "\f144";
-@fa-var-play-circle-o: "\f01d";
-@fa-var-plug: "\f1e6";
-@fa-var-plus: "\f067";
-@fa-var-plus-circle: "\f055";
-@fa-var-plus-square: "\f0fe";
-@fa-var-plus-square-o: "\f196";
-@fa-var-podcast: "\f2ce";
-@fa-var-power-off: "\f011";
-@fa-var-print: "\f02f";
-@fa-var-product-hunt: "\f288";
-@fa-var-puzzle-piece: "\f12e";
-@fa-var-qq: "\f1d6";
-@fa-var-qrcode: "\f029";
-@fa-var-question: "\f128";
-@fa-var-question-circle: "\f059";
-@fa-var-question-circle-o: "\f29c";
-@fa-var-quora: "\f2c4";
-@fa-var-quote-left: "\f10d";
-@fa-var-quote-right: "\f10e";
-@fa-var-ra: "\f1d0";
-@fa-var-random: "\f074";
-@fa-var-ravelry: "\f2d9";
-@fa-var-rebel: "\f1d0";
-@fa-var-recycle: "\f1b8";
-@fa-var-reddit: "\f1a1";
-@fa-var-reddit-alien: "\f281";
-@fa-var-reddit-square: "\f1a2";
-@fa-var-refresh: "\f021";
-@fa-var-registered: "\f25d";
-@fa-var-remove: "\f00d";
-@fa-var-renren: "\f18b";
-@fa-var-reorder: "\f0c9";
-@fa-var-repeat: "\f01e";
-@fa-var-reply: "\f112";
-@fa-var-reply-all: "\f122";
-@fa-var-resistance: "\f1d0";
-@fa-var-retweet: "\f079";
-@fa-var-rmb: "\f157";
-@fa-var-road: "\f018";
-@fa-var-rocket: "\f135";
-@fa-var-rotate-left: "\f0e2";
-@fa-var-rotate-right: "\f01e";
-@fa-var-rouble: "\f158";
-@fa-var-rss: "\f09e";
-@fa-var-rss-square: "\f143";
-@fa-var-rub: "\f158";
-@fa-var-ruble: "\f158";
-@fa-var-rupee: "\f156";
-@fa-var-s15: "\f2cd";
-@fa-var-safari: "\f267";
-@fa-var-save: "\f0c7";
-@fa-var-scissors: "\f0c4";
-@fa-var-scribd: "\f28a";
-@fa-var-search: "\f002";
-@fa-var-search-minus: "\f010";
-@fa-var-search-plus: "\f00e";
-@fa-var-sellsy: "\f213";
-@fa-var-send: "\f1d8";
-@fa-var-send-o: "\f1d9";
-@fa-var-server: "\f233";
-@fa-var-share: "\f064";
-@fa-var-share-alt: "\f1e0";
-@fa-var-share-alt-square: "\f1e1";
-@fa-var-share-square: "\f14d";
-@fa-var-share-square-o: "\f045";
-@fa-var-shekel: "\f20b";
-@fa-var-sheqel: "\f20b";
-@fa-var-shield: "\f132";
-@fa-var-ship: "\f21a";
-@fa-var-shirtsinbulk: "\f214";
-@fa-var-shopping-bag: "\f290";
-@fa-var-shopping-basket: "\f291";
-@fa-var-shopping-cart: "\f07a";
-@fa-var-shower: "\f2cc";
-@fa-var-sign-in: "\f090";
-@fa-var-sign-language: "\f2a7";
-@fa-var-sign-out: "\f08b";
-@fa-var-signal: "\f012";
-@fa-var-signing: "\f2a7";
-@fa-var-simplybuilt: "\f215";
-@fa-var-sitemap: "\f0e8";
-@fa-var-skyatlas: "\f216";
-@fa-var-skype: "\f17e";
-@fa-var-slack: "\f198";
-@fa-var-sliders: "\f1de";
-@fa-var-slideshare: "\f1e7";
-@fa-var-smile-o: "\f118";
-@fa-var-snapchat: "\f2ab";
-@fa-var-snapchat-ghost: "\f2ac";
-@fa-var-snapchat-square: "\f2ad";
-@fa-var-snowflake-o: "\f2dc";
-@fa-var-soccer-ball-o: "\f1e3";
-@fa-var-sort: "\f0dc";
-@fa-var-sort-alpha-asc: "\f15d";
-@fa-var-sort-alpha-desc: "\f15e";
-@fa-var-sort-amount-asc: "\f160";
-@fa-var-sort-amount-desc: "\f161";
-@fa-var-sort-asc: "\f0de";
-@fa-var-sort-desc: "\f0dd";
-@fa-var-sort-down: "\f0dd";
-@fa-var-sort-numeric-asc: "\f162";
-@fa-var-sort-numeric-desc: "\f163";
-@fa-var-sort-up: "\f0de";
-@fa-var-soundcloud: "\f1be";
-@fa-var-space-shuttle: "\f197";
-@fa-var-spinner: "\f110";
-@fa-var-spoon: "\f1b1";
-@fa-var-spotify: "\f1bc";
-@fa-var-square: "\f0c8";
-@fa-var-square-o: "\f096";
-@fa-var-stack-exchange: "\f18d";
-@fa-var-stack-overflow: "\f16c";
-@fa-var-star: "\f005";
-@fa-var-star-half: "\f089";
-@fa-var-star-half-empty: "\f123";
-@fa-var-star-half-full: "\f123";
-@fa-var-star-half-o: "\f123";
-@fa-var-star-o: "\f006";
-@fa-var-steam: "\f1b6";
-@fa-var-steam-square: "\f1b7";
-@fa-var-step-backward: "\f048";
-@fa-var-step-forward: "\f051";
-@fa-var-stethoscope: "\f0f1";
-@fa-var-sticky-note: "\f249";
-@fa-var-sticky-note-o: "\f24a";
-@fa-var-stop: "\f04d";
-@fa-var-stop-circle: "\f28d";
-@fa-var-stop-circle-o: "\f28e";
-@fa-var-street-view: "\f21d";
-@fa-var-strikethrough: "\f0cc";
-@fa-var-stumbleupon: "\f1a4";
-@fa-var-stumbleupon-circle: "\f1a3";
-@fa-var-subscript: "\f12c";
-@fa-var-subway: "\f239";
-@fa-var-suitcase: "\f0f2";
-@fa-var-sun-o: "\f185";
-@fa-var-superpowers: "\f2dd";
-@fa-var-superscript: "\f12b";
-@fa-var-support: "\f1cd";
-@fa-var-table: "\f0ce";
-@fa-var-tablet: "\f10a";
-@fa-var-tachometer: "\f0e4";
-@fa-var-tag: "\f02b";
-@fa-var-tags: "\f02c";
-@fa-var-tasks: "\f0ae";
-@fa-var-taxi: "\f1ba";
-@fa-var-telegram: "\f2c6";
-@fa-var-television: "\f26c";
-@fa-var-tencent-weibo: "\f1d5";
-@fa-var-terminal: "\f120";
-@fa-var-text-height: "\f034";
-@fa-var-text-width: "\f035";
-@fa-var-th: "\f00a";
-@fa-var-th-large: "\f009";
-@fa-var-th-list: "\f00b";
-@fa-var-themeisle: "\f2b2";
-@fa-var-thermometer: "\f2c7";
-@fa-var-thermometer-0: "\f2cb";
-@fa-var-thermometer-1: "\f2ca";
-@fa-var-thermometer-2: "\f2c9";
-@fa-var-thermometer-3: "\f2c8";
-@fa-var-thermometer-4: "\f2c7";
-@fa-var-thermometer-empty: "\f2cb";
-@fa-var-thermometer-full: "\f2c7";
-@fa-var-thermometer-half: "\f2c9";
-@fa-var-thermometer-quarter: "\f2ca";
-@fa-var-thermometer-three-quarters: "\f2c8";
-@fa-var-thumb-tack: "\f08d";
-@fa-var-thumbs-down: "\f165";
-@fa-var-thumbs-o-down: "\f088";
-@fa-var-thumbs-o-up: "\f087";
-@fa-var-thumbs-up: "\f164";
-@fa-var-ticket: "\f145";
-@fa-var-times: "\f00d";
-@fa-var-times-circle: "\f057";
-@fa-var-times-circle-o: "\f05c";
-@fa-var-times-rectangle: "\f2d3";
-@fa-var-times-rectangle-o: "\f2d4";
-@fa-var-tint: "\f043";
-@fa-var-toggle-down: "\f150";
-@fa-var-toggle-left: "\f191";
-@fa-var-toggle-off: "\f204";
-@fa-var-toggle-on: "\f205";
-@fa-var-toggle-right: "\f152";
-@fa-var-toggle-up: "\f151";
-@fa-var-trademark: "\f25c";
-@fa-var-train: "\f238";
-@fa-var-transgender: "\f224";
-@fa-var-transgender-alt: "\f225";
-@fa-var-trash: "\f1f8";
-@fa-var-trash-o: "\f014";
-@fa-var-tree: "\f1bb";
-@fa-var-trello: "\f181";
-@fa-var-tripadvisor: "\f262";
-@fa-var-trophy: "\f091";
-@fa-var-truck: "\f0d1";
-@fa-var-try: "\f195";
-@fa-var-tty: "\f1e4";
-@fa-var-tumblr: "\f173";
-@fa-var-tumblr-square: "\f174";
-@fa-var-turkish-lira: "\f195";
-@fa-var-tv: "\f26c";
-@fa-var-twitch: "\f1e8";
-@fa-var-twitter: "\f099";
-@fa-var-twitter-square: "\f081";
-@fa-var-umbrella: "\f0e9";
-@fa-var-underline: "\f0cd";
-@fa-var-undo: "\f0e2";
-@fa-var-universal-access: "\f29a";
-@fa-var-university: "\f19c";
-@fa-var-unlink: "\f127";
-@fa-var-unlock: "\f09c";
-@fa-var-unlock-alt: "\f13e";
-@fa-var-unsorted: "\f0dc";
-@fa-var-upload: "\f093";
-@fa-var-usb: "\f287";
-@fa-var-usd: "\f155";
-@fa-var-user: "\f007";
-@fa-var-user-circle: "\f2bd";
-@fa-var-user-circle-o: "\f2be";
-@fa-var-user-md: "\f0f0";
-@fa-var-user-o: "\f2c0";
-@fa-var-user-plus: "\f234";
-@fa-var-user-secret: "\f21b";
-@fa-var-user-times: "\f235";
-@fa-var-users: "\f0c0";
-@fa-var-vcard: "\f2bb";
-@fa-var-vcard-o: "\f2bc";
-@fa-var-venus: "\f221";
-@fa-var-venus-double: "\f226";
-@fa-var-venus-mars: "\f228";
-@fa-var-viacoin: "\f237";
-@fa-var-viadeo: "\f2a9";
-@fa-var-viadeo-square: "\f2aa";
-@fa-var-video-camera: "\f03d";
-@fa-var-vimeo: "\f27d";
-@fa-var-vimeo-square: "\f194";
-@fa-var-vine: "\f1ca";
-@fa-var-vk: "\f189";
-@fa-var-volume-control-phone: "\f2a0";
-@fa-var-volume-down: "\f027";
-@fa-var-volume-off: "\f026";
-@fa-var-volume-up: "\f028";
-@fa-var-warning: "\f071";
-@fa-var-wechat: "\f1d7";
-@fa-var-weibo: "\f18a";
-@fa-var-weixin: "\f1d7";
-@fa-var-whatsapp: "\f232";
-@fa-var-wheelchair: "\f193";
-@fa-var-wheelchair-alt: "\f29b";
-@fa-var-wifi: "\f1eb";
-@fa-var-wikipedia-w: "\f266";
-@fa-var-window-close: "\f2d3";
-@fa-var-window-close-o: "\f2d4";
-@fa-var-window-maximize: "\f2d0";
-@fa-var-window-minimize: "\f2d1";
-@fa-var-window-restore: "\f2d2";
-@fa-var-windows: "\f17a";
-@fa-var-won: "\f159";
-@fa-var-wordpress: "\f19a";
-@fa-var-wpbeginner: "\f297";
-@fa-var-wpexplorer: "\f2de";
-@fa-var-wpforms: "\f298";
-@fa-var-wrench: "\f0ad";
-@fa-var-xing: "\f168";
-@fa-var-xing-square: "\f169";
-@fa-var-y-combinator: "\f23b";
-@fa-var-y-combinator-square: "\f1d4";
-@fa-var-yahoo: "\f19e";
-@fa-var-yc: "\f23b";
-@fa-var-yc-square: "\f1d4";
-@fa-var-yelp: "\f1e9";
-@fa-var-yen: "\f157";
-@fa-var-yoast: "\f2b1";
-@fa-var-youtube: "\f167";
-@fa-var-youtube-play: "\f16a";
-@fa-var-youtube-square: "\f166";
-
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_animated.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_animated.scss
deleted file mode 100644
index 8a020dbfff..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_animated.scss
+++ /dev/null
@@ -1,34 +0,0 @@
-// Spinning Icons
-// --------------------------
-
-.#{$fa-css-prefix}-spin {
-  -webkit-animation: fa-spin 2s infinite linear;
-          animation: fa-spin 2s infinite linear;
-}
-
-.#{$fa-css-prefix}-pulse {
-  -webkit-animation: fa-spin 1s infinite steps(8);
-          animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-            transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-            transform: rotate(359deg);
-  }
-}
-
-@keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-            transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-            transform: rotate(359deg);
-  }
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_bordered-pulled.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_bordered-pulled.scss
deleted file mode 100644
index d4b85a02f2..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_bordered-pulled.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-// Bordered & Pulled
-// -------------------------
-
-.#{$fa-css-prefix}-border {
-  padding: .2em .25em .15em;
-  border: solid .08em $fa-border-color;
-  border-radius: .1em;
-}
-
-.#{$fa-css-prefix}-pull-left { float: left; }
-.#{$fa-css-prefix}-pull-right { float: right; }
-
-.#{$fa-css-prefix} {
-  &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
-  &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
-}
-
-/* Deprecated as of 4.4.0 */
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-.#{$fa-css-prefix} {
-  &.pull-left { margin-right: .3em; }
-  &.pull-right { margin-left: .3em; }
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_core.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_core.scss
deleted file mode 100644
index 7425ef85fc..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_core.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-// Base Class Definition
-// -------------------------
-
-.#{$fa-css-prefix} {
-  display: inline-block;
-  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
-  font-size: inherit; // can't have font-size inherit on line above, so need to override
-  text-rendering: auto; // optimizelegibility throws things off #1094
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_fixed-width.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_fixed-width.scss
deleted file mode 100644
index b221c98133..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_fixed-width.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// Fixed Width Icons
-// -------------------------
-.#{$fa-css-prefix}-fw {
-  width: (18em / 14);
-  text-align: center;
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_icons.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_icons.scss
deleted file mode 100644
index e63e702c4d..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_icons.scss
+++ /dev/null
@@ -1,789 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-
-.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
-.#{$fa-css-prefix}-music:before { content: $fa-var-music; }
-.#{$fa-css-prefix}-search:before { content: $fa-var-search; }
-.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
-.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
-.#{$fa-css-prefix}-star:before { content: $fa-var-star; }
-.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
-.#{$fa-css-prefix}-user:before { content: $fa-var-user; }
-.#{$fa-css-prefix}-film:before { content: $fa-var-film; }
-.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
-.#{$fa-css-prefix}-th:before { content: $fa-var-th; }
-.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
-.#{$fa-css-prefix}-check:before { content: $fa-var-check; }
-.#{$fa-css-prefix}-remove:before,
-.#{$fa-css-prefix}-close:before,
-.#{$fa-css-prefix}-times:before { content: $fa-var-times; }
-.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
-.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
-.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
-.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
-.#{$fa-css-prefix}-gear:before,
-.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
-.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
-.#{$fa-css-prefix}-home:before { content: $fa-var-home; }
-.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
-.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
-.#{$fa-css-prefix}-road:before { content: $fa-var-road; }
-.#{$fa-css-prefix}-download:before { content: $fa-var-download; }
-.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
-.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
-.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
-.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
-.#{$fa-css-prefix}-rotate-right:before,
-.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
-.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
-.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
-.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
-.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
-.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
-.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
-.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
-.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
-.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
-.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
-.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
-.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
-.#{$fa-css-prefix}-book:before { content: $fa-var-book; }
-.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
-.#{$fa-css-prefix}-print:before { content: $fa-var-print; }
-.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
-.#{$fa-css-prefix}-font:before { content: $fa-var-font; }
-.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
-.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
-.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
-.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
-.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
-.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
-.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
-.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
-.#{$fa-css-prefix}-list:before { content: $fa-var-list; }
-.#{$fa-css-prefix}-dedent:before,
-.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
-.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
-.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
-.#{$fa-css-prefix}-photo:before,
-.#{$fa-css-prefix}-image:before,
-.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
-.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
-.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
-.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
-.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
-.#{$fa-css-prefix}-edit:before,
-.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
-.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
-.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
-.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
-.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
-.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
-.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
-.#{$fa-css-prefix}-play:before { content: $fa-var-play; }
-.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
-.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
-.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
-.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
-.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
-.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
-.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
-.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
-.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
-.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
-.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
-.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
-.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
-.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
-.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
-.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
-.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
-.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
-.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
-.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
-.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
-.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
-.#{$fa-css-prefix}-mail-forward:before,
-.#{$fa-css-prefix}-share:before { content: $fa-var-share; }
-.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
-.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
-.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
-.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
-.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
-.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
-.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
-.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
-.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
-.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
-.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
-.#{$fa-css-prefix}-warning:before,
-.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
-.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
-.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
-.#{$fa-css-prefix}-random:before { content: $fa-var-random; }
-.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
-.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
-.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
-.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
-.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
-.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
-.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
-.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
-.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
-.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
-.#{$fa-css-prefix}-bar-chart-o:before,
-.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
-.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
-.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
-.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
-.#{$fa-css-prefix}-key:before { content: $fa-var-key; }
-.#{$fa-css-prefix}-gears:before,
-.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
-.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
-.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
-.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
-.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
-.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
-.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
-.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
-.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
-.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
-.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
-.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
-.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
-.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
-.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
-.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
-.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
-.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
-.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
-.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
-.#{$fa-css-prefix}-facebook-f:before,
-.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
-.#{$fa-css-prefix}-github:before { content: $fa-var-github; }
-.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
-.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
-.#{$fa-css-prefix}-feed:before,
-.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
-.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
-.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
-.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
-.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
-.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
-.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
-.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
-.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
-.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
-.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
-.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
-.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
-.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
-.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
-.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
-.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
-.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
-.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
-.#{$fa-css-prefix}-group:before,
-.#{$fa-css-prefix}-users:before { content: $fa-var-users; }
-.#{$fa-css-prefix}-chain:before,
-.#{$fa-css-prefix}-link:before { content: $fa-var-link; }
-.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
-.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
-.#{$fa-css-prefix}-cut:before,
-.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
-.#{$fa-css-prefix}-copy:before,
-.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
-.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
-.#{$fa-css-prefix}-save:before,
-.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
-.#{$fa-css-prefix}-square:before { content: $fa-var-square; }
-.#{$fa-css-prefix}-navicon:before,
-.#{$fa-css-prefix}-reorder:before,
-.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
-.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
-.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
-.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
-.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
-.#{$fa-css-prefix}-table:before { content: $fa-var-table; }
-.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
-.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
-.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
-.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
-.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
-.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
-.#{$fa-css-prefix}-money:before { content: $fa-var-money; }
-.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
-.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
-.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
-.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
-.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
-.#{$fa-css-prefix}-unsorted:before,
-.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
-.#{$fa-css-prefix}-sort-down:before,
-.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
-.#{$fa-css-prefix}-sort-up:before,
-.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
-.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
-.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
-.#{$fa-css-prefix}-rotate-left:before,
-.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
-.#{$fa-css-prefix}-legal:before,
-.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
-.#{$fa-css-prefix}-dashboard:before,
-.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
-.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
-.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
-.#{$fa-css-prefix}-flash:before,
-.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
-.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
-.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
-.#{$fa-css-prefix}-paste:before,
-.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
-.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
-.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
-.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
-.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
-.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
-.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
-.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
-.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
-.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
-.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
-.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
-.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
-.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
-.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
-.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
-.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
-.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
-.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
-.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
-.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
-.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
-.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
-.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
-.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
-.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
-.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
-.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
-.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
-.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
-.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
-.#{$fa-css-prefix}-mobile-phone:before,
-.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
-.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
-.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
-.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
-.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
-.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
-.#{$fa-css-prefix}-mail-reply:before,
-.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
-.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
-.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
-.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
-.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
-.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
-.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
-.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
-.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
-.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
-.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
-.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
-.#{$fa-css-prefix}-code:before { content: $fa-var-code; }
-.#{$fa-css-prefix}-mail-reply-all:before,
-.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
-.#{$fa-css-prefix}-star-half-empty:before,
-.#{$fa-css-prefix}-star-half-full:before,
-.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
-.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
-.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
-.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
-.#{$fa-css-prefix}-unlink:before,
-.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
-.#{$fa-css-prefix}-question:before { content: $fa-var-question; }
-.#{$fa-css-prefix}-info:before { content: $fa-var-info; }
-.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
-.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
-.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
-.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
-.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
-.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
-.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
-.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
-.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
-.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
-.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
-.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
-.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
-.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
-.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
-.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
-.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
-.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
-.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
-.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
-.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
-.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
-.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
-.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
-.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
-.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
-.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
-.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
-.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
-.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
-.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
-.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
-.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
-.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
-.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
-.#{$fa-css-prefix}-toggle-down:before,
-.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
-.#{$fa-css-prefix}-toggle-up:before,
-.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
-.#{$fa-css-prefix}-toggle-right:before,
-.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
-.#{$fa-css-prefix}-euro:before,
-.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
-.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
-.#{$fa-css-prefix}-dollar:before,
-.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
-.#{$fa-css-prefix}-rupee:before,
-.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
-.#{$fa-css-prefix}-cny:before,
-.#{$fa-css-prefix}-rmb:before,
-.#{$fa-css-prefix}-yen:before,
-.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
-.#{$fa-css-prefix}-ruble:before,
-.#{$fa-css-prefix}-rouble:before,
-.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
-.#{$fa-css-prefix}-won:before,
-.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
-.#{$fa-css-prefix}-bitcoin:before,
-.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
-.#{$fa-css-prefix}-file:before { content: $fa-var-file; }
-.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
-.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
-.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
-.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
-.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
-.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
-.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
-.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
-.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
-.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
-.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
-.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
-.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
-.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
-.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
-.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
-.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
-.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
-.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
-.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
-.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
-.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
-.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
-.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
-.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
-.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
-.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
-.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
-.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
-.#{$fa-css-prefix}-android:before { content: $fa-var-android; }
-.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
-.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
-.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
-.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
-.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
-.#{$fa-css-prefix}-female:before { content: $fa-var-female; }
-.#{$fa-css-prefix}-male:before { content: $fa-var-male; }
-.#{$fa-css-prefix}-gittip:before,
-.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
-.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
-.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
-.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
-.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
-.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
-.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
-.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
-.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
-.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
-.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
-.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
-.#{$fa-css-prefix}-toggle-left:before,
-.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
-.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
-.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
-.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
-.#{$fa-css-prefix}-turkish-lira:before,
-.#{$fa-css-prefix}-try:before { content: $fa-var-try; }
-.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
-.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
-.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
-.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
-.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
-.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
-.#{$fa-css-prefix}-institution:before,
-.#{$fa-css-prefix}-bank:before,
-.#{$fa-css-prefix}-university:before { content: $fa-var-university; }
-.#{$fa-css-prefix}-mortar-board:before,
-.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
-.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
-.#{$fa-css-prefix}-google:before { content: $fa-var-google; }
-.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
-.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
-.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
-.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
-.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
-.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
-.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }
-.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
-.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
-.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
-.#{$fa-css-prefix}-language:before { content: $fa-var-language; }
-.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
-.#{$fa-css-prefix}-building:before { content: $fa-var-building; }
-.#{$fa-css-prefix}-child:before { content: $fa-var-child; }
-.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
-.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
-.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
-.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
-.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
-.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
-.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
-.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
-.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
-.#{$fa-css-prefix}-automobile:before,
-.#{$fa-css-prefix}-car:before { content: $fa-var-car; }
-.#{$fa-css-prefix}-cab:before,
-.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
-.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
-.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
-.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
-.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
-.#{$fa-css-prefix}-database:before { content: $fa-var-database; }
-.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
-.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
-.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
-.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
-.#{$fa-css-prefix}-file-photo-o:before,
-.#{$fa-css-prefix}-file-picture-o:before,
-.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
-.#{$fa-css-prefix}-file-zip-o:before,
-.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
-.#{$fa-css-prefix}-file-sound-o:before,
-.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
-.#{$fa-css-prefix}-file-movie-o:before,
-.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
-.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
-.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
-.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
-.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
-.#{$fa-css-prefix}-life-bouy:before,
-.#{$fa-css-prefix}-life-buoy:before,
-.#{$fa-css-prefix}-life-saver:before,
-.#{$fa-css-prefix}-support:before,
-.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
-.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
-.#{$fa-css-prefix}-ra:before,
-.#{$fa-css-prefix}-resistance:before,
-.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
-.#{$fa-css-prefix}-ge:before,
-.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
-.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
-.#{$fa-css-prefix}-git:before { content: $fa-var-git; }
-.#{$fa-css-prefix}-y-combinator-square:before,
-.#{$fa-css-prefix}-yc-square:before,
-.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
-.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
-.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
-.#{$fa-css-prefix}-wechat:before,
-.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
-.#{$fa-css-prefix}-send:before,
-.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
-.#{$fa-css-prefix}-send-o:before,
-.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
-.#{$fa-css-prefix}-history:before { content: $fa-var-history; }
-.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
-.#{$fa-css-prefix}-header:before { content: $fa-var-header; }
-.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
-.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
-.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
-.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
-.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
-.#{$fa-css-prefix}-soccer-ball-o:before,
-.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
-.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
-.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
-.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
-.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
-.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
-.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
-.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
-.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
-.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
-.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
-.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
-.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
-.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
-.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
-.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
-.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
-.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
-.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
-.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
-.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
-.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
-.#{$fa-css-prefix}-at:before { content: $fa-var-at; }
-.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
-.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
-.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
-.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
-.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
-.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
-.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
-.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
-.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
-.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
-.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
-.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
-.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
-.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
-.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
-.#{$fa-css-prefix}-shekel:before,
-.#{$fa-css-prefix}-sheqel:before,
-.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
-.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
-.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
-.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
-.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
-.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
-.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
-.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
-.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
-.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
-.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
-.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
-.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
-.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
-.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
-.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
-.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
-.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
-.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
-.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
-.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
-.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
-.#{$fa-css-prefix}-intersex:before,
-.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
-.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
-.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
-.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
-.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
-.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
-.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
-.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
-.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
-.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }
-.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
-.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
-.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
-.#{$fa-css-prefix}-server:before { content: $fa-var-server; }
-.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
-.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
-.#{$fa-css-prefix}-hotel:before,
-.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
-.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
-.#{$fa-css-prefix}-train:before { content: $fa-var-train; }
-.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
-.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }
-.#{$fa-css-prefix}-yc:before,
-.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }
-.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }
-.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
-.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
-.#{$fa-css-prefix}-battery-4:before,
-.#{$fa-css-prefix}-battery:before,
-.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
-.#{$fa-css-prefix}-battery-3:before,
-.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
-.#{$fa-css-prefix}-battery-2:before,
-.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }
-.#{$fa-css-prefix}-battery-1:before,
-.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }
-.#{$fa-css-prefix}-battery-0:before,
-.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }
-.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }
-.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }
-.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }
-.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }
-.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }
-.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }
-.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }
-.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }
-.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }
-.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }
-.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }
-.#{$fa-css-prefix}-hourglass-1:before,
-.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }
-.#{$fa-css-prefix}-hourglass-2:before,
-.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }
-.#{$fa-css-prefix}-hourglass-3:before,
-.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }
-.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }
-.#{$fa-css-prefix}-hand-grab-o:before,
-.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }
-.#{$fa-css-prefix}-hand-stop-o:before,
-.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }
-.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }
-.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }
-.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }
-.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }
-.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }
-.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }
-.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }
-.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }
-.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }
-.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }
-.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }
-.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }
-.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }
-.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }
-.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }
-.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }
-.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }
-.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }
-.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }
-.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }
-.#{$fa-css-prefix}-tv:before,
-.#{$fa-css-prefix}-television:before { content: $fa-var-television; }
-.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }
-.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }
-.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }
-.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }
-.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }
-.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }
-.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }
-.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }
-.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }
-.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }
-.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }
-.#{$fa-css-prefix}-map:before { content: $fa-var-map; }
-.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }
-.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }
-.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }
-.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }
-.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }
-.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }
-.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }
-.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }
-.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }
-.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }
-.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }
-.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }
-.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }
-.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }
-.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }
-.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }
-.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }
-.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }
-.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }
-.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }
-.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }
-.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }
-.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }
-.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }
-.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }
-.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }
-.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }
-.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }
-.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }
-.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }
-.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }
-.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }
-.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }
-.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }
-.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }
-.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }
-.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }
-.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }
-.#{$fa-css-prefix}-asl-interpreting:before,
-.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }
-.#{$fa-css-prefix}-deafness:before,
-.#{$fa-css-prefix}-hard-of-hearing:before,
-.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }
-.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }
-.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }
-.#{$fa-css-prefix}-signing:before,
-.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }
-.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }
-.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }
-.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }
-.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }
-.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }
-.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }
-.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
-.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }
-.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }
-.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }
-.#{$fa-css-prefix}-google-plus-circle:before,
-.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
-.#{$fa-css-prefix}-fa:before,
-.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
-.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }
-.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }
-.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }
-.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }
-.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }
-.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }
-.#{$fa-css-prefix}-vcard:before,
-.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }
-.#{$fa-css-prefix}-vcard-o:before,
-.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }
-.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }
-.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }
-.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }
-.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }
-.#{$fa-css-prefix}-drivers-license:before,
-.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }
-.#{$fa-css-prefix}-drivers-license-o:before,
-.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }
-.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }
-.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }
-.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }
-.#{$fa-css-prefix}-thermometer-4:before,
-.#{$fa-css-prefix}-thermometer:before,
-.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }
-.#{$fa-css-prefix}-thermometer-3:before,
-.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }
-.#{$fa-css-prefix}-thermometer-2:before,
-.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }
-.#{$fa-css-prefix}-thermometer-1:before,
-.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }
-.#{$fa-css-prefix}-thermometer-0:before,
-.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }
-.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }
-.#{$fa-css-prefix}-bathtub:before,
-.#{$fa-css-prefix}-s15:before,
-.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }
-.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }
-.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }
-.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }
-.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }
-.#{$fa-css-prefix}-times-rectangle:before,
-.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }
-.#{$fa-css-prefix}-times-rectangle-o:before,
-.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }
-.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }
-.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }
-.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }
-.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }
-.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }
-.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }
-.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }
-.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }
-.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }
-.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }
-.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_larger.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_larger.scss
deleted file mode 100644
index 41e9a8184a..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_larger.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon Sizes
-// -------------------------
-
-/* makes the font 33% larger relative to the icon container */
-.#{$fa-css-prefix}-lg {
-  font-size: (4em / 3);
-  line-height: (3em / 4);
-  vertical-align: -15%;
-}
-.#{$fa-css-prefix}-2x { font-size: 2em; }
-.#{$fa-css-prefix}-3x { font-size: 3em; }
-.#{$fa-css-prefix}-4x { font-size: 4em; }
-.#{$fa-css-prefix}-5x { font-size: 5em; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_list.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_list.scss
deleted file mode 100644
index 7d1e4d54d6..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_list.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-// List Icons
-// -------------------------
-
-.#{$fa-css-prefix}-ul {
-  padding-left: 0;
-  margin-left: $fa-li-width;
-  list-style-type: none;
-  > li { position: relative; }
-}
-.#{$fa-css-prefix}-li {
-  position: absolute;
-  left: -$fa-li-width;
-  width: $fa-li-width;
-  top: (2em / 14);
-  text-align: center;
-  &.#{$fa-css-prefix}-lg {
-    left: -$fa-li-width + (4em / 14);
-  }
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_mixins.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_mixins.scss
deleted file mode 100644
index c3bbd5745d..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_mixins.scss
+++ /dev/null
@@ -1,60 +0,0 @@
-// Mixins
-// --------------------------
-
-@mixin fa-icon() {
-  display: inline-block;
-  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
-  font-size: inherit; // can't have font-size inherit on line above, so need to override
-  text-rendering: auto; // optimizelegibility throws things off #1094
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-
-}
-
-@mixin fa-icon-rotate($degrees, $rotation) {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
-  -webkit-transform: rotate($degrees);
-      -ms-transform: rotate($degrees);
-          transform: rotate($degrees);
-}
-
-@mixin fa-icon-flip($horiz, $vert, $rotation) {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
-  -webkit-transform: scale($horiz, $vert);
-      -ms-transform: scale($horiz, $vert);
-          transform: scale($horiz, $vert);
-}
-
-
-// Only display content to screen readers. A la Bootstrap 4.
-//
-// See: http://a11yproject.com/posts/how-to-hide-content/
-
-@mixin sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0,0,0,0);
-  border: 0;
-}
-
-// Use in conjunction with .sr-only to only display content when it's focused.
-//
-// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
-//
-// Credit: HTML5 Boilerplate
-
-@mixin sr-only-focusable {
-  &:active,
-  &:focus {
-    position: static;
-    width: auto;
-    height: auto;
-    margin: 0;
-    overflow: visible;
-    clip: auto;
-  }
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_path.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_path.scss
deleted file mode 100644
index bb457c23a8..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_path.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-/* FONT PATH
- * -------------------------- */
-
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
-  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
-    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
-    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
-    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
-    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
-//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
-  font-weight: normal;
-  font-style: normal;
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_rotated-flipped.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_rotated-flipped.scss
deleted file mode 100644
index a3558fd09c..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_rotated-flipped.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-// Rotated & Flipped Icons
-// -------------------------
-
-.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }
-.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
-.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
-
-.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
-.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }
-
-// Hook for IE8-9
-// -------------------------
-
-:root .#{$fa-css-prefix}-rotate-90,
-:root .#{$fa-css-prefix}-rotate-180,
-:root .#{$fa-css-prefix}-rotate-270,
-:root .#{$fa-css-prefix}-flip-horizontal,
-:root .#{$fa-css-prefix}-flip-vertical {
-  filter: none;
-}
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_screen-reader.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_screen-reader.scss
deleted file mode 100644
index 637426f0da..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_screen-reader.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-// Screen Readers
-// -------------------------
-
-.sr-only { @include sr-only(); }
-.sr-only-focusable { @include sr-only-focusable(); }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_stacked.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_stacked.scss
deleted file mode 100644
index aef7403660..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_stacked.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-// Stacked Icons
-// -------------------------
-
-.#{$fa-css-prefix}-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
-.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
-.#{$fa-css-prefix}-inverse { color: $fa-inverse; }
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_variables.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_variables.scss
deleted file mode 100644
index 498fc4a087..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/_variables.scss
+++ /dev/null
@@ -1,800 +0,0 @@
-// Variables
-// --------------------------
-
-$fa-font-path:        "../fonts" !default;
-$fa-font-size-base:   14px !default;
-$fa-line-height-base: 1 !default;
-//$fa-font-path:        "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
-$fa-css-prefix:       fa !default;
-$fa-version:          "4.7.0" !default;
-$fa-border-color:     #eee !default;
-$fa-inverse:          #fff !default;
-$fa-li-width:         (30em / 14) !default;
-
-$fa-var-500px: "\f26e";
-$fa-var-address-book: "\f2b9";
-$fa-var-address-book-o: "\f2ba";
-$fa-var-address-card: "\f2bb";
-$fa-var-address-card-o: "\f2bc";
-$fa-var-adjust: "\f042";
-$fa-var-adn: "\f170";
-$fa-var-align-center: "\f037";
-$fa-var-align-justify: "\f039";
-$fa-var-align-left: "\f036";
-$fa-var-align-right: "\f038";
-$fa-var-amazon: "\f270";
-$fa-var-ambulance: "\f0f9";
-$fa-var-american-sign-language-interpreting: "\f2a3";
-$fa-var-anchor: "\f13d";
-$fa-var-android: "\f17b";
-$fa-var-angellist: "\f209";
-$fa-var-angle-double-down: "\f103";
-$fa-var-angle-double-left: "\f100";
-$fa-var-angle-double-right: "\f101";
-$fa-var-angle-double-up: "\f102";
-$fa-var-angle-down: "\f107";
-$fa-var-angle-left: "\f104";
-$fa-var-angle-right: "\f105";
-$fa-var-angle-up: "\f106";
-$fa-var-apple: "\f179";
-$fa-var-archive: "\f187";
-$fa-var-area-chart: "\f1fe";
-$fa-var-arrow-circle-down: "\f0ab";
-$fa-var-arrow-circle-left: "\f0a8";
-$fa-var-arrow-circle-o-down: "\f01a";
-$fa-var-arrow-circle-o-left: "\f190";
-$fa-var-arrow-circle-o-right: "\f18e";
-$fa-var-arrow-circle-o-up: "\f01b";
-$fa-var-arrow-circle-right: "\f0a9";
-$fa-var-arrow-circle-up: "\f0aa";
-$fa-var-arrow-down: "\f063";
-$fa-var-arrow-left: "\f060";
-$fa-var-arrow-right: "\f061";
-$fa-var-arrow-up: "\f062";
-$fa-var-arrows: "\f047";
-$fa-var-arrows-alt: "\f0b2";
-$fa-var-arrows-h: "\f07e";
-$fa-var-arrows-v: "\f07d";
-$fa-var-asl-interpreting: "\f2a3";
-$fa-var-assistive-listening-systems: "\f2a2";
-$fa-var-asterisk: "\f069";
-$fa-var-at: "\f1fa";
-$fa-var-audio-description: "\f29e";
-$fa-var-automobile: "\f1b9";
-$fa-var-backward: "\f04a";
-$fa-var-balance-scale: "\f24e";
-$fa-var-ban: "\f05e";
-$fa-var-bandcamp: "\f2d5";
-$fa-var-bank: "\f19c";
-$fa-var-bar-chart: "\f080";
-$fa-var-bar-chart-o: "\f080";
-$fa-var-barcode: "\f02a";
-$fa-var-bars: "\f0c9";
-$fa-var-bath: "\f2cd";
-$fa-var-bathtub: "\f2cd";
-$fa-var-battery: "\f240";
-$fa-var-battery-0: "\f244";
-$fa-var-battery-1: "\f243";
-$fa-var-battery-2: "\f242";
-$fa-var-battery-3: "\f241";
-$fa-var-battery-4: "\f240";
-$fa-var-battery-empty: "\f244";
-$fa-var-battery-full: "\f240";
-$fa-var-battery-half: "\f242";
-$fa-var-battery-quarter: "\f243";
-$fa-var-battery-three-quarters: "\f241";
-$fa-var-bed: "\f236";
-$fa-var-beer: "\f0fc";
-$fa-var-behance: "\f1b4";
-$fa-var-behance-square: "\f1b5";
-$fa-var-bell: "\f0f3";
-$fa-var-bell-o: "\f0a2";
-$fa-var-bell-slash: "\f1f6";
-$fa-var-bell-slash-o: "\f1f7";
-$fa-var-bicycle: "\f206";
-$fa-var-binoculars: "\f1e5";
-$fa-var-birthday-cake: "\f1fd";
-$fa-var-bitbucket: "\f171";
-$fa-var-bitbucket-square: "\f172";
-$fa-var-bitcoin: "\f15a";
-$fa-var-black-tie: "\f27e";
-$fa-var-blind: "\f29d";
-$fa-var-bluetooth: "\f293";
-$fa-var-bluetooth-b: "\f294";
-$fa-var-bold: "\f032";
-$fa-var-bolt: "\f0e7";
-$fa-var-bomb: "\f1e2";
-$fa-var-book: "\f02d";
-$fa-var-bookmark: "\f02e";
-$fa-var-bookmark-o: "\f097";
-$fa-var-braille: "\f2a1";
-$fa-var-briefcase: "\f0b1";
-$fa-var-btc: "\f15a";
-$fa-var-bug: "\f188";
-$fa-var-building: "\f1ad";
-$fa-var-building-o: "\f0f7";
-$fa-var-bullhorn: "\f0a1";
-$fa-var-bullseye: "\f140";
-$fa-var-bus: "\f207";
-$fa-var-buysellads: "\f20d";
-$fa-var-cab: "\f1ba";
-$fa-var-calculator: "\f1ec";
-$fa-var-calendar: "\f073";
-$fa-var-calendar-check-o: "\f274";
-$fa-var-calendar-minus-o: "\f272";
-$fa-var-calendar-o: "\f133";
-$fa-var-calendar-plus-o: "\f271";
-$fa-var-calendar-times-o: "\f273";
-$fa-var-camera: "\f030";
-$fa-var-camera-retro: "\f083";
-$fa-var-car: "\f1b9";
-$fa-var-caret-down: "\f0d7";
-$fa-var-caret-left: "\f0d9";
-$fa-var-caret-right: "\f0da";
-$fa-var-caret-square-o-down: "\f150";
-$fa-var-caret-square-o-left: "\f191";
-$fa-var-caret-square-o-right: "\f152";
-$fa-var-caret-square-o-up: "\f151";
-$fa-var-caret-up: "\f0d8";
-$fa-var-cart-arrow-down: "\f218";
-$fa-var-cart-plus: "\f217";
-$fa-var-cc: "\f20a";
-$fa-var-cc-amex: "\f1f3";
-$fa-var-cc-diners-club: "\f24c";
-$fa-var-cc-discover: "\f1f2";
-$fa-var-cc-jcb: "\f24b";
-$fa-var-cc-mastercard: "\f1f1";
-$fa-var-cc-paypal: "\f1f4";
-$fa-var-cc-stripe: "\f1f5";
-$fa-var-cc-visa: "\f1f0";
-$fa-var-certificate: "\f0a3";
-$fa-var-chain: "\f0c1";
-$fa-var-chain-broken: "\f127";
-$fa-var-check: "\f00c";
-$fa-var-check-circle: "\f058";
-$fa-var-check-circle-o: "\f05d";
-$fa-var-check-square: "\f14a";
-$fa-var-check-square-o: "\f046";
-$fa-var-chevron-circle-down: "\f13a";
-$fa-var-chevron-circle-left: "\f137";
-$fa-var-chevron-circle-right: "\f138";
-$fa-var-chevron-circle-up: "\f139";
-$fa-var-chevron-down: "\f078";
-$fa-var-chevron-left: "\f053";
-$fa-var-chevron-right: "\f054";
-$fa-var-chevron-up: "\f077";
-$fa-var-child: "\f1ae";
-$fa-var-chrome: "\f268";
-$fa-var-circle: "\f111";
-$fa-var-circle-o: "\f10c";
-$fa-var-circle-o-notch: "\f1ce";
-$fa-var-circle-thin: "\f1db";
-$fa-var-clipboard: "\f0ea";
-$fa-var-clock-o: "\f017";
-$fa-var-clone: "\f24d";
-$fa-var-close: "\f00d";
-$fa-var-cloud: "\f0c2";
-$fa-var-cloud-download: "\f0ed";
-$fa-var-cloud-upload: "\f0ee";
-$fa-var-cny: "\f157";
-$fa-var-code: "\f121";
-$fa-var-code-fork: "\f126";
-$fa-var-codepen: "\f1cb";
-$fa-var-codiepie: "\f284";
-$fa-var-coffee: "\f0f4";
-$fa-var-cog: "\f013";
-$fa-var-cogs: "\f085";
-$fa-var-columns: "\f0db";
-$fa-var-comment: "\f075";
-$fa-var-comment-o: "\f0e5";
-$fa-var-commenting: "\f27a";
-$fa-var-commenting-o: "\f27b";
-$fa-var-comments: "\f086";
-$fa-var-comments-o: "\f0e6";
-$fa-var-compass: "\f14e";
-$fa-var-compress: "\f066";
-$fa-var-connectdevelop: "\f20e";
-$fa-var-contao: "\f26d";
-$fa-var-copy: "\f0c5";
-$fa-var-copyright: "\f1f9";
-$fa-var-creative-commons: "\f25e";
-$fa-var-credit-card: "\f09d";
-$fa-var-credit-card-alt: "\f283";
-$fa-var-crop: "\f125";
-$fa-var-crosshairs: "\f05b";
-$fa-var-css3: "\f13c";
-$fa-var-cube: "\f1b2";
-$fa-var-cubes: "\f1b3";
-$fa-var-cut: "\f0c4";
-$fa-var-cutlery: "\f0f5";
-$fa-var-dashboard: "\f0e4";
-$fa-var-dashcube: "\f210";
-$fa-var-database: "\f1c0";
-$fa-var-deaf: "\f2a4";
-$fa-var-deafness: "\f2a4";
-$fa-var-dedent: "\f03b";
-$fa-var-delicious: "\f1a5";
-$fa-var-desktop: "\f108";
-$fa-var-deviantart: "\f1bd";
-$fa-var-diamond: "\f219";
-$fa-var-digg: "\f1a6";
-$fa-var-dollar: "\f155";
-$fa-var-dot-circle-o: "\f192";
-$fa-var-download: "\f019";
-$fa-var-dribbble: "\f17d";
-$fa-var-drivers-license: "\f2c2";
-$fa-var-drivers-license-o: "\f2c3";
-$fa-var-dropbox: "\f16b";
-$fa-var-drupal: "\f1a9";
-$fa-var-edge: "\f282";
-$fa-var-edit: "\f044";
-$fa-var-eercast: "\f2da";
-$fa-var-eject: "\f052";
-$fa-var-ellipsis-h: "\f141";
-$fa-var-ellipsis-v: "\f142";
-$fa-var-empire: "\f1d1";
-$fa-var-envelope: "\f0e0";
-$fa-var-envelope-o: "\f003";
-$fa-var-envelope-open: "\f2b6";
-$fa-var-envelope-open-o: "\f2b7";
-$fa-var-envelope-square: "\f199";
-$fa-var-envira: "\f299";
-$fa-var-eraser: "\f12d";
-$fa-var-etsy: "\f2d7";
-$fa-var-eur: "\f153";
-$fa-var-euro: "\f153";
-$fa-var-exchange: "\f0ec";
-$fa-var-exclamation: "\f12a";
-$fa-var-exclamation-circle: "\f06a";
-$fa-var-exclamation-triangle: "\f071";
-$fa-var-expand: "\f065";
-$fa-var-expeditedssl: "\f23e";
-$fa-var-external-link: "\f08e";
-$fa-var-external-link-square: "\f14c";
-$fa-var-eye: "\f06e";
-$fa-var-eye-slash: "\f070";
-$fa-var-eyedropper: "\f1fb";
-$fa-var-fa: "\f2b4";
-$fa-var-facebook: "\f09a";
-$fa-var-facebook-f: "\f09a";
-$fa-var-facebook-official: "\f230";
-$fa-var-facebook-square: "\f082";
-$fa-var-fast-backward: "\f049";
-$fa-var-fast-forward: "\f050";
-$fa-var-fax: "\f1ac";
-$fa-var-feed: "\f09e";
-$fa-var-female: "\f182";
-$fa-var-fighter-jet: "\f0fb";
-$fa-var-file: "\f15b";
-$fa-var-file-archive-o: "\f1c6";
-$fa-var-file-audio-o: "\f1c7";
-$fa-var-file-code-o: "\f1c9";
-$fa-var-file-excel-o: "\f1c3";
-$fa-var-file-image-o: "\f1c5";
-$fa-var-file-movie-o: "\f1c8";
-$fa-var-file-o: "\f016";
-$fa-var-file-pdf-o: "\f1c1";
-$fa-var-file-photo-o: "\f1c5";
-$fa-var-file-picture-o: "\f1c5";
-$fa-var-file-powerpoint-o: "\f1c4";
-$fa-var-file-sound-o: "\f1c7";
-$fa-var-file-text: "\f15c";
-$fa-var-file-text-o: "\f0f6";
-$fa-var-file-video-o: "\f1c8";
-$fa-var-file-word-o: "\f1c2";
-$fa-var-file-zip-o: "\f1c6";
-$fa-var-files-o: "\f0c5";
-$fa-var-film: "\f008";
-$fa-var-filter: "\f0b0";
-$fa-var-fire: "\f06d";
-$fa-var-fire-extinguisher: "\f134";
-$fa-var-firefox: "\f269";
-$fa-var-first-order: "\f2b0";
-$fa-var-flag: "\f024";
-$fa-var-flag-checkered: "\f11e";
-$fa-var-flag-o: "\f11d";
-$fa-var-flash: "\f0e7";
-$fa-var-flask: "\f0c3";
-$fa-var-flickr: "\f16e";
-$fa-var-floppy-o: "\f0c7";
-$fa-var-folder: "\f07b";
-$fa-var-folder-o: "\f114";
-$fa-var-folder-open: "\f07c";
-$fa-var-folder-open-o: "\f115";
-$fa-var-font: "\f031";
-$fa-var-font-awesome: "\f2b4";
-$fa-var-fonticons: "\f280";
-$fa-var-fort-awesome: "\f286";
-$fa-var-forumbee: "\f211";
-$fa-var-forward: "\f04e";
-$fa-var-foursquare: "\f180";
-$fa-var-free-code-camp: "\f2c5";
-$fa-var-frown-o: "\f119";
-$fa-var-futbol-o: "\f1e3";
-$fa-var-gamepad: "\f11b";
-$fa-var-gavel: "\f0e3";
-$fa-var-gbp: "\f154";
-$fa-var-ge: "\f1d1";
-$fa-var-gear: "\f013";
-$fa-var-gears: "\f085";
-$fa-var-genderless: "\f22d";
-$fa-var-get-pocket: "\f265";
-$fa-var-gg: "\f260";
-$fa-var-gg-circle: "\f261";
-$fa-var-gift: "\f06b";
-$fa-var-git: "\f1d3";
-$fa-var-git-square: "\f1d2";
-$fa-var-github: "\f09b";
-$fa-var-github-alt: "\f113";
-$fa-var-github-square: "\f092";
-$fa-var-gitlab: "\f296";
-$fa-var-gittip: "\f184";
-$fa-var-glass: "\f000";
-$fa-var-glide: "\f2a5";
-$fa-var-glide-g: "\f2a6";
-$fa-var-globe: "\f0ac";
-$fa-var-google: "\f1a0";
-$fa-var-google-plus: "\f0d5";
-$fa-var-google-plus-circle: "\f2b3";
-$fa-var-google-plus-official: "\f2b3";
-$fa-var-google-plus-square: "\f0d4";
-$fa-var-google-wallet: "\f1ee";
-$fa-var-graduation-cap: "\f19d";
-$fa-var-gratipay: "\f184";
-$fa-var-grav: "\f2d6";
-$fa-var-group: "\f0c0";
-$fa-var-h-square: "\f0fd";
-$fa-var-hacker-news: "\f1d4";
-$fa-var-hand-grab-o: "\f255";
-$fa-var-hand-lizard-o: "\f258";
-$fa-var-hand-o-down: "\f0a7";
-$fa-var-hand-o-left: "\f0a5";
-$fa-var-hand-o-right: "\f0a4";
-$fa-var-hand-o-up: "\f0a6";
-$fa-var-hand-paper-o: "\f256";
-$fa-var-hand-peace-o: "\f25b";
-$fa-var-hand-pointer-o: "\f25a";
-$fa-var-hand-rock-o: "\f255";
-$fa-var-hand-scissors-o: "\f257";
-$fa-var-hand-spock-o: "\f259";
-$fa-var-hand-stop-o: "\f256";
-$fa-var-handshake-o: "\f2b5";
-$fa-var-hard-of-hearing: "\f2a4";
-$fa-var-hashtag: "\f292";
-$fa-var-hdd-o: "\f0a0";
-$fa-var-header: "\f1dc";
-$fa-var-headphones: "\f025";
-$fa-var-heart: "\f004";
-$fa-var-heart-o: "\f08a";
-$fa-var-heartbeat: "\f21e";
-$fa-var-history: "\f1da";
-$fa-var-home: "\f015";
-$fa-var-hospital-o: "\f0f8";
-$fa-var-hotel: "\f236";
-$fa-var-hourglass: "\f254";
-$fa-var-hourglass-1: "\f251";
-$fa-var-hourglass-2: "\f252";
-$fa-var-hourglass-3: "\f253";
-$fa-var-hourglass-end: "\f253";
-$fa-var-hourglass-half: "\f252";
-$fa-var-hourglass-o: "\f250";
-$fa-var-hourglass-start: "\f251";
-$fa-var-houzz: "\f27c";
-$fa-var-html5: "\f13b";
-$fa-var-i-cursor: "\f246";
-$fa-var-id-badge: "\f2c1";
-$fa-var-id-card: "\f2c2";
-$fa-var-id-card-o: "\f2c3";
-$fa-var-ils: "\f20b";
-$fa-var-image: "\f03e";
-$fa-var-imdb: "\f2d8";
-$fa-var-inbox: "\f01c";
-$fa-var-indent: "\f03c";
-$fa-var-industry: "\f275";
-$fa-var-info: "\f129";
-$fa-var-info-circle: "\f05a";
-$fa-var-inr: "\f156";
-$fa-var-instagram: "\f16d";
-$fa-var-institution: "\f19c";
-$fa-var-internet-explorer: "\f26b";
-$fa-var-intersex: "\f224";
-$fa-var-ioxhost: "\f208";
-$fa-var-italic: "\f033";
-$fa-var-joomla: "\f1aa";
-$fa-var-jpy: "\f157";
-$fa-var-jsfiddle: "\f1cc";
-$fa-var-key: "\f084";
-$fa-var-keyboard-o: "\f11c";
-$fa-var-krw: "\f159";
-$fa-var-language: "\f1ab";
-$fa-var-laptop: "\f109";
-$fa-var-lastfm: "\f202";
-$fa-var-lastfm-square: "\f203";
-$fa-var-leaf: "\f06c";
-$fa-var-leanpub: "\f212";
-$fa-var-legal: "\f0e3";
-$fa-var-lemon-o: "\f094";
-$fa-var-level-down: "\f149";
-$fa-var-level-up: "\f148";
-$fa-var-life-bouy: "\f1cd";
-$fa-var-life-buoy: "\f1cd";
-$fa-var-life-ring: "\f1cd";
-$fa-var-life-saver: "\f1cd";
-$fa-var-lightbulb-o: "\f0eb";
-$fa-var-line-chart: "\f201";
-$fa-var-link: "\f0c1";
-$fa-var-linkedin: "\f0e1";
-$fa-var-linkedin-square: "\f08c";
-$fa-var-linode: "\f2b8";
-$fa-var-linux: "\f17c";
-$fa-var-list: "\f03a";
-$fa-var-list-alt: "\f022";
-$fa-var-list-ol: "\f0cb";
-$fa-var-list-ul: "\f0ca";
-$fa-var-location-arrow: "\f124";
-$fa-var-lock: "\f023";
-$fa-var-long-arrow-down: "\f175";
-$fa-var-long-arrow-left: "\f177";
-$fa-var-long-arrow-right: "\f178";
-$fa-var-long-arrow-up: "\f176";
-$fa-var-low-vision: "\f2a8";
-$fa-var-magic: "\f0d0";
-$fa-var-magnet: "\f076";
-$fa-var-mail-forward: "\f064";
-$fa-var-mail-reply: "\f112";
-$fa-var-mail-reply-all: "\f122";
-$fa-var-male: "\f183";
-$fa-var-map: "\f279";
-$fa-var-map-marker: "\f041";
-$fa-var-map-o: "\f278";
-$fa-var-map-pin: "\f276";
-$fa-var-map-signs: "\f277";
-$fa-var-mars: "\f222";
-$fa-var-mars-double: "\f227";
-$fa-var-mars-stroke: "\f229";
-$fa-var-mars-stroke-h: "\f22b";
-$fa-var-mars-stroke-v: "\f22a";
-$fa-var-maxcdn: "\f136";
-$fa-var-meanpath: "\f20c";
-$fa-var-medium: "\f23a";
-$fa-var-medkit: "\f0fa";
-$fa-var-meetup: "\f2e0";
-$fa-var-meh-o: "\f11a";
-$fa-var-mercury: "\f223";
-$fa-var-microchip: "\f2db";
-$fa-var-microphone: "\f130";
-$fa-var-microphone-slash: "\f131";
-$fa-var-minus: "\f068";
-$fa-var-minus-circle: "\f056";
-$fa-var-minus-square: "\f146";
-$fa-var-minus-square-o: "\f147";
-$fa-var-mixcloud: "\f289";
-$fa-var-mobile: "\f10b";
-$fa-var-mobile-phone: "\f10b";
-$fa-var-modx: "\f285";
-$fa-var-money: "\f0d6";
-$fa-var-moon-o: "\f186";
-$fa-var-mortar-board: "\f19d";
-$fa-var-motorcycle: "\f21c";
-$fa-var-mouse-pointer: "\f245";
-$fa-var-music: "\f001";
-$fa-var-navicon: "\f0c9";
-$fa-var-neuter: "\f22c";
-$fa-var-newspaper-o: "\f1ea";
-$fa-var-object-group: "\f247";
-$fa-var-object-ungroup: "\f248";
-$fa-var-odnoklassniki: "\f263";
-$fa-var-odnoklassniki-square: "\f264";
-$fa-var-opencart: "\f23d";
-$fa-var-openid: "\f19b";
-$fa-var-opera: "\f26a";
-$fa-var-optin-monster: "\f23c";
-$fa-var-outdent: "\f03b";
-$fa-var-pagelines: "\f18c";
-$fa-var-paint-brush: "\f1fc";
-$fa-var-paper-plane: "\f1d8";
-$fa-var-paper-plane-o: "\f1d9";
-$fa-var-paperclip: "\f0c6";
-$fa-var-paragraph: "\f1dd";
-$fa-var-paste: "\f0ea";
-$fa-var-pause: "\f04c";
-$fa-var-pause-circle: "\f28b";
-$fa-var-pause-circle-o: "\f28c";
-$fa-var-paw: "\f1b0";
-$fa-var-paypal: "\f1ed";
-$fa-var-pencil: "\f040";
-$fa-var-pencil-square: "\f14b";
-$fa-var-pencil-square-o: "\f044";
-$fa-var-percent: "\f295";
-$fa-var-phone: "\f095";
-$fa-var-phone-square: "\f098";
-$fa-var-photo: "\f03e";
-$fa-var-picture-o: "\f03e";
-$fa-var-pie-chart: "\f200";
-$fa-var-pied-piper: "\f2ae";
-$fa-var-pied-piper-alt: "\f1a8";
-$fa-var-pied-piper-pp: "\f1a7";
-$fa-var-pinterest: "\f0d2";
-$fa-var-pinterest-p: "\f231";
-$fa-var-pinterest-square: "\f0d3";
-$fa-var-plane: "\f072";
-$fa-var-play: "\f04b";
-$fa-var-play-circle: "\f144";
-$fa-var-play-circle-o: "\f01d";
-$fa-var-plug: "\f1e6";
-$fa-var-plus: "\f067";
-$fa-var-plus-circle: "\f055";
-$fa-var-plus-square: "\f0fe";
-$fa-var-plus-square-o: "\f196";
-$fa-var-podcast: "\f2ce";
-$fa-var-power-off: "\f011";
-$fa-var-print: "\f02f";
-$fa-var-product-hunt: "\f288";
-$fa-var-puzzle-piece: "\f12e";
-$fa-var-qq: "\f1d6";
-$fa-var-qrcode: "\f029";
-$fa-var-question: "\f128";
-$fa-var-question-circle: "\f059";
-$fa-var-question-circle-o: "\f29c";
-$fa-var-quora: "\f2c4";
-$fa-var-quote-left: "\f10d";
-$fa-var-quote-right: "\f10e";
-$fa-var-ra: "\f1d0";
-$fa-var-random: "\f074";
-$fa-var-ravelry: "\f2d9";
-$fa-var-rebel: "\f1d0";
-$fa-var-recycle: "\f1b8";
-$fa-var-reddit: "\f1a1";
-$fa-var-reddit-alien: "\f281";
-$fa-var-reddit-square: "\f1a2";
-$fa-var-refresh: "\f021";
-$fa-var-registered: "\f25d";
-$fa-var-remove: "\f00d";
-$fa-var-renren: "\f18b";
-$fa-var-reorder: "\f0c9";
-$fa-var-repeat: "\f01e";
-$fa-var-reply: "\f112";
-$fa-var-reply-all: "\f122";
-$fa-var-resistance: "\f1d0";
-$fa-var-retweet: "\f079";
-$fa-var-rmb: "\f157";
-$fa-var-road: "\f018";
-$fa-var-rocket: "\f135";
-$fa-var-rotate-left: "\f0e2";
-$fa-var-rotate-right: "\f01e";
-$fa-var-rouble: "\f158";
-$fa-var-rss: "\f09e";
-$fa-var-rss-square: "\f143";
-$fa-var-rub: "\f158";
-$fa-var-ruble: "\f158";
-$fa-var-rupee: "\f156";
-$fa-var-s15: "\f2cd";
-$fa-var-safari: "\f267";
-$fa-var-save: "\f0c7";
-$fa-var-scissors: "\f0c4";
-$fa-var-scribd: "\f28a";
-$fa-var-search: "\f002";
-$fa-var-search-minus: "\f010";
-$fa-var-search-plus: "\f00e";
-$fa-var-sellsy: "\f213";
-$fa-var-send: "\f1d8";
-$fa-var-send-o: "\f1d9";
-$fa-var-server: "\f233";
-$fa-var-share: "\f064";
-$fa-var-share-alt: "\f1e0";
-$fa-var-share-alt-square: "\f1e1";
-$fa-var-share-square: "\f14d";
-$fa-var-share-square-o: "\f045";
-$fa-var-shekel: "\f20b";
-$fa-var-sheqel: "\f20b";
-$fa-var-shield: "\f132";
-$fa-var-ship: "\f21a";
-$fa-var-shirtsinbulk: "\f214";
-$fa-var-shopping-bag: "\f290";
-$fa-var-shopping-basket: "\f291";
-$fa-var-shopping-cart: "\f07a";
-$fa-var-shower: "\f2cc";
-$fa-var-sign-in: "\f090";
-$fa-var-sign-language: "\f2a7";
-$fa-var-sign-out: "\f08b";
-$fa-var-signal: "\f012";
-$fa-var-signing: "\f2a7";
-$fa-var-simplybuilt: "\f215";
-$fa-var-sitemap: "\f0e8";
-$fa-var-skyatlas: "\f216";
-$fa-var-skype: "\f17e";
-$fa-var-slack: "\f198";
-$fa-var-sliders: "\f1de";
-$fa-var-slideshare: "\f1e7";
-$fa-var-smile-o: "\f118";
-$fa-var-snapchat: "\f2ab";
-$fa-var-snapchat-ghost: "\f2ac";
-$fa-var-snapchat-square: "\f2ad";
-$fa-var-snowflake-o: "\f2dc";
-$fa-var-soccer-ball-o: "\f1e3";
-$fa-var-sort: "\f0dc";
-$fa-var-sort-alpha-asc: "\f15d";
-$fa-var-sort-alpha-desc: "\f15e";
-$fa-var-sort-amount-asc: "\f160";
-$fa-var-sort-amount-desc: "\f161";
-$fa-var-sort-asc: "\f0de";
-$fa-var-sort-desc: "\f0dd";
-$fa-var-sort-down: "\f0dd";
-$fa-var-sort-numeric-asc: "\f162";
-$fa-var-sort-numeric-desc: "\f163";
-$fa-var-sort-up: "\f0de";
-$fa-var-soundcloud: "\f1be";
-$fa-var-space-shuttle: "\f197";
-$fa-var-spinner: "\f110";
-$fa-var-spoon: "\f1b1";
-$fa-var-spotify: "\f1bc";
-$fa-var-square: "\f0c8";
-$fa-var-square-o: "\f096";
-$fa-var-stack-exchange: "\f18d";
-$fa-var-stack-overflow: "\f16c";
-$fa-var-star: "\f005";
-$fa-var-star-half: "\f089";
-$fa-var-star-half-empty: "\f123";
-$fa-var-star-half-full: "\f123";
-$fa-var-star-half-o: "\f123";
-$fa-var-star-o: "\f006";
-$fa-var-steam: "\f1b6";
-$fa-var-steam-square: "\f1b7";
-$fa-var-step-backward: "\f048";
-$fa-var-step-forward: "\f051";
-$fa-var-stethoscope: "\f0f1";
-$fa-var-sticky-note: "\f249";
-$fa-var-sticky-note-o: "\f24a";
-$fa-var-stop: "\f04d";
-$fa-var-stop-circle: "\f28d";
-$fa-var-stop-circle-o: "\f28e";
-$fa-var-street-view: "\f21d";
-$fa-var-strikethrough: "\f0cc";
-$fa-var-stumbleupon: "\f1a4";
-$fa-var-stumbleupon-circle: "\f1a3";
-$fa-var-subscript: "\f12c";
-$fa-var-subway: "\f239";
-$fa-var-suitcase: "\f0f2";
-$fa-var-sun-o: "\f185";
-$fa-var-superpowers: "\f2dd";
-$fa-var-superscript: "\f12b";
-$fa-var-support: "\f1cd";
-$fa-var-table: "\f0ce";
-$fa-var-tablet: "\f10a";
-$fa-var-tachometer: "\f0e4";
-$fa-var-tag: "\f02b";
-$fa-var-tags: "\f02c";
-$fa-var-tasks: "\f0ae";
-$fa-var-taxi: "\f1ba";
-$fa-var-telegram: "\f2c6";
-$fa-var-television: "\f26c";
-$fa-var-tencent-weibo: "\f1d5";
-$fa-var-terminal: "\f120";
-$fa-var-text-height: "\f034";
-$fa-var-text-width: "\f035";
-$fa-var-th: "\f00a";
-$fa-var-th-large: "\f009";
-$fa-var-th-list: "\f00b";
-$fa-var-themeisle: "\f2b2";
-$fa-var-thermometer: "\f2c7";
-$fa-var-thermometer-0: "\f2cb";
-$fa-var-thermometer-1: "\f2ca";
-$fa-var-thermometer-2: "\f2c9";
-$fa-var-thermometer-3: "\f2c8";
-$fa-var-thermometer-4: "\f2c7";
-$fa-var-thermometer-empty: "\f2cb";
-$fa-var-thermometer-full: "\f2c7";
-$fa-var-thermometer-half: "\f2c9";
-$fa-var-thermometer-quarter: "\f2ca";
-$fa-var-thermometer-three-quarters: "\f2c8";
-$fa-var-thumb-tack: "\f08d";
-$fa-var-thumbs-down: "\f165";
-$fa-var-thumbs-o-down: "\f088";
-$fa-var-thumbs-o-up: "\f087";
-$fa-var-thumbs-up: "\f164";
-$fa-var-ticket: "\f145";
-$fa-var-times: "\f00d";
-$fa-var-times-circle: "\f057";
-$fa-var-times-circle-o: "\f05c";
-$fa-var-times-rectangle: "\f2d3";
-$fa-var-times-rectangle-o: "\f2d4";
-$fa-var-tint: "\f043";
-$fa-var-toggle-down: "\f150";
-$fa-var-toggle-left: "\f191";
-$fa-var-toggle-off: "\f204";
-$fa-var-toggle-on: "\f205";
-$fa-var-toggle-right: "\f152";
-$fa-var-toggle-up: "\f151";
-$fa-var-trademark: "\f25c";
-$fa-var-train: "\f238";
-$fa-var-transgender: "\f224";
-$fa-var-transgender-alt: "\f225";
-$fa-var-trash: "\f1f8";
-$fa-var-trash-o: "\f014";
-$fa-var-tree: "\f1bb";
-$fa-var-trello: "\f181";
-$fa-var-tripadvisor: "\f262";
-$fa-var-trophy: "\f091";
-$fa-var-truck: "\f0d1";
-$fa-var-try: "\f195";
-$fa-var-tty: "\f1e4";
-$fa-var-tumblr: "\f173";
-$fa-var-tumblr-square: "\f174";
-$fa-var-turkish-lira: "\f195";
-$fa-var-tv: "\f26c";
-$fa-var-twitch: "\f1e8";
-$fa-var-twitter: "\f099";
-$fa-var-twitter-square: "\f081";
-$fa-var-umbrella: "\f0e9";
-$fa-var-underline: "\f0cd";
-$fa-var-undo: "\f0e2";
-$fa-var-universal-access: "\f29a";
-$fa-var-university: "\f19c";
-$fa-var-unlink: "\f127";
-$fa-var-unlock: "\f09c";
-$fa-var-unlock-alt: "\f13e";
-$fa-var-unsorted: "\f0dc";
-$fa-var-upload: "\f093";
-$fa-var-usb: "\f287";
-$fa-var-usd: "\f155";
-$fa-var-user: "\f007";
-$fa-var-user-circle: "\f2bd";
-$fa-var-user-circle-o: "\f2be";
-$fa-var-user-md: "\f0f0";
-$fa-var-user-o: "\f2c0";
-$fa-var-user-plus: "\f234";
-$fa-var-user-secret: "\f21b";
-$fa-var-user-times: "\f235";
-$fa-var-users: "\f0c0";
-$fa-var-vcard: "\f2bb";
-$fa-var-vcard-o: "\f2bc";
-$fa-var-venus: "\f221";
-$fa-var-venus-double: "\f226";
-$fa-var-venus-mars: "\f228";
-$fa-var-viacoin: "\f237";
-$fa-var-viadeo: "\f2a9";
-$fa-var-viadeo-square: "\f2aa";
-$fa-var-video-camera: "\f03d";
-$fa-var-vimeo: "\f27d";
-$fa-var-vimeo-square: "\f194";
-$fa-var-vine: "\f1ca";
-$fa-var-vk: "\f189";
-$fa-var-volume-control-phone: "\f2a0";
-$fa-var-volume-down: "\f027";
-$fa-var-volume-off: "\f026";
-$fa-var-volume-up: "\f028";
-$fa-var-warning: "\f071";
-$fa-var-wechat: "\f1d7";
-$fa-var-weibo: "\f18a";
-$fa-var-weixin: "\f1d7";
-$fa-var-whatsapp: "\f232";
-$fa-var-wheelchair: "\f193";
-$fa-var-wheelchair-alt: "\f29b";
-$fa-var-wifi: "\f1eb";
-$fa-var-wikipedia-w: "\f266";
-$fa-var-window-close: "\f2d3";
-$fa-var-window-close-o: "\f2d4";
-$fa-var-window-maximize: "\f2d0";
-$fa-var-window-minimize: "\f2d1";
-$fa-var-window-restore: "\f2d2";
-$fa-var-windows: "\f17a";
-$fa-var-won: "\f159";
-$fa-var-wordpress: "\f19a";
-$fa-var-wpbeginner: "\f297";
-$fa-var-wpexplorer: "\f2de";
-$fa-var-wpforms: "\f298";
-$fa-var-wrench: "\f0ad";
-$fa-var-xing: "\f168";
-$fa-var-xing-square: "\f169";
-$fa-var-y-combinator: "\f23b";
-$fa-var-y-combinator-square: "\f1d4";
-$fa-var-yahoo: "\f19e";
-$fa-var-yc: "\f23b";
-$fa-var-yc-square: "\f1d4";
-$fa-var-yelp: "\f1e9";
-$fa-var-yen: "\f157";
-$fa-var-yoast: "\f2b1";
-$fa-var-youtube: "\f167";
-$fa-var-youtube-play: "\f16a";
-$fa-var-youtube-square: "\f166";
-
diff --git a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/font-awesome.scss b/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/font-awesome.scss
deleted file mode 100644
index f1c83aaa5d..0000000000
--- a/interface/web/themes/default/assets/stylesheets/font-awesome-4.7.0/scss/font-awesome.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-
-@import "variables";
-@import "mixins";
-@import "path";
-@import "core";
-@import "larger";
-@import "fixed-width";
-@import "list";
-@import "bordered-pulled";
-@import "animated";
-@import "rotated-flipped";
-@import "stacked";
-@import "icons";
-@import "screen-reader";
-- 
GitLab


From c28310c9d349b165e2e9238b6c453798ed0b7016 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 19:30:44 +0200
Subject: [PATCH 410/571] Rename not enabled to inherited (#4277)

---
 interface/web/mail/lib/lang/ar_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/bg_mail_user.lng |  4 ++--
 interface/web/mail/lib/lang/br_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/ca_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/cz_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/de_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/dk_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/el_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/en_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/es_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/fi_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/fr_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/hr_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/hu_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/id_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/it_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/ja_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/nl_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/pl_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/pt_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/ro_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/ru_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/se_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/sk_mail_user.lng |  2 +-
 interface/web/mail/lib/lang/tr_mail_user.lng |  2 +-
 interface/web/mail/mail_user_edit.php        | 10 +++++-----
 26 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index a67a83c07a..9d4828b557 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Disable IMAP';
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 3b9a27390e..1b9595da42 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -7,7 +7,7 @@ $wb['active_txt'] = 'Активен';
 $wb['email_error_isemail'] = 'Формата на емайла е грешен.';
 $wb['email_error_unique'] = 'Повтаряш се емайл адрес.';
 $wb['autoresponder_text_txt'] = 'Текс';
-$wb['autoresponder_txt'] = 'Автоматичен отговор';
+$wb['autoresponder_txt'] = 'Автоматичен отгово';
 $wb['no_domain_perm'] = 'Нямаш права за този домейн.';
 $wb['error_no_pwd'] = 'Полето с паролата е празно.';
 $wb['quota_error_isint'] = 'Големина на пощенската кутия трябва да е число';
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Разреши получаване';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Разреши достъп';
 $wb['policy_txt'] = 'Спам филтър';
-$wb['no_policy'] = '- забранен -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Достигнат е максималният брой на пощенските кутии за твоят профил.';
 $wb['limit_mailquota_txt'] = 'Максималното отделено място за твоята кутия е достигнато. Максималното позволено място в МБ е ';
 $wb['disableimap_txt'] = 'Забрани IMAP';
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index 2aca5c3736..2abe1931f6 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -27,7 +27,7 @@ $wb['postfix_txt'] = 'Habilitar recebimento';
 $wb['greylisting_txt'] = 'Habilitar greylist';
 $wb['access_txt'] = 'Habilitar acesso';
 $wb['policy_txt'] = 'Filtros anti-spam';
-$wb['no_policy'] = '-desabilitado-';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'O limite de contas de e-mail para esta conta foi alcançado.';
 $wb['limit_mailquota_txt'] = 'O limite de tamanho para as contas de e-mails foi alcançado. O espaço disponível em MB é';
 $wb['disablesmtp_txt'] = 'Desabilitar SMTP (envio)';
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index e380b55d2d..08c9bc78ec 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -18,7 +18,7 @@ $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
 $wb['access_txt'] = 'Activer l\'accès';
 $wb['policy_txt'] = 'Filtre antispam';
-$wb['no_policy'] = '- inactif -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Le nombre maximal de boites courriel pour votre compte est atteint..';
 $wb['limit_mailquota_txt'] = 'Lespace maximal pour les boites courriel est atteint. Lespace maximal disponible est de ';
 $wb['disableimap_txt'] = 'Désactiver IMAP';
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index 1946d4150f..fb09f0c0a0 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -22,7 +22,7 @@ $wb['maildir_txt'] = 'E-mailový adresář';
 $wb['postfix_txt'] = 'Povolit příjem';
 $wb['access_txt'] = 'Povolit přístup';
 $wb['policy_txt'] = 'Spamový filtr';
-$wb['no_policy'] = '- nepovoleno -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Byl dosažen maximální počet mailboxů pro Váš účet.';
 $wb['limit_mailquota_txt'] = 'Dosažen maximální prostor pro mailboxy. Max. dostupné místo v MB je';
 $wb['disableimap_txt'] = 'Zakázat IMAP';
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index 7c1f02cd4f..e653fbe288 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Aktiviere Empfang';
 $wb['greylisting_txt'] = 'Aktiviere Greylisting';
 $wb['access_txt'] = 'Aktiviere Zugriff';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- nicht aktiviert -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Die maximale Anzahl an E-Mailkonten für Ihr Konto wurde erreicht.';
 $wb['limit_mailquota_txt'] = 'Der maximale Speicherplatz für Ihr E-Mail Konto wurde erreicht. Der maximal verfügbare Speicher in MB ist';
 $wb['disablesmtp_txt'] = 'SMTP (Mailversand) deaktivieren';
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index 8c0957d353..34bf076359 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -24,7 +24,7 @@ $wb['maildir_txt'] = 'Mailmappe';
 $wb['postfix_txt'] = 'Aktiver modtagelse';
 $wb['access_txt'] = 'Aktiver adgang';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- ikke aktiveret -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Max. antal af mailbokse for din konto er nået.';
 $wb['limit_mailquota_txt'] = 'Max. plads for postkasser er nået. Max. tilgængelig plads i MB er';
 $wb['disablesmtp_txt'] = 'Deaktiver SMTP (afsending)';
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index f735d6e7b3..76c266d591 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Ενεργοποίηση Λήψης';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Ενεργοποίηση Πρόσβασης';
 $wb['policy_txt'] = 'Φίλτρο Spam';
-$wb['no_policy'] = '- ανενεργή -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Έχετε φτάσει το μέγιστο πλήθος των θυρίδων για τον λογαριασμό σας.';
 $wb['limit_mailquota_txt'] = 'Έχετε φτάσει στο μέγεστο χώρο της θυρίδα σας.Ο μέγιστος διαθέσιμος χώρος σε MB είναι';
 $wb['disableimap_txt'] = 'Απενεργοποίηση IMAP';
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 82cab6d70c..69ac0a00a9 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -27,7 +27,7 @@ $wb["postfix_txt"] = 'Enable receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb["access_txt"] = 'Enable access';
 $wb["policy_txt"] = 'Spamfilter';
-$wb["no_policy"] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb["limit_mailbox_txt"] = 'The max. number of mailboxes for your account is reached.';
 $wb["limit_mailquota_txt"] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb["disablesmtp_txt"] = 'Disable SMTP (sending)';
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index 418fd2dbfa..be329c304a 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -44,7 +44,7 @@ $wb['name_optional_txt'] = '(Opcional)';
 $wb['name_txt'] = 'Nombre';
 $wb['no_backup_txt'] = 'Sin copia de seguridad';
 $wb['no_domain_perm'] = 'Usted no tiene permisos para gestionar este dominio.';
-$wb['no_policy'] = '- deshabilitado -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['now_txt'] = 'Ahora';
 $wb['password_match_txt'] = 'Las contraseñas coinciden.';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index a764e95693..45ea1d9b8b 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -18,7 +18,7 @@ $wb['postfix_txt'] = 'Salli vastaanotto';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Salli yhteys';
 $wb['policy_txt'] = 'Roskapostisuodatin';
-$wb['no_policy'] = '- ei käytössä -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Tilisi sallittu postilaatikoiden määrä on ylitetty.';
 $wb['limit_mailquota_txt'] = 'Tilisi sallittu postilaatikoiden koko on ylitetty. Vapaa tila megatavuina on';
 $wb['disableimap_txt'] = 'Estä IMAP';
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 732f3d8cb7..8df58233a3 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -18,7 +18,7 @@ $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
 $wb['access_txt'] = 'Activer l’accès';
 $wb['policy_txt'] = 'Filtre antispam';
-$wb['no_policy'] = '- inactif -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Le nombre maximal de boîtes aux lettres pour votre compte est atteint..';
 $wb['limit_mailquota_txt'] = 'Lespace maximal pour les boîtes aux lettres est atteint. Lespace maximal disponible est de ';
 $wb['disableimap_txt'] = 'Désactiver IMAP';
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 7406e2d656..170aaa6b61 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Disable IMAP';
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index db8edf775e..65962cd21c 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Bejövő engedélyezés';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Hozzáférés engelyezés';
 $wb['policy_txt'] = 'Spam szűrő';
-$wb['no_policy'] = '- nem engelyézett -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Nincs több mailbox lehetőség.';
 $wb['limit_mailquota_txt'] = 'Mailbox tárhely elfogyott.';
 $wb['disableimap_txt'] = 'IMAP Tiltás';
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index 670550062c..3bedbd9b93 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -24,7 +24,7 @@ $wb['postfix_txt'] = 'Dapat Menerima';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Dapat Mengakses';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- tidak diaktifkan -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Jumlah maks mailbox untuk akun Anda sudah tercapai.';
 $wb['limit_mailquota_txt'] = 'Ruang maks untuk mailbox sudah tercapai. Ruang maks yang tersedia dalam MB adalah';
 $wb['disableimap_txt'] = 'Nonaktifkan IMAP';
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index dad3f69654..a1a0f8cfd5 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -19,7 +19,7 @@ $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Abilita ricezione';
 $wb['access_txt'] = 'Abilita indirizzo';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- non abilitato -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Hai raggiungo il numero massimo di caselle per il tuo account.';
 $wb['limit_mailquota_txt'] = 'Hai raggiunto lo spazio massimo per le tue caselle di posta. Lo spazio massimo in MB è di';
 $wb['disableimap_txt'] = 'Disabilita IMAP';
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index 803a278d5b..b58b9d13dd 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'メールを受信する';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'アクセスを許可する';
 $wb['policy_txt'] = 'スパムフィルター';
-$wb['no_policy'] = '- 利用しない -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'メールボックスが最大数に達した為、これ以上追加できません。';
 $wb['limit_mailquota_txt'] = 'メールボックスが一杯です。 上限(MB):';
 $wb['disableimap_txt'] = 'IMAP を無効にする';
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 39cd0bd0f0..9a644a129b 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -23,7 +23,7 @@ $wb['postfix_txt'] = 'Ontvangen inschakelen';
 $wb['greylisting_txt'] = 'Greylisting inschakelen';
 $wb['access_txt'] = 'Toegang inschakelen';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- niet ingeschakeld -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Het max. aantal mailboxen voor uw account is bereikt.';
 $wb['limit_mailquota_txt'] = 'De max. ruimte voor uw mailboxen is bereikt. De max. beschikbare ruimte in MB is';
 $wb['disableimap_txt'] = 'Uitschakelen IMAP';
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index 8a35e7742e..593f83531e 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Zezwól na odbiór poczty';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Możliwy dostęp';
 $wb['policy_txt'] = 'Filtr spamu';
-$wb['no_policy'] = '- brak polityki -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Maksymalna ilość skrzynek pocztowych dla Twojego konta została przekroczona.';
 $wb['limit_mailquota_txt'] = 'Maksymalna pojemność skrzynki pocztowej została przekroczona. Maksymalne dostępne miejsce w MB to: ';
 $wb['disableimap_txt'] = 'Wyłącz IMAP';
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index 56a1f16d30..0b7ffe3d37 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Permitir Recepção';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Permitir Acesso';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- desactivado -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'O número máximo de caixas de correio para a conta foi atingido.';
 $wb['limit_mailquota_txt'] = 'O espaço em disco disponível para criação de contas foi atingido.';
 $wb['disableimap_txt'] = 'Desactivar IMAP';
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index ccdcc49fdf..97dfdafd88 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Enable Receiving';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Numarul maxim de MAILBOX pe contul dumneavoastra a fost atins';
 $wb['limit_mailquota_txt'] = 'Spatiul maxim pentru MAILBOX a fost atins.Acesta este ';
 $wb['disableimap_txt'] = 'Blocheaza IMAP';
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index fcfadd9db9..07bab6fd4f 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -19,7 +19,7 @@ $wb['postfix_txt'] = 'Разрешить получение';
 $wb['greylisting_txt'] = 'Включить серый список (Greylisting)';
 $wb['access_txt'] = 'Включить доступ';
 $wb['policy_txt'] = 'Спам-фильтр';
-$wb['no_policy'] = '- не включены -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Число почтовых ящиков превышено.';
 $wb['limit_mailquota_txt'] = 'Место под почтовые ящики превышено. Максимально доступно MB';
 $wb['password_strength_txt'] = 'Стойкость пароля';
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index c081446557..da0282e118 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Aktivera mottagning';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Aktivera åtkomst';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- ej aktiverat -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['disableimap_txt'] = 'Avaktivera IMAP';
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index eb70b8eba9..d9a68404ae 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -20,7 +20,7 @@ $wb['postfix_txt'] = 'Povoliť príjem';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Povoliť Prístup';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['no_policy'] = '- nepovolená -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Max. počet poštových schránok pre váš účet je dosiahnutý.';
 $wb['limit_mailquota_txt'] = 'Maximálny priestor pre poštové schránky je dosiahnutý. Max. dostupné miesto v MB je';
 $wb['disableimap_txt'] = 'Deaktivovať IMAP';
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index c7dec33b99..9e964e5e8a 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -27,7 +27,7 @@ $wb['postfix_txt'] = 'Alım Etkin';
 $wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 $wb['access_txt'] = 'EriÅŸim Etkin';
 $wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
-$wb['no_policy'] = '- devre dışı -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta kutusu sayısına ulaştınız.';
 $wb['limit_mailquota_txt'] = 'E-posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
 $wb['disablesmtp_txt'] = 'SMTP Kullanılmasın (gönderim)';
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index c7f36a89e0..83a02e0ed2 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -80,7 +80,7 @@ class page_action extends tform_actions {
 
 		// Getting Domains of the user
 		// $sql = "SELECT domain, server_id FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
-		$sql = "SELECT domain, server_id FROM mail_domain WHERE (".$app->tform->getAuthSQL('r').") AND domain NOT IN (SELECT SUBSTR(source,2) FROM mail_forwarding WHERE type = 'aliasdomain') ORDER BY domain";               
+		$sql = "SELECT domain, server_id FROM mail_domain WHERE (".$app->tform->getAuthSQL('r').") AND domain NOT IN (SELECT SUBSTR(source,2) FROM mail_forwarding WHERE type = 'aliasdomain') ORDER BY domain";
 		$domains = $app->db->queryAllRecords($sql);
 		$domain_select = '';
 		if(is_array($domains)) {
@@ -99,7 +99,7 @@ class page_action extends tform_actions {
 		if (isset($_POST['policy'])) $tmp_user['policy_id'] = intval($_POST['policy']);
 		$sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r') . " ORDER BY policy_name";
 		$policys = $app->db->queryAllRecords($sql);
-		$policy_select = "<option value='0'>".$app->tform->lng("no_policy")."</option>";
+		$policy_select = "<option value='0'>".$app->tform->lng("inherit_policy")."</option>";
 		if(is_array($policys)) {
 			foreach( $policys as $p) {
 				$selected = ($p["id"] == $tmp_user["policy_id"])?'SELECTED':'';
@@ -220,7 +220,7 @@ class page_action extends tform_actions {
 			$tmp = $app->db->queryOneRecord("SELECT maildir_format FROM mail_user WHERE mailuser_id = ".$app->functions->intval($this->id));
 			$this->dataRecord['maildir_format'] = $tmp['maildir_format'];
 		}
-		
+
 		//* compose the email field
 		if(isset($_POST["email_local_part"]) && isset($_POST["email_domain"])) {
 			$this->dataRecord["email"] = strtolower($_POST["email_local_part"]."@".$app->functions->idn_encode($_POST["email_domain"]));
@@ -239,7 +239,7 @@ class page_action extends tform_actions {
 			$maildir = str_replace("[localpart]", strtolower($_POST["email_local_part"]), $maildir);
 			$this->dataRecord["maildir"] = $maildir;
 			$this->dataRecord["homedir"] = $mail_config["homedir_path"];
-			
+
 			// Will be overwritten by mail_plugin
 			if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
 				$this->dataRecord['uid'] = -1;
@@ -248,7 +248,7 @@ class page_action extends tform_actions {
 				$this->dataRecord['uid'] = intval($mail_config["mailuser_uid"]);
 				$this->dataRecord['gid'] = intval($mail_config["mailuser_gid"]);
 			}
-				
+
 			//* Check if there is no alias or forward with this address
 			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE active = 'y' AND source = ?", $this->dataRecord["email"]);
 			if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_alias_or_forward_txt")."<br>";
-- 
GitLab


From 65fc415b9a4715bc411548e782235b8c788a2c18 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 20:37:24 +0200
Subject: [PATCH 411/571] Remove double or empty titles

---
 .../web/dns/templates/dns_naptr_edit.htm      |  6 ---
 .../sites/templates/web_vhost_domain_edit.htm | 39 ++++++++-----------
 2 files changed, 17 insertions(+), 28 deletions(-)

diff --git a/interface/web/dns/templates/dns_naptr_edit.htm b/interface/web/dns/templates/dns_naptr_edit.htm
index 8fd928c3de..15a944d629 100644
--- a/interface/web/dns/templates/dns_naptr_edit.htm
+++ b/interface/web/dns/templates/dns_naptr_edit.htm
@@ -1,9 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
             <div class="form-group">
                 <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index 6092778af8..e39b889d4c 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -1,8 +1,3 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
 <tmpl_if name="config_error_msg">
 <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                 <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
@@ -94,7 +89,7 @@
 					<label for="document_root" class="col-sm-3 control-label" readonly >{tmpl_var name='document_root_txt'}</label>
 					<div class="col-sm-9">
                         <div class="checkbox">{tmpl_var name='document_root'}</div>
-                    </div> 
+                    </div>
 				</div>
 			</tmpl_if>
             <div class="form-group">
@@ -291,13 +286,13 @@
     }
     adjustForm(true);
     reloadFastcgiPHPVersions(true);
-	
+
     jQuery('#client_group_id').change(function(){
         clientGroupId = $(this).val();
         reloadWebIP();
 		reloadFastcgiPHPVersions();
     });
-		
+
     if(jQuery('#php').val() == 'fast-cgi' || jQuery('#php').val() == 'php-fpm' || (jQuery('#php').val() == 'hhvm' && serverType == 'nginx')){
         jQuery('.fastcgi_php_version:hidden').show();
 		if(jQuery('#php').val() == 'hhvm'){
@@ -311,10 +306,10 @@
         jQuery('.fastcgi_php_version:visible').hide();
     }
     //ISPConfig.resetFormChanged();
-    
+
     jQuery('#php').change(function(){
         reloadFastcgiPHPVersions();
-        if(jQuery(this).val() == 'fast-cgi' || jQuery(this).val() == 'php-fpm' || (jQuery(this).val() == 'hhvm' && serverType == 'nginx')){	
+        if(jQuery(this).val() == 'fast-cgi' || jQuery(this).val() == 'php-fpm' || (jQuery(this).val() == 'hhvm' && serverType == 'nginx')){
             jQuery('.fastcgi_php_version:hidden').show();
 			if(jQuery(this).val() == 'hhvm'){
 				jQuery('#fastcgi_php_version_txt').hide();
@@ -333,7 +328,7 @@
 	// new Vhostsubdomains/Vhostaliasdomains
 	if(serverId == '') jQuery('#parent_domain_id').trigger('change');
 
-/*	
+/*
 	if(jQuery('#directive_snippets_id').val() > 0){
 		jQuery('.pagespeed').show();
 	} else {
@@ -347,7 +342,7 @@
 		}
 	});
 */
-    
+
     function reloadServerId(noFormChange) {
         var parentWebId = jQuery('#parent_domain_id').val();
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {web_id : parentWebId, type : "getserverid"}, function(data) {
@@ -356,7 +351,7 @@
             if(noFormChange) reloadFastcgiPHPVersions(noFormChange);
         });
     }
-    
+
     function adjustForm(noFormChange){
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, type : "getservertype"}, function(data) {
             if(data.servertype == "nginx"){
@@ -399,7 +394,7 @@
             }
         });
     }
-	
+
 	function reloadDirectiveSnippets() {
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, type : "getdirectivesnippet"}, function(data) {
             var options = '<option value="0">-</option>';
@@ -414,7 +409,7 @@
 				 options += '<option ' + isSelected + ' value="' + data['m_snippets'][i]['directive_snippets_id'] + '">' + data['m_snippets'][i]['name'] + '</option>';
 			}
 			options += '</optgroup>';
-			
+
 			options += "<optgroup label=\"{tmpl_var name='select_directive_snippet_txt'}\">";
 			for (var i = 0, len = data['snippets'].length; i < len; i++) {
 				var isSelected = '';
@@ -430,7 +425,7 @@
 			$('#directive_snippets_id').html(options).change();
 		});
 	}
-		
+
     function reloadWebIP() {
         ISPConfig.loadOptionInto('ip_address','sites/ajax_get_ip.php?ip_type=IPv4&server_id='+serverId+'&client_group_id='+clientGroupId<tmpl_if name="use_combobox" value="y">, rerenderSelect2</tmpl_if>);
         ISPConfig.loadOptionInto('ipv6_address','sites/ajax_get_ip.php?ip_type=IPv6&server_id='+serverId+'&client_group_id='+clientGroupId<tmpl_if name="use_combobox" value="y">, rerenderSelect2</tmpl_if>);
@@ -438,11 +433,11 @@
 		//$('#ip_address').add('#ipv6_address').select2();
 		</tmpl_if>
     }
-	
+
 	function rerenderSelect2(elem) {
 		$('#'+elem).select2();
 	}
-		
+
     function reloadFastcgiPHPVersions(noFormChange) {
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, php_type : jQuery('#php').val(), type : "getphpfastcgi", client_group_id : clientGroupId}, function(data) {
             //var options = '<option value="">Default</option>';
@@ -474,7 +469,7 @@
             if(noFormChange) ISPConfig.resetFormChanged();
         });
     }
-    
+
     <tmpl_if name="readonly_tab">
         jQuery('div.panel_web_domain').find('fieldset').find('input,select,button').not('#directive_snippets_id').bind('click mousedown', function(e) { e.preventDefault(); }).focus(function() { $(this).blur(); });
         jQuery('#dom-edit-submit').click(function() {
@@ -485,7 +480,7 @@
             ISPConfig.submitForm('pageForm','sites/web_vhost_domain_edit.php');
         });
     </tmpl_if>
-	
+
 	if($('#domain').val() == ''){
 		$('#web_folder_domain').text('[DOMAIN]');
 	} else {
@@ -498,9 +493,9 @@
 			$('#web_folder_domain').text($('#domain').val());
 		}
 	});
-	
+
 	$('#more_folder_directive_snippets').click(function(){
 		$('.folder_directive_snippets:hidden:first').removeClass('hidden');
 	});
-			
+
 </script>
-- 
GitLab


From 4b508f66ccbbe28535bc2b975016cb83529a270a Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 21:10:02 +0200
Subject: [PATCH 412/571] Remove double or empty titles

---
 interface/web/client/templates/client_edit_address.htm    | 8 ++++----
 interface/web/client/templates/client_edit_limits.htm     | 6 +++---
 .../web/mail/templates/mail_domain_catchall_edit.htm      | 4 ++--
 interface/web/mail/templates/mail_user_backup.htm         | 4 +---
 4 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/interface/web/client/templates/client_edit_address.htm b/interface/web/client/templates/client_edit_address.htm
index 23318b218b..835b264400 100644
--- a/interface/web/client/templates/client_edit_address.htm
+++ b/interface/web/client/templates/client_edit_address.htm
@@ -1,7 +1,7 @@
-        <legend>{tmpl_var name='Address'}</legend>
-            <div class="form-group">
+              <div class="form-group">
                 <label for="company_name" class="col-sm-3 control-label">{tmpl_var name='company_name_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="company_name" id="company_name" value="{tmpl_var name='company_name'}" class="form-control" /></div></div>
+                <div class="col-sm-9"><input type="text" name="company_name" id="company_name" value="{tmpl_var name='company_name'}" class="form-control" /></div>
+              </div>
             <div class="form-group">
                 <label for="gender" class="col-sm-3 control-label">{tmpl_var name='gender_txt'}</label>
                 <div class="col-sm-9"><select name="gender" id="gender" class="form-control">
@@ -146,7 +146,7 @@
                 </div>
             </div>
             {tmpl_var name='required_fields_txt'}
-        
+
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm
index 0508ab5090..db0b370804 100644
--- a/interface/web/client/templates/client_edit_limits.htm
+++ b/interface/web/client/templates/client_edit_limits.htm
@@ -1,7 +1,7 @@
 <div class="panel panel_client">
-    
+
 	<div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name="Limits"}</legend>
+        <fieldset class="inlineLabels">
                 <div class="form-group">
                     <label for="template_master" class="col-sm-3 control-label">{tmpl_var name='template_master_txt'}</label>
                     <div class="col-sm-9"><select name="template_master" id="template_master" class="form-control">
@@ -361,7 +361,7 @@
                     <label for="limit_cron_frequency" class="col-sm-3 control-label">{tmpl_var name='limit_cron_frequency_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" class="form-control" /></div>
 				</div>
-            
+
       </div>
     </div>
   </div>
diff --git a/interface/web/mail/templates/mail_domain_catchall_edit.htm b/interface/web/mail/templates/mail_domain_catchall_edit.htm
index 0ccae15a8f..8da10f1f09 100644
--- a/interface/web/mail/templates/mail_domain_catchall_edit.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_edit.htm
@@ -1,4 +1,4 @@
-<			<div class="form-group">
+			<div class="form-group">
                 <label for="email_domain" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
                 <div class="col-sm-9">
 					<div class="input-group">
@@ -22,7 +22,7 @@
                     {tmpl_var name='active'}
                 </div>
             </div>
-        
+
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="type" value="catchall">
 
diff --git a/interface/web/mail/templates/mail_user_backup.htm b/interface/web/mail/templates/mail_user_backup.htm
index 0de61a3297..bbf1abaf87 100644
--- a/interface/web/mail/templates/mail_user_backup.htm
+++ b/interface/web/mail/templates/mail_user_backup.htm
@@ -7,8 +7,6 @@
 </div>
 </tmpl_if>
 
-
-        <legend>Backup</legend>
             <div class="form-group">
                 <label for="backup_interval" class="col-sm-3 control-label">{tmpl_var name='backup_interval_txt'}</label>
                 <div class="col-sm-9"><select name="backup_interval" id="backup_interval" class="form-control">
@@ -21,7 +19,7 @@
                     {tmpl_var name='backup_copies'}
                 </select></div>
             </div>
-        
+
         {tmpl_var name='backup_records'}
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
-- 
GitLab


From dbc5be35d3f8bfbae7a0e12bc38e82147f1cabc5 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 21:34:10 +0200
Subject: [PATCH 413/571] Edit checks to be RFC compliant

---
 interface/web/dns/dns_a_edit.php     | 2 +-
 interface/web/dns/dns_aaaa_edit.php  | 2 +-
 interface/web/dns/dns_dname_edit.php | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/interface/web/dns/dns_a_edit.php b/interface/web/dns/dns_a_edit.php
index 19cb7d1c01..595ebcc92c 100644
--- a/interface/web/dns/dns_a_edit.php
+++ b/interface/web/dns/dns_a_edit.php
@@ -48,7 +48,7 @@ class page_action extends dns_page_action {
 	protected function checkDuplicate() {
 		global $app;
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?) OR (type = 'DNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
 		if($tmp['number'] > 0) return true;
 		return false;
 	}
diff --git a/interface/web/dns/dns_aaaa_edit.php b/interface/web/dns/dns_aaaa_edit.php
index 7d6972854f..780fbcc80e 100644
--- a/interface/web/dns/dns_aaaa_edit.php
+++ b/interface/web/dns/dns_aaaa_edit.php
@@ -48,7 +48,7 @@ class page_action extends dns_page_action {
 	protected function checkDuplicate() {
 		global $app;
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'AAAA' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?) OR (type = 'DNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'AAAA' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
 		if($tmp['number'] > 0) return true;
 		return false;
 	}
diff --git a/interface/web/dns/dns_dname_edit.php b/interface/web/dns/dns_dname_edit.php
index c33c0cce71..b4cd8ffaea 100644
--- a/interface/web/dns/dns_dname_edit.php
+++ b/interface/web/dns/dns_dname_edit.php
@@ -48,7 +48,7 @@ class page_action extends dns_page_action {
 	protected function checkDuplicate() {
 		global $app;
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'AAAA' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?) OR (type = 'DNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'CNAME' AND name = ? AND zone = ? and id != ?) OR (type = 'DNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
 		if($tmp['number'] > 0) return true;
 		return false;
 	}
-- 
GitLab


From 9245e4d5b859f9af208319fc843564fec28a5533 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 15 Jun 2020 21:34:57 +0200
Subject: [PATCH 414/571] Correct duplicate translation

---
 interface/web/dns/lib/lang/ar_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/ar_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/ar_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/ar_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/bg_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/bg_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/bg_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/bg_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/br_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/br_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/br_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/br_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/ca_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/ca_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/ca_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/ca_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/cz_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/cz_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/cz_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/cz_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/de_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/de_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/de_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/de_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/dk_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/dk_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/dk_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/dk_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/el_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/el_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/el_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/el_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/en_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/en_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/en_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/en_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/es_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/es_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/es_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/es_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/fi_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/fi_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/fi_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/fi_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/fr_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/fr_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/fr_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/fr_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/hr_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/hr_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/hr_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/hr_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/hu_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/hu_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/hu_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/hu_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/id_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/id_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/id_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/id_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/it_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/it_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/it_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/it_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/ja_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/ja_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/ja_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/ja_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/nl_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/nl_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/nl_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/nl_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/pl_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/pl_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/pl_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/pl_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/pt_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/pt_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/pt_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/pt_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/ro_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/ro_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/ro_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/ro_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/ru_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/ru_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/ru_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/ru_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/se_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/se_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/se_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/se_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/sk_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/sk_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/sk_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/sk_dns_dname.lng | 2 +-
 interface/web/dns/lib/lang/tr_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/tr_dns_aaaa.lng  | 2 +-
 interface/web/dns/lib/lang/tr_dns_cname.lng | 2 +-
 interface/web/dns/lib/lang/tr_dns_dname.lng | 2 +-
 100 files changed, 100 insertions(+), 100 deletions(-)

diff --git a/interface/web/dns/lib/lang/ar_dns_a.lng b/interface/web/dns/lib/lang/ar_dns_a.lng
index c191ff19d3..577bb47d5b 100644
--- a/interface/web/dns/lib/lang/ar_dns_a.lng
+++ b/interface/web/dns/lib/lang/ar_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_aaaa.lng b/interface/web/dns/lib/lang/ar_dns_aaaa.lng
index 03f18f18da..da7eeb8a0f 100644
--- a/interface/web/dns/lib/lang/ar_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_cname.lng b/interface/web/dns/lib/lang/ar_dns_cname.lng
index 636c4e7a7a..382397abf7 100644
--- a/interface/web/dns/lib/lang/ar_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ar_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_dname.lng b/interface/web/dns/lib/lang/ar_dns_dname.lng
index 382397abf7..483e1d14b5 100644
--- a/interface/web/dns/lib/lang/ar_dns_dname.lng
+++ b/interface/web/dns/lib/lang/ar_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_a.lng b/interface/web/dns/lib/lang/bg_dns_a.lng
index f789a19f47..6b4950722b 100644
--- a/interface/web/dns/lib/lang/bg_dns_a.lng
+++ b/interface/web/dns/lib/lang/bg_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Полето за хост име е празно.';
 $wb['name_error_regex'] = 'Избраното име на хост е в грешен формат.';
 $wb['data_error_empty'] = 'Полето за IP-адреса е празно';
 $wb['ip_error_wrong'] = 'Формата на IP-адреса е грешен';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_aaaa.lng b/interface/web/dns/lib/lang/bg_dns_aaaa.lng
index d2ca072bec..27062fce22 100644
--- a/interface/web/dns/lib/lang/bg_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/bg_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Вие нямате право да добавяте за
 $wb['name_error_empty'] = 'Полето с имейла е празно.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_cname.lng b/interface/web/dns/lib/lang/bg_dns_cname.lng
index d9863d10e8..4705cd73d8 100644
--- a/interface/web/dns/lib/lang/bg_dns_cname.lng
+++ b/interface/web/dns/lib/lang/bg_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Полето с имейла е празно.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_dname.lng b/interface/web/dns/lib/lang/bg_dns_dname.lng
index 4705cd73d8..5fc67ceaeb 100644
--- a/interface/web/dns/lib/lang/bg_dns_dname.lng
+++ b/interface/web/dns/lib/lang/bg_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Полето с имейла е празно.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_a.lng b/interface/web/dns/lib/lang/br_dns_a.lng
index 7204ce11ab..deb66ec97a 100644
--- a/interface/web/dns/lib/lang/br_dns_a.lng
+++ b/interface/web/dns/lib/lang/br_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'Endereço IP está em branco.';
 $wb['ip_error_wrong'] = 'Endereço IP inválido.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_aaaa.lng b/interface/web/dns/lib/lang/br_dns_aaaa.lng
index 5678f2c67f..b4274c7b51 100644
--- a/interface/web/dns/lib/lang/br_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/br_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns ne
 $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'Endereço IPv6 está em branco.';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'O endereço IPv6 possui formato inválido.';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_cname.lng b/interface/web/dns/lib/lang/br_dns_cname.lng
index e36fb57909..4a8f98cb02 100644
--- a/interface/web/dns/lib/lang/br_dns_cname.lng
+++ b/interface/web/dns/lib/lang/br_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'O alvo do host está em branco.';
 $wb['data_error_regex'] = 'O alvo do host possui formato inválido.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_dname.lng b/interface/web/dns/lib/lang/br_dns_dname.lng
index 4a8f98cb02..c2ba45f86e 100644
--- a/interface/web/dns/lib/lang/br_dns_dname.lng
+++ b/interface/web/dns/lib/lang/br_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'O alvo do host está em branco.';
 $wb['data_error_regex'] = 'O alvo do host possui formato inválido.';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_a.lng b/interface/web/dns/lib/lang/ca_dns_a.lng
index e91bff2c73..f486bb6d49 100644
--- a/interface/web/dns/lib/lang/ca_dns_a.lng
+++ b/interface/web/dns/lib/lang/ca_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Vous n\'avez pas la permission d\'ajouter un enregistreme
 $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'L\'adresse IP est vide.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_aaaa.lng b/interface/web/dns/lib/lang/ca_dns_aaaa.lng
index 94a7deeddb..0aed36e119 100644
--- a/interface/web/dns/lib/lang/ca_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Vous n\'avez pas la permission d\'ajouter un enregistreme
 $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'L\'adresse IP est vide.';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_cname.lng b/interface/web/dns/lib/lang/ca_dns_cname.lng
index 94d523c4e2..480f1ddd4d 100644
--- a/interface/web/dns/lib/lang/ca_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ca_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'Le nom d\'hôte cible est vide.';
 $wb['data_error_regex'] = 'Le format du nom d\'hôte cible invalide.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_dname.lng b/interface/web/dns/lib/lang/ca_dns_dname.lng
index 480f1ddd4d..d9d8296fdb 100644
--- a/interface/web/dns/lib/lang/ca_dns_dname.lng
+++ b/interface/web/dns/lib/lang/ca_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'Le nom d\'hôte cible est vide.';
 $wb['data_error_regex'] = 'Le format du nom d\'hôte cible invalide.';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_a.lng b/interface/web/dns/lib/lang/cz_dns_a.lng
index cfc3c60854..1aa476275c 100644
--- a/interface/web/dns/lib/lang/cz_dns_a.lng
+++ b/interface/web/dns/lib/lang/cz_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'IP adresa je prázdná';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 $wb['ip_error_wrong'] = 'IP - formát adresy neplatný';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_aaaa.lng b/interface/web/dns/lib/lang/cz_dns_aaaa.lng
index 67fc7c7906..371d3f591b 100644
--- a/interface/web/dns/lib/lang/cz_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'IP adresa je prázdná';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 $wb['ip_error_wrong'] = 'IP - formát adresy neplatný';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_cname.lng b/interface/web/dns/lib/lang/cz_dns_cname.lng
index c41b619588..7003f707c4 100644
--- a/interface/web/dns/lib/lang/cz_dns_cname.lng
+++ b/interface/web/dns/lib/lang/cz_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'Cílový název hostitele je prázdný';
 $wb['data_error_regex'] = 'Cílový název hostitele má chybný formát';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_dname.lng b/interface/web/dns/lib/lang/cz_dns_dname.lng
index 7003f707c4..1419acf02f 100644
--- a/interface/web/dns/lib/lang/cz_dns_dname.lng
+++ b/interface/web/dns/lib/lang/cz_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'Cílový název hostitele je prázdný';
 $wb['data_error_regex'] = 'Cílový název hostitele má chybný formát';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_a.lng b/interface/web/dns/lib/lang/de_dns_a.lng
index af10bb1d19..c60afbbc1f 100644
--- a/interface/web/dns/lib/lang/de_dns_a.lng
+++ b/interface/web/dns/lib/lang/de_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'IPv4 Adresse ist leer';
 $wb['ip_error_wrong'] = 'IPv4 Adressen Format ist ungültig';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_aaaa.lng b/interface/web/dns/lib/lang/de_dns_aaaa.lng
index c54663a94f..0251a9dc26 100644
--- a/interface/web/dns/lib/lang/de_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/de_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser
 $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'IPv6 Adresse ist leer';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IPv6 Adressen Format ist ungültig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_cname.lng b/interface/web/dns/lib/lang/de_dns_cname.lng
index 0342276336..6aed8fb825 100644
--- a/interface/web/dns/lib/lang/de_dns_cname.lng
+++ b/interface/web/dns/lib/lang/de_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'Ziel Hostname ist leer';
 $wb['data_error_regex'] = 'Ziel Hostname Format ist ungültig';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_dname.lng b/interface/web/dns/lib/lang/de_dns_dname.lng
index f2154e37ad..492613e75b 100644
--- a/interface/web/dns/lib/lang/de_dns_dname.lng
+++ b/interface/web/dns/lib/lang/de_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'Ziel Hostname ist leer';
 $wb['data_error_regex'] = 'Ziel Hostname Format ist ungültig';
-$wb['data_error_duplicate'] = 'Doppelter A, CNAME oder DNAME Eintrag';
+$wb['data_error_duplicate'] = 'Doppelter CNAME oder DNAME Eintrag';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_a.lng b/interface/web/dns/lib/lang/dk_dns_a.lng
index 7506edcef5..6ce7aa5072 100644
--- a/interface/web/dns/lib/lang/dk_dns_a.lng
+++ b/interface/web/dns/lib/lang/dk_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Du har ikke tilladelse til at tilføje en post til denne
 $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'IP-Adressen er tom';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_aaaa.lng b/interface/web/dns/lib/lang/dk_dns_aaaa.lng
index 107b28be91..c8d4dac13a 100644
--- a/interface/web/dns/lib/lang/dk_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Du har ikke tilladelse til at tilføje en post til denne
 $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'IP-Adressen er tom';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_cname.lng b/interface/web/dns/lib/lang/dk_dns_cname.lng
index e213d6e3d9..1815eab77a 100644
--- a/interface/web/dns/lib/lang/dk_dns_cname.lng
+++ b/interface/web/dns/lib/lang/dk_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'Mål-værtsnavn er tom';
 $wb['data_error_regex'] = 'Mål-værtsnavn format er ugyldigt';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_dname.lng b/interface/web/dns/lib/lang/dk_dns_dname.lng
index 1815eab77a..0e651af8d3 100644
--- a/interface/web/dns/lib/lang/dk_dns_dname.lng
+++ b/interface/web/dns/lib/lang/dk_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'Mål-værtsnavn er tom';
 $wb['data_error_regex'] = 'Mål-værtsnavn format er ugyldigt';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_a.lng b/interface/web/dns/lib/lang/el_dns_a.lng
index 6202d2e88b..96667ba7a2 100644
--- a/interface/web/dns/lib/lang/el_dns_a.lng
+++ b/interface/web/dns/lib/lang/el_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Η διεύθυνση IP είναι κενή';
 $wb['ip_error_wrong'] = 'Διεύθυνση IP με μη έγκυρη μορφοποίηση';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_aaaa.lng b/interface/web/dns/lib/lang/el_dns_aaaa.lng
index 5341e9022d..5c66fee51d 100644
--- a/interface/web/dns/lib/lang/el_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/el_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Δεν έχετε δικαίωμα να προσθέσε
 $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Διεύθυνση IP κενή';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'Διεύθυνση IP με μη έγκυρη μορφοποίηση';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_cname.lng b/interface/web/dns/lib/lang/el_dns_cname.lng
index 1d19eb0c23..ba6404887a 100644
--- a/interface/web/dns/lib/lang/el_dns_cname.lng
+++ b/interface/web/dns/lib/lang/el_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Το hostname Προορισμός δεν έχει οριστεί';
 $wb['data_error_regex'] = 'Hostname Προορισμός με μη έγκυρη μορφοποίηση';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_dname.lng b/interface/web/dns/lib/lang/el_dns_dname.lng
index ba6404887a..6623e1f8af 100644
--- a/interface/web/dns/lib/lang/el_dns_dname.lng
+++ b/interface/web/dns/lib/lang/el_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Το hostname Προορισμός δεν έχει οριστεί';
 $wb['data_error_regex'] = 'Hostname Προορισμός με μη έγκυρη μορφοποίηση';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_a.lng b/interface/web/dns/lib/lang/en_dns_a.lng
index 3f9f4aa047..99ca6418b8 100644
--- a/interface/web/dns/lib/lang/en_dns_a.lng
+++ b/interface/web/dns/lib/lang/en_dns_a.lng
@@ -12,6 +12,6 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
 $wb["ip_error_wrong"] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_aaaa.lng b/interface/web/dns/lib/lang/en_dns_aaaa.lng
index d55ab7ffd3..3b642474c3 100644
--- a/interface/web/dns/lib/lang/en_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/en_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb["no_zone_perm"] = 'You do not have the permission to add a record to this DN
 $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb["ip_error_wrong"] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_cname.lng b/interface/web/dns/lib/lang/en_dns_cname.lng
index 7ffb78e0d3..d9b41a012e 100644
--- a/interface/web/dns/lib/lang/en_dns_cname.lng
+++ b/interface/web/dns/lib/lang/en_dns_cname.lng
@@ -12,6 +12,6 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'Target hostname empty';
 $wb["data_error_regex"] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_dname.lng b/interface/web/dns/lib/lang/en_dns_dname.lng
index d9b41a012e..95e81423e0 100644
--- a/interface/web/dns/lib/lang/en_dns_dname.lng
+++ b/interface/web/dns/lib/lang/en_dns_dname.lng
@@ -12,6 +12,6 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'Target hostname empty';
 $wb["data_error_regex"] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/es_dns_a.lng b/interface/web/dns/lib/lang/es_dns_a.lng
index 0f19854e2d..6d3c01ebb4 100644
--- a/interface/web/dns/lib/lang/es_dns_a.lng
+++ b/interface/web/dns/lib/lang/es_dns_a.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['data_error_empty'] = 'Dirección IP vacía';
 $wb['data_txt'] = 'Dirección IP';
 $wb['ip_error_wrong'] = 'Formato inválido de dirección IP';
diff --git a/interface/web/dns/lib/lang/es_dns_aaaa.lng b/interface/web/dns/lib/lang/es_dns_aaaa.lng
index d9c38070f3..85ff1ba5a7 100644
--- a/interface/web/dns/lib/lang/es_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/es_dns_aaaa.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
 $wb['data_error_empty'] = 'Dirección IP vacía';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['data_txt'] = 'Dirección IPv6';
 $wb['ip_error_wrong'] = 'La dirección IP tiene un formato incorrecto';
 $wb['limit_dns_record_txt'] = 'Ha alcanzado el número máx. de registros DNS permitidos para su cuenta.';
diff --git a/interface/web/dns/lib/lang/es_dns_cname.lng b/interface/web/dns/lib/lang/es_dns_cname.lng
index cd0ed67c11..ffc748f106 100644
--- a/interface/web/dns/lib/lang/es_dns_cname.lng
+++ b/interface/web/dns/lib/lang/es_dns_cname.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['data_error_empty'] = 'El nombre del host de destino está vacío.';
 $wb['data_error_regex'] = 'El nombre del host de destino tiene un formato incorrecto.';
 $wb['data_txt'] = 'Nombre del host de destino';
diff --git a/interface/web/dns/lib/lang/es_dns_dname.lng b/interface/web/dns/lib/lang/es_dns_dname.lng
index ffc748f106..c28f8eeb3e 100644
--- a/interface/web/dns/lib/lang/es_dns_dname.lng
+++ b/interface/web/dns/lib/lang/es_dns_dname.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['data_error_empty'] = 'El nombre del host de destino está vacío.';
 $wb['data_error_regex'] = 'El nombre del host de destino tiene un formato incorrecto.';
 $wb['data_txt'] = 'Nombre del host de destino';
diff --git a/interface/web/dns/lib/lang/fi_dns_a.lng b/interface/web/dns/lib/lang/fi_dns_a.lng
index be6b4cc42a..701b5281af 100644
--- a/interface/web/dns/lib/lang/fi_dns_a.lng
+++ b/interface/web/dns/lib/lang/fi_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on vääränlainen.';
 $wb['data_error_empty'] = 'IP-osoite tyhjä';
 $wb['ip_error_wrong'] = 'IP-osoite on vääränlainen';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_aaaa.lng b/interface/web/dns/lib/lang/fi_dns_aaaa.lng
index 3759287206..8c0c607141 100644
--- a/interface/web/dns/lib/lang/fi_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/fi_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Käyttäjätunnuksella ei ole oikeuksia lisätä tietueit
 $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on väärän muotoinen.';
 $wb['data_error_empty'] = 'Tekstikenttä on tyhjä';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'Tekstikenttä on vääränlainen';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_cname.lng b/interface/web/dns/lib/lang/fi_dns_cname.lng
index 202949b9f7..d7483389d4 100644
--- a/interface/web/dns/lib/lang/fi_dns_cname.lng
+++ b/interface/web/dns/lib/lang/fi_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on vääränlainen.';
 $wb['data_error_empty'] = 'Kohteen verkkotunnus on tyhjä';
 $wb['data_error_regex'] = 'Kohteen verkkotunnus on vääränlainen';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_dname.lng b/interface/web/dns/lib/lang/fi_dns_dname.lng
index d7483389d4..58d5481afc 100644
--- a/interface/web/dns/lib/lang/fi_dns_dname.lng
+++ b/interface/web/dns/lib/lang/fi_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on vääränlainen.';
 $wb['data_error_empty'] = 'Kohteen verkkotunnus on tyhjä';
 $wb['data_error_regex'] = 'Kohteen verkkotunnus on vääränlainen';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_a.lng b/interface/web/dns/lib/lang/fr_dns_a.lng
index f022f0c873..9e9625ba1c 100644
--- a/interface/web/dns/lib/lang/fr_dns_a.lng
+++ b/interface/web/dns/lib/lang/fr_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Vous n’avez pas la permission d’ajouter un enregistre
 $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'L’adresse IP est vide.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_aaaa.lng b/interface/web/dns/lib/lang/fr_dns_aaaa.lng
index 52e5ef1b33..9f925c3291 100644
--- a/interface/web/dns/lib/lang/fr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Vous n’avez pas la permission d’ajouter un enregistre
 $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'L’adresse IP est vide.';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_cname.lng b/interface/web/dns/lib/lang/fr_dns_cname.lng
index 8a5840a2bc..47779eeffe 100644
--- a/interface/web/dns/lib/lang/fr_dns_cname.lng
+++ b/interface/web/dns/lib/lang/fr_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'Le nom d’hôte cible est vide.';
 $wb['data_error_regex'] = 'Le format du nom d’hôte cible invalide.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_dname.lng b/interface/web/dns/lib/lang/fr_dns_dname.lng
index 47779eeffe..ad41861785 100644
--- a/interface/web/dns/lib/lang/fr_dns_dname.lng
+++ b/interface/web/dns/lib/lang/fr_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'Le nom d’hôte cible est vide.';
 $wb['data_error_regex'] = 'Le format du nom d’hôte cible invalide.';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_a.lng b/interface/web/dns/lib/lang/hr_dns_a.lng
index b4c83d6431..bcc49eb52b 100644
--- a/interface/web/dns/lib/lang/hr_dns_a.lng
+++ b/interface/web/dns/lib/lang/hr_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje IP adresa je prazno';
 $wb['ip_error_wrong'] = 'Neispravan format A zapisa';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_aaaa.lng b/interface/web/dns/lib/lang/hr_dns_aaaa.lng
index 2e2ee87893..2be6042aa9 100644
--- a/interface/web/dns/lib/lang/hr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/hr_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nemate dozvolu za dodavanja zapisa ovoj domeni.';
 $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje IPv6 adresa je prazno';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'Neispravan format IPv6 adrese';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_cname.lng b/interface/web/dns/lib/lang/hr_dns_cname.lng
index 4e8fad12ba..ce334e750e 100644
--- a/interface/web/dns/lib/lang/hr_dns_cname.lng
+++ b/interface/web/dns/lib/lang/hr_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje odredišni host je prazno';
 $wb['data_error_regex'] = 'Neispravan format odredišnog host zapisa';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_dname.lng b/interface/web/dns/lib/lang/hr_dns_dname.lng
index ce334e750e..e854c3efe1 100644
--- a/interface/web/dns/lib/lang/hr_dns_dname.lng
+++ b/interface/web/dns/lib/lang/hr_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje odredišni host je prazno';
 $wb['data_error_regex'] = 'Neispravan format odredišnog host zapisa';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_a.lng b/interface/web/dns/lib/lang/hu_dns_a.lng
index 9c27b79139..f17ccaa11d 100644
--- a/interface/web/dns/lib/lang/hu_dns_a.lng
+++ b/interface/web/dns/lib/lang/hu_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_aaaa.lng b/interface/web/dns/lib/lang/hu_dns_aaaa.lng
index a532c80ca1..02643fed88 100644
--- a/interface/web/dns/lib/lang/hu_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_cname.lng b/interface/web/dns/lib/lang/hu_dns_cname.lng
index 36969d9984..38a6415774 100644
--- a/interface/web/dns/lib/lang/hu_dns_cname.lng
+++ b/interface/web/dns/lib/lang/hu_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_dname.lng b/interface/web/dns/lib/lang/hu_dns_dname.lng
index 38a6415774..d8d5ba8189 100644
--- a/interface/web/dns/lib/lang/hu_dns_dname.lng
+++ b/interface/web/dns/lib/lang/hu_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_a.lng b/interface/web/dns/lib/lang/id_dns_a.lng
index 659091bca6..20d5e9f355 100644
--- a/interface/web/dns/lib/lang/id_dns_a.lng
+++ b/interface/web/dns/lib/lang/id_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Alamat IP kosong';
 $wb['ip_error_wrong'] = 'Format Alamat IP tidak valid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_aaaa.lng b/interface/web/dns/lib/lang/id_dns_aaaa.lng
index 4b17ef0e85..f9b3395995 100644
--- a/interface/web/dns/lib/lang/id_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/id_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Anda tidak memiliki hak untuk menambah record ke zona DNS
 $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Alamat IP kosong';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'Format Alamat IP tidak valid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_cname.lng b/interface/web/dns/lib/lang/id_dns_cname.lng
index 4151b241db..9413415394 100644
--- a/interface/web/dns/lib/lang/id_dns_cname.lng
+++ b/interface/web/dns/lib/lang/id_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Nama Host Target kosong';
 $wb['data_error_regex'] = 'Format Nama Host Target tidak valid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_dname.lng b/interface/web/dns/lib/lang/id_dns_dname.lng
index 9413415394..a941b31084 100644
--- a/interface/web/dns/lib/lang/id_dns_dname.lng
+++ b/interface/web/dns/lib/lang/id_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Nama Host Target kosong';
 $wb['data_error_regex'] = 'Format Nama Host Target tidak valid';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_a.lng b/interface/web/dns/lib/lang/it_dns_a.lng
index 2e79466d7f..eec6ad5b07 100644
--- a/interface/web/dns/lib/lang/it_dns_a.lng
+++ b/interface/web/dns/lib/lang/it_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname  vuoto.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_aaaa.lng b/interface/web/dns/lib/lang/it_dns_aaaa.lng
index 76c540459d..fb1a2a58a6 100644
--- a/interface/web/dns/lib/lang/it_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/it_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DN
 $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
 $wb['data_error_empty'] = 'Indirizzo Ip vuoto';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_cname.lng b/interface/web/dns/lib/lang/it_dns_cname.lng
index 76cd9cd0e7..6d7d135a01 100644
--- a/interface/web/dns/lib/lang/it_dns_cname.lng
+++ b/interface/web/dns/lib/lang/it_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
 $wb['data_error_empty'] = 'Target nome host vuoto';
 $wb['data_error_regex'] = 'Target nome host formato errato';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_dname.lng b/interface/web/dns/lib/lang/it_dns_dname.lng
index 6d7d135a01..e9d1a057cc 100644
--- a/interface/web/dns/lib/lang/it_dns_dname.lng
+++ b/interface/web/dns/lib/lang/it_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
 $wb['data_error_empty'] = 'Target nome host vuoto';
 $wb['data_error_regex'] = 'Target nome host formato errato';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_a.lng b/interface/web/dns/lib/lang/ja_dns_a.lng
index a59aec7376..a64a87fc3f 100644
--- a/interface/web/dns/lib/lang/ja_dns_a.lng
+++ b/interface/web/dns/lib/lang/ja_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'IPアドレスを入力してください。';
 $wb['ip_error_wrong'] = 'IPアドレスの形式が不正です。';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_aaaa.lng b/interface/web/dns/lib/lang/ja_dns_aaaa.lng
index cfc23b426a..233cfd71ed 100644
--- a/interface/web/dns/lib/lang/ja_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'このDNSゾーンにレコードを追加する権限が
 $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'IPアドレスを入力してください。';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IPアドレスの形式が不正です。';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_cname.lng b/interface/web/dns/lib/lang/ja_dns_cname.lng
index b29ead6599..af805c9823 100644
--- a/interface/web/dns/lib/lang/ja_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ja_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'ターゲットのホスト名を入力してください。';
 $wb['data_error_regex'] = 'ターゲットのホスト名の形式が不正です。';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_dname.lng b/interface/web/dns/lib/lang/ja_dns_dname.lng
index af805c9823..141f9290e1 100644
--- a/interface/web/dns/lib/lang/ja_dns_dname.lng
+++ b/interface/web/dns/lib/lang/ja_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'ターゲットのホスト名を入力してください。';
 $wb['data_error_regex'] = 'ターゲットのホスト名の形式が不正です。';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_a.lng b/interface/web/dns/lib/lang/nl_dns_a.lng
index 45d0501ac9..38e30234c7 100644
--- a/interface/web/dns/lib/lang/nl_dns_a.lng
+++ b/interface/web/dns/lib/lang/nl_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'De hostnaam is niet ingvuld.';
 $wb['name_error_regex'] = 'De hostnaam heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'IP-adres is niet ingvuld';
 $wb['ip_error_wrong'] = 'IP-adres formaat ongeldig';
-$wb['data_error_duplicate'] = 'Duplicaat A, CNAME, of DNAME record';
+$wb['data_error_duplicate'] = 'Duplicaat A of CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_aaaa.lng b/interface/web/dns/lib/lang/nl_dns_aaaa.lng
index e30766442d..218799bb4a 100644
--- a/interface/web/dns/lib/lang/nl_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'U heeft geen toestemming om een record toe te voegen aan
 $wb['name_error_empty'] = 'De hostnaam is niet ingvuld';
 $wb['name_error_regex'] = 'De hostnaam heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'IP-adres is niet ingevuld';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IP-adres formaat ongeldig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_cname.lng b/interface/web/dns/lib/lang/nl_dns_cname.lng
index 84b904a60e..778a05a5fa 100644
--- a/interface/web/dns/lib/lang/nl_dns_cname.lng
+++ b/interface/web/dns/lib/lang/nl_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'De hostnaam is niet ingvuld.';
 $wb['name_error_regex'] = 'De hostname heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'Doel hostnaam is niet ingvuld';
 $wb['data_error_regex'] = 'Doel hostnaam formaat ongeldig';
-$wb['data_error_duplicate'] = 'Duplicaat A, CNAME, of DNAME record';
+$wb['data_error_duplicate'] = 'Duplicaat A, AAAA, CNAME, of DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_dname.lng b/interface/web/dns/lib/lang/nl_dns_dname.lng
index d5f63bcc13..6072ddb377 100644
--- a/interface/web/dns/lib/lang/nl_dns_dname.lng
+++ b/interface/web/dns/lib/lang/nl_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'De hostnaam is niet ingvuld.';
 $wb['name_error_regex'] = 'De hostname heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'Doel hostnaam is niet ingvuld';
 $wb['data_error_regex'] = 'Doel hostnaam formaat ongeldig';
-$wb['data_error_duplicate'] = 'Duplicaat A-record, CNAME-record of DNAME-record';
+$wb['data_error_duplicate'] = 'Duplicaat CNAME-record of DNAME-record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_a.lng b/interface/web/dns/lib/lang/pl_dns_a.lng
index 59ef056e53..a200ae5cce 100644
--- a/interface/web/dns/lib/lang/pl_dns_a.lng
+++ b/interface/web/dns/lib/lang/pl_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Adres IP jest pusty.';
 $wb['ip_error_wrong'] = 'Adres IP ma niepoprawny format.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_aaaa.lng b/interface/web/dns/lib/lang/pl_dns_aaaa.lng
index debb636d7e..7de382fcbd 100644
--- a/interface/web/dns/lib/lang/pl_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nie masz uprawnień, aby dodać nowy wpis w tej strefie D
 $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Adres IP jest pusty.';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'Adres IP ma niepoprawny format.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_cname.lng b/interface/web/dns/lib/lang/pl_dns_cname.lng
index bee2839ae0..d4fb5ab8c8 100644
--- a/interface/web/dns/lib/lang/pl_dns_cname.lng
+++ b/interface/web/dns/lib/lang/pl_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Docelowa nazwa serwera jest pusta.';
 $wb['data_error_regex'] = 'Docelowa nazwa serwera ma niepoprawny format.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_dname.lng b/interface/web/dns/lib/lang/pl_dns_dname.lng
index d4fb5ab8c8..a7e3ac50e4 100644
--- a/interface/web/dns/lib/lang/pl_dns_dname.lng
+++ b/interface/web/dns/lib/lang/pl_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Docelowa nazwa serwera jest pusta.';
 $wb['data_error_regex'] = 'Docelowa nazwa serwera ma niepoprawny format.';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_a.lng b/interface/web/dns/lib/lang/pt_dns_a.lng
index 0051c476bc..336c4f477e 100644
--- a/interface/web/dns/lib/lang/pt_dns_a.lng
+++ b/interface/web/dns/lib/lang/pt_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname em branco.';
 $wb['name_error_regex'] = 'Hostname tem um formato inválido.';
 $wb['data_error_empty'] = 'Endereço-IP em branco';
 $wb['ip_error_wrong'] = 'Endereço-IP formato inválido';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_aaaa.lng b/interface/web/dns/lib/lang/pt_dns_aaaa.lng
index 29da278ec4..045a818731 100644
--- a/interface/web/dns/lib/lang/pt_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Não tem permissão para adicionar registos a está zona
 $wb['name_error_empty'] = 'O Hostname está em branco.';
 $wb['name_error_regex'] = 'O Hostname está com formato inválido.';
 $wb['data_error_empty'] = 'Endereço-IP em branco';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'Endereço-IP com formato inválido';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_cname.lng b/interface/web/dns/lib/lang/pt_dns_cname.lng
index 06782a96c4..124b9e3000 100644
--- a/interface/web/dns/lib/lang/pt_dns_cname.lng
+++ b/interface/web/dns/lib/lang/pt_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname está em branco.';
 $wb['name_error_regex'] = 'O hostname está em um formato inválido.';
 $wb['data_error_empty'] = 'Hostname de destino está em branco';
 $wb['data_error_regex'] = 'O hostname de destino está em um formato inválido.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_dname.lng b/interface/web/dns/lib/lang/pt_dns_dname.lng
index 124b9e3000..aa8b13cc4e 100644
--- a/interface/web/dns/lib/lang/pt_dns_dname.lng
+++ b/interface/web/dns/lib/lang/pt_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname está em branco.';
 $wb['name_error_regex'] = 'O hostname está em um formato inválido.';
 $wb['data_error_empty'] = 'Hostname de destino está em branco';
 $wb['data_error_regex'] = 'O hostname de destino está em um formato inválido.';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_a.lng b/interface/web/dns/lib/lang/ro_dns_a.lng
index 556dbea115..26f8a42f05 100644
--- a/interface/web/dns/lib/lang/ro_dns_a.lng
+++ b/interface/web/dns/lib/lang/ro_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname necompletat';
 $wb['name_error_regex'] = 'Hostname format gresit';
 $wb['data_error_empty'] = 'IP-Adresa vid';
 $wb['ip_error_wrong'] = 'IP-Adresa format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_aaaa.lng b/interface/web/dns/lib/lang/ro_dns_aaaa.lng
index 03f18f18da..da7eeb8a0f 100644
--- a/interface/web/dns/lib/lang/ro_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_cname.lng b/interface/web/dns/lib/lang/ro_dns_cname.lng
index f023134100..c76d2587a1 100644
--- a/interface/web/dns/lib/lang/ro_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ro_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Rubrica hostname necompletata';
 $wb['name_error_regex'] = 'Hostname cu format gresit';
 $wb['data_error_empty'] = 'Hostname tinta necompletat';
 $wb['data_error_regex'] = 'Hostname tinta cu format gresit';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_dname.lng b/interface/web/dns/lib/lang/ro_dns_dname.lng
index c76d2587a1..01c51d8605 100644
--- a/interface/web/dns/lib/lang/ro_dns_dname.lng
+++ b/interface/web/dns/lib/lang/ro_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Rubrica hostname necompletata';
 $wb['name_error_regex'] = 'Hostname cu format gresit';
 $wb['data_error_empty'] = 'Hostname tinta necompletat';
 $wb['data_error_regex'] = 'Hostname tinta cu format gresit';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_a.lng b/interface/web/dns/lib/lang/ru_dns_a.lng
index 2a55aa4d64..5dd1329a1b 100644
--- a/interface/web/dns/lib/lang/ru_dns_a.lng
+++ b/interface/web/dns/lib/lang/ru_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'IP-адрес пустой';
 $wb['ip_error_wrong'] = 'Неправильный формат IP-адреса';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_aaaa.lng b/interface/web/dns/lib/lang/ru_dns_aaaa.lng
index a1b63edf53..efec59952a 100644
--- a/interface/web/dns/lib/lang/ru_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту за
 $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Неправильный формат имени хоста.';
 $wb['data_error_empty'] = 'Пустой IP-адрес';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'Неправильный формат IP-адреса';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_cname.lng b/interface/web/dns/lib/lang/ru_dns_cname.lng
index cb20700fe6..8fbddd6799 100644
--- a/interface/web/dns/lib/lang/ru_dns_cname.lng
+++ b/interface/web/dns/lib/lang/ru_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'Целевое имя узла пустое';
 $wb['data_error_regex'] = 'Целевое имя узла имеет неправильный формат';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_dname.lng b/interface/web/dns/lib/lang/ru_dns_dname.lng
index 8fbddd6799..7e8da83b5b 100644
--- a/interface/web/dns/lib/lang/ru_dns_dname.lng
+++ b/interface/web/dns/lib/lang/ru_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'Целевое имя узла пустое';
 $wb['data_error_regex'] = 'Целевое имя узла имеет неправильный формат';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_a.lng b/interface/web/dns/lib/lang/se_dns_a.lng
index c191ff19d3..577bb47d5b 100644
--- a/interface/web/dns/lib/lang/se_dns_a.lng
+++ b/interface/web/dns/lib/lang/se_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_aaaa.lng b/interface/web/dns/lib/lang/se_dns_aaaa.lng
index 03f18f18da..da7eeb8a0f 100644
--- a/interface/web/dns/lib/lang/se_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/se_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_cname.lng b/interface/web/dns/lib/lang/se_dns_cname.lng
index 6530e927f6..0d42cac595 100644
--- a/interface/web/dns/lib/lang/se_dns_cname.lng
+++ b/interface/web/dns/lib/lang/se_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_dname.lng b/interface/web/dns/lib/lang/se_dns_dname.lng
index 0d42cac595..62088e09b6 100644
--- a/interface/web/dns/lib/lang/se_dns_dname.lng
+++ b/interface/web/dns/lib/lang/se_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'Target hostname empty';
 $wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_a.lng b/interface/web/dns/lib/lang/sk_dns_a.lng
index 3f048c2857..9937576f58 100644
--- a/interface/web/dns/lib/lang/sk_dns_a.lng
+++ b/interface/web/dns/lib/lang/sk_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'IP Adresa je prázdna';
 $wb['ip_error_wrong'] = 'IP Adresa má zlý formát.';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_aaaa.lng b/interface/web/dns/lib/lang/sk_dns_aaaa.lng
index f719fe6bc2..2631d32515 100644
--- a/interface/web/dns/lib/lang/sk_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnenie Pridať záznam do tejto zóny DNS.';
 $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'IP-Adresa prázdna';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IP-Adresa má zlý formát';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_cname.lng b/interface/web/dns/lib/lang/sk_dns_cname.lng
index a6a8685c8f..c155285234 100644
--- a/interface/web/dns/lib/lang/sk_dns_cname.lng
+++ b/interface/web/dns/lib/lang/sk_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'Cieľový hostname je prázdny';
 $wb['data_error_regex'] = 'Target hostname má zlý format';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_dname.lng b/interface/web/dns/lib/lang/sk_dns_dname.lng
index c155285234..88c3f069bd 100644
--- a/interface/web/dns/lib/lang/sk_dns_dname.lng
+++ b/interface/web/dns/lib/lang/sk_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'Cieľový hostname je prázdny';
 $wb['data_error_regex'] = 'Target hostname má zlý format';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_a.lng b/interface/web/dns/lib/lang/tr_dns_a.lng
index 34eba9c0b5..bab67a4646 100644
--- a/interface/web/dns/lib/lang/tr_dns_a.lng
+++ b/interface/web/dns/lib/lang/tr_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME record';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 $wb['ip_error_wrong'] = 'IP adresi biçimi geçersiz';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_aaaa.lng b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
index 80a4c64d51..8b31622d57 100644
--- a/interface/web/dns/lib/lang/tr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adının biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
-$wb['data_error_duplicate'] = 'Duplicate AAAA, CNAME or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME record';
 $wb['ip_error_wrong'] = 'IP adresinin biçimi geçersiz';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_cname.lng b/interface/web/dns/lib/lang/tr_dns_cname.lng
index 008e4962eb..cc8ce3005c 100644
--- a/interface/web/dns/lib/lang/tr_dns_cname.lng
+++ b/interface/web/dns/lib/lang/tr_dns_cname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Hedef sunucu adı boş olamaz';
 $wb['data_error_regex'] = 'Hedef sunucu adı biçimi geçersiz';
-$wb['data_error_duplicate'] = 'Duplicate A, CNAME or DNAME Record';
+$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_dname.lng b/interface/web/dns/lib/lang/tr_dns_dname.lng
index cc8ce3005c..8cd2b0a0aa 100644
--- a/interface/web/dns/lib/lang/tr_dns_dname.lng
+++ b/interface/web/dns/lib/lang/tr_dns_dname.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Hedef sunucu adı boş olamaz';
 $wb['data_error_regex'] = 'Hedef sunucu adı biçimi geçersiz';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'Duplicate CNAME or DNAME record';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
-- 
GitLab


From 6105091c6a2fc22e3c40830dd67762f8beec4dac Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 16 Jun 2020 11:36:12 +0200
Subject: [PATCH 415/571] Clicking from search result alias/child domain failed
 to open, fixes #5607

---
 interface/web/capp.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/capp.php b/interface/web/capp.php
index 39392691f8..5d49fe80d7 100644
--- a/interface/web/capp.php
+++ b/interface/web/capp.php
@@ -43,7 +43,7 @@ if($_SESSION["s"]["user"]['active'] != 1) {
 }
 
 if(!preg_match("/^[a-z]{2,20}$/i", $mod)) die('module name contains unallowed chars.');
-if($redirect != '' && !preg_match("/^[a-z0-9]+\/[a-z0-9_\.\-]+\?id=[0-9]{1,9}$/i", $redirect)) die('redirect contains unallowed chars.');
+if($redirect != '' && !preg_match("/^[a-z0-9]+\/[a-z0-9_\.\-]+\?id=[0-9]{1,9}(\&type=[a-z0-9_\.\-]+)?$/i", $redirect)) die('redirect contains unallowed chars.');
 
 //* Check if user may use the module.
 $user_modules = explode(",", $_SESSION["s"]["user"]["modules"]);
-- 
GitLab


From 1a94ce8f4fead3941d5c8bfc045b4344da972214 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Tue, 16 Jun 2020 15:52:58 +0200
Subject: [PATCH 416/571] Add auth_verbose = yes (#5642)

---
 install/tpl/debian6_dovecot2.conf.master | 6 +++---
 install/tpl/debian_dovecot2.conf.master  | 4 ++--
 install/tpl/fedora_dovecot2.conf.master  | 4 ++--
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 6f32e6d5a2..a1810ab509 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -9,6 +9,7 @@ ssl_key = </etc/postfix/smtpd.key
 ssl_dh = </etc/dovecot/dh.pem
 ssl_protocols = !SSLv2 !SSLv3
 ssl_min_protocol = TLSv1
+auth_verbose = yes
 mail_max_userip_connections = 100
 mail_plugins = quota
 passdb {
@@ -51,7 +52,7 @@ service lmtp {
    group = postfix
    mode = 0600
    user = postfix
-   # For higher volume sites, it may be desirable to increase the number of active listener processes. 
+   # For higher volume sites, it may be desirable to increase the number of active listener processes.
    # A range of 5 to 20 is probably good for most sites
 #   process_min_avail = 5
   }
@@ -83,7 +84,7 @@ protocol lmtp {
 #2.3+         group = vmail
 #2.3+         mode = 0660
 #2.3+     }
-#2.3+ 
+#2.3+
 #2.3+     unix_listener stats-writer {
 #2.3+         user = vmail
 #2.3+         group = vmail
@@ -126,4 +127,3 @@ namespace inbox {
     special_use = \Trash
   }
 }
-
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index 25c586118c..88d6a1b924 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -8,6 +8,7 @@ postmaster_address = postmaster@example.com
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_protocols = !SSLv2 !SSLv3
+auth_verbose = yes
 mail_max_userip_connections = 100
 mail_plugins = $mail_plugins quota
 passdb {
@@ -80,7 +81,7 @@ protocol lmtp {
 #2.3+         group = vmail
 #2.3+         mode = 0660
 #2.3+     }
-#2.3+ 
+#2.3+
 #2.3+     unix_listener stats-writer {
 #2.3+         user = vmail
 #2.3+         group = vmail
@@ -102,4 +103,3 @@ plugin {
   quota_status_nouser = DUNNO
   quota_status_overquota = "552 5.2.2 Mailbox is full"
 }
-
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index ee80f8c0d9..9ec150ce49 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -7,6 +7,7 @@ mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_protocols = !SSLv2 !SSLv3
+auth_verbose = yes
 mail_plugins = quota
 passdb {
   args = /etc/dovecot-sql.conf
@@ -79,7 +80,7 @@ mail_plugins = $mail_plugins quota
 #2.3+         group = vmail
 #2.3+         mode = 0660
 #2.3+     }
-#2.3+ 
+#2.3+
 #2.3+     unix_listener stats-writer {
 #2.3+         user = vmail
 #2.3+         group = vmail
@@ -122,4 +123,3 @@ namespace inbox {
     special_use = \Trash
   }
 }
-
-- 
GitLab


From ae6dc98476ce77d1e64f0b1700b6544cf95b7e81 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Tue, 16 Jun 2020 16:58:48 +0200
Subject: [PATCH 417/571] Allow 63 char TLD (RFC 1034)

---
 interface/lib/classes/validate_cron.inc.php   |  2 +-
 interface/lib/classes/validate_domain.inc.php | 50 +++++++++----------
 .../web/admin/form/server_config.tform.php    |  2 +-
 interface/web/client/form/domain.tform.php    |  2 +-
 interface/web/dns/dns_wizard.php              | 12 ++---
 interface/web/dns/form/dns_slave.tform.php    |  2 +-
 interface/web/dns/form/dns_soa.tform.php      |  2 +-
 interface/web/mail/ajax_get_json.php          |  4 +-
 .../mail/form/mail_domain_catchall.tform.php  |  2 +-
 interface/web/mail/form/mail_user.tform.php   |  8 +--
 interface/web/mail/form/xmpp_domain.tform.php |  2 +-
 11 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/interface/lib/classes/validate_cron.inc.php b/interface/lib/classes/validate_cron.inc.php
index 9a2af80366..888fdd5cb7 100644
--- a/interface/lib/classes/validate_cron.inc.php
+++ b/interface/lib/classes/validate_cron.inc.php
@@ -52,7 +52,7 @@ class validate_cron {
 
 			if($parsed["scheme"] != "http" && $parsed["scheme"] != "https") return $this->get_error($validator['errmsg']);
 
-			if(preg_match("'^([a-z0-9][a-z0-9_\-]{0,62}\.)+([A-Za-z0-9\-]{2,30})$'i", $parsed["host"]) == false) return $this->get_error($validator['errmsg']);
+			if(preg_match("'^([a-z0-9][a-z0-9_\-]{0,62}\.)+([A-Za-z0-9\-]{2,63})$'i", $parsed["host"]) == false) return $this->get_error($validator['errmsg']);
 		}
 		if(strpos($field_value, "\n") !== false || strpos($field_value, "\r") !== false || strpos($field_value, chr(0)) !== false) {
 			return $this->get_error($validator['errmsg']);
diff --git a/interface/lib/classes/validate_domain.inc.php b/interface/lib/classes/validate_domain.inc.php
index 57187805cf..d8c87e09f1 100644
--- a/interface/lib/classes/validate_domain.inc.php
+++ b/interface/lib/classes/validate_domain.inc.php
@@ -51,7 +51,7 @@ class validate_domain {
 
 		$result = $this->_check_unique($field_value);
 		if(!$result) return $this->get_error('domain_error_unique');
-		
+
 		$pattern = '/\.acme\.invalid$/';
 		if(preg_match($pattern, $field_value)) return $this->get_error('domain_error_acme_invalid');
 	}
@@ -68,7 +68,7 @@ class validate_domain {
 
 		$result = $this->_check_unique($field_value);
 		if(!$result) return $this->get_error('domain_error_unique');
-		
+
 		$pattern = '/\.acme\.invalid$/';
 		if(preg_match($pattern, $field_value)) return $this->get_error('domain_error_acme_invalid');
 	}
@@ -83,7 +83,7 @@ class validate_domain {
 
 		$result = $this->_check_unique($field_value);
 		if(!$result) return $this->get_error('domain_error_unique');
-		
+
 		$pattern = '/\.acme\.invalid$/';
 		if(preg_match($pattern, $field_value)) return $this->get_error('domain_error_acme_invalid');
 	}
@@ -98,7 +98,7 @@ class validate_domain {
 		} else {
 			$check_domain = $_POST['domain'];
 		}
-		
+
 		$app->uses('ini_parser,getconf');
 		$settings = $app->getconf->get_global_config('domains');
 		if ($settings['use_domain_module'] == 'y') {
@@ -111,26 +111,26 @@ class validate_domain {
 		$result = $this->_check_unique($field_value . '.' . $check_domain, true);
 		if(!$result) return $this->get_error('domain_error_autosub');
 	}
-	
+
 	/* Check apache directives */
 	function web_apache_directives($field_name, $field_value, $validator) {
 		global $app;
-		
+
 		if(trim($field_value) != '') {
 			$security_config = $app->getconf->get_security_config('ids');
-		
+
 			if($security_config['apache_directives_scan_enabled'] == 'yes') {
-				
+
 				// Get blacklist
 				$blacklist_path = '/usr/local/ispconfig/security/apache_directives.blacklist';
 				if(is_file('/usr/local/ispconfig/security/apache_directives.blacklist.custom')) $blacklist_path = '/usr/local/ispconfig/security/apache_directives.blacklist.custom';
 				if(!is_file($blacklist_path)) $blacklist_path = realpath(ISPC_ROOT_PATH.'/../security/apache_directives.blacklist');
-				
+
 				$directives = explode("\n",$field_value);
 				$regex = explode("\n",file_get_contents($blacklist_path));
 				$blocked = false;
 				$blocked_line = '';
-				
+
 				if(is_array($directives) && is_array($regex)) {
 					foreach($directives as $directive) {
 						$directive = trim($directive);
@@ -144,31 +144,31 @@ class validate_domain {
 				}
 			}
 		}
-		
+
 		if($blocked === true) {
 			return $this->get_error('apache_directive_blocked_error').' '.$blocked_line;
 		}
 	}
-	
+
 	/* Check nginx directives */
 	function web_nginx_directives($field_name, $field_value, $validator) {
 		global $app;
-		
+
 		if(trim($field_value) != '') {
 			$security_config = $app->getconf->get_security_config('ids');
-		
+
 			if($security_config['nginx_directives_scan_enabled'] == 'yes') {
-				
+
 				// Get blacklist
 				$blacklist_path = '/usr/local/ispconfig/security/nginx_directives.blacklist';
 				if(is_file('/usr/local/ispconfig/security/nginx_directives.blacklist.custom')) $blacklist_path = '/usr/local/ispconfig/security/nginx_directives.blacklist.custom';
 				if(!is_file($blacklist_path)) $blacklist_path = realpath(ISPC_ROOT_PATH.'/../security/nginx_directives.blacklist');
-				
+
 				$directives = explode("\n",$field_value);
 				$regex = explode("\n",file_get_contents($blacklist_path));
 				$blocked = false;
 				$blocked_line = '';
-				
+
 				if(is_array($directives) && is_array($regex)) {
 					foreach($directives as $directive) {
 						$directive = trim($directive);
@@ -182,16 +182,16 @@ class validate_domain {
 				}
 			}
 		}
-		
+
 		if($blocked === true) {
 			return $this->get_error('nginx_directive_blocked_error').' '.$blocked_line;
 		}
 	}
-	
+
 
 	/* internal validator function to match regexp */
 	function _regex_validate($domain_name, $allow_wildcard = false) {
-		$pattern = '/^' . ($allow_wildcard == true ? '(\*\.)?' : '') . '[\w\.\-]{1,255}\.[a-zA-Z0-9\-]{2,30}$/';
+		$pattern = '/^' . ($allow_wildcard == true ? '(\*\.)?' : '') . '[\w\.\-]{1,255}\.[a-zA-Z0-9\-]{2,63}$/';
 		return preg_match($pattern, $domain_name);
 	}
 
@@ -229,8 +229,8 @@ class validate_domain {
 				$domain_params[] = $aliassubdomain['domain'];
 			}
 		}
-		
-		
+
+
 		$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (d.domain = ?" . $additional_sql1 . ") AND d.server_id = ? AND d.domain_id != ?" . ($primary_id ? " AND d.parent_domain_id != ?" : "");
 		$params = array_merge(array($domain_name), $domain_params, array($domain['server_id'], $primary_id, $primary_id));
 		$checks = $app->db->queryAllRecords($qrystr, true, $params);
@@ -242,7 +242,7 @@ class validate_domain {
 				if($domain['ipv6_address'] != '' && $check['ipv6_address'] == $domain['ipv6_address']) return false;
 			}
 		}
-		
+
 		if($only_domain == false) {
 			$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (CONCAT(d.subdomain, '.', d.domain) = ?" . $additional_sql2 . ") AND d.server_id = ? AND d.domain_id != ?" . ($primary_id ? " AND d.parent_domain_id != ?" : "");
 			$params = array_merge(array($domain_name), $domain_params, array($domain['server_id'], $primary_id, $primary_id));
@@ -256,7 +256,7 @@ class validate_domain {
 				}
 			}
 		}
-		
+
 		return true;
 	}
 
@@ -274,6 +274,6 @@ class validate_domain {
 		}
 		return true; // admin may always add wildcard domain
 	}
-	
+
 
 }
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index f64ce30926..0d570f2e94 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -131,7 +131,7 @@ $form["tabs"]['server'] = array(
 			'validators' => array(	0 => array('type' => 'NOTEMPTY',
 												'errmsg' => 'hostname_error_empty'),
 									1 => array ('type' => 'REGEX',
-												'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/',
+												'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,63}$/',
 												'errmsg'=> 'hostname_error_regex'),
 			),
 			'value' => '',
diff --git a/interface/web/client/form/domain.tform.php b/interface/web/client/form/domain.tform.php
index 2d3e1dbdd1..a3dc1aaac0 100644
--- a/interface/web/client/form/domain.tform.php
+++ b/interface/web/client/form/domain.tform.php
@@ -100,7 +100,7 @@ $form["tabs"]['domain'] = array (
 				1 => array ( 'type' => 'UNIQUE',
 					'errmsg'=> 'domain_error_unique'),
 				2 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/',
+					'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,63}$/',
 					'errmsg'=> 'domain_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/dns/dns_wizard.php b/interface/web/dns/dns_wizard.php
index a02ee0a80f..91b2307dc5 100644
--- a/interface/web/dns/dns_wizard.php
+++ b/interface/web/dns/dns_wizard.php
@@ -220,10 +220,10 @@ if ($domains_settings['use_domain_module'] == 'y') {
 }
 
 if($_POST['create'] == 1) {
-	
+
 	//* CSRF Check
 	$app->auth->csrf_token_check();
-	
+
 	$error = '';
 
 	if ($post_server_id)
@@ -277,17 +277,17 @@ if($_POST['create'] == 1) {
 
 
 	if(isset($_POST['domain']) && $_POST['domain'] == '') $error .= $app->lng('error_domain_empty').'<br />';
-	elseif(isset($_POST['domain']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9\-]{2,30}$/', $_POST['domain'])) $error .= $app->lng('error_domain_regex').'<br />';
+	elseif(isset($_POST['domain']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9\-]{2,63}$/', $_POST['domain'])) $error .= $app->lng('error_domain_regex').'<br />';
 
 	if(isset($_POST['ip']) && $_POST['ip'] == '') $error .= $app->lng('error_ip_empty').'<br />';
 
 	if(isset($_POST['ipv6']) && $_POST['ipv6'] == '') $error .= $app->lng('error_ipv6_empty').'<br />';
 
 	if(isset($_POST['ns1']) && $_POST['ns1'] == '') $error .= $app->lng('error_ns1_empty').'<br />';
-	elseif(isset($_POST['ns1']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9]{2,30}$/', $_POST['ns1'])) $error .= $app->lng('error_ns1_regex').'<br />';
+	elseif(isset($_POST['ns1']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9]{2,63}$/', $_POST['ns1'])) $error .= $app->lng('error_ns1_regex').'<br />';
 
 	if(isset($_POST['ns2']) && $_POST['ns2'] == '') $error .= $app->lng('error_ns2_empty').'<br />';
-	elseif(isset($_POST['ns2']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9]{2,30}$/', $_POST['ns2'])) $error .= $app->lng('error_ns2_regex').'<br />';
+	elseif(isset($_POST['ns2']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9]{2,63}$/', $_POST['ns2'])) $error .= $app->lng('error_ns2_regex').'<br />';
 
 	if(isset($_POST['email']) && $_POST['email'] == '') $error .= $app->lng('error_email_empty').'<br />';
 	elseif(isset($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) $error .= $app->lng('error_email_regex').'<br />';
@@ -324,7 +324,7 @@ if($_POST['create'] == 1) {
 	if($_POST['ns2'] != '') $tpl_content = str_replace('{NS2}', $_POST['ns2'], $tpl_content);
 	if($_POST['email'] != '') $tpl_content = str_replace('{EMAIL}', $_POST['email'], $tpl_content);
 	$enable_dnssec = (($_POST['dnssec'] == 'Y') ? 'Y' : 'N');
-	if(isset($_POST['dkim']) && preg_match('/^[\w\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,30}[\.]{0,1}$/', $_POST['domain'])) {
+	if(isset($_POST['dkim']) && preg_match('/^[\w\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/', $_POST['domain'])) {
 		$sql = $app->db->queryOneRecord("SELECT dkim_public, dkim_selector FROM mail_domain WHERE domain = ? AND dkim = 'y' AND ".$app->tform->getAuthSQL('r'), $_POST['domain']);
 		$public_key = $sql['dkim_public'];
 		if ($public_key!='') {
diff --git a/interface/web/dns/form/dns_slave.tform.php b/interface/web/dns/form/dns_slave.tform.php
index 0b4457b700..55e085861a 100644
--- a/interface/web/dns/form/dns_slave.tform.php
+++ b/interface/web/dns/form/dns_slave.tform.php
@@ -96,7 +96,7 @@ $form["tabs"]['dns_slave'] = array (
 														'errmsg'=> 'origin_error_unique'),
 										*/
 				1 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,30}[\.]{0,1}$/',
+					'regex' => '/^[a-zA-Z0-9\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/',
 					'errmsg'=> 'origin_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index e56211782a..cf0d143916 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -95,7 +95,7 @@ $form["tabs"]['dns_soa'] = array (
 				1 => array ( 'type' => 'UNIQUE',
 					'errmsg'=> 'origin_error_unique'),
 				2 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,30}[\.]{0,1}$/',
+					'regex' => '/^[a-zA-Z0-9\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/',
 					'errmsg'=> 'origin_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/mail/ajax_get_json.php b/interface/web/mail/ajax_get_json.php
index 412958a315..dfc9dc220c 100644
--- a/interface/web/mail/ajax_get_json.php
+++ b/interface/web/mail/ajax_get_json.php
@@ -52,7 +52,7 @@ if($type == 'create_dkim' && $domain_id != ''){
 	$mail_config = $app->getconf->get_server_config($server_id, 'mail');
 	$dkim_strength = $app->functions->intval($mail_config['dkim_strength']);
 	if ($dkim_strength=='') $dkim_strength = 2048;
-	
+
 	$rnd_val = $dkim_strength * 10;
 	$app->system->exec_safe('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null');
 	$app->system->exec_safe('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null');
@@ -113,7 +113,7 @@ header('Content-type: application/json');
 echo $json;
 
 function validate_domain($domain) {
-	$regex = '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/';
+	$regex = '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,63}$/';
 	if ( preg_match($regex, $domain) === 1 ) return true; else return false;
 }
 
diff --git a/interface/web/mail/form/mail_domain_catchall.tform.php b/interface/web/mail/form/mail_domain_catchall.tform.php
index 34d26088cd..72261e05e0 100644
--- a/interface/web/mail/form/mail_domain_catchall.tform.php
+++ b/interface/web/mail/form/mail_domain_catchall.tform.php
@@ -86,7 +86,7 @@ $form["tabs"]['catchall'] = array (
 				1 => array ( 'type' => 'UNIQUE',
 					'errmsg'=> 'domain_error_unique'),
 				2 => array ( 'type' => 'REGEX',
-					'regex' => '/^\@[\w\.\-]{2,255}\.[a-zA-Z\-]{2,30}$/',
+					'regex' => '/^\@[\w\.\-]{2,255}\.[a-zA-Z\-]{2,63}$/',
 					'errmsg'=> 'domain_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 83142f8a85..3d1a8fde7f 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -181,7 +181,7 @@ $form["tabs"]['mailuser'] = array(
 					'type' => 'TOLOWER')
 			),
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^(\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,10}){0,1}(,\s*\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,10}){0,}$/i',
+					'regex' => '/^(\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,63}){0,1}(,\s*\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,63}){0,}$/i',
 					'errmsg'=> 'cc_error_isemail'),
 			),
 			'default' => '',
@@ -200,7 +200,7 @@ $form["tabs"]['mailuser'] = array(
 					'type' => 'TOLOWER')
 			),
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex'=>'/^(\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,10}){0,1}(,\s*\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,10}){0,}$/i',
+					'regex'=>'/^(\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,63}){0,1}(,\s*\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,63}){0,}$/i',
 					'errmsg'=> 'sender_cc_error_isemail'),
 			),
 			'default' => '',
@@ -360,7 +360,7 @@ if ($global_config['mail']['mailbox_show_autoresponder_tab'] === 'y') {
 			'autoresponder_start_date' => array (
 				'datatype' => 'DATETIME',
 				'formtype' => 'DATETIME',
-				'validators'=> array ( 
+				'validators'=> array (
 					0 => array ( 'type' => 'ISDATETIME',
 						'allowempty' => 'y',
 						'errmsg'=> 'autoresponder_start_date_is_no_date'),
@@ -373,7 +373,7 @@ if ($global_config['mail']['mailbox_show_autoresponder_tab'] === 'y') {
 			'autoresponder_end_date' => array (
 				'datatype' => 'DATETIME',
 				'formtype' => 'DATETIME',
-				'validators'=> array (  
+				'validators'=> array (
 					0 => array ( 'type' => 'ISDATETIME',
 						'allowempty' => 'y',
 						'errmsg'=> 'autoresponder_end_date_is_no_date'),
diff --git a/interface/web/mail/form/xmpp_domain.tform.php b/interface/web/mail/form/xmpp_domain.tform.php
index bbe694f9fd..c703b0bea3 100644
--- a/interface/web/mail/form/xmpp_domain.tform.php
+++ b/interface/web/mail/form/xmpp_domain.tform.php
@@ -103,7 +103,7 @@ $form["tabs"]['domain'] = array (
 				1 => array ( 'type' => 'UNIQUE',
 					'errmsg'=> 'domain_error_unique'),
 				2 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/',
+					'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,63}$/',
 					'errmsg'=> 'domain_error_regex'),
 			),
 			'default' => '',
-- 
GitLab


From 9cc2475105027089751830af8a006de80535c4d5 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Tue, 16 Jun 2020 17:05:50 +0200
Subject: [PATCH 418/571] Fix minor typo

---
 interface/web/mail/lib/lang/ar_mail_domain_catchall.lng | 2 +-
 interface/web/mail/lib/lang/en_mail_domain_catchall.lng | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
index d1b54151d2..55cc10358e 100644
--- a/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
@@ -4,7 +4,7 @@ $wb['destination_txt'] = 'Destination';
 $wb['active_txt'] = 'Active';
 $wb['domain_error_unique'] = 'There is already a Catchall record for this domain.';
 $wb['no_domain_perm'] = 'You have no permission for this domain.';
-$wb['domain_error_regex'] = 'Invalid domain name od domain contains invalid characters.';
+$wb['domain_error_regex'] = 'Invalid domain name or domain contains invalid characters.';
 $wb['limit_mailcatchall_txt'] = 'The max. number of email catchall accounts for your account is reached.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
diff --git a/interface/web/mail/lib/lang/en_mail_domain_catchall.lng b/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
index a49722802e..a8c294846e 100644
--- a/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
@@ -4,7 +4,7 @@ $wb["destination_txt"] = 'Destination Email';
 $wb["active_txt"] = 'Active';
 $wb["domain_error_unique"] = "There is already a Catchall record for this domain.";
 $wb["no_domain_perm"] = "You have no permission for this domain.";
-$wb["domain_error_regex"] = 'Invalid domain name od domain contains invalid characters.';
+$wb["domain_error_regex"] = 'Invalid domain name or domain contains invalid characters.';
 $wb["limit_mailcatchall_txt"] = 'The max. number of email catchall accounts for your account is reached.';
 $wb['domain_txt'] = 'Domain';
 $wb["source_txt"] = 'Source';
-- 
GitLab


From 8018a2741d6d4e3f04ca6cf4e00a42e5e286da35 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 16 Jun 2020 19:12:31 +0200
Subject: [PATCH 419/571] Update capp.php

---
 interface/web/capp.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/interface/web/capp.php b/interface/web/capp.php
index 5d49fe80d7..9fb615b0c1 100644
--- a/interface/web/capp.php
+++ b/interface/web/capp.php
@@ -33,6 +33,7 @@ require_once '../lib/app.inc.php';
 
 //* Import module variable
 $mod = $_REQUEST["mod"];
+
 //* If we click on a search result, load that one instead of the module's start page
 $redirect = (isset($_REQUEST["redirect"]) ? $_REQUEST["redirect"] : '');
 
-- 
GitLab


From 48af421d6a0f0aa70fe073e42781ace667aa722d Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 16 Jun 2020 21:13:41 +0200
Subject: [PATCH 420/571] Update capp.php

---
 interface/web/capp.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/interface/web/capp.php b/interface/web/capp.php
index 9fb615b0c1..5d49fe80d7 100644
--- a/interface/web/capp.php
+++ b/interface/web/capp.php
@@ -33,7 +33,6 @@ require_once '../lib/app.inc.php';
 
 //* Import module variable
 $mod = $_REQUEST["mod"];
-
 //* If we click on a search result, load that one instead of the module's start page
 $redirect = (isset($_REQUEST["redirect"]) ? $_REQUEST["redirect"] : '');
 
-- 
GitLab


From 9b91bf41bc75c98c654f8ea4280f586e3ce496f3 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Wed, 17 Jun 2020 11:50:59 +0200
Subject: [PATCH 421/571] Fix wrong translation (#5647)

---
 interface/web/mail/lib/lang/de_spamfilter_blacklist.lng | 2 +-
 interface/web/mail/lib/lang/de_spamfilter_users.lng     | 2 +-
 interface/web/mail/lib/lang/de_spamfilter_whitelist.lng | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/interface/web/mail/lib/lang/de_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/de_spamfilter_blacklist.lng
index 6c08e33c79..63205a5ec1 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_blacklist.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_blacklist.lng
@@ -6,7 +6,7 @@ $wb['email_txt'] = 'E-Mail Adresse';
 $wb['priority_txt'] = 'Priorität';
 $wb['active_txt'] = 'Aktiv';
 $wb['limit_spamfilter_wblist_txt'] = 'Die maximale Anzahl an White- oder Blacklist Einträgen für ihr Konto wurde erreicht.';
-$wb['10 - highest'] = '10 - h&ouml;chste';
+$wb['10 - highest'] = '10 - höchste';
 $wb['5 - medium'] = '5 - normal';
 $wb['1 - lowest'] = '1 - niedrigste';
 ?>
diff --git a/interface/web/mail/lib/lang/de_spamfilter_users.lng b/interface/web/mail/lib/lang/de_spamfilter_users.lng
index 8528677c29..9322c80466 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_users.lng
@@ -7,7 +7,7 @@ $wb['fullname_txt'] = 'Name';
 $wb['local_txt'] = 'Lokal';
 $wb['email_error_notempty'] = 'Die E-Mail-Adresse darf nicht leer sein.';
 $wb['fullname_error_notempty'] = 'Der Name darf nicht leer sein.';
-$wb['10 - highest'] = '10 - h&ouml;chste';
+$wb['10 - highest'] = '10 - höchste';
 $wb['5 - medium'] = '5 - normal';
 $wb['1 - lowest'] = '1 - niedrigste';
 ?>
diff --git a/interface/web/mail/lib/lang/de_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/de_spamfilter_whitelist.lng
index 7a953fa6cb..fc6be5baed 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_whitelist.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_whitelist.lng
@@ -2,11 +2,11 @@
 $wb['server_id_txt'] = 'Server';
 $wb['wb_txt'] = 'wb';
 $wb['rid_txt'] = 'Benutzer';
-$wb['email_txt'] = 'E-Mail';
+$wb['email_txt'] = 'E-Mail Adresse';
 $wb['priority_txt'] = 'Priorität';
 $wb['active_txt'] = 'Aktiv';
 $wb['limit_spamfilter_wblist_txt'] = 'Die maximale Anzahl an White- oder Blacklist Einträgen für Ihr Konto wurde erreicht.';
-$wb['10 - highest'] = '10 - h&ouml;chste';
+$wb['10 - highest'] = '10 - höchste';
 $wb['5 - medium'] = '5 - normal';
 $wb['1 - lowest'] = '1 - niedrigste';
 ?>
-- 
GitLab


From 0ecbb3527e8552b5d4f2a12a013eeb0c582e0828 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Fri, 19 Jun 2020 11:20:21 +0200
Subject: [PATCH 422/571] Remove translation for SPDY/HTTP2 (#5646)

---
 interface/web/admin/lib/lang/ar_server_config.lng    | 1 -
 interface/web/admin/lib/lang/bg_server_config.lng    | 1 -
 interface/web/admin/lib/lang/br_server_config.lng    | 1 -
 interface/web/admin/lib/lang/ca_server_config.lng    | 1 -
 interface/web/admin/lib/lang/cz_server_config.lng    | 1 -
 interface/web/admin/lib/lang/de_server_config.lng    | 1 -
 interface/web/admin/lib/lang/dk_server_config.lng    | 1 -
 interface/web/admin/lib/lang/el_server_config.lng    | 1 -
 interface/web/admin/lib/lang/en_server_config.lng    | 1 -
 interface/web/admin/lib/lang/es_server_config.lng    | 1 -
 interface/web/admin/lib/lang/fi_server_config.lng    | 1 -
 interface/web/admin/lib/lang/fr_server_config.lng    | 1 -
 interface/web/admin/lib/lang/hr_server_config.lng    | 1 -
 interface/web/admin/lib/lang/hu_server_config.lng    | 1 -
 interface/web/admin/lib/lang/id_server_config.lng    | 1 -
 interface/web/admin/lib/lang/it_server_config.lng    | 1 -
 interface/web/admin/lib/lang/ja_server_config.lng    | 1 -
 interface/web/admin/lib/lang/nl_server_config.lng    | 1 -
 interface/web/admin/lib/lang/pl_server_config.lng    | 1 -
 interface/web/admin/lib/lang/pt_server_config.lng    | 1 -
 interface/web/admin/lib/lang/ro_server_config.lng    | 1 -
 interface/web/admin/lib/lang/ru_server_config.lng    | 1 -
 interface/web/admin/lib/lang/se_server_config.lng    | 1 -
 interface/web/admin/lib/lang/sk_server_config.lng    | 1 -
 interface/web/admin/lib/lang/tr_server_config.lng    | 1 -
 interface/web/sites/lib/lang/ar_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/bg_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/br_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/ca_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/cz_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/de_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/dk_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/el_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/en_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/es_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/fi_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/fr_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/hr_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/hu_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/id_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/it_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/ja_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/nl_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/pl_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/pt_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/ro_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/ru_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/se_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/sk_web_vhost_domain.lng | 1 -
 interface/web/sites/lib/lang/tr_web_vhost_domain.lng | 1 -
 50 files changed, 50 deletions(-)

diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 0bcb361b14..e928d6e5ef 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 1025e777d5..6f3ec99b4d 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 977f55fbba..d6d266b3e0 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -275,7 +275,6 @@ $wb['network_filesystem_txt'] = 'Sistema de arquivos de rede';
 $wb['php_ini_check_minutes_txt'] = 'Verificar alterações no php.ini a cada X minutos';
 $wb['php_ini_check_minutes_error_empty'] = 'Por favor, insira um valor para verificação de alterações no php.ini.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = sem verificações';
-$wb['enable_spdy_txt'] = 'Tornar SPDY/HTTP2 disponível';
 $wb['web_settings_txt'] = 'Servidor web';
 $wb['xmpp_server_txt'] = 'Servidor xmpp';
 $wb['xmpp_use_ipv6_txt'] = 'Usar IPv6';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 9103370404..7bca04abdc 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -270,7 +270,6 @@ $wb['network_filesystem_txt'] = 'Network Filesystem';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 64fbafa532..b165a5261a 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -267,7 +267,6 @@ $wb['disabled_txt'] = 'Vypnuto';
 $wb['php_ini_check_minutes_txt'] = 'Provádět kontrolu změny obsahu souboru php.ini každých X minut';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Použít IPv6';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 3c5e305522..046fff1a1f 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -273,7 +273,6 @@ $wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung';
 $wb['php_handler_txt'] = 'Standard-PHP-Handler';
 $wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
-$wb['enable_spdy_txt'] = 'Stellt SPDY/HTTP2 zur Verfügung';
 $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['disabled_txt'] = 'Disabled';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index b3f2e2af2e..890b226a55 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -271,7 +271,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 6c70a3b1fc..0af00d8426 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 63e9ced76c..5531a88158 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -275,7 +275,6 @@ $wb['network_filesystem_txt'] = 'Network Filesystem';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 8ae8b42454..9a16ecb5a8 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -66,7 +66,6 @@ $wb['do_not_try_rescue_mongodb_txt'] = 'Deshabilitar monitorización de MongoDB'
 $wb['do_not_try_rescue_mysql_txt'] = 'Deshabilitar monitorización de MySQL';
 $wb['enable_ip_wildcard_txt'] = 'Activar comodín IP (*)';
 $wb['enable_sni_txt'] = 'Habilitar SNI';
-$wb['enable_spdy_txt'] = 'Hacer que SPDY/HTTP2 esté disponible';
 $wb['fastcgi_alias_error_empty'] = 'El alias de FastCGI está vacío.';
 $wb['fastcgi_alias_error_regex'] = 'El alias de fastcgi es inválido.';
 $wb['fastcgi_alias_txt'] = 'Alias de FastCGI';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 1a3f6b269b..e36832ebec 100644
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index cc57eb8f80..3a364fbaf3 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -270,7 +270,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index da67df4512..e6d484f34e 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index afb7ca1e67..588b61fcbe 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index b22dc5a4ab..8e5c2a8ad5 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 90a2638668..df92b25d58 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -270,7 +270,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index e03f768c17..b65a305d86 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 520e54c3b1..4c01f999b7 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 1beac9944d..5d156faaf2 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index b09c498aa0..480433a96a 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 7a7d3a052c..3602156437 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 301b3ef496..8e8f661eb6 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'Стойкость DKIM';
 $wb['php_ini_check_minutes_txt'] = 'Проверять изменения в PHP.ini файле каждые Х минут';
 $wb['php_ini_check_minutes_error_empty'] = 'Пожалуйста, укажите значение, как часто php.ini должен быть проверен на изменения.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = не проверять';
-$wb['enable_spdy_txt'] = 'Сделать SPDY/HTTP2 доступным';
 $wb['web_settings_txt'] = 'Web-сервер';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Использовать IPv6';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index e91b7e25cf..5d30941b7c 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 6c6e5b2acf..db96f8f259 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 6aede2732a..f6a127818a 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -274,7 +274,6 @@ $wb['network_filesystem_txt'] = 'AÄŸ Dosya Sistemi';
 $wb['php_ini_check_minutes_txt'] = 'Her X dakikada php.ini dosyasındaki değişiklikler denetlensin';
 $wb['php_ini_check_minutes_error_empty'] = 'php.ini dosyasındaki değişikliklerin kaç dakikada bir denetleneceğini yazın.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = denetim yapılmaz';
-$wb['enable_spdy_txt'] = 'SPDY/HTTP2 Kullanılsın';
 $wb['web_settings_txt'] = 'Web Sunucu';
 $wb['xmpp_server_txt'] = 'XMPP Sunucu';
 $wb['xmpp_use_ipv6_txt'] = 'IPv6 Kullanılsın';
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index f9c396616b..136829a7b2 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index 1ab6c244cc..8c48f035fe 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index a074b160a3..a3a14e335b 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -143,7 +143,6 @@ $wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracter
 $wb['subdomain_error_empty'] = 'O subdomínio está em branco ou possui caracteres inválidos.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['enable_spdy_txt'] = 'Habilitar SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Carregar detalhes do cliente';
 $wb['load_my_data_txt'] = 'Carregar detalhes do contato';
 $wb['reset_client_data_txt'] = 'Limpar dados';
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index d0a5a58bd3..cf25d81260 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index 250f98c890..ea814b0cb9 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -138,7 +138,6 @@ $wb['server_chosen_not_ok'] = 'Vybraný server není pro tento účet povolen.';
 $wb['subdomain_error_empty'] = 'Pole subdomény je prázdné nebo obsahuje neplatné znaky.';
 $wb['btn_save_txt'] = 'Uložit';
 $wb['btn_cancel_txt'] = 'Zrušit';
-$wb['enable_spdy_txt'] = 'Povolit SPDY / HTTP2';
 $wb['load_client_data_txt'] = 'Nahrát údaje z podrobností registrovaného klienta';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Obnovit údaje (resetovat)';
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index e4424799a6..449bcb588a 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -138,7 +138,6 @@ $wb['host_txt'] = 'Host';
 $wb['domain_error_wildcard'] = 'Wildcard-Subdomains sind nicht erlaubt.';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
-$wb['enable_spdy_txt'] = 'Aktiviere SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Kundendaten übernehmen';
 $wb['load_my_data_txt'] = 'Meine Kontaktdaten laden';
 $wb['reset_client_data_txt'] = 'Daten verwerfen';
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index d0a5a58bd3..cf25d81260 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index d4cb988a17..f39ce19a9b 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index 66bfd1ca19..497fcd1993 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -143,7 +143,6 @@ $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid c
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = "Save";
 $wb['btn_cancel_txt'] = "Cancel";
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index 504bea2aa6..3f60826008 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -138,7 +138,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index 460fbadff7..82fd44a56a 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 306a48aedc..5d817c611b 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid c
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index d883532397..4d70565928 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index 4d54b0a4c7..d8bb15537b 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 3aa65982cd..39df360c89 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index cc890d855e..807039ca6c 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index bfb5e8b137..288b9fab11 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index d67cde421a..27371eee35 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Opslaan';
 $wb['btn_cancel_txt'] = 'Annuleren';
-$wb['enable_spdy_txt'] = 'SPDY/HTTP2 inschakelen';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index c24c319fe5..f1e945df6f 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index dc6895c3e1..9eb927f000 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index 8e27105a6a..0127c4ee80 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index c9a2a0a4ba..827f149dd8 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'Выбранный сервер запрещён
 $wb['subdomain_error_empty'] = 'Поле поддомена пуст или содержит недопустимые символы.';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
-$wb['enable_spdy_txt'] = 'Включить SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Загрузить информацию о клиенте';
 $wb['load_my_data_txt'] = 'Загрузить мои контактные данные';
 $wb['reset_client_data_txt'] = 'Сброс данных';
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index ec509b333a..1bac2468c1 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index 0509b1a3bb..c3b680b2b4 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 071df396e4..2e004d87ef 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -142,7 +142,6 @@ $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karak
 $wb['subdomain_error_empty'] = 'Alt etki alanı boş ya da geçersiz karakterler içeriyor.';
 $wb['btn_save_txt'] = 'Kaydet';
 $wb['btn_cancel_txt'] = 'Ä°ptal';
-$wb['enable_spdy_txt'] = 'SPDY kullanılsın';
 $wb['load_client_data_txt'] = 'Müşteri Bilgilerini Yükle';
 $wb['load_my_data_txt'] = 'Profil Bilgilerimi Yükle';
 $wb['reset_client_data_txt'] = 'Verileri Sıfırla';
-- 
GitLab


From 593d9826d84fd8ffb673ed12537172c10a5973cf Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Fri, 19 Jun 2020 11:51:16 +0200
Subject: [PATCH 423/571] Remove SPDY/HTTP2 optional function(#5646)

---
 .../sql/incremental/upd_dev_collection.sql    |  3 +++
 install/sql/ispconfig3.sql                    |  1 -
 install/tpl/apache_apps.vhost.master          | 12 ++++-----
 install/tpl/server.ini.master                 |  1 -
 .../web/admin/form/server_config.tform.php    |  9 -------
 .../templates/server_config_web_edit.htm      | 22 +++++-----------
 .../web/sites/form/web_vhost_domain.tform.php |  9 -------
 .../sites/templates/web_vhost_domain_ssl.htm  | 16 +++---------
 interface/web/sites/web_vhost_domain_edit.php |  7 -----
 server/conf/apache_apps.vhost.master          | 14 +++-------
 server/conf/nginx_vhost.conf.master           | 26 +++++++++----------
 11 files changed, 35 insertions(+), 85 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 8e924a62b0..e446b60c9f 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -35,3 +35,6 @@ ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET
 
 -- add SSHFP and DNAME record
 ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME','DNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') NULL DEFAULT NULL AFTER `name`;
+
+-- remove SPDY option
+ALTER TABLE `web_domain` DROP COLUMN `enable_spdy`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index c54f0ac345..e0c3848aa5 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2070,7 +2070,6 @@ CREATE TABLE `web_domain` (
   `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
   `fastcgi_php_version` varchar(255) DEFAULT NULL,
   `proxy_directives` mediumtext,
-  `enable_spdy` ENUM('y','n') NULL DEFAULT 'n',
   `last_quota_notification` date NULL default NULL,
   `rewrite_rules` mediumtext,
   `added_date` date NULL DEFAULT NULL,
diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index 9cccf8d38e..a21f5394b0 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -10,15 +10,15 @@
 <VirtualHost {tmpl_var name='apps_vhost_ip'}:{tmpl_var name='apps_vhost_port'}>
   ServerAdmin webmaster@localhost
   {tmpl_var name='apps_vhost_servername'}
-  
+
   <FilesMatch "\.ph(p3?|tml)$">
     SetHandler None
   </FilesMatch>
-  
+
   <IfModule mod_headers.c>
 	RequestHeader unset Proxy early
   </IfModule>
-  
+
   {tmpl_if name="enable_spdy" op="==" value="y"}
   <IfModule spdy_module>
 	SpdyEnabled on
@@ -39,7 +39,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-  
+
   <IfModule mod_php7.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -54,7 +54,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-  
+
   <IfModule mod_fcgid.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     SuexecUserGroup ispapps ispapps
@@ -87,5 +87,3 @@
 
 
 </VirtualHost>
-
-
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 5edc09807c..c500fb0cc2 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -94,7 +94,6 @@ php_ini_path_apache=/etc/php5/apache2/php.ini
 php_ini_path_cgi=/etc/php5/cgi/php.ini
 check_apache_config=y
 enable_sni=y
-enable_spdy=n
 skip_le_check=n
 enable_ip_wildcard=y
 overtraffic_notify_admin=y
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 0d570f2e94..de2caf1750 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -1317,15 +1317,6 @@ $form["tabs"]['web'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
-		'enable_spdy' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default'  => 'y',
-			'value' => array (
-				0 => 'n',
-				1 => 'y'
-			)
-		),
 		'apps_vhost_enabled' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index f5f38affe7..64173549c9 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -163,7 +163,7 @@
 			<div class="form-group">
 				<label class="col-sm-3 control-label">{tmpl_var name='overquota_db_notify_client_txt'}</label>
 				<div class="col-sm-9">
-					{tmpl_var name='overquota_db_notify_client'}	
+					{tmpl_var name='overquota_db_notify_client'}
 				 </div>
 			</div>
             <div class="form-group">
@@ -197,14 +197,6 @@
                         {tmpl_var name='enable_sni'}
                     </div>
                 </div>
-				<div class="form-group">
-					<label class="col-sm-3 control-label">
-						<tmpl_var name="enable_spdy_txt">
-					</label>
-					<div class="col-sm-9">
-						<tmpl_var name="enable_spdy">
-					</div>
-				</div>
                 <div class="form-group">
                     <label for="CA_path" class="col-sm-3 control-label">{tmpl_var name='CA_path_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="CA_path" id="CA_path" value="{tmpl_var name='CA_path'}" autocomplete="new-password" class="form-control" /></div></div>
@@ -257,7 +249,7 @@
                 <div class="form-group">
                     <label for="connect_userid_to_webid_start" class="col-sm-3 control-label">{tmpl_var name='connect_userid_to_webid_start_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="connect_userid_to_webid_start" id="connect_userid_to_webid_start" value="{tmpl_var name='connect_userid_to_webid_start'}" class="form-control" /></div></div>
-            
+
 	  <!-- End content -->
 	  </div>
 	</div>
@@ -361,7 +353,7 @@
                 <div class="form-group">
                     <label for="apps_vhost_servername" class="col-sm-3 control-label">{tmpl_var name='apps_vhost_servername_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="apps_vhost_servername" id="apps_vhost_servername" value="{tmpl_var name='apps_vhost_servername'}" class="form-control" /></div></div>
-            
+
 	  <!-- End content -->
 	  </div>
 	</div>
@@ -389,15 +381,15 @@
                 <div class="form-group">
                     <label for="awstats_buildstaticpages_pl" class="col-sm-3 control-label">{tmpl_var name='awstats_buildstaticpages_pl_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="awstats_buildstaticpages_pl" id="awstats_buildstaticpages_pl" value="{tmpl_var name='awstats_buildstaticpages_pl'}" class="form-control" /></div></div>
-            
+
 	  <!-- End content -->
 	  </div>
 	</div>
   </div>
 </div>
-			
+
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
-            
+
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
@@ -410,7 +402,7 @@
         serverType = $(this).val();
         adjustForm();
     });
-    
+
     function adjustForm(){
         if(serverType == "nginx"){
             jQuery('.nginx').show();
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index beb952bfe6..7da71281cf 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -591,15 +591,6 @@ if($ssl_available) {
 				'default' => '',
 				'value'  => array('' => 'none_txt', 'save' => 'save_certificate_txt', 'create' => 'create_certificate_txt', 'del' => 'delete_certificate_txt')
 			),
-			'enable_spdy' => array (
-				'datatype' => 'VARCHAR',
-				'formtype' => 'CHECKBOX',
-				'default'  => 'n',
-				'value' => array (
-					0 => 'n',
-					1 => 'y'
-				)
-			),
 			//#################################
 			// END Datatable fields
 			//#################################
diff --git a/interface/web/sites/templates/web_vhost_domain_ssl.htm b/interface/web/sites/templates/web_vhost_domain_ssl.htm
index 8b3d986a02..d4ec6749e2 100644
--- a/interface/web/sites/templates/web_vhost_domain_ssl.htm
+++ b/interface/web/sites/templates/web_vhost_domain_ssl.htm
@@ -62,15 +62,7 @@
                     {tmpl_var name='ssl_action'}
                 </select></div>
             </div>
-			{tmpl_if name="is_spdy_enabled"}
-			<div class="form-group">
-				<label class="col-sm-3 control-label">{tmpl_var name='enable_spdy_txt'}</label>
-				<div class="col-sm-9">
-					{tmpl_var name="enable_spdy"}
-				</div>
-			</div>
-			{/tmpl_if}
-        
+
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
@@ -91,11 +83,11 @@
 	$('#load_data').click(function(){
 		loadClientData();
 	});
-	
-	
+
+
 	function loadClientData() {
         var web_id = $("input[name=id]").val();
-        
+
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {'web_id': web_id, 'type': "getclientssldata"}, function(data) {
 			$('#ssl_organisation').val(data['company_name']);
 			$('#ssl_locality').val(data['city']);
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 82da18ae1e..0d770476d1 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -840,7 +840,6 @@ class page_action extends tform_actions {
 
 		$app->tpl->setVar('vhostdomain_type', $this->_vhostdomain_type, true);
 
-		$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
 		$app->tpl->setVar('is_pagespeed_enabled', ($web_config['nginx_enable_pagespeed'] === 'y'));
 		$app->tpl->setVar("is_admin", $is_admin);
 
@@ -950,10 +949,8 @@ class page_action extends tform_actions {
 		}
 		$app->tpl->setLoop('folder_directive_snippets', $folder_directive_snippets);
 		if(is_array($web_config[$server_id])) {
-			$app->tpl->setVar('is_spdy_enabled', ($web_config[$server_id]['enable_spdy'] === 'y'));
 			$app->tpl->setVar('is_pagespeed_enabled', ($web_config[$server_id]['nginx_enable_pagespeed']));
 		} else {
-			$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
 			$app->tpl->setVar('is_pagespeed_enabled', ($web_config['nginx_enable_pagespeed']));
 		}
 
@@ -1325,10 +1322,6 @@ class page_action extends tform_actions {
 				$app->tform->errorMessage .= $app->tform->lng("invalid_custom_php_ini_settings_txt").'<br>';
 			}
 		}
-
-		if($web_config['enable_spdy'] === 'n') {
-			unset($app->tform->formDef["tabs"]['ssl']['fields']['enable_spdy']);
-		}
 	//	if($this->dataRecord["directive_snippets_id"] < 1) $this->dataRecord["enable_pagespeed"] = 'n';
 
 		//print_r($_POST['folder_directive_snippets']);
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index 94982a6dc1..fe73487fa0 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -14,17 +14,11 @@
   <FilesMatch "\.ph(p3?|tml)$">
     SetHandler None
   </FilesMatch>
-  
+
   <IfModule mod_headers.c>
 	RequestHeader unset Proxy early
   </IfModule>
 
-  {tmpl_if name="enable_spdy" op="==" value="y"}
-  <IfModule spdy_module>
-	SpdyEnabled on
-  </IfModule>
-  {/tmpl_if}
-
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -39,7 +33,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-  
+
   <IfModule mod_php7.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -54,7 +48,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-  
+
   <IfModule mod_fcgid.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     SuexecUserGroup ispapps ispapps
@@ -85,5 +79,3 @@
 {/tmpl_if}
 
 </VirtualHost>
-
-
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 978139174f..967a65ccd2 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -30,11 +30,11 @@ server {
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
 </tmpl_if>
-        
+
         server_name <tmpl_var name='domain'> <tmpl_var name='alias'>;
 
         root   <tmpl_var name='web_document_root_www'>;
-		
+
 <tmpl_if name='ssl_enabled'>
 <tmpl_if name='rewrite_to_https' op='==' value='y'>
         if ($scheme != "https") {
@@ -72,16 +72,16 @@ server {
         }
 </tmpl_if>
 </tmpl_loop>
-<tmpl_if name='use_proxy' op='!=' value='y'>		
+<tmpl_if name='use_proxy' op='!=' value='y'>
         index index.html index.htm index.php index.cgi index.pl index.xhtml;
-		
-<tmpl_if name='ssi' op='==' value='y'>		
+
+<tmpl_if name='ssi' op='==' value='y'>
         location ~ \.shtml$ {
             ssi on;
         }
 </tmpl_if>
 
-<tmpl_if name='errordocs'>		
+<tmpl_if name='errordocs'>
         error_page 400 /error/400.html;
         error_page 401 /error/401.html;
         error_page 403 /error/403.html;
@@ -124,7 +124,7 @@ server {
             internal;
         }
 </tmpl_if>
-		
+
 <tmpl_if name='logging' op='==' value='yes'>
         error_log /var/log/ispconfig/httpd/<tmpl_var name='domain'>/error.log;
         access_log /var/log/ispconfig/httpd/<tmpl_var name='domain'>/access.log combined;
@@ -149,7 +149,7 @@ server {
 			index index.html;
 			try_files $uri $uri/ =404;
         }
-		
+
         location = /favicon.ico {
             log_not_found off;
             access_log off;
@@ -162,7 +162,7 @@ server {
             log_not_found off;
             access_log off;
         }
-		
+
         location /stats/ {
             <tmpl_var name='web_document_root_www_proxy'>
             index index.html index.php;
@@ -325,13 +325,13 @@ server {
         location <tmpl_var name='htpasswd_location'> { ##merge##
                 auth_basic "Members Only";
                 auth_basic_user_file <tmpl_var name='htpasswd_path'>.htpasswd;
-				
+
                 location ~ \.php$ {
                     try_files <tmpl_var name='rnd_php_dummy_file'> @php;
                 }
         }
 </tmpl_loop>
-</tmpl_if>	
+</tmpl_if>
 }
 
 <tmpl_loop name="redirects">
@@ -340,7 +340,7 @@ server {
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:80;
 </tmpl_if>
-		
+
 <tmpl_if name='ssl_enabled'>
         listen <tmpl_var name='ip_address'>:443 ssl;
 <tmpl_if name='ipv6_enabled'>
@@ -349,7 +349,7 @@ server {
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
 </tmpl_if>
-        
+
         server_name <tmpl_var name='rewrite_domain'>;
 
 <tmpl_if name='alias_seo_redirects2'>
-- 
GitLab


From 9c1386e164056fa4c8c9d68345bdaff821ee1fa7 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Fri, 19 Jun 2020 17:31:13 +0200
Subject: [PATCH 424/571] Use nofail instead of deprecated nobootwait (#5131)

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 server/plugins-available/nginx_plugin.inc.php   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 06b2afce9a..5f697d060e 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -778,7 +778,7 @@ class apache2_plugin {
 			$app->system->chmod($data['new']['document_root'].'/'.$log_folder, 0755);
 			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 			//* add mountpoint to fstab
-			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nobootwait';
+			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nofail';
 			$fstab_line .= @($web_config['network_filesystem'] == 'y')?',_netdev    0 0':'    0 0';
 			$app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1);
 		}
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 68e295a97a..89ac35734d 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -619,7 +619,7 @@ class nginx_plugin {
 			$app->system->chmod($data['new']['document_root'].'/'.$log_folder, 0755);
 			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 			//* add mountpoint to fstab
-			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nobootwait';
+			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nofail';
 			$fstab_line .= @($web_config['network_filesystem'] == 'y')?',_netdev    0 0':'    0 0';
 			$app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1);
 		}
-- 
GitLab


From cb1342c8f338e7633be68485908058c0798fb968 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Fri, 19 Jun 2020 20:37:27 +0200
Subject: [PATCH 425/571] Update ru_system_config.lng

---
 interface/web/admin/lib/lang/ru_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index baed497b0e..b5ef1fba74 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Web-сервер по умолчанию';
 $wb['default_dnsserver_txt'] = 'DNS-сервер по умолчанию';
 $wb['default_slave_dnsserver_txt'] = 'Вторичный DNS-сервер по умолчанию';
 $wb['default_dbserver_txt'] = 'Сервер базы данных по умолчанию';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 3381004ce49faf48d0c67187c336cf82ab654444 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Fri, 19 Jun 2020 20:37:42 +0200
Subject: [PATCH 426/571] Update sk_system_config.lng

---
 interface/web/admin/lib/lang/sk_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index 90418e87d5..a8de64e7d0 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 30f00bd12977380bfac62ff11e4456fb312ccf8a Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Fri, 19 Jun 2020 20:37:52 +0200
Subject: [PATCH 427/571] Update ro_system_config.lng

---
 interface/web/admin/lib/lang/ro_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index 2a39a454e8..9740c7e290 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From 60b1864288f918c89cc1cc210ddc7ab8a22b4059 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Fri, 19 Jun 2020 20:38:01 +0200
Subject: [PATCH 428/571] Update pl_system_config.lng

---
 interface/web/admin/lib/lang/pl_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index a809251ec1..78abd19c38 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From e5c401a21d7bdd6e675b2c4152437b3c5ea2be70 Mon Sep 17 00:00:00 2001
From: Massimiliano <ufoonline@ufoonline.org>
Date: Fri, 19 Jun 2020 20:38:15 +0200
Subject: [PATCH 429/571] Update pt_system_config.lng

---
 interface/web/admin/lib/lang/pt_system_config.lng | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index 6fc26344c0..f5688291d8 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -81,6 +81,8 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
+$wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
 $wb['ca_name_txt'] = 'Name';
 $wb['ca_issue_txt'] = 'Issue';
 $wb['ca_wildcard_txt'] = 'Use Wildcard';
-- 
GitLab


From a9f328202240adaaf36d7c3c4045ea1b13cc7909 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 22 Jun 2020 23:10:07 +0200
Subject: [PATCH 430/571] Remove SPDY (#5646)

---
 server/conf/nginx_vhost.conf.master | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 967a65ccd2..24277f0485 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -12,7 +12,7 @@ server {
         listen [::]:<tmpl_var name='http_port'>;
 </tmpl_if>
 <tmpl_if name='ssl_enabled'>
-        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if};
 <tmpl_if name='use_proxy_protocol' op='==' value='y'>
 <tmpl_if name='proxy_protocol_https' op='>' value='0'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_https'> ssl proxy_protocol;
@@ -22,10 +22,10 @@ server {
 		# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
 		# ssl_prefer_server_ciphers on;
 <tmpl_if name='ipv6_enabled'>
-        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if};
 </tmpl_if>
 <tmpl_if name='ipv6_wildcard'>
-        listen [::]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+        listen [::]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if};
 </tmpl_if>
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
-- 
GitLab


From a40360dc53b325f4678b37d59e093133cc85563e Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 22 Jun 2020 23:23:58 +0200
Subject: [PATCH 431/571] Remove SPDY (#5646)

---
 install/tpl/apache_apps.vhost.master | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index a21f5394b0..14f0f10da2 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -19,12 +19,6 @@
 	RequestHeader unset Proxy early
   </IfModule>
 
-  {tmpl_if name="enable_spdy" op="==" value="y"}
-  <IfModule spdy_module>
-	SpdyEnabled on
-  </IfModule>
-  {/tmpl_if}
-
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
-- 
GitLab


From 07301fcf19718c6bbc52b61778c289815aa5a407 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 22 Jun 2020 23:42:55 +0200
Subject: [PATCH 432/571] Always enable HTTP2 if available (#5646)

---
 server/conf/nginx_vhost.conf.master             |  6 +++---
 server/conf/vhost.conf.master                   |  8 +++-----
 server/plugins-available/apache2_plugin.inc.php | 11 -----------
 server/plugins-available/nginx_plugin.inc.php   | 12 ------------
 4 files changed, 6 insertions(+), 31 deletions(-)

diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 24277f0485..ce245787a5 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -12,7 +12,7 @@ server {
         listen [::]:<tmpl_var name='http_port'>;
 </tmpl_if>
 <tmpl_if name='ssl_enabled'>
-        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if};
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl http2;
 <tmpl_if name='use_proxy_protocol' op='==' value='y'>
 <tmpl_if name='proxy_protocol_https' op='>' value='0'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_https'> ssl proxy_protocol;
@@ -22,10 +22,10 @@ server {
 		# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
 		# ssl_prefer_server_ciphers on;
 <tmpl_if name='ipv6_enabled'>
-        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if};
+        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl http2;
 </tmpl_if>
 <tmpl_if name='ipv6_wildcard'>
-        listen [::]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if};
+        listen [::]:<tmpl_var name='https_port'> ssl http2;
 </tmpl_if>
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 0612c13f7f..1857499299 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -50,12 +50,10 @@
 		ServerAdmin webmaster@<tmpl_var name='domain'>
 
 <tmpl_if name='ssl_enabled'>
-<tmpl_if name='enable_http2' op='==' value='y'>
 		Protocols h2 http/1.1
 		SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 		SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
 </tmpl_if>
-</tmpl_if>
 
 <tmpl_if name='logging' op='==' value='anon'>
 		ErrorLog "|/usr/local/ispconfig/server/scripts/vlogger -e -n -P -t \"error.log\" /var/log/ispconfig/httpd/<tmpl_var name='domain'>"
@@ -387,7 +385,7 @@
                 Action php-fcgi /php-fcgi virtual
 				Alias /php-fcgi {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'}
 <tmpl_if name='use_tcp'>
-                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization  -pass-header Content-Type    
+                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization  -pass-header Content-Type
 </tmpl_if>
 <tmpl_if name='use_socket'>
                 FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -socket <tmpl_var name='fpm_socket'> -pass-header Authorization  -pass-header Content-Type
@@ -513,9 +511,9 @@
 		RewriteCond %{REQUEST_URI} !^/php-fcgi/
 		RewriteCond %{REQUEST_URI} !^<tmpl_var name='rewrite_target'>
 </tmpl_if>
-		
+
 		RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'><tmpl_if name="rewrite_add_path" op="==" value="y">$1</tmpl_if>  <tmpl_var name='rewrite_type'>
-	
+
 </tmpl_loop>
 <tmpl_if name='ssl_enabled'>
 <tmpl_else>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 06b2afce9a..9a1f72f8b3 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1235,17 +1235,6 @@ class apache2_plugin {
 		// Use separate bundle file only for apache versions < 2.4.8
 		if(@is_file($bundle_file) && version_compare($app->system->getapacheversion(true), '2.4.8', '<')) $vhost_data['has_bundle_cert'] = 1;
 
-		// HTTP/2.0 ?
-		$vhost_data['enable_http2']  = 'n';
-		if($vhost_data['enable_spdy'] == 'y'){
-			// check if apache supports http_v2
-			exec("2>&1 apachectl -M | grep http2_module", $tmp_output, $tmp_retval);
-			if($tmp_retval == 0){
-				$vhost_data['enable_http2']  = 'y';
-			}
-			unset($tmp_output, $tmp_retval);
-		}
-
 		// Set SEO Redirect
 		if($data['new']['seo_redirect'] != ''){
 			$vhost_data['seo_redirect_enabled'] = 1;
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 68e295a97a..c2a2805701 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1517,18 +1517,6 @@ class nginx_plugin {
 			}
 		}
 
-		// http2 or spdy?
-		$vhost_data['enable_http2']  = 'n';
-		if($vhost_data['enable_spdy'] == 'y'){
-			// check if nginx support http_v2; if so, use that instead of spdy
-			exec("2>&1 nginx -V | tr -- - '\n' | grep http_v2_module", $tmp_output, $tmp_retval);
-			if($tmp_retval == 0){
-				$vhost_data['enable_http2']  = 'y';
-				$vhost_data['enable_spdy'] = 'n';
-			}
-			unset($tmp_output, $tmp_retval);
-		}
-
 		//proxy protocol settings
 		if($web_config['vhost_proxy_protocol_enabled'] == "y"){
 		    if((int)$web_config['vhost_proxy_protocol_https_port'] > 0) {
-- 
GitLab


From 7f7d1d27df8c4010b4d2038a606d26167fcae6c9 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 25 Jun 2020 16:40:07 +0200
Subject: [PATCH 433/571] Disable FAQ edit functionality in demo mode.

---
 interface/web/help/faq_delete.php          | 3 +++
 interface/web/help/faq_edit.php            | 3 +++
 interface/web/help/faq_sections_delete.php | 3 +++
 interface/web/help/faq_sections_edit.php   | 3 +++
 server/lib/classes/monitor_tools.inc.php   | 4 ++++
 5 files changed, 16 insertions(+)

diff --git a/interface/web/help/faq_delete.php b/interface/web/help/faq_delete.php
index c1faed60d9..161b1ce45b 100644
--- a/interface/web/help/faq_delete.php
+++ b/interface/web/help/faq_delete.php
@@ -11,6 +11,9 @@ require_once '../../lib/app.inc.php';
 // Check module permissions
 $app->auth->check_module_permissions('admin');
 
+// Do not allow FAQ editor in DEMO mode
+if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
+
 // Load the form
 $app->uses('tform_actions');
 $app->tform_actions->onDelete();
diff --git a/interface/web/help/faq_edit.php b/interface/web/help/faq_edit.php
index 397f5cccf4..e0f0380f8c 100644
--- a/interface/web/help/faq_edit.php
+++ b/interface/web/help/faq_edit.php
@@ -10,6 +10,9 @@ require_once '../../lib/app.inc.php';
 // Check the  module permissions and redirect if not allowed.
 $app->auth->check_module_permissions('admin');
 
+// Do not allow FAQ editor in DEMO mode
+if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
+
 // Load the templating and form classes
 $app->uses('tpl,tform,tform_actions');
 $app->load('tform_actions');
diff --git a/interface/web/help/faq_sections_delete.php b/interface/web/help/faq_sections_delete.php
index 865071ff25..76ff1c75a1 100644
--- a/interface/web/help/faq_sections_delete.php
+++ b/interface/web/help/faq_sections_delete.php
@@ -11,6 +11,9 @@ require_once '../../lib/app.inc.php';
 // Check module permissions
 $app->auth->check_module_permissions('admin');
 
+// Do not allow FAQ editor in DEMO mode
+if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
+
 // Load the form
 $app->uses('tform_actions');
 $app->tform_actions->onDelete();
diff --git a/interface/web/help/faq_sections_edit.php b/interface/web/help/faq_sections_edit.php
index f146db8605..56b3c77487 100644
--- a/interface/web/help/faq_sections_edit.php
+++ b/interface/web/help/faq_sections_edit.php
@@ -10,6 +10,9 @@ require_once '../../lib/app.inc.php';
 // Check the  module permissions and redirect if not allowed.
 $app->auth->check_module_permissions('admin');
 
+// Do not allow FAQ editor in DEMO mode
+if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
+
 // Load the templating and form classes
 $app->uses('tpl,tform,tform_actions');
 $app->load('tform_actions');
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index aba19df7a4..75e75c7f30 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -87,6 +87,10 @@ class monitor_tools {
 				$mainver = $ver;
 			}
 			switch ($mainver){
+			case "20.04":
+				$relname = "(Focal Fossa)";
+				$distconfid = 'ubuntu2004';
+				break;
 			case "18.04":
 				$relname = "(Bionic Beaver)";
 				$distconfid = 'ubuntu1804';
-- 
GitLab


From 0a1340a853b730c814edbb9c319cab718bd83fc2 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 25 Jun 2020 16:41:49 +0200
Subject: [PATCH 434/571] Implemented #5650 Add support for Ubuntu 20.04

---
 install/dist/conf/ubuntu2004.conf.php | 235 ++++++++++++++++++++++++++
 install/lib/install.lib.php           |   6 +-
 2 files changed, 240 insertions(+), 1 deletion(-)
 create mode 100644 install/dist/conf/ubuntu2004.conf.php

diff --git a/install/dist/conf/ubuntu2004.conf.php b/install/dist/conf/ubuntu2004.conf.php
new file mode 100644
index 0000000000..fe5a9b083b
--- /dev/null
+++ b/install/dist/conf/ubuntu2004.conf.php
@@ -0,0 +1,235 @@
+<?php
+
+/*
+Copyright (c) 2020, Till Brehm, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+//***  Ubuntu 18.04 default settings
+
+//* Main
+$conf['language'] = 'en';
+$conf['distname'] = 'ubuntu2004';
+$conf['hostname'] = 'server1.domain.tld'; // Full hostname
+$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
+$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
+$conf['server_id'] = 1;
+$conf['init_scripts'] = '/etc/init.d';
+$conf['runlevel'] = '/etc';
+$conf['shells'] = '/etc/shells';
+$conf['pam'] = '/etc/pam.d';
+
+//* Services provided by this server, this selection will be overridden by the expert mode
+$conf['services']['mail'] = true;
+$conf['services']['web'] = true;
+$conf['services']['dns'] = true;
+$conf['services']['file'] = true;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = true;
+$conf['services']['proxy'] = false;
+$conf['services']['firewall'] = false;
+
+//* MySQL
+$conf['mysql']['installed'] = false; // will be detected automatically during installation
+$conf['mysql']['init_script'] = 'mysql';
+$conf['mysql']['host'] = 'localhost';
+$conf['mysql']['ip'] = '127.0.0.1';
+$conf['mysql']['port'] = '3306';
+$conf['mysql']['database'] = 'dbispconfig';
+$conf['mysql']['admin_user'] = 'root';
+$conf['mysql']['admin_password'] = '';
+$conf['mysql']['charset'] = 'utf8';
+$conf['mysql']['ispconfig_user'] = 'ispconfig';
+$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
+$conf['mysql']['master_slave_setup'] = 'n';
+$conf['mysql']['master_host'] = '';
+$conf['mysql']['master_database'] = 'dbispconfig';
+$conf['mysql']['master_admin_user'] = 'root';
+$conf['mysql']['master_admin_password'] = '';
+$conf['mysql']['master_ispconfig_user'] = '';
+$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
+
+//* Apache
+$conf['apache']['installed'] = false; // will be detected automatically during installation
+$conf['apache']['user'] = 'www-data';
+$conf['apache']['group'] = 'www-data';
+$conf['apache']['init_script'] = 'apache2';
+$conf['apache']['version'] = '2.4';
+$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
+$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
+$conf['apache']['vhost_port'] = '8080';
+$conf['apache']['php_ini_path_apache'] = '/etc/php/7.4/apache2/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.4/cgi/php.ini';
+
+//* Website base settings
+$conf['web']['website_basedir'] = '/var/www';
+$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
+$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
+
+//* Apps base settings
+$conf['web']['apps_vhost_ip'] = '_default_';
+$conf['web']['apps_vhost_port'] = '8081';
+$conf['web']['apps_vhost_servername'] = '';
+$conf['web']['apps_vhost_user'] = 'ispapps';
+$conf['web']['apps_vhost_group'] = 'ispapps';
+
+//* Fastcgi
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.4/cgi/';
+$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
+$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
+
+//* Postfix
+$conf['postfix']['installed'] = false; // will be detected automatically during installation
+$conf['postfix']['config_dir'] = '/etc/postfix';
+$conf['postfix']['init_script'] = 'postfix';
+$conf['postfix']['user'] = 'postfix';
+$conf['postfix']['group'] = 'postfix';
+$conf['postfix']['vmail_userid'] = '5000';
+$conf['postfix']['vmail_username'] = 'vmail';
+$conf['postfix']['vmail_groupid'] = '5000';
+$conf['postfix']['vmail_groupname'] = 'vmail';
+$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
+
+//* Mailman
+$conf['mailman']['installed'] = false; // will be detected automatically during installation
+$conf['mailman']['config_dir'] = '/etc/mailman';
+$conf['mailman']['init_script'] = 'mailman';
+
+//* Getmail
+$conf['getmail']['installed'] = false; // will be detected automatically during installation
+$conf['getmail']['config_dir'] = '/etc/getmail';
+$conf['getmail']['program'] = '/usr/bin/getmail';
+
+//* Courier
+$conf['courier']['installed'] = false; // will be detected automatically during installation
+$conf['courier']['config_dir'] = '/etc/courier';
+$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
+$conf['courier']['courier-imap'] = 'courier-imap';
+$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
+$conf['courier']['courier-pop'] = 'courier-pop';
+$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
+
+//* Dovecot
+$conf['dovecot']['installed'] = false; // will be detected automatically during installation
+$conf['dovecot']['config_dir'] = '/etc/dovecot';
+$conf['dovecot']['init_script'] = 'dovecot';
+
+//* SASL
+$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
+$conf['saslauthd']['config'] = '/etc/default/saslauthd';
+$conf['saslauthd']['init_script'] = 'saslauthd';
+
+//* Amavisd
+$conf['amavis']['installed'] = false; // will be detected automatically during installation
+$conf['amavis']['config_dir'] = '/etc/amavis';
+$conf['amavis']['init_script'] = 'amavis';
+
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
+//* ClamAV
+$conf['clamav']['installed'] = false; // will be detected automatically during installation
+$conf['clamav']['init_script'] = 'clamav-daemon';
+
+//* Pureftpd
+$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
+$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
+$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
+
+//* MyDNS
+$conf['mydns']['installed'] = false; // will be detected automatically during installation
+$conf['mydns']['config_dir'] = '/etc';
+$conf['mydns']['init_script'] = 'mydns';
+
+//* PowerDNS
+$conf['powerdns']['installed'] = false; // will be detected automatically during installation
+$conf['powerdns']['database'] = 'powerdns';
+$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
+$conf['powerdns']['init_script'] = 'pdns';
+
+//* BIND DNS Server
+$conf['bind']['installed'] = false; // will be detected automatically during installation
+$conf['bind']['bind_user'] = 'root';
+$conf['bind']['bind_group'] = 'bind';
+$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
+$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
+$conf['bind']['init_script'] = 'bind9';
+
+//* Jailkit
+$conf['jailkit']['installed'] = false; // will be detected automatically during installation
+$conf['jailkit']['config_dir'] = '/etc/jailkit';
+$conf['jailkit']['jk_init'] = 'jk_init.ini';
+$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
+$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch /etc/localtime';
+$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
+
+//* Squid
+$conf['squid']['installed'] = false; // will be detected automatically during installation
+$conf['squid']['config_dir'] = '/etc/squid';
+$conf['squid']['init_script'] = 'squid';
+
+//* Nginx
+$conf['nginx']['installed'] = false; // will be detected automatically during installation
+$conf['nginx']['user'] = 'www-data';
+$conf['nginx']['group'] = 'www-data';
+$conf['nginx']['config_dir'] = '/etc/nginx';
+$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
+$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
+$conf['nginx']['init_script'] = 'nginx';
+$conf['nginx']['vhost_port'] = '8080';
+$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
+$conf['nginx']['php_fpm_init_script'] = 'php7.4-fpm';
+$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.4/fpm/php.ini';
+$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.4/fpm/pool.d';
+$conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.4-fpm';
+
+//* OpenVZ
+$conf['openvz']['installed'] = false;
+
+//*Bastille-Firwall
+$conf['bastille']['installed'] = false;
+$conf['bastille']['config_dir'] = '/etc/Bastille';
+
+//* vlogger
+$conf['vlogger']['config_dir'] = '/etc';
+
+//* cron
+$conf['cron']['init_script'] = 'cron';
+$conf['cron']['crontab_dir'] = '/etc/cron.d';
+$conf['cron']['wget'] = '/usr/bin/wget';
+
+//* Metronome XMPP
+$conf['xmpp']['installed'] = false;
+$conf['xmpp']['init_script'] = 'metronome';
+
+
+?>
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index ea4e563a6a..4aa4d196c7 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -95,6 +95,10 @@ function get_distname() {
 				$mainver = current($mainver).'.'.next($mainver);
 			}
 			switch ($mainver){
+			case "20.04":
+				$relname = "(Focal Fossa)";
+				$distconfid = 'ubuntu2004';
+				break;
 			case "18.04":
 				$relname = "(Bionic Beaver)";
 				$distconfid = 'ubuntu1804';
@@ -186,7 +190,7 @@ function get_distname() {
 				break;
 			default:
 				$relname = "UNKNOWN";
-				$distconfid = 'ubuntu1804';
+				$distconfid = 'ubuntu2004';
 			}
 			$distver = $ver.$lts." ".$relname;
 			swriteln("Operating System: ".$distname.' '.$distver."\n");
-- 
GitLab


From b7e017a5022000579b8c88222fd39498890dc40c Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 25 Jun 2020 19:24:29 +0200
Subject: [PATCH 435/571] Implemented #5651 Make ISPConfig code base compatible
 with PHP 7.4

---
 install/lib/install.lib.php                   |   3 +-
 install/lib/installer_base.lib.php            |   6 +-
 install/lib/mysql.lib.php                     |  11 +-
 interface/lib/classes/cmstree.inc.php         | 117 ------------------
 interface/lib/classes/db_mysql.inc.php        |   9 +-
 interface/lib/classes/simplepie.inc.php       |  46 +++----
 interface/lib/classes/system.inc.php          |   3 +-
 .../mailuser/mail_user_autoresponder_edit.php |   6 +
 interface/web/remote/monitor.php              |  69 +----------
 server/lib/classes/db_mysql.inc.php           |   8 +-
 server/lib/classes/file.inc.php               |  20 ---
 server/lib/classes/system.inc.php             |   2 +-
 12 files changed, 56 insertions(+), 244 deletions(-)
 delete mode 100644 interface/lib/classes/cmstree.inc.php

diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 4aa4d196c7..9312a8981a 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -691,8 +691,7 @@ function ini_to_array($ini) {
 
 
 //* Converts a config array to a string
-function array_to_ini($config_array = '') {
-	if($config_array == '') $config_array = $this->config;
+function array_to_ini($config_array) {
 	$content = '';
 	foreach($config_array as $section => $data) {
 		$content .= "[$section]\n";
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 5ca16cc674..bc9ed26e18 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -3228,6 +3228,9 @@ class installer_base {
 	 * @return bool
 	 */
 	protected function write_config_file($tConf, $tContents) {
+
+		$args = func_get_args();
+
 		// Backup config file before writing new contents and stat file
 		if ( is_file($tConf) ) {
 			$stat = exec('stat -c \'%a %U %G\' '.escapeshellarg($tConf), $output, $res);
@@ -3241,10 +3244,9 @@ class installer_base {
 		}
 
 		wf($tConf, $tContents); // write file
-
 		if (func_num_args() >= 4) // override rights and/or ownership
 			{
-			$args = func_get_args();
+			
 			$output = array_slice($args, 2);
 
 			switch (sizeof($output)) {
diff --git a/install/lib/mysql.lib.php b/install/lib/mysql.lib.php
index 2528100cc5..3e091d10b8 100644
--- a/install/lib/mysql.lib.php
+++ b/install/lib/mysql.lib.php
@@ -192,6 +192,8 @@ class db
 	}
 
 	private function _query($sQuery = '') {
+		
+		$aArgs = func_get_args();
 		$this->do_connect();
 
 		if ($sQuery == '') {
@@ -227,7 +229,6 @@ class db
 			}
 		} while($ok == false);
 
-		$aArgs = func_get_args();
 		$sQuery = call_user_func_array(array(&$this, '_build_query_string'), $aArgs);
 
 		$this->_iQueryId = mysqli_query($this->_iConnId, $sQuery);
@@ -283,9 +284,11 @@ class db
 	 * @return array result row or NULL if none found
 	 */
 	public function queryOneRecord($sQuery = '') {
-		if(!preg_match('/limit \d+\s*,\s*\d+$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
-
+		
 		$aArgs = func_get_args();
+		
+		if(!preg_match('/limit \d+\s*,\s*\d+$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
+		
 		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
 		if(!$oResult) return null;
 
@@ -956,7 +959,7 @@ class fakedb_result {
 
 		if(!is_array($this->aLimitedData)) return $aItem;
 
-		if(list($vKey, $aItem) = each($this->aLimitedData)) {
+		foreach($this->aLimitedData as $vKey => $aItem) {
 			if(!$aItem) $aItem = null;
 		}
 		return $aItem;
diff --git a/interface/lib/classes/cmstree.inc.php b/interface/lib/classes/cmstree.inc.php
deleted file mode 100644
index ead780ebf2..0000000000
--- a/interface/lib/classes/cmstree.inc.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?
-
-/*
-Copyright (c) 2007, Till Brehm, projektfarm Gmbh
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-class nodetree {
-    public $childs;
-    public $btext;
-    public $id;
-}
-
-class cmstree
-{
-    //TODO is this used ?? - pedro
-    //var $_table;
-
-    // $vars enth�lt:
-    // - parent     :id des Elternelementes
-    // - type       :n = node, i = item
-    // - doctype_id :id des Dokumententyps, wenn nicht im content Feld
-    // - title      :Titel des Eintrages
-    // - status     :1 = ok, d = delete
-    // - icon       :icon im node-tree, optional
-    // - modul      :modul des Eintrages, noch nicht verwendet
-    // - doc_id     :id des zugeh�rigen Dokumentes
-
-    public function node_list()
-    {
-        global $app;
-
-	    $nodes = $app->db->queryAllRecords('SELECT * FROM media_cat order by sort, name');
-
-        $optionlist = array();
-        $my0 = new nodetree();
-
-        foreach($nodes as $row) {
-
-            $id = 'my'.$row['media_cat_id'];
-            $btext = $row['name'];
-            $ordner = 'my'.$row['parent'];
-            if(!is_object($$id)) $$id = new nodetree();
-            $$id->btext = $btext;
-            $$id->id = $row['media_cat_id'];
-
-            if(is_object($$ordner)) {
-                 $$ordner->childs[] = &$$id;
-            } else {
-                $$ordner = new nodetree();
-                $$ordner->childs[] = &$$id;
-            }
-        }
-
-        $this->ptree($my0, 0, $optionlist);
-        return is_array($nodes) ?  $optionlist : false;
-    }
-
-    private function ptree($myobj, $tiefe, &$optionlist){
-     	global $_SESSION;
-		$tiefe += 1;
-		$id = $myobj->id;
-
-        if(is_array($myobj->childs) and ($_SESSION['s']['cat_open'][$id] == 1 or $tiefe <= 1)) {
-        	foreach($myobj->childs as $val) {
-				// kategorie 		=> str_repeat('- &nbsp;',$tiefe) . $val->btext,
-
-				// Ergebnisse Formatieren
-				/*
-				if($tiefe == 0) {
-					$kategorie = "<div class='mnuLevel".$tiefe."'><a href='index.php?pg=liste&kat=".$val->id."' class='navKategorien'>".$val->btext."</a></div>";
-				} elseif ($tiefe == 1) {
-					$kategorie = "<div class='mnuLevel".$tiefe."'><img src='images/listenpunkt.gif'> <a href='index.php?pg=liste&kat=".$val->id."' class='navKategorien'>".$val->btext."</a></div>";
-				} else {
-					$kategorie = "<div class='mnuLevel".$tiefe."'>&nbsp; <a href='index.php?pg=liste&kat=".$val->id."' class='navKategorien'>".str_repeat('- &nbsp;',$tiefe - 1) . $val->btext."</a></div>";
-				}
-				*/
-				$val_id = $val->id;
-				if($_SESSION['s']['cat_open'][$val_id] == 1) {
-					$kategorie = "<div class='mnuLevel".$tiefe."'>&nbsp; <a href='treenavi.php?kat=".$val->id."' class='navtext' onclick=\"parent.content.location='media_list.php?search_media_cat_id=".$val->id."'\" style=\"text-decoration: none;\"><img src='../themes/default/icons/folder.png' border='0'> ".$val->btext."</a></div>";
-				} else {
-					$kategorie = "<div class='mnuLevel".$tiefe."'>&nbsp; <a href='treenavi.php?kat=".$val->id."' class='navtext' onclick=\"parent.content.location='media_list.php?search_media_cat_id=".$val->id."'\" style=\"text-decoration: none;\"><img src='../themes/default/icons/folder_closed.png' border='0'> ".$val->btext."</a></div>";
-				}
-
-				$optionlist[] = array( 	media_cat 		=> $kategorie,
-                                   		media_cat_id 	=> $val->id,
-										depth			=> $tiefe);
-                $this->ptree($val, $tiefe, $optionlist);
-            }
-        }
-    }
-
-}
-?>
diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index 9c7269e568..5348e41708 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -258,6 +258,8 @@ class db
 
 	private function _query($sQuery = '') {
 		global $app;
+		
+		$aArgs = func_get_args();
 
 		if ($sQuery == '') {
 			$this->_sqlerror('Keine Anfrage angegeben / No query given');
@@ -297,7 +299,6 @@ class db
 			}
 		} while($ok == false);
 
-		$aArgs = func_get_args();
 		$sQuery = call_user_func_array(array(&$this, '_build_query_string'), $aArgs);
 		$this->securityScan($sQuery);
 		$this->_iQueryId = mysqli_query($this->_iConnId, $sQuery);
@@ -353,9 +354,11 @@ class db
 	 * @return array result row or NULL if none found
 	 */
 	public function queryOneRecord($sQuery = '') {
+		
+		$aArgs = func_get_args();
+		
 		if(!preg_match('/limit \d+\s*(,\s*\d+)?$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
 
-		$aArgs = func_get_args();
 		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
 		if(!$oResult) return null;
 
@@ -1300,7 +1303,7 @@ class fakedb_result {
 
 		if(!is_array($this->aLimitedData)) return $aItem;
 
-		if(list($vKey, $aItem) = each($this->aLimitedData)) {
+		foreach($this->aLimitedData as $vKey => $aItem) {
 			if(!$aItem) $aItem = null;
 		}
 		return $aItem;
diff --git a/interface/lib/classes/simplepie.inc.php b/interface/lib/classes/simplepie.inc.php
index 626e801e42..a2b80ed25b 100644
--- a/interface/lib/classes/simplepie.inc.php
+++ b/interface/lib/classes/simplepie.inc.php
@@ -735,7 +735,7 @@ class simplepie
 	 * @param string $cache_location This is where you want the cache to be stored.
 	 * @param int $cache_duration This is the number of seconds that you want to store the cache file for.
 	 */
-	function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null)
+	function __construct($feed_url = null, $cache_location = null, $cache_duration = null)
 	{
 		// Other objects, instances created here so we can set options on them
 		$this->sanitize = new SimplePie_Sanitize;
@@ -3165,7 +3165,7 @@ class SimplePie_Item
 	var $feed;
 	var $data = array();
 
-	function SimplePie_Item($feed, $data)
+	function __construct($feed, $data)
 	{
 		$this->feed = $feed;
 		$this->data = $data;
@@ -5789,7 +5789,7 @@ class SimplePie_Source
 	var $item;
 	var $data = array();
 
-	function SimplePie_Source($item, $data)
+	function __construct($item, $data)
 	{
 		$this->item = $item;
 		$this->data = $data;
@@ -6344,7 +6344,7 @@ class SimplePie_Author
 	var $email;
 
 	// Constructor, used to input the data
-	function SimplePie_Author($name = null, $link = null, $email = null)
+	function __construct($name = null, $link = null, $email = null)
 	{
 		$this->name = $name;
 		$this->link = $link;
@@ -6402,7 +6402,7 @@ class SimplePie_Category
 	var $label;
 
 	// Constructor, used to input the data
-	function SimplePie_Category($term = null, $scheme = null, $label = null)
+	function __construct($term = null, $scheme = null, $label = null)
 	{
 		$this->term = $term;
 		$this->scheme = $scheme;
@@ -6484,7 +6484,7 @@ class SimplePie_Enclosure
 	var $width;
 
 	// Constructor, used to input the data
-	function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
+	function __construct($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
 	{
 		$this->bitrate = $bitrate;
 		$this->captions = $captions;
@@ -7419,7 +7419,7 @@ class SimplePie_Caption
 	var $text;
 
 	// Constructor, used to input the data
-	function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
+	function __construct($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
 	{
 		$this->type = $type;
 		$this->lang = $lang;
@@ -7503,7 +7503,7 @@ class SimplePie_Credit
 	var $name;
 
 	// Constructor, used to input the data
-	function SimplePie_Credit($role = null, $scheme = null, $name = null)
+	function __construct($role = null, $scheme = null, $name = null)
 	{
 		$this->role = $role;
 		$this->scheme = $scheme;
@@ -7560,7 +7560,7 @@ class SimplePie_Copyright
 	var $label;
 
 	// Constructor, used to input the data
-	function SimplePie_Copyright($url = null, $label = null)
+	function __construct($url = null, $label = null)
 	{
 		$this->url = $url;
 		$this->label = $label;
@@ -7604,7 +7604,7 @@ class SimplePie_Rating
 	var $value;
 
 	// Constructor, used to input the data
-	function SimplePie_Rating($scheme = null, $value = null)
+	function __construct($scheme = null, $value = null)
 	{
 		$this->scheme = $scheme;
 		$this->value = $value;
@@ -7649,7 +7649,7 @@ class SimplePie_Restriction
 	var $value;
 
 	// Constructor, used to input the data
-	function SimplePie_Restriction($relationship = null, $type = null, $value = null)
+	function __construct($relationship = null, $type = null, $value = null)
 	{
 		$this->relationship = $relationship;
 		$this->type = $type;
@@ -7715,7 +7715,7 @@ class SimplePie_File
 	var $error;
 	var $method = SIMPLEPIE_FILE_SOURCE_NONE;
 
-	function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
+	function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
 	{
 		if (class_exists('idna_convert'))
 		{
@@ -8036,7 +8036,7 @@ class SimplePie_HTTP_Parser
 	 * @access public
 	 * @param string $data Input data
 	 */
-	function SimplePie_HTTP_Parser($data)
+	function __construct($data)
 	{
 		$this->data = $data;
 		$this->data_length = strlen($this->data);
@@ -8512,7 +8512,7 @@ class SimplePie_gzdecode
 	 *
 	 * @access public
 	 */
-	function SimplePie_gzdecode($data)
+	function __construct($data)
 	{
 		$this->compressed_data = $data;
 		$this->compressed_size = strlen($data);
@@ -8705,7 +8705,7 @@ class SimplePie_Cache
 	 *
 	 * @access private
 	 */
-	function SimplePie_Cache()
+	function __construct()
 	{
 		trigger_error('Please call SimplePie_Cache::create() instead of the constructor', E_USER_ERROR);
 	}
@@ -8743,7 +8743,7 @@ class SimplePie_Cache_File
 	var $extension;
 	var $name;
 
-	function SimplePie_Cache_File($location, $filename, $extension)
+	function __construct($location, $filename, $extension)
 	{
 		$this->location = $location;
 		$this->filename = $filename;
@@ -8905,7 +8905,7 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB
 	var $options;
 	var $id;
 
-	function SimplePie_Cache_MySQL($mysql_location, $name, $extension)
+	function __construct($mysql_location, $name, $extension)
 	{
 		$host = $mysql_location->get_host();
 		if (SimplePie_Misc::stripos($host, 'unix(') === 0 && substr($host, -1) === ')')
@@ -11532,7 +11532,7 @@ class SimplePie_Decode_HTML_Entities
 	 * @access public
 	 * @param string $data Input data
 	 */
-	function SimplePie_Decode_HTML_Entities($data)
+	function __construct($data)
 	{
 		$this->data = $data;
 	}
@@ -11795,7 +11795,7 @@ class SimplePie_IRI
 	 * @param string $iri
 	 * @return SimplePie_IRI
 	 */
-	function SimplePie_IRI($iri)
+	function __construct($iri)
 	{
 		$iri = (string) $iri;
 		if ($iri !== '')
@@ -13184,7 +13184,7 @@ class SimplePie_Parse_Date
 	 *
 	 * @access private
 	 */
-	function SimplePie_Parse_Date()
+	function __construct()
 	{
 		$this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')';
 		$this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')';
@@ -13658,7 +13658,7 @@ class SimplePie_Content_Type_Sniffer
 	 * @access public
 	 * @param SimplePie_Content_Type_Sniffer $file Input file
 	 */
-	function SimplePie_Content_Type_Sniffer($file)
+	function __construct($file)
 	{
 		$this->file = $file;
 	}
@@ -13990,7 +13990,7 @@ class SimplePie_XML_Declaration_Parser
 	 * @access public
 	 * @param string $data Input data
 	 */
-	function SimplePie_XML_Declaration_Parser($data)
+	function __construct($data)
 	{
 		$this->data = $data;
 		$this->data_length = strlen($this->data);
@@ -14259,7 +14259,7 @@ class SimplePie_Locator
 	var $max_checked_feeds = 10;
 	var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer';
 
-	function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10, $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer')
+	function __construct(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10, $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer')
 	{
 		$this->file =& $file;
 		$this->file_class = $file_class;
diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index b6d3479694..89507ea68c 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -65,12 +65,13 @@ class system {
 	
 	public function exec_safe($cmd) {
 		$arg_count = func_num_args();
+		$args = func_get_args();
+		
 		if($arg_count != substr_count($cmd, '?') + 1) {
 			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
 			return false;
 		}
 		if($arg_count > 1) {
-			$args = func_get_args();
 			array_shift($args);
 			
 			$pos = 0;
diff --git a/interface/web/mailuser/mail_user_autoresponder_edit.php b/interface/web/mailuser/mail_user_autoresponder_edit.php
index d93151bf24..827a585e50 100644
--- a/interface/web/mailuser/mail_user_autoresponder_edit.php
+++ b/interface/web/mailuser/mail_user_autoresponder_edit.php
@@ -66,6 +66,12 @@ class page_action extends tform_actions {
 		if (!isset($_POST['autoresponder']) && array_key_exists('autoresponder_start_date', $_POST)) {
 			$this->dataRecord['autoresponder_start_date'] = array_map(create_function('$item', 'return 0;'), $this->dataRecord['autoresponder_start_date']);
 			$this->dataRecord['autoresponder_end_date'] = array_map(create_function('$item', 'return 0;'), $this->dataRecord['autoresponder_end_date']);
+			
+			/* To be used when we go to PHP 7.x as min PHP version
+			$this->dataRecord['autoresponder_start_date'] = array_map( function ('$item') { 'return 0;' }, $this->dataRecord['autoresponder_start_date']);
+			$this->dataRecord['autoresponder_end_date'] = array_map( function ('$item') { 'return 0;' }, $this->dataRecord['autoresponder_end_date']);
+			*/
+			
 		}
 
 		parent::onSubmit();
diff --git a/interface/web/remote/monitor.php b/interface/web/remote/monitor.php
index 132bcf29a5..914a09382e 100644
--- a/interface/web/remote/monitor.php
+++ b/interface/web/remote/monitor.php
@@ -59,73 +59,6 @@ if($token == '' or $secret == '' or $token != $secret) {
 	}
 }
 $out['type'] = $type;
-
-function __json_encode($data) {
-	if( is_array($data) || is_object($data) ) {
-		$islist = is_array($data) && ( empty($data) || array_keys($data) === range(0, count($data)-1) );
-
-		if( $islist ) {
-			$json = '[' . implode(',', array_map('__json_encode', $data) ) . ']';
-		} else {
-			$items = array();
-			foreach( $data as $key => $value ) {
-				$items[] = __json_encode("$key") . ':' . __json_encode($value);
-			}
-			$json = '{' . implode(',', $items) . '}';
-		}
-	} elseif( is_string($data) ) {
-		// Escape non-printable or Non-ASCII characters.
-		// I also put the \\ character first, as suggested in comments on the 'addcslashes' page.
-		$string = '"' . addcslashes($data, "\\\"\n\r\t/" . chr(8) . chr(12)) . '"';
-		$json    = '';
-		$len    = strlen($string);
-		// Convert UTF-8 to Hexadecimal Codepoints.
-		for( $i = 0; $i < $len; $i++ ) {
-
-			$char = $string[$i];
-			$c1 = ord($char);
-
-			// Single byte;
-			if( $c1 <128 ) {
-				$json .= ($c1 > 31) ? $char : sprintf("\\u%04x", $c1);
-				continue;
-			}
-
-			// Double byte
-			$c2 = ord($string[++$i]);
-			if ( ($c1 & 32) === 0 ) {
-				$json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128);
-				continue;
-			}
-
-			// Triple
-			$c3 = ord($string[++$i]);
-			if( ($c1 & 16) === 0 ) {
-				$json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128) << 6) + ($c3 - 128));
-				continue;
-			}
-
-			// Quadruple
-			$c4 = ord($string[++$i]);
-			if( ($c1 & 8 ) === 0 ) {
-				$u = (($c1 & 15) << 2) + (($c2>>4) & 3) - 1;
-
-				$w1 = (54<<10) + ($u<<6) + (($c2 & 15) << 2) + (($c3>>4) & 3);
-				$w2 = (55<<10) + (($c3 & 15)<<6) + ($c4-128);
-				$json .= sprintf("\\u%04x\\u%04x", $w1, $w2);
-			}
-		}
-	} else {
-		// int, floats, bools, null
-		$json = strtolower(var_export( $data, true ));
-	}
-	return $json;
-}
-
-if(function_exists('json_encode')) { // PHP >= 5.2
-	echo json_encode($out);
-} else { // PHP < 5.2
-	echo __json_encode($out);
-}
+echo json_encode($out);
 exit;
 ?>
diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 4bbc84e3f9..2bccf1ecb7 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -258,6 +258,8 @@ class db
 
 	private function _query($sQuery = '') {
 		global $app;
+		
+		$aArgs = func_get_args();
 
 		if ($sQuery == '') {
 			$this->_sqlerror('Keine Anfrage angegeben / No query given');
@@ -297,7 +299,6 @@ class db
 			}
 		} while($ok == false);
 
-		$aArgs = func_get_args();
 		$sQuery = call_user_func_array(array(&$this, '_build_query_string'), $aArgs);
 		$this->securityScan($sQuery);
 		$this->_iQueryId = mysqli_query($this->_iConnId, $sQuery);
@@ -353,9 +354,10 @@ class db
 	 * @return array result row or NULL if none found
 	 */
 	public function queryOneRecord($sQuery = '') {
-		if(!preg_match('/limit \d+\s*(,\s*\d+)?$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
 
 		$aArgs = func_get_args();
+		if(!preg_match('/limit \d+\s*(,\s*\d+)?$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
+
 		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
 		if(!$oResult) return null;
 
@@ -1300,7 +1302,7 @@ class fakedb_result {
 
 		if(!is_array($this->aLimitedData)) return $aItem;
 
-		if(list($vKey, $aItem) = each($this->aLimitedData)) {
+		foreach($this->aLimitedData as $vKey => $aItem) {
 			if(!$aItem) $aItem = null;
 		}
 		return $aItem;
diff --git a/server/lib/classes/file.inc.php b/server/lib/classes/file.inc.php
index eadb38b789..28757d0dd5 100644
--- a/server/lib/classes/file.inc.php
+++ b/server/lib/classes/file.inc.php
@@ -158,26 +158,6 @@ class file{
 		return $ret_val;
 	}
 
-	function edit_dist($var, $val){
-		global $$var;
-		$files = array('/root/ispconfig/dist.inc.php');
-		foreach($files as $file){
-			if(is_file($file)){
-				$file_content = $this->unix_nl($this->rf($file));
-				$lines = explode("\n", $file_content);
-				for($i=0;$i<sizeof($lines);$i++){
-					$parts = explode('=', $lines[$i]);
-					if($parts[0] == $var || $parts[0] == '$'.$var.' '){
-						$parts[1] = str_replace($$var, $val, $parts[1]);
-					}
-					$lines[$i] = implode('=', $parts);
-				}
-				$file_content = implode("\n", $lines);
-				$this->wf($file, $file_content);
-			}
-		}
-	}
-
 	function getDirectoryListing($dirname, $sortorder = 'a', $show_subdirs = 0, $show_subdirfiles = 0, $exts = '', $ext_save = 1){
 		// This function will return an array with filenames based on the criteria you can set in the variables
 		// @sortorder : a for ascending (the standard) or d for descending (you can use the "r" for reverse as well, works the same)
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 551e4e4853..078c225c10 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -2121,13 +2121,13 @@ class system{
 	public function exec_safe($cmd) {
 		global $app;
 		
+		$args = func_get_args();
 		$arg_count = func_num_args();
 		if($arg_count != substr_count($cmd, '?') + 1) {
 			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
 			return false;
 		}
 		if($arg_count > 1) {
-			$args = func_get_args();
 			array_shift($args);
 
 			$pos = 0;
-- 
GitLab


From 2c43ed30f81d25807bbcbbbcc3a3904262dcd5c6 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 25 Jun 2020 19:51:06 +0200
Subject: [PATCH 436/571] Remove deprectaed get_magic_quotes_runtime() from
 config.inc.php.master

---
 install/tpl/config.inc.php.master | 1 -
 1 file changed, 1 deletion(-)

diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master
index 02a7b2f65c..8cc70a598d 100644
--- a/install/tpl/config.inc.php.master
+++ b/install/tpl/config.inc.php.master
@@ -45,7 +45,6 @@ if( !empty($_SERVER['DOCUMENT_ROOT']) ) {
 }
 
 //** Set a few php.ini values
-if(get_magic_quotes_runtime()) set_magic_quotes_runtime(false);
 if(isset($app)) unset($app);
 if(isset($conf)) unset($conf);
 
-- 
GitLab


From d3983e82f2d2ae408068bb41e79653b43fb41e56 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sun, 28 Jun 2020 14:05:54 +0200
Subject: [PATCH 437/571] Change locked string (#4714)

---
 interface/web/client/lib/lang/ar_client.lng | 2 +-
 interface/web/client/lib/lang/bg_client.lng | 2 +-
 interface/web/client/lib/lang/br_client.lng | 2 +-
 interface/web/client/lib/lang/ca_client.lng | 2 +-
 interface/web/client/lib/lang/cz_client.lng | 2 +-
 interface/web/client/lib/lang/de_client.lng | 2 +-
 interface/web/client/lib/lang/dk_client.lng | 2 +-
 interface/web/client/lib/lang/el_client.lng | 2 +-
 interface/web/client/lib/lang/en_client.lng | 2 +-
 interface/web/client/lib/lang/es_client.lng | 2 +-
 interface/web/client/lib/lang/fi_client.lng | 2 +-
 interface/web/client/lib/lang/fr_client.lng | 2 +-
 interface/web/client/lib/lang/hr_client.lng | 2 +-
 interface/web/client/lib/lang/hu_client.lng | 2 +-
 interface/web/client/lib/lang/id_client.lng | 2 +-
 interface/web/client/lib/lang/it_client.lng | 2 +-
 interface/web/client/lib/lang/ja_client.lng | 2 +-
 interface/web/client/lib/lang/nl_client.lng | 2 +-
 interface/web/client/lib/lang/pl_client.lng | 2 +-
 interface/web/client/lib/lang/pt_client.lng | 2 +-
 interface/web/client/lib/lang/ro_client.lng | 2 +-
 interface/web/client/lib/lang/ru_client.lng | 2 +-
 interface/web/client/lib/lang/se_client.lng | 2 +-
 interface/web/client/lib/lang/sk_client.lng | 2 +-
 interface/web/client/lib/lang/tr_client.lng | 2 +-
 25 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/interface/web/client/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng
index deefcd8ade..2fcd02606f 100644
--- a/interface/web/client/lib/lang/ar_client.lng
+++ b/interface/web/client/lib/lang/ar_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/bg_client.lng b/interface/web/client/lib/lang/bg_client.lng
index 8b024de0eb..dcaba08f8b 100644
--- a/interface/web/client/lib/lang/bg_client.lng
+++ b/interface/web/client/lib/lang/bg_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng
index ba26b61513..46ad85698b 100644
--- a/interface/web/client/lib/lang/br_client.lng
+++ b/interface/web/client/lib/lang/br_client.lng
@@ -150,7 +150,7 @@ $wb['aps_limits_txt'] = 'Limites de instalações de APPs';
 $wb['limit_aps_txt'] = 'Limite de instâncias de APPs';
 $wb['limit_aps_error_notint'] = 'O limite de instâncias de APPs deve ser um número.';
 $wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
-$wb['locked_txt'] = 'Bloqueado (desabilita todos os sites, etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Cancelado (desabilita o acesso do cliente.)';
 $wb['gender_txt'] = 'Título';
 $wb['gender_m_txt'] = 'Sr.';
diff --git a/interface/web/client/lib/lang/ca_client.lng b/interface/web/client/lib/lang/ca_client.lng
index 1797c17cd7..e4cc2f2dbe 100644
--- a/interface/web/client/lib/lang/ca_client.lng
+++ b/interface/web/client/lib/lang/ca_client.lng
@@ -144,7 +144,7 @@ $wb['aps_limits_txt'] = 'Nombre max d\'Installeur APS';
 $wb['limit_aps_txt'] = 'Nombre max d\'instances APS';
 $wb['limit_aps_error_notint'] = 'La limite d\'instances APS doit être un nombre';
 $wb['default_slave_dnsserver_txt'] = 'Serveur DNS secondaire par défaut';
-$wb['locked_txt'] = 'Vérouillé (Désactive web, etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (Désactive connexion Ispconfig)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/cz_client.lng b/interface/web/client/lib/lang/cz_client.lng
index 355611f50e..5d26a51cda 100644
--- a/interface/web/client/lib/lang/cz_client.lng
+++ b/interface/web/client/lib/lang/cz_client.lng
@@ -144,7 +144,7 @@ $wb['aps_limits_txt'] = 'APS limity instalátoru';
 $wb['limit_aps_txt'] = 'Max. počet APS instalací';
 $wb['limit_aps_error_notint'] = 'Limit pro APS instalace musí být číslo.';
 $wb['default_slave_dnsserver_txt'] = 'Výchozí sekundární DNS server';
-$wb['locked_txt'] = 'Zamčeno (zakáže všechny weby atd.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Zrušeno (zakáže přihlášení klienta)';
 $wb['gender_txt'] = 'Oslovení';
 $wb['gender_m_txt'] = 'Pan';
diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng
index 58e390c9f2..ca22ce638c 100644
--- a/interface/web/client/lib/lang/de_client.lng
+++ b/interface/web/client/lib/lang/de_client.lng
@@ -147,7 +147,7 @@ $wb['aps_limits_txt'] = 'APS Installationsassistent Limits';
 $wb['limit_aps_txt'] = 'Max. Anzahl an APS-Instanzen';
 $wb['limit_aps_error_notint'] = 'Das APS Instanzen Limit muss eine Zahl sein.';
 $wb['default_slave_dnsserver_txt'] = 'Standard Secondary DNS Server';
-$wb['locked_txt'] = 'Gesperrt (deaktiviert alle Webs, etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Gek&uuml;ndigt (verhindert Kundenlogin)';
 $wb['gender_txt'] = 'Anrede';
 $wb['gender_m_txt'] = 'Herr';
diff --git a/interface/web/client/lib/lang/dk_client.lng b/interface/web/client/lib/lang/dk_client.lng
index c0e8734912..b1e549dd91 100644
--- a/interface/web/client/lib/lang/dk_client.lng
+++ b/interface/web/client/lib/lang/dk_client.lng
@@ -144,7 +144,7 @@ $wb['aps_limits_txt'] = 'APS Installer Begrænsninger';
 $wb['limit_aps_txt'] = 'Max. antal af APS forekomster';
 $wb['limit_aps_error_notint'] = 'APS forekomster grænse skal være et tal.';
 $wb['default_slave_dnsserver_txt'] = 'Standard Sekundær DNS Server';
-$wb['locked_txt'] = 'LÃ¥st (deaktiverer alle webs mv)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Annulleret (deaktivere kunde log ind)';
 $wb['gender_txt'] = 'Titel';
 $wb['gender_m_txt'] = 'Hr.';
diff --git a/interface/web/client/lib/lang/el_client.lng b/interface/web/client/lib/lang/el_client.lng
index 59d50b3c85..51f75bff05 100644
--- a/interface/web/client/lib/lang/el_client.lng
+++ b/interface/web/client/lib/lang/el_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng
index 9b114d4e64..797161d791 100644
--- a/interface/web/client/lib/lang/en_client.lng
+++ b/interface/web/client/lib/lang/en_client.lng
@@ -151,7 +151,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb["default_slave_dnsserver_txt"] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng
index 2595853096..eae85315b6 100644
--- a/interface/web/client/lib/lang/es_client.lng
+++ b/interface/web/client/lib/lang/es_client.lng
@@ -146,7 +146,7 @@ $wb['limit_xmpp_status_txt'] = 'Host de estado disponible';
 $wb['limit_xmpp_user_error_notint'] = 'El límite de usuarios XMPP debe ser un número.';
 $wb['limit_xmpp_user_txt'] = 'Número máximo de cuentas XMPP';
 $wb['limit_xmpp_vjud_txt'] = 'Directorio de usuarios VJUD disponible';
-$wb['locked_txt'] = 'Bloqueado (desactivar sitios web etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['mail_servers_placeholder'] = 'Seleccionar servidores de correo';
 $wb['mail_servers_txt'] = 'Servidores de correo';
 $wb['mail_servers_used'] = 'El servidor que está intentando borrar de este cliente está siendo utilizado como servidor de correo. Por favor asegúrese de que este servidor no esté siendo utilizado por este cliente antes de borrarlo.';
diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng
index 65893189b3..751b7e7836 100644
--- a/interface/web/client/lib/lang/fi_client.lng
+++ b/interface/web/client/lib/lang/fi_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng
index 10f212e0f1..c3de724d93 100644
--- a/interface/web/client/lib/lang/fr_client.lng
+++ b/interface/web/client/lib/lang/fr_client.lng
@@ -144,7 +144,7 @@ $wb['aps_limits_txt'] = 'Nombre max d’Installeur APS';
 $wb['limit_aps_txt'] = 'Nombre max d’instances APS';
 $wb['limit_aps_error_notint'] = 'La limite d’instances APS doit être un nombre';
 $wb['default_slave_dnsserver_txt'] = 'Serveur DNS secondaire par défaut';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Titre';
 $wb['gender_m_txt'] = 'Monsieur';
diff --git a/interface/web/client/lib/lang/hr_client.lng b/interface/web/client/lib/lang/hr_client.lng
index 9975861bde..4d16bac0cb 100644
--- a/interface/web/client/lib/lang/hr_client.lng
+++ b/interface/web/client/lib/lang/hr_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/hu_client.lng b/interface/web/client/lib/lang/hu_client.lng
index b74881e9bf..cd491f7b00 100644
--- a/interface/web/client/lib/lang/hu_client.lng
+++ b/interface/web/client/lib/lang/hu_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/id_client.lng b/interface/web/client/lib/lang/id_client.lng
index b9cec3c1e6..2b3c00bfe3 100644
--- a/interface/web/client/lib/lang/id_client.lng
+++ b/interface/web/client/lib/lang/id_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng
index 09c93513ae..8491d54f20 100644
--- a/interface/web/client/lib/lang/it_client.lng
+++ b/interface/web/client/lib/lang/it_client.lng
@@ -144,7 +144,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Bloccato (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Cancellato(disables client login)';
 $wb['gender_txt'] = 'Titolo';
 $wb['gender_m_txt'] = 'Sig.';
diff --git a/interface/web/client/lib/lang/ja_client.lng b/interface/web/client/lib/lang/ja_client.lng
index 41023dd0a6..cb1a7c2664 100644
--- a/interface/web/client/lib/lang/ja_client.lng
+++ b/interface/web/client/lib/lang/ja_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng
index 4d6f11ca51..6dfc1a8525 100644
--- a/interface/web/client/lib/lang/nl_client.lng
+++ b/interface/web/client/lib/lang/nl_client.lng
@@ -147,7 +147,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/pl_client.lng b/interface/web/client/lib/lang/pl_client.lng
index 5fcf7a26d4..89fafa6776 100644
--- a/interface/web/client/lib/lang/pl_client.lng
+++ b/interface/web/client/lib/lang/pl_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'Limity Instalatora APS';
 $wb['limit_aps_txt'] = 'Maks. liczba instalacji APS';
 $wb['limit_aps_error_notint'] = 'Limit instalacji APS musi być liczbą';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/pt_client.lng b/interface/web/client/lib/lang/pt_client.lng
index a3f98566ee..cccd950d3f 100644
--- a/interface/web/client/lib/lang/pt_client.lng
+++ b/interface/web/client/lib/lang/pt_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/ro_client.lng b/interface/web/client/lib/lang/ro_client.lng
index 0b7c552b37..6dd6da9dad 100644
--- a/interface/web/client/lib/lang/ro_client.lng
+++ b/interface/web/client/lib/lang/ro_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng
index 94d0bb6a0d..080512f5b0 100644
--- a/interface/web/client/lib/lang/ru_client.lng
+++ b/interface/web/client/lib/lang/ru_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'Лимиты Установщика APS';
 $wb['limit_aps_txt'] = 'Макс. количество экземпляров APS';
 $wb['limit_aps_error_notint'] = 'Лимит экземпляров APS должен быть числом.';
 $wb['default_slave_dnsserver_txt'] = 'Вторичный DNS-сервер по умолчанию';
-$wb['locked_txt'] = 'Заблокировано (Отключены все web-сайты и т.д.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Отменено (отключен вход для клиентов)';
 $wb['gender_txt'] = 'Обращение';
 $wb['gender_m_txt'] = 'Г-н.';
diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng
index fb1151ed8e..6e0f025f90 100644
--- a/interface/web/client/lib/lang/se_client.lng
+++ b/interface/web/client/lib/lang/se_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Förvald sekundär DNS-server';
-$wb['locked_txt'] = 'LÃ¥st (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Uppsagd (disables client login)';
 $wb['gender_txt'] = 'Titel';
 $wb['gender_m_txt'] = 'Herr';
diff --git a/interface/web/client/lib/lang/sk_client.lng b/interface/web/client/lib/lang/sk_client.lng
index dcd291bc53..b215eb2b32 100644
--- a/interface/web/client/lib/lang/sk_client.lng
+++ b/interface/web/client/lib/lang/sk_client.lng
@@ -146,7 +146,7 @@ $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables all webs etc.)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'Canceled (disables client login)';
 $wb['gender_txt'] = 'Title';
 $wb['gender_m_txt'] = 'Mr.';
diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng
index 9e8e6b9be3..d87fe26da9 100644
--- a/interface/web/client/lib/lang/tr_client.lng
+++ b/interface/web/client/lib/lang/tr_client.lng
@@ -151,7 +151,7 @@ $wb['aps_limits_txt'] = 'APS Yükleyici Sınırları';
 $wb['limit_aps_txt'] = 'En Fazla APS Kopyası Sayısı';
 $wb['limit_aps_error_notint'] = 'APS kopya sayısı sınırı bir sayı olmalıdır.';
 $wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
-$wb['locked_txt'] = 'Kilitli<br/>(tüm web vb. devre dışı)';
+$wb['locked_txt'] = 'Locked (disables everything except DNS)';
 $wb['canceled_txt'] = 'İptal<br/>(müşteri oturumu devre dışı)';
 $wb['gender_txt'] = 'Unvan';
 $wb['gender_m_txt'] = 'Bay';
-- 
GitLab


From e5c0111bcddd29620a2e910e4f590b8c9df799a9 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 29 Jun 2020 10:06:13 -0600
Subject: [PATCH 438/571] jk_init.ini: remove duplicate includesections from
 [openvpn] jail

---
 install/tpl/jk_init.ini.master | 1 -
 1 file changed, 1 deletion(-)

diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master
index 469e655a31..6d064d8220 100644
--- a/install/tpl/jk_init.ini.master
+++ b/install/tpl/jk_init.ini.master
@@ -112,7 +112,6 @@ comment = jail for the openvpn daemon
 executables = /usr/sbin/openvpn
 users = root,nobody
 groups = root,nogroup
-includesections = netbasics
 devices = /dev/urandom, /dev/random, /dev/net/tun
 includesections = netbasics, uidbasics
 need_logsocket = 1
-- 
GitLab


From bbe020e47da76600de94959f3fe98ad455c002f5 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 29 Jun 2020 11:28:26 -0600
Subject: [PATCH 439/571] pass LANG to jail environment

---
 install/tpl/jk_chrootsh.ini.master | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/tpl/jk_chrootsh.ini.master b/install/tpl/jk_chrootsh.ini.master
index cfd9e8d198..3373e6aec5 100644
--- a/install/tpl/jk_chrootsh.ini.master
+++ b/install/tpl/jk_chrootsh.ini.master
@@ -10,4 +10,4 @@
 #relax_home_group=1
 skip_injail_passwd_check=1
 injail_shell=/bin/bash
-env = TERM, PATH
+env = TERM, PATH, LANG
-- 
GitLab


From e91fa78e85851fa16ff7aa57d9a9b4635ce48077 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 29 Jun 2020 15:59:00 -0600
Subject: [PATCH 440/571] update jk_init.ini based on upstream version 2.21,
 add coreutils and php sections

---
 install/tpl/jk_init.ini.master | 156 +++++++++++++++++++++++----------
 1 file changed, 109 insertions(+), 47 deletions(-)

diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master
index 6d064d8220..ff8ed5675c 100644
--- a/install/tpl/jk_init.ini.master
+++ b/install/tpl/jk_init.ini.master
@@ -1,28 +1,34 @@
+# jk_init.ini:  jailkit initialization config
+
+# Includes paths to handle Debian 10/9,
+# if other paths are needed please create an issue with the details:
+# https://git.ispconfig.org/ispconfig/ispconfig3/-/issues
+
 [uidbasics]
-# this section probably needs adjustment on 64bit systems
-# or non-Linux systems
+# this section probably needs adjustment non-Linux systems
 comment = common files for all jails that need user/group information
-libraries = /lib/libnsl.so.1, /lib64/libnsl.so.1, /lib/libnss*.so.2, /lib64/libnss*.so.2, /lib/x86_64-linux-gnu/libnss*.so.2
-regularfiles = /etc/nsswitch.conf, /etc/ld.so.conf
+paths = /lib/libnsl.so.1, /lib64/libnsl.so.1, /lib/libnss*.so.2, /lib64/libnss*.so.2, /lib/i386-linux-gnu/libnsl.so.1, /lib/i386-linux-gnu/libnss*.so.2, /lib/x86_64-linux-gnu/libnsl.so.1, /lib/x86_64-linux-gnu/libnss*.so.2, /lib/arm-linux-gnueabihf/libnss*.so.2, /lib/arm-linux-gnueabihf/libnsl*.so.1, /etc/nsswitch.conf, /etc/ld.so.conf
+# Solaris allegedly needs
+# paths = /etc/default/nss, /lib/libnsl.so.1, /usr/lib/nss_*.so.1, /etc/nsswitch.conf
 
 [netbasics]
 comment = common files for all jails that need any internet connectivity
-libraries = /lib/libnss_dns.so.2, /lib64/libnss_dns.so.2, /lib/x86_64-linux-gnu/libnss_dns.so.2
-regularfiles = /etc/resolv.conf, /etc/host.conf, /etc/hosts, /etc/protocols
+paths = /lib/libnss_dns.so.2, /lib64/libnss_dns.so.2, /lib/libnss_mdns*.so.2, /lib/x86_64-linux-gnu/libnss_dns.so.2, /etc/resolv.conf, /etc/host.conf, /etc/hosts, /etc/protocols, /etc/services, /etc/ssl/certs/, /usr/lib/ssl/certs
+# on Solaris devices /dev/udp and /dev/tcp might be needed too, not sure
 
 [logbasics]
-comment = timezone information
-regularfiles = /etc/localtime
+comment = timezone information and log sockets
+paths = /etc/localtime
 need_logsocket = 1
+# Solaris allegedly does not need logsocket, but needs
+# devices = /dev/log, /dev/conslog
 
 [jk_lsh]
 comment = Jailkit limited shell
-executables = /usr/sbin/jk_lsh
-regularfiles = /etc/jailkit/jk_lsh.ini
+paths = /usr/sbin/jk_lsh, /etc/jailkit/jk_lsh.ini
 users = root
 groups = root
-need_logsocket = 1
-includesections = uidbasics
+includesections = uidbasics, logbasics
 
 [limitedshell]
 comment = alias for jk_lsh
@@ -30,78 +36,77 @@ includesections = jk_lsh
 
 [cvs]
 comment = Concurrent Versions System
-executables = /usr/bin/cvs
+paths = cvs
 devices = /dev/null
 
 [git]
 comment = Fast Version Control System
-executables = /usr/bin/git*
-directories = /usr/share/git-core
-includesections = editors
+paths = /usr/bin/git*, /usr/lib/git-core, /usr/share/git-core, /usr/bin/pager
+includesections = editors, perl, netbasics, basicshell, coreutils
 
 [scp]
 comment = ssh secure copy
-executables = /usr/bin/scp
+paths = scp
 includesections = netbasics, uidbasics
 devices = /dev/urandom
 
 [sftp]
 comment = ssh secure ftp
-executables = /usr/lib/sftp-server, /usr/libexec/openssh/sftp-server, /usr/lib/misc/sftp-server, /usr/libexec/sftp-server
+paths = /usr/lib/sftp-server, /usr/libexec/openssh/sftp-server, /usr/lib/misc/sftp-server, /usr/libexec/sftp-server, /usr/lib/openssh/sftp-server
 includesections = netbasics, uidbasics
 devices = /dev/urandom, /dev/null
+# on solaris 
+#paths = /usr/lib/ssh/sftp-server
 
 [ssh]
 comment = ssh secure shell
-executables = /usr/bin/ssh
+paths = ssh
 includesections = netbasics, uidbasics
-devices = /dev/urandom, /dev/tty
+devices = /dev/urandom, /dev/tty, /dev/null
 
 [rsync]
-executables = /usr/bin/rsync
+paths = rsync
 includesections = netbasics, uidbasics
 
 [procmail]
 comment = procmail mail delivery
-executables = /usr/bin/procmail, /bin/sh
+paths = procmail, /bin/sh
 devices = /dev/null
 
 [basicshell]
 comment = bash based shell with several basic utilities
-executables = /bin/sh, /bin/bash, /bin/ls, /bin/cat, /bin/chmod, /bin/mkdir, /bin/cp, /bin/cpio, /bin/date, /bin/dd, /bin/echo, /bin/egrep, /bin/false, /bin/fgrep, /bin/grep, /bin/gunzip, /bin/gzip, /bin/ln, /bin/ls, /bin/mkdir, /bin/mktemp, /bin/more, /bin/mv, /bin/pwd, /bin/rm, /bin/rmdir, /bin/sed, /bin/sh, /bin/sleep, /bin/sync, /bin/tar, /bin/touch, /bin/true, /bin/uncompress, /bin/zcat
-regularfiles = /etc/motd, /etc/issue, /etc/bash.bashrc, /etc/bashrc, /etc/profile
-directories = /usr/lib/locale/en_US.utf8
+paths = /bin/sh, bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep, false, fgrep, grep, gunzip, gzip, ln, ls, mkdir, mktemp, more, mv, pwd, rm, rmdir, sed, sh, sleep, sync, tar, touch, true, uncompress, zcat, /etc/motd, /etc/issue, /etc/bash.bashrc, /etc/bashrc, /etc/profile, /usr/lib/locale/en_US.utf8, uname, expr, xargs
 users = root
 groups = root
 includesections = uidbasics
 
 [midnightcommander]
 comment = Midnight Commander
-executables = /usr/bin/mc, /usr/bin/mcedit, /usr/bin/mcview
-directories = /etc/terminfo, /usr/share/terminfo, /usr/share/mc
-includesections = basicshell
+paths = mc, mcedit, mcview, /usr/share/mc
+includesections = basicshell, terminfo
 
 [extendedshell]
 comment = bash shell including things like awk, bzip, tail, less
-executables = /usr/bin/awk, /usr/bin/bzip2, /usr/bin/bunzip2, /usr/bin/ldd, /usr/bin/less, /usr/bin/clear, /usr/bin/cut, /usr/bin/du, /usr/bin/find, /usr/bin/head, /usr/bin/less, /usr/bin/md5sum, /usr/bin/nice, /usr/bin/sort, /usr/bin/tac, /usr/bin/tail, /usr/bin/tr, /usr/bin/sort, /usr/bin/wc, /usr/bin/watch, /usr/bin/whoami
+paths = awk, bzip2, bunzip2, ldd, less, clear, cut, du, find, head, less, md5sum, nice, sort, tac, tail, tr, sort, wc, watch, whoami
 includesections = basicshell, midnightcommander, editors
 
+[terminfo]
+comment = terminfo databases, required for example for ncurses or vim 
+paths = /etc/terminfo, /usr/share/terminfo, /lib/terminfo
+
 [editors]
 comment = vim, joe and nano
-executables = /usr/bin/joe, /usr/bin/nano, /usr/bin/vi, /usr/bin/vim, /usr/bin/pico
-regularfiles = /etc/vimrc
-directories = /etc/joe, /etc/terminfo, /usr/share/vim, /usr/share/terminfo, /lib/terminfo
+includesections = terminfo
+paths = joe, nano, vi, vim, /etc/vimrc, /etc/joe, /usr/share/vim
 
 [netutils]
 comment = several internet utilities like wget, ftp, rsync, scp, ssh
-executables = /usr/bin/wget, /usr/bin/lynx, /usr/bin/ftp, /usr/bin/host, /usr/bin/rsync, /usr/bin/smbclient
+paths = wget, lynx, ftp, host, rsync, smbclient
 includesections = netbasics, ssh, sftp, scp
-directories = /etc/ssl/certs/
-regularfiles = /usr/lib/ssl/certs
 
 [apacheutils]
 comment = htpasswd utility
-executables = /usr/bin/htpasswd
+paths = htpasswd
 
 [extshellplusnet]
 comment = alias for extendedshell + netutils + apacheutils
@@ -109,7 +114,7 @@ includesections = extendedshell, netutils, apacheutils
 
 [openvpn]
 comment = jail for the openvpn daemon
-executables = /usr/sbin/openvpn
+paths = /usr/sbin/openvpn
 users = root,nobody
 groups = root,nogroup
 devices = /dev/urandom, /dev/random, /dev/net/tun
@@ -118,35 +123,92 @@ need_logsocket = 1
 
 [apache]
 comment = the apache webserver, very basic setup, probably too limited for you
-executables = /usr/sbin/apache
+paths = /usr/sbin/apache
 users = root, www-data
 groups = root, www-data
 includesections = netbasics, uidbasics
 
 [perl]
 comment = the perl interpreter and libraries
-executables = /usr/bin/perl
-directories = /usr/lib/perl, /usr/lib/perl5, /usr/share/perl, /usr/share/perl5
+paths = perl, /usr/lib/perl, /usr/lib/perl5, /usr/share/perl, /usr/share/perl5
 
 [xauth]
 comment = getting X authentication to work
-executables = /usr/bin/X11/xauth
-regularfiles = /usr/X11R6/lib/X11/rgb.txt, /etc/ld.so.conf
+paths = /usr/bin/X11/xauth, /usr/X11R6/lib/X11/rgb.txt, /etc/ld.so.conf
 
 [xclients]
 comment = minimal files for X clients
-regularfiles = /usr/X11R6/lib/X11/rgb.txt
+paths = /usr/X11R6/lib/X11/rgb.txt
 includesections = xauth
 
 [vncserver]
 comment = the VNC server program
-executables = /usr/bin/Xvnc, /usr/bin/Xrealvnc
-directories = /usr/X11R6/lib/X11/fonts/
+paths = Xvnc, Xrealvnc, /usr/X11R6/lib/X11/fonts/
 includesections = xclients
 
+[ping]
+comment = Ping program
+paths_w_setuid = /bin/ping
 
 #[xterm]
 #comment = xterm
-#executables = /usr/bin/X11/xterm
-#directories = /usr/share/terminfo, /etc/terminfo
+#paths = /usr/bin/X11/xterm, /usr/share/terminfo, /etc/terminfo
 #devices = /dev/pts/0, /dev/pts/1, /dev/pts/2, /dev/pts/3, /dev/pts/4, /dev/ptyb4, /dev/ptya4, /dev/tty, /dev/tty0, /dev/tty4
+
++# coreutils from:
++# (echo -ne '\n[coreutils]\ncomment = non-sbin progs from coreutils\npaths = '; dpkg --listfiles coreutils | grep -E '^/bin/|/usr/bin/' | xargs -n1 -i@ echo -n "@, " | sed -e 's/, *$/\n/g' -e 's|/usr/bin/||g' -e 's|/bin/||g') >> /etc/jailkit/jk_init.ini
+
+[coreutils]
+comment = non-sbin progs from coreutils
+paths = cat, chgrp, chmod, chown, cp, date, dd, df, dir, echo, false, ln, ls, mkdir, mknod, mktemp, mv, pwd, readlink, rm, rmdir, sleep, stty, sync, touch, true, uname, vdir, [, arch, b2sum, base32, base64, basename, chcon, cksum, comm, csplit, cut, dircolors, dirname, du, env, expand, expr, factor, fmt, fold, groups, head, hostid, id, install, join, link, logname, md5sum, mkfifo, nice, nl, nohup, nproc, numfmt, od, paste, pathchk, pinky, pr, printenv, printf, ptx, realpath, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shred, shuf, sort, split, stat, stdbuf, sum, tac, tail, tee, test, timeout, tr, truncate, tsort, tty, unexpand, uniq, unlink, users, wc, who, whoami, yes, md5sum.textutils
+
+[env]
+comment = /usr/bin/env for environment variables
+paths = env
+
+# Debian 10 default php version is 7.3 (Debian 9 is 7.0)
+# Todo: set default version in ISPConfig installer,
+# but install the php cli version matching the website
+[php]
+comment = default php version and libraries
+paths = /usr/bin/php
+includesections = php_common, php7_3
+
+[php_common]
+comment = common php directories and libraries
+# notice:  potential information leak
+#  do not add all of /etc/php/ or any of the fpm directories
+#  or the php config (which includes custom php snippets) from *all*
+#  sites which use fpm will be copied to *every* jailkit
+paths = /usr/bin/php, /usr/lib/php/, /usr/share/php/, /usr/share/zoneinfo/
+includesections = env
+
+[php5_6]
+comment = php version 5.6
+paths = /usr/bin/php5.6, /usr/lib/php/5.6/, /usr/lib/php/20131226/, /usr/share/php/5.6/, /etc/php/5.6/cli/, /etc/php/5.6/mods-available/
+includesections = php_common
+
+[php7_0]
+comment = php version 7.0
+paths = /usr/bin/php7.0, /usr/lib/php/7.0/, /usr/lib/php/20151012/, /usr/share/php/7.0/, /etc/php/7.0/cli/, /etc/php/7.0/mods-available/
+includesections = php_common
+
+[php7_1]
+comment = php version 7.1
+paths = /usr/bin/php7.1, /usr/lib/php/7.1/, /usr/lib/php/20160303/, /usr/share/php/7.1/, /etc/php/7.1/cli/, /etc/php/7.1/mods-available/
+includesections = php_common
+
+[php7_2]
+comment = php version 7.2
+paths = /usr/bin/php7.2, /usr/lib/php/7.2/, /usr/lib/php/20170718/, /usr/share/php/7.2/, /etc/php/7.2/cli/, /etc/php/7.2/mods-available/
+includesections = php_common
+
+[php7_3]
+comment = php version 7.3
+paths = /usr/bin/php7.3, /usr/lib/php/7.3/, /usr/lib/php/20180731/, /usr/share/php/7.3/, /etc/php/7.3/cli/, /etc/php/7.3/mods-available/
+includesections = php_common
+
+[php7_4]
+comment = php version 7.4
+paths = /usr/bin/php7.4, /usr/lib/php/7.4/, /usr/lib/php/20190902/, /usr/share/php/7.4/, /etc/php/7.4/cli/, /etc/php/7.4/mods-available/
+includesections = php_common
-- 
GitLab


From 89c1e47de6da2c40ed38663eec8f4d1b51faed34 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 29 Jun 2020 17:16:01 -0600
Subject: [PATCH 441/571] jk_init.ini: best-guess i386 paths, add wp, node and
 composer jails

---
 install/tpl/jk_init.ini.master | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master
index ff8ed5675c..0f62aac9ef 100644
--- a/install/tpl/jk_init.ini.master
+++ b/install/tpl/jk_init.ini.master
@@ -5,23 +5,17 @@
 # https://git.ispconfig.org/ispconfig/ispconfig3/-/issues
 
 [uidbasics]
-# this section probably needs adjustment non-Linux systems
 comment = common files for all jails that need user/group information
 paths = /lib/libnsl.so.1, /lib64/libnsl.so.1, /lib/libnss*.so.2, /lib64/libnss*.so.2, /lib/i386-linux-gnu/libnsl.so.1, /lib/i386-linux-gnu/libnss*.so.2, /lib/x86_64-linux-gnu/libnsl.so.1, /lib/x86_64-linux-gnu/libnss*.so.2, /lib/arm-linux-gnueabihf/libnss*.so.2, /lib/arm-linux-gnueabihf/libnsl*.so.1, /etc/nsswitch.conf, /etc/ld.so.conf
-# Solaris allegedly needs
-# paths = /etc/default/nss, /lib/libnsl.so.1, /usr/lib/nss_*.so.1, /etc/nsswitch.conf
 
 [netbasics]
 comment = common files for all jails that need any internet connectivity
-paths = /lib/libnss_dns.so.2, /lib64/libnss_dns.so.2, /lib/libnss_mdns*.so.2, /lib/x86_64-linux-gnu/libnss_dns.so.2, /etc/resolv.conf, /etc/host.conf, /etc/hosts, /etc/protocols, /etc/services, /etc/ssl/certs/, /usr/lib/ssl/certs
-# on Solaris devices /dev/udp and /dev/tcp might be needed too, not sure
+paths = /lib/libnss_dns.so.2, /lib64/libnss_dns.so.2, /lib/libnss_mdns*.so.2, /lib/i386-linux-gnu/libnss_dns.so.2, /lib/x86_64-linux-gnu/libnss_dns.so.2, /etc/resolv.conf, /etc/host.conf, /etc/hosts, /etc/protocols, /etc/services, /etc/ssl/certs/, /usr/lib/ssl/certs
 
 [logbasics]
 comment = timezone information and log sockets
 paths = /etc/localtime
 need_logsocket = 1
-# Solaris allegedly does not need logsocket, but needs
-# devices = /dev/log, /dev/conslog
 
 [jk_lsh]
 comment = Jailkit limited shell
@@ -162,6 +156,25 @@ paths_w_setuid = /bin/ping
 comment = non-sbin progs from coreutils
 paths = cat, chgrp, chmod, chown, cp, date, dd, df, dir, echo, false, ln, ls, mkdir, mknod, mktemp, mv, pwd, readlink, rm, rmdir, sleep, stty, sync, touch, true, uname, vdir, [, arch, b2sum, base32, base64, basename, chcon, cksum, comm, csplit, cut, dircolors, dirname, du, env, expand, expr, factor, fmt, fold, groups, head, hostid, id, install, join, link, logname, md5sum, mkfifo, nice, nl, nohup, nproc, numfmt, od, paste, pathchk, pinky, pr, printenv, printf, ptx, realpath, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shred, shuf, sort, split, stat, stdbuf, sum, tac, tail, tee, test, timeout, tr, truncate, tsort, tty, unexpand, uniq, unlink, users, wc, who, whoami, yes, md5sum.textutils
 
+[wp]
+comment = WordPress Command Line
+paths = wp, /usr/local/bin/php
+includesections = php, mysql-client
+
+[mysql-client]
+comment = mysql client
+paths = mysql, mysqldump, mysqlshow, /usr/lib/libmysqlclient.so, /usr/lib/i386-linux-gnu/libmariadb.so.3, /usr/lib/i386-linux-gnu/mariadb19, /usr/lib/x86_64-linux-gnu/libmariadb.so.3, /usr/lib/x86_64-linux-gnu/mariadb19
+includesections = netbasics
+
+[composer]
+comment = composer
+paths = composer, /usr/local/bin/composer, /usr/share/doc/composer
+includesections = php, uidbasics, netbasics
+
+[node]
+comment = NodeJS
+paths = npm, node, nodejs, /usr/lib/nodejs, /usr/share/node-mime, /usr/lib/node_modules, /usr/local/lib/nodejs, /usr/local/lib/node_modules, elmi-to-json, /usr/local/bin/elmi-to-json
+
 [env]
 comment = /usr/bin/env for environment variables
 paths = env
-- 
GitLab


From 5d413ef629405381091048cee4cdde7f786012c2 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 30 Jun 2020 19:42:46 +0200
Subject: [PATCH 442/571] Only use ids.whitelist.custom if the file is
 readable.

---
 interface/lib/classes/ids.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/ids.inc.php b/interface/lib/classes/ids.inc.php
index abdf32b302..6d19726417 100644
--- a/interface/lib/classes/ids.inc.php
+++ b/interface/lib/classes/ids.inc.php
@@ -68,7 +68,7 @@ class ids {
 		
 		// Get whitelist
 		$whitelist_path = '/usr/local/ispconfig/security/ids.whitelist';
-		if(is_file('/usr/local/ispconfig/security/ids.whitelist.custom')) $whitelist_path = '/usr/local/ispconfig/security/ids.whitelist.custom';
+		if(is_readable('/usr/local/ispconfig/security/ids.whitelist.custom')) $whitelist_path = '/usr/local/ispconfig/security/ids.whitelist.custom';
 		if(!is_file($whitelist_path)) $whitelist_path = realpath(ISPC_ROOT_PATH.'/../security/ids.whitelist');
 		
 		$whitelist_lines = file($whitelist_path);
@@ -91,7 +91,7 @@ class ids {
 		
 		// Get HTML fields
 		$htmlfield_path = '/usr/local/ispconfig/security/ids.htmlfield';
-		if(is_file('/usr/local/ispconfig/security/ids.htmlfield.custom')) $htmlfield_path = '/usr/local/ispconfig/security/ids.htmlfield.custom';
+		if(is_readable('/usr/local/ispconfig/security/ids.htmlfield.custom')) $htmlfield_path = '/usr/local/ispconfig/security/ids.htmlfield.custom';
 		if(!is_file($htmlfield_path)) $htmlfield_path = realpath(ISPC_ROOT_PATH.'/../security/ids.htmlfield');
 		
 		$htmlfield_lines = file($htmlfield_path);
-- 
GitLab


From dfd82421be743323e0e4f4fa9a23293abbe4de82 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 30 Jun 2020 13:12:03 -0600
Subject: [PATCH 443/571] don't save invalid server config section

---
 interface/web/admin/lib/lang/ar_server_config.lng |  2 ++
 interface/web/admin/lib/lang/bg_server_config.lng |  2 ++
 interface/web/admin/lib/lang/br_server_config.lng |  2 ++
 interface/web/admin/lib/lang/ca_server_config.lng |  2 ++
 interface/web/admin/lib/lang/cz_server_config.lng |  2 ++
 interface/web/admin/lib/lang/de_server_config.lng |  2 ++
 interface/web/admin/lib/lang/dk_server_config.lng |  2 ++
 interface/web/admin/lib/lang/el_server_config.lng |  2 ++
 interface/web/admin/lib/lang/en_server_config.lng |  2 ++
 interface/web/admin/lib/lang/es_server_config.lng |  2 ++
 interface/web/admin/lib/lang/fi_server_config.lng |  2 ++
 interface/web/admin/lib/lang/fr_server_config.lng |  2 ++
 interface/web/admin/lib/lang/hr_server_config.lng |  2 ++
 interface/web/admin/lib/lang/hu_server_config.lng |  2 ++
 interface/web/admin/lib/lang/id_server_config.lng |  2 ++
 interface/web/admin/lib/lang/it_server_config.lng |  2 ++
 interface/web/admin/lib/lang/ja_server_config.lng |  2 ++
 interface/web/admin/lib/lang/nl_server_config.lng |  2 ++
 interface/web/admin/lib/lang/pl_server_config.lng |  2 ++
 interface/web/admin/lib/lang/pt_server_config.lng |  2 ++
 interface/web/admin/lib/lang/ro_server_config.lng |  2 ++
 interface/web/admin/lib/lang/ru_server_config.lng |  2 ++
 interface/web/admin/lib/lang/se_server_config.lng |  2 ++
 interface/web/admin/lib/lang/sk_server_config.lng |  2 ++
 interface/web/admin/lib/lang/tr_server_config.lng |  2 ++
 interface/web/admin/server_config_edit.php        | 14 ++++++++++++--
 26 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 0bcb361b14..0bd4567220 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 1025e777d5..ae760d95cc 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 977f55fbba..b24f1ef905 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['ufw_enable_txt'] = 'Habilitar';
 $wb['ufw_manage_builtins_txt'] = 'Gerenciar regras embutidas';
 $wb['ufw_ipv6_txt'] = 'Habilitar IPv6';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 9103370404..b4af211185 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Manage Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 64fbafa532..76783fd95a 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot adresář';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sekce';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrootované aplikace';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 3c5e305522..7487bec764 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit Chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit Chroot Anwendungsbereiche';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit Chrooted Anwendungen';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index b3f2e2af2e..44ffc53391 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['ufw_enable_txt'] = 'Enable';
 $wb['ufw_manage_builtins_txt'] = 'Administrer Builtin Rules';
 $wb['ufw_ipv6_txt'] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 6c70a3b1fc..46ce9bfcfc 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 63e9ced76c..2eea4f220d 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb["ufw_enable_txt"] = 'Enable';
 $wb["ufw_manage_builtins_txt"] = 'Manage Builtin Rules';
 $wb["ufw_ipv6_txt"] = 'Enable IPv6';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 8ae8b42454..d400e81367 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Añadir usuarios web al grupo -sshusers-';
 $wb['admin_notify_events_txt'] = 'Enviar correo al administrador a partir de siguiente nivel';
 $wb['apache_group_error_empty'] = 'El grupo de Apache está vacío.';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 1a3f6b269b..b5fd51c4f8 100644
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot-kotikansio';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot-ohjelmaosiot';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted-ohjelmat';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index cc57eb8f80..4b020da068 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Accueil du chroot Jailkit';
 $wb['jailkit_chroot_app_sections_txt'] = 'Sections des applications chrootées Jailkit';
 $wb['jailkit_chroot_app_programs_txt'] = 'Applications chrootées Jailkit';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index da67df4512..93333280b6 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot direktorij';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sekcije';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrootane aplikacije';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index afb7ca1e67..e48f231f2e 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index b22dc5a4ab..4023e619b0 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Home chroot Jailkit';
 $wb['jailkit_chroot_app_sections_txt'] = 'Bagian app chroot';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit aplikasi yang ter-chroot';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 90a2638668..928ca7ebc2 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index e03f768c17..1220886fc3 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'chroot ホーム';
 $wb['jailkit_chroot_app_sections_txt'] = '利用可能アプリケーションセクション';
 $wb['jailkit_chroot_app_programs_txt'] = '利用可能アプリケーション';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 520e54c3b1..9ff06f34d3 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Configuratie';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app secties';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applicaties';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 1beac9944d..95b289ef72 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Adres roota Jailkit';
 $wb['jailkit_chroot_app_sections_txt'] = 'Sekcje aplikacji roota Jailkit';
 $wb['jailkit_chroot_app_programs_txt'] = 'Ścieżki aplikacji roota Jailkit';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index b09c498aa0..31360c0b0e 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Raiz do Chroot Jailkit';
 $wb['jailkit_chroot_app_sections_txt'] = 'Aplicações Jailkit chroot (Sessões)';
 $wb['jailkit_chroot_app_programs_txt'] = 'Aplicações Jailkit em ambiente chroot';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 7a7d3a052c..74055e9874 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 301b3ef496..8754aece3c 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Путь к домашней папке Jailkit chroot';
 $wb['jailkit_chroot_app_sections_txt'] = 'Пакеты программ Jailkit chroot';
 $wb['jailkit_chroot_app_programs_txt'] = 'Программы Jailkit chrooted';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index e91b7e25cf..c45116d4fa 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 6c6e5b2acf..c4858143b0 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['jailkit_chroot_home_txt'] = 'Jailkit chroot domov';
 $wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sekcia';
 $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted aplikácia';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 6aede2732a..b52479ecf5 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -1,5 +1,7 @@
 <?php
 $wb['server_config'] = 'Server Config';
+$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
+$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
 $wb['ufw_enable_txt'] = 'Etkin';
 $wb['ufw_manage_builtins_txt'] = 'İç Kural Yönetimi';
 $wb['ufw_ipv6_txt'] = 'IPv6 Kullanılsın';
diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index f311f6b1a5..cca5d702d3 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -143,9 +143,19 @@ class page_action extends tform_actions {
 			
 			if($app->tform->errorMessage == '') {
 				$server_config_array[$section] = $app->tform->encode($this->dataRecord, $section);
-				$server_config_str = $app->ini_parser->get_ini_string($server_config_array);
+				if ((! is_array($server_config_array[$section])) || count($server_config_array[$section]) == 0 ) {
+					$errMsg = sprintf( $app->tform->lng("server_config_error_section_not_updated"), $section );
+					$app->tpl->setVar('error', $errMsg);
+				} else {
+					$server_config_str = $app->ini_parser->get_ini_string($server_config_array);
 
-				$app->db->datalogUpdate('server', array("config" => $server_config_str), 'server_id', $server_id);
+					if (count($server_config_array) == 0 || $server_config_str == '') {
+						$app->tpl->setVar('error', $app->tform->lng("server_config_error_not_updated"));
+					} else {
+						$app->db->datalogUpdate('server', array("config" => $server_config_str), 'server_id', $server_id);
+						$app->tpl->setVar('error', '');
+					}
+				}
 			} else {
 				$app->error('Security breach!');
 			}
-- 
GitLab


From 0aa4f2de070303b6daf24e8f72da41cd7f92462d Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 2 Jul 2020 16:22:48 +0200
Subject: [PATCH 444/571] Use correct PHP-FPM sockets in apps vhost on Ubuntu
 20.04.

---
 server/plugins-available/apps_vhost_plugin.inc.php | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php
index 4d0866d1de..7fb5503802 100644
--- a/server/plugins-available/apps_vhost_plugin.inc.php
+++ b/server/plugins-available/apps_vhost_plugin.inc.php
@@ -184,6 +184,7 @@ class apps_vhost_plugin {
 				|| file_exists('/var/run/php/php7.1-fpm.sock')
 				|| file_exists('/var/run/php/php7.2-fpm.sock')
 				|| file_exists('/var/run/php/php7.3-fpm.sock')
+				|| file_exists('/var/run/php/php7.4-fpm.sock')
 			){
 				$use_tcp = '#';
 				$use_socket = '';
@@ -206,6 +207,8 @@ class apps_vhost_plugin {
 			if(file_exists('/var/run/php/php7.0-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.1-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.2-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.2-fpm.sock', $content);
+			if(file_exists('/var/run/php/php7.3-fpm.sock')) $content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.3-fpm.sock', $content);
+			if(file_exists('/var/run/php/php7.4-fpm.sock')) $content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.4-fpm.sock', $content);
 
 			// PHP-FPM
 			// Dont just copy over the php-fpm pool template but add some custom settings
-- 
GitLab


From 3015ec283d80e01158cd90b7ea02e24d080a06a7 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 2 Jul 2020 13:37:27 -0600
Subject: [PATCH 445/571] add quota recalc to mailbox cleanup

---
 server/lib/classes/cron.d/500-clean_mailboxes.inc.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/server/lib/classes/cron.d/500-clean_mailboxes.inc.php b/server/lib/classes/cron.d/500-clean_mailboxes.inc.php
index 8617d0d76d..7e8c82da64 100755
--- a/server/lib/classes/cron.d/500-clean_mailboxes.inc.php
+++ b/server/lib/classes/cron.d/500-clean_mailboxes.inc.php
@@ -57,6 +57,7 @@ class cronjob_clean_mailboxes extends cronjob {
 		$junk_names=array('Junk', 'Junk Email', 'SPAM', 'INBOX.SPAM');
 
 		$purge_cmd = 'doveadm expunge -u ? mailbox ? sentbefore ';
+		$recalc_cmd = 'doveadm quota recalc -u ?';
 
 		$server_id = intval($conf['server_id']);
 		$records = $app->db->queryAllRecords("SELECT email, maildir, purge_trash_days, purge_junk_days FROM mail_user WHERE maildir_format = 'maildir' AND disableimap = 'n' AND server_id = ? AND (purge_trash_days > 0 OR purge_junk_days > 0)", $server_id);
@@ -77,6 +78,7 @@ class cronjob_clean_mailboxes extends cronjob {
 						}
 					}
 				}
+				$app->system->exec_safe($recalc_cmd, $email['email']);
 			}
 		}
 
-- 
GitLab


From 0f80900879f9f6d5e277e84cfc6c0284141290e3 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 2 Jul 2020 13:50:05 -0600
Subject: [PATCH 446/571] prefer 'doveadm quota' for quota calculation if
 supported

---
 .../cron.d/100-monitor_email_quota.inc.php    | 29 ++++++++++++-------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
index 8adf7c7253..01bc0ee78e 100644
--- a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
@@ -79,30 +79,36 @@ class cronjob_monitor_email_quota extends cronjob {
 		if(is_array($mailboxes)) {
 
 			//* with dovecot we can use doveadm instead of 'du -s'
-			$dovecot = false;
-			if (isset($mail_config['pop3_imap_daemon']) && $mail_config ['pop3_imap_daemon'] = 'dovecot' && is_executable('doveadm')) {
-				exec('doveadm quota 2>&1', $tmp_output, $tmp_retval); // with dovecot 2.2.x 'doveadm quota' is unuseable
-				if ($retval = 64) $dovecot = true;
+			$dovecotQuotaUsage = array();
+			if (isset($mail_config['pop3_imap_daemon']) && $mail_config ['pop3_imap_daemon'] = 'dovecot') {
+				exec("doveadm quota get -A 2>&1", $res, $retval);
+				if ($retval = 64) {
+					foreach ($res as $v) {
+						$s = preg_split('/\s+/', $v);
+						if ($s[2] == 'STORAGE') $dovecotQuotaUsage[$s[0]] = $s[3] * 1024; // doveadm output is in kB
+					}
+				}
 			}
 
 			foreach($mailboxes as $mb) {
 				$email = $mb['email'];
 				$email_parts = explode('@', $mb['email']);
 				$filename = $mb['maildir'].'/.quotausage';
-				if(!file_exists($filename) && $dovecot) {
-					$app->system->exec_safe('doveadm quota recalc -u ?', $email);
-				}
-				if(file_exists($filename) && !is_link($filename)) {
+				if(count($dovecotQuotaUsage) > 0 && isset($dovecotQuotaUsage[$email])) {
+					$data[$email]['used'] = $dovecotQuotaUsage[$email];
+					$app->log("Mail storage $email: " . $data[$email]['used'], LOGLEVEL_DEBUG);
+				} elseif(file_exists($filename) && !is_link($filename)) {
 					$quotafile = file($filename);
 					preg_match('/storage.*?([0-9]+)/s', implode('',$quotafile), $storage_value);
 					$data[$email]['used'] = $storage_value[1];
-					$app->log("Mail storage $email: " . $storage_value[1], LOGLEVEL_DEBUG);
+					$app->log("Mail storage $email: " . $data[$email]['used'], LOGLEVEL_DEBUG);
 					unset($quotafile);
 				} else {
 					$app->system->exec_safe('du -s ?', $mb['maildir']);
 					$out = $app->system->last_exec_out();
 					$parts = explode(' ', $out[0]);
 					$data[$email]['used'] = intval($parts[0])*1024;
+					$app->log("Mail storage $email: " . $data[$email]['used'], LOGLEVEL_DEBUG);
 					unset($out);
 					unset($parts);
 				}
@@ -110,6 +116,7 @@ class cronjob_monitor_email_quota extends cronjob {
 		}
 
 		unset($mailboxes);
+		unset($dovecotQuotaUsage);
 
 		//* Dovecot quota check Courier in progress lathama@gmail.com
 		/*
@@ -132,8 +139,8 @@ class cronjob_monitor_email_quota extends cronjob {
 		$res['state'] = $state;
 
 		/*
-         * Insert the data into the database
-         */
+		 * Insert the data into the database
+		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
 			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
 		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
-- 
GitLab


From a4ae330f8720049534997a394846acd32f416743 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 2 Jul 2020 17:45:33 -0600
Subject: [PATCH 447/571] handle doveadm quota output from different versions

---
 server/lib/classes/cron.d/100-monitor_email_quota.inc.php | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
index 01bc0ee78e..40736a7bac 100644
--- a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
@@ -85,7 +85,11 @@ class cronjob_monitor_email_quota extends cronjob {
 				if ($retval = 64) {
 					foreach ($res as $v) {
 						$s = preg_split('/\s+/', $v);
-						if ($s[2] == 'STORAGE') $dovecotQuotaUsage[$s[0]] = $s[3] * 1024; // doveadm output is in kB
+						if ($s[2] == 'STORAGE') {
+							$dovecotQuotaUsage[$s[0]] = $s[3] * 1024; // doveadm output is in kB
+						} elseif ($s[3] == 'STORAGE') {
+							$dovecotQuotaUsage[$s[0]] = $s[4] * 1024; // doveadm output is in kB
+						}
 					}
 				}
 			}
-- 
GitLab


From a219931738ffc4933406f643a60bd68b1df2ded9 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 3 Jul 2020 15:46:39 +0200
Subject: [PATCH 448/571] Revert "Improved cron debug script"

This reverts commit b34b1ad5bbc8d75db927116b517e6a23761e42bb.

Fixes #5657
---
 server/cron_debug.php | 27 +++++----------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

diff --git a/server/cron_debug.php b/server/cron_debug.php
index fbf59ebc26..74065f02c4 100644
--- a/server/cron_debug.php
+++ b/server/cron_debug.php
@@ -39,25 +39,20 @@ ini_set('error_reporting', E_ALL & ~E_NOTICE);
 $conf['server_id'] = intval($conf['server_id']);
 
 // Load required base-classes
-$app->uses('ini_parser,file,services,getconf,system,cron,functions');
+$app->uses('modules,plugins,ini_parser,file,services,getconf,system,cron,functions');
 $app->load('libdatetime,cronjob');
 
 // Path settings
 $path = SCRIPT_PATH . '/lib/classes/cron.d';
 
 //** Get commandline options
-$cmd_opt = getopt('', array('cronjob::', 'force', 'firstrun'));
+$cmd_opt = getopt('', array('cronjob::'));
 
 if(isset($cmd_opt['cronjob']) && is_file($path.'/'.$cmd_opt['cronjob'])) {
 	// Cronjob that shell be run
 	$cronjob_file = $cmd_opt['cronjob'];
 } else {
-	echo "Usage example: php cron_debug.php --cronjob=100-mailbox_stats.inc.php [--force] [--firstrun]\n" ;
-	echo "Available cronjobs:\n";
-	foreach(glob($path.'/*-*.inc.php') as $cronjob) {
-		echo basename($cronjob)."\n";
-	}
-	die();
+	die('Usage example: php cron_debug.php --cronjob=100-mailbox_stats.inc.php');
 }
 
 // Load and run the cronjob
@@ -66,20 +61,8 @@ if(preg_match('/^\d+\-(.*)$/', $name, $match)) $name = $match[1]; // strip numer
 include $path . '/' . $cronjob_file;
 $class_name = 'cronjob_' . $name;
 $cronjob = new $class_name();
-
-if(isset($cmd_opt['force'])) {
-	$app->db->query("UPDATE `sys_cron` SET `running` = 0 WHERE `name` = ?", $class_name);
-}
-
-$cronjob->onPrepare();
-$cronjob->onBeforeRun(isset($cmd_opt['firstrun']));
-if(!$cronjob->isRunning()) {
-	$app->db->query("UPDATE `sys_cron` SET `running` = ? WHERE `name` = ?", ($cronjob->canBeRunInParallel() !== true ? "1" : "0"), $class_name);
-	$cronjob->onRunJob();
-	$cronjob->onAfterRun();
-	$cronjob->onCompleted();
-}
+$cronjob->run(true);
 
 die("finished.\n");
 
-?>
\ No newline at end of file
+?>
-- 
GitLab


From 2c65871b6038bef217863b74b0be49bac3f67eee Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Sun, 5 Jul 2020 21:37:59 +0200
Subject: [PATCH 449/571] Fix colspan for no-result and pager, relates to !991
 and #5090

---
 interface/web/admin/templates/server_php_list.htm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/templates/server_php_list.htm b/interface/web/admin/templates/server_php_list.htm
index dd6547ba56..a2595a8474 100644
--- a/interface/web/admin/templates/server_php_list.htm
+++ b/interface/web/admin/templates/server_php_list.htm
@@ -48,13 +48,13 @@
                     </tmpl_loop>
                     <tmpl_unless name="records">
                         <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td colspan="4">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                            <td colspan="6">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                         </tr>
                     </tmpl_unless>
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-- 
GitLab


From 1c85a6c76883c28614e958a27770cf22e463d919 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Sun, 5 Jul 2020 21:41:27 +0200
Subject: [PATCH 450/571] Fix colspan for no-result and pager

---
 interface/web/admin/templates/server_ip_map_list.htm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/templates/server_ip_map_list.htm b/interface/web/admin/templates/server_ip_map_list.htm
index ea23856022..5523448c7b 100644
--- a/interface/web/admin/templates/server_ip_map_list.htm
+++ b/interface/web/admin/templates/server_ip_map_list.htm
@@ -38,13 +38,13 @@
 			</tmpl_loop>
 			<tmpl_unless name="records">
 				<tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-					<td colspan="4">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                                       <td colspan="5">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
 				</tr>
 			</tmpl_unless>
 		</tbody>
 		<tfoot>
 			<tr>
-				<td colspan="4"><tmpl_var name="paging"></td>
+                               <td colspan="5"><tmpl_var name="paging"></td>
 			</tr>
 		</tfoot>
 	</table>
-- 
GitLab


From b93c35f26ff846c77b4f26a61d75403635b4d692 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 6 Jul 2020 11:58:23 +0200
Subject: [PATCH 451/571] Enforce email addresses to be lower case when adding
 an email address via remote API.

---
 interface/lib/classes/remote.d/mail.inc.php | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php
index 771698e9dc..eec5ff0718 100644
--- a/interface/lib/classes/remote.d/mail.inc.php
+++ b/interface/lib/classes/remote.d/mail.inc.php
@@ -205,6 +205,9 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
+		
+		// Email addresses must always be lower case
+		$params['email'] = strtolower($params['email']);
 
 		//* Check if mail domain exists
 		$email_parts = explode('@', $params['email']);
-- 
GitLab


From baff94e04401325bbe283a56cc3340cc57729a09 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Mon, 6 Jul 2020 17:33:29 -0600
Subject: [PATCH 452/571] vary CSP header for HTTP and HTTPS, and secure
 cookies

---
 install/tpl/apache_ispconfig.vhost.master | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/install/tpl/apache_ispconfig.vhost.master b/install/tpl/apache_ispconfig.vhost.master
index d8c56de22d..61e9a58859 100644
--- a/install/tpl/apache_ispconfig.vhost.master
+++ b/install/tpl/apache_ispconfig.vhost.master
@@ -89,11 +89,13 @@ NameVirtualHost *:<tmpl_var name="vhost_port">
 
   <IfModule mod_headers.c>
     # ISPConfig 3.1 currently requires unsafe-line for both scripts and styles, as well as unsafe-eval
+    Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'"
     <tmpl_var name="ssl_comment">Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'; upgrade-insecure-requests"
     Header set X-Content-Type-Options: nosniff
     Header set X-Frame-Options: SAMEORIGIN
     Header set X-XSS-Protection: "1; mode=block"
-    <tmpl_var name="ssl_comment">Header always edit Set-Cookie (.*) "$1; HTTPOnly; Secure"
+    Header always edit Set-Cookie (.*) "$1; HTTPOnly"
+    <tmpl_var name="ssl_comment">Header always edit Set-Cookie (.*) "$1; Secure"
     <IfVersion >= 2.4.7>
         Header setifempty Strict-Transport-Security "max-age=15768000"
     </IfVersion>
-- 
GitLab


From 6cdefbd90d16868a4ef9dbc4993c8f102ad2b923 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 8 Jul 2020 21:09:11 +0200
Subject: [PATCH 453/571] Update mysql-virtual_forwardings.cf.master

---
 install/tpl/mysql-virtual_forwardings.cf.master | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/install/tpl/mysql-virtual_forwardings.cf.master b/install/tpl/mysql-virtual_forwardings.cf.master
index 7d5c2e2a47..e39b129f50 100644
--- a/install/tpl/mysql-virtual_forwardings.cf.master
+++ b/install/tpl/mysql-virtual_forwardings.cf.master
@@ -1,9 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_forwarding
-select_field = destination
-where_field = source
-# additional_conditions = and type != 'aliasdomain' and active = 'y' and server_id = {server_id}
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = SELECT u.email as target FROM mail_forwarding as s INNER JOIN mail_user as u ON (u.email = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1))) WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND u.disabledeliver = 'n' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s WHERE s.source = '%s' AND s.type IN ('alias', 'forward') and s.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s INNER JOIN mail_forwarding as f ON (f.source = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1))) WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND f.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s WHERE s.source = '@%d' AND s.type IN ('catchall') and s.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s INNER JOIN mail_forwarding as t ON (t.source = s.destination AND t.type = 'catchall') WHERE s.source = '@%d' AND s.type = 'aliasdomain' and s.active = 'y' AND t.active = 'y' AND s.server_id = {server_id}
-- 
GitLab


From 85744b5e3b1d71f963641cda1dbfa9c8130cc86b Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 9 Jul 2020 16:57:59 +0200
Subject: [PATCH 454/571] client_get_id error correctly describes the
 condition.

---
 interface/lib/classes/remote.d/client.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/classes/remote.d/client.inc.php b/interface/lib/classes/remote.d/client.inc.php
index 1457bf569a..57412e5e19 100644
--- a/interface/lib/classes/remote.d/client.inc.php
+++ b/interface/lib/classes/remote.d/client.inc.php
@@ -108,7 +108,7 @@ class remoting_client extends remoting {
 		if(isset($rec['client_id'])) {
 			return $app->functions->intval($rec['client_id']);
 		} else {
-			throw new SoapFault('no_client_found', 'There is no sysuser account for this client ID.');
+			throw new SoapFault('no_client_found', 'There is no sys_user account with this userid.');
 			return false;
 		}
 
-- 
GitLab


From d822230b8c0a58278cc6eea2d0e7b9f9de6b7f8d Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 9 Jul 2020 21:14:55 +0200
Subject: [PATCH 455/571] Make the logged line 'finished' a bit more
 informative and easier to identify.

---
 server/cron.php       | 2 +-
 server/cron_debug.php | 2 +-
 server/server.php     | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/server/cron.php b/server/cron.php
index ef13d06e2f..d21dcfa8ae 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -128,6 +128,6 @@ $app->services->processDelayedActions();
 @unlink($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock');
 $app->log('Remove Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock', LOGLEVEL_DEBUG);
 
-if($conf['log_priority'] <= LOGLEVEL_DEBUG) die("finished.\n");
+if($conf['log_priority'] <= LOGLEVEL_DEBUG) die("finished cron run.");
 
 ?>
diff --git a/server/cron_debug.php b/server/cron_debug.php
index 74065f02c4..de561577c8 100644
--- a/server/cron_debug.php
+++ b/server/cron_debug.php
@@ -63,6 +63,6 @@ $class_name = 'cronjob_' . $name;
 $cronjob = new $class_name();
 $cronjob->run(true);
 
-die("finished.\n");
+die("finished cron debug.\n");
 
 ?>
diff --git a/server/server.php b/server/server.php
index 106d3edc65..164451babe 100644
--- a/server/server.php
+++ b/server/server.php
@@ -217,5 +217,5 @@ if ($needStartCore) {
 $app->log('Remove Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock', LOGLEVEL_DEBUG);
 
 
-die("finished.\n");
+die("finished server.php.\n");
 ?>
-- 
GitLab


From 62006400e54f3338298c64196e2fa40b3e30701e Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 9 Jul 2020 21:25:27 +0200
Subject: [PATCH 456/571] Remove trailing whitespace ... logged as two blank
 lines every minute to cron.log

---
 server/plugins-available/backup_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index 607491216d..53b8d6d288 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -321,5 +321,5 @@ class backup_plugin {
 				
 } // end class
 
-?>			
+?>
 
-- 
GitLab


From 3b146a40df9226dadd392f6d8e3d1d82d5cca681 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 9 Jul 2020 21:26:31 +0200
Subject: [PATCH 457/571] Redirect output, otherwise ends up polluting cron.log

---
 server/lib/classes/cron.d/100-monitor_iptables.inc.php | 4 ++--
 server/plugins-available/backup_plugin.inc.php         | 1 -
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_iptables.inc.php b/server/lib/classes/cron.d/100-monitor_iptables.inc.php
index 1ad11d9ecc..2bf9404735 100644
--- a/server/lib/classes/cron.d/100-monitor_iptables.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_iptables.inc.php
@@ -67,7 +67,7 @@ class cronjob_monitor_iptables extends cronjob {
 		$type = 'iptables_rules';
 
 		/* This monitoring is only available if fail2ban is installed */
-		system('which iptables', $retval); // Debian, Ubuntu, Fedora
+		system('which iptables > /dev/null', $retval); // Debian, Ubuntu, Fedora
 		if ($retval === 0) {
 			/*  Get the data of the log */
 			$data['output'] = '<h2>iptables -S (ipv4)</h2>'.shell_exec('iptables -S 2>/dev/null');
@@ -83,7 +83,7 @@ class cronjob_monitor_iptables extends cronjob {
 
 
 		/* This monitoring is only available if fail2ban is installed */
-		system('which ip6tables', $retval); // Debian, Ubuntu, Fedora
+		system('which ip6tables > /dev/null', $retval); // Debian, Ubuntu, Fedora
 		if ($retval === 0) {
 			/*  Get the data of the log */
 			$data['output'] .= '<br><h2>ip6tables -S (ipv6)</h2>'.shell_exec('ip6tables -S 2>/dev/null');
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index 53b8d6d288..ffbc5a6b79 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -322,4 +322,3 @@ class backup_plugin {
 } // end class
 
 ?>
-
-- 
GitLab


From 323b2d4a2495a1cbcfc5c69d8efd97c84fa344e9 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 9 Jul 2020 21:43:53 +0200
Subject: [PATCH 458/571] Cleanup old commented code

---
 server/lib/classes/cron.d/150-awstats.inc.php | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/server/lib/classes/cron.d/150-awstats.inc.php b/server/lib/classes/cron.d/150-awstats.inc.php
index 4ba286ea1a..891919cb02 100644
--- a/server/lib/classes/cron.d/150-awstats.inc.php
+++ b/server/lib/classes/cron.d/150-awstats.inc.php
@@ -60,7 +60,6 @@ class cronjob_awstats extends cronjob {
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 
 		foreach($records as $rec) {
-			//$yesterday = date('Ymd',time() - 86400);
 			$yesterday = date('Ymd', strtotime("-1 day", time()));
 
 			$log_folder = 'log';
@@ -135,9 +134,6 @@ class cronjob_awstats extends cronjob {
 				}
 			}
 
-			// awstats_buildstaticpages.pl -update -config=mydomain.com -lang=en -dir=/var/www/domain.com/'.$web_folder.'/stats -awstatsprog=/path/to/awstats.pl
-			// $command = "$awstats_buildstaticpages_pl -update -config='$domain' -lang=".$conf['language']." -dir='$statsdir' -awstatsprog='$awstats_pl'";
-
 			$command = escapeshellcmd($awstats_buildstaticpages_pl) . ' -month=' . escapeshellarg($awmonth) . ' -year=' . escapeshellarg($awyear) . ' -update -config=' . escapeshellarg($domain) . ' -lang=' . escapeshellarg($conf['language']) . ' -dir=' . escapeshellarg($statsdir) . ' -awstatsprog=' . escapeshellarg($awstats_pl);
 
 			if (date("d") == 2) {
-- 
GitLab


From 3ebca3232b2daa1f2863732dffe9bfb90d17d328 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 10 Jul 2020 11:43:39 +0200
Subject: [PATCH 459/571] Refactor to use is_installed helper function

---
 server/lib/classes/cron.d/100-monitor_fail2ban.inc.php | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_fail2ban.inc.php b/server/lib/classes/cron.d/100-monitor_fail2ban.inc.php
index 5c4ba80561..a25d5c7106 100644
--- a/server/lib/classes/cron.d/100-monitor_fail2ban.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_fail2ban.inc.php
@@ -67,10 +67,8 @@ class cronjob_monitor_fail2ban extends cronjob {
 		$type = 'log_fail2ban';
 
 		/* This monitoring is only available if fail2ban is installed */
-		system('which fail2ban-client', $retval); // Debian, Ubuntu, Fedora
-		if ($retval !== 0)
-			system('which fail2ban', $retval); // CentOS
-		if ($retval === 0) {
+		if ($app->system->is_installed('fail2ban-client')	// Debian, Ubuntu, Fedora
+			|| $app->system->is_installed('fail2ban')) {	// CentOS
 			/*  Get the data of the log */
 			$data = $this->_tools->_getLogData($type);
 
-- 
GitLab


From 877a0ee9ef4fee951b5ad016ae6c16291d27b103 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 10 Jul 2020 12:03:33 +0200
Subject: [PATCH 460/571] Refactor to use is_installed helper function

---
 .../lib/classes/cron.d/100-monitor_iptables.inc.php  |  6 ++----
 server/lib/classes/cron.d/100-monitor_raid.inc.php   | 12 ++++--------
 .../lib/classes/cron.d/100-monitor_rkhunter.inc.php  |  3 +--
 server/lib/classes/cron.d/500-backup_mail.inc.php    |  3 +--
 4 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_iptables.inc.php b/server/lib/classes/cron.d/100-monitor_iptables.inc.php
index 2bf9404735..cff0a73ac3 100644
--- a/server/lib/classes/cron.d/100-monitor_iptables.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_iptables.inc.php
@@ -67,8 +67,7 @@ class cronjob_monitor_iptables extends cronjob {
 		$type = 'iptables_rules';
 
 		/* This monitoring is only available if fail2ban is installed */
-		system('which iptables > /dev/null', $retval); // Debian, Ubuntu, Fedora
-		if ($retval === 0) {
+		if ($app->system->is_installed('iptables')) {
 			/*  Get the data of the log */
 			$data['output'] = '<h2>iptables -S (ipv4)</h2>'.shell_exec('iptables -S 2>/dev/null');
 
@@ -83,8 +82,7 @@ class cronjob_monitor_iptables extends cronjob {
 
 
 		/* This monitoring is only available if fail2ban is installed */
-		system('which ip6tables > /dev/null', $retval); // Debian, Ubuntu, Fedora
-		if ($retval === 0) {
+		if ($app->system->is_installed('ip6tables')) {
 			/*  Get the data of the log */
 			$data['output'] .= '<br><h2>ip6tables -S (ipv6)</h2>'.shell_exec('ip6tables -S 2>/dev/null');
 
diff --git a/server/lib/classes/cron.d/100-monitor_raid.inc.php b/server/lib/classes/cron.d/100-monitor_raid.inc.php
index d1a9a53455..7148aee1c8 100644
--- a/server/lib/classes/cron.d/100-monitor_raid.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_raid.inc.php
@@ -126,8 +126,7 @@ class cronjob_monitor_raid extends cronjob {
 		 * Check, if we have mpt-status installed (LSIsoftware-raid)
 		 */
 		if (file_exists('/proc/mpt/summary')) {
-			system('which mpt-status', $retval);
-			if ($retval === 0) {
+			if ($app->system->is_installed('mpt-status')) {
 				/*
 				 * Fetch the output
 				 */
@@ -174,8 +173,7 @@ class cronjob_monitor_raid extends cronjob {
 		/*
 		* 3ware Controller
 		*/
-		system('which tw_cli', $retval);
-		if($retval === 0) {
+		if($app->system->is_installed('tw_cli')) {
 
 			// TYPOWORX FIX | Determine Controler-ID
 			$availableControlers = shell_exec('tw_cli info | grep -Eo "c[0-9]+"');
@@ -232,8 +230,7 @@ class cronjob_monitor_raid extends cronjob {
 		/*
 		* HP Proliant
 		*/
-		system('which hpacucli', $retval);
-		if($retval === 0) {
+		if($app->system->is_installed('hpacucli')) {
 			$state = 'ok';
 			$data['output'] = shell_exec('/usr/sbin/hpacucli ctrl all show config');
 			$tmp = explode("\n", $data['output']);
@@ -298,8 +295,7 @@ class cronjob_monitor_raid extends cronjob {
 		/*
 		* Adaptec-RAID
 		*/
-		system('which arcconf', $retval);
-		if($retval === 0) {
+		if($app->system->is_installed('arcconf')) {
 			$state = 'ok';
 			$data['output'] = shell_exec('arcconf GETCONFIG 1 LD');
 			if(is_array($data['output'])) {
diff --git a/server/lib/classes/cron.d/100-monitor_rkhunter.inc.php b/server/lib/classes/cron.d/100-monitor_rkhunter.inc.php
index 43071b8387..5efb9420ec 100644
--- a/server/lib/classes/cron.d/100-monitor_rkhunter.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_rkhunter.inc.php
@@ -67,8 +67,7 @@ class cronjob_monitor_rkhunter extends cronjob {
 		$type = 'rkhunter';
 
 		/* This monitoring is only available if rkhunter is installed */
-		system('which rkhunter', $retval);
-		if ($retval === 0) {
+		if ($app->system->is_installed('rkhunter')) {
 			/*
 			 * Fetch the output
 			 */
diff --git a/server/lib/classes/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php
index 2b1fd58177..f631f0043c 100644
--- a/server/lib/classes/cron.d/500-backup_mail.inc.php
+++ b/server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -78,8 +78,7 @@ class cronjob_backup_mail extends cronjob {
 				} else {
 					chmod($backup_dir, $backup_dir_permissions);
 				}
-				system('which pigz > /dev/null', $ret);
-				if($ret === 0) {
+				if($app->system->is_installed('pigz')) {
 					$use_pigz = true;
 				} else {
 					$use_pigz = false;
-- 
GitLab


From 5d0df4e50ce76b517cba0879040b540e5b2d434e Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 10 Jul 2020 12:04:38 +0200
Subject: [PATCH 461/571] Refactor to use is_installed helper function

---
 server/lib/classes/cron.d/100-monitor_raid.inc.php | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_raid.inc.php b/server/lib/classes/cron.d/100-monitor_raid.inc.php
index 7148aee1c8..80ab29b6c3 100644
--- a/server/lib/classes/cron.d/100-monitor_raid.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_raid.inc.php
@@ -275,10 +275,14 @@ class cronjob_monitor_raid extends cronjob {
 		/*
 		* LSI MegaRaid
 		*/
-		system('which megacli', $retval);
-		system('which megacli64', $retval64);
-		if($retval === 0 || $retval64 === 0) {
-			$binary=@($retval === 0)?'megacli':'megacli64';
+		$binary = FALSE;
+		if ($app->system->is_installed('megacli')) {
+			$binary = 'megacli';
+		}
+		if ($app->system->is_installed('megacli64')) {
+			$binary = 'megacli64';
+		}
+		if($binary) {
 			$state = 'ok';
 			$data['output'] = shell_exec($binary.' -LDInfo -Lall -aAll -NoLog');
 			if (strpos($data['output'], 'Optimal') !== false) {
-- 
GitLab


From 3b8f57584e0b9f5523cca1e064df2d0c1318b215 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 4 Jun 2020 17:47:33 -0600
Subject: [PATCH 462/571] migrate legacy postfix mysql query interface to "new"
 interface

---
 install/tpl/mysql-virtual_client.cf.master     |  7 ++-----
 install/tpl/mysql-virtual_domains.cf.master    |  7 ++-----
 .../tpl/mysql-virtual_email2email.cf.master    |  9 ++++-----
 .../tpl/mysql-virtual_forwardings.cf.master    | 18 +++++++++++++++++-
 install/tpl/mysql-virtual_gids.cf.master       |  7 ++-----
 install/tpl/mysql-virtual_mailboxes.cf.master  |  5 +----
 install/tpl/mysql-virtual_outgoing_bcc.cf      |  8 --------
 .../tpl/mysql-virtual_outgoing_bcc.cf.master   |  7 ++-----
 .../mysql-virtual_policy_greylist.cf.master    |  3 +--
 install/tpl/mysql-virtual_recipient.cf.master  |  7 ++-----
 .../tpl/mysql-virtual_relaydomains.cf.master   |  7 ++-----
 .../mysql-virtual_relayrecipientmaps.cf.master |  7 ++-----
 install/tpl/mysql-virtual_sender.cf.master     |  7 ++-----
 .../mysql-virtual_sender_login_maps.cf.master  |  2 +-
 install/tpl/mysql-virtual_transports.cf.master |  7 ++-----
 install/tpl/mysql-virtual_uids.cf.master       |  5 +----
 16 files changed, 43 insertions(+), 70 deletions(-)
 delete mode 100644 install/tpl/mysql-virtual_outgoing_bcc.cf

diff --git a/install/tpl/mysql-virtual_client.cf.master b/install/tpl/mysql-virtual_client.cf.master
index bad0cb9655..106b647e4a 100644
--- a/install/tpl/mysql-virtual_client.cf.master
+++ b/install/tpl/mysql-virtual_client.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table        = mail_access
-select_field = access
-where_field  = source
-additional_conditions = and type = 'client' and active = 'y'
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select access from mail_access where source = '%s' and type = 'client' and active = 'y'
diff --git a/install/tpl/mysql-virtual_domains.cf.master b/install/tpl/mysql-virtual_domains.cf.master
index 5b711422f2..0d1793a95a 100644
--- a/install/tpl/mysql-virtual_domains.cf.master
+++ b/install/tpl/mysql-virtual_domains.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_domain
-select_field = domain
-where_field = domain
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select domain from mail_domain where domain = '%s' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_email2email.cf.master b/install/tpl/mysql-virtual_email2email.cf.master
index e18ef2407e..68d7f70ba9 100644
--- a/install/tpl/mysql-virtual_email2email.cf.master
+++ b/install/tpl/mysql-virtual_email2email.cf.master
@@ -1,8 +1,7 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = email
-where_field = email
-additional_conditions = and postfix = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select email from mail_user where email = '%s' and postfix = 'y' and disabledeliver = 'n' and server_id = {server_id}
+        union
+        select cc as email from mail_user where email = '%s' and postfix = 'y' and disabledeliver = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_forwardings.cf.master b/install/tpl/mysql-virtual_forwardings.cf.master
index e39b129f50..818cac07bc 100644
--- a/install/tpl/mysql-virtual_forwardings.cf.master
+++ b/install/tpl/mysql-virtual_forwardings.cf.master
@@ -2,4 +2,20 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = SELECT u.email as target FROM mail_forwarding as s INNER JOIN mail_user as u ON (u.email = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1))) WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND u.disabledeliver = 'n' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s WHERE s.source = '%s' AND s.type IN ('alias', 'forward') and s.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s INNER JOIN mail_forwarding as f ON (f.source = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1))) WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND f.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s WHERE s.source = '@%d' AND s.type IN ('catchall') and s.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s INNER JOIN mail_forwarding as t ON (t.source = s.destination AND t.type = 'catchall') WHERE s.source = '@%d' AND s.type = 'aliasdomain' and s.active = 'y' AND t.active = 'y' AND s.server_id = {server_id}
+query = SELECT u.email as target FROM mail_forwarding as s
+            INNER JOIN mail_user as u ON (u.email = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1)))
+            WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND u.disabledeliver = 'n' AND s.server_id = {server_id}
+        UNION
+        SELECT s.destination as target FROM mail_forwarding as s
+            WHERE s.source = '%s' AND s.type IN ('alias', 'forward') and s.active = 'y' AND s.server_id = {server_id}
+        UNION
+        SELECT s.destination as target FROM mail_forwarding as s
+            INNER JOIN mail_forwarding as f ON (f.source = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1)))
+            WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND f.active = 'y' AND s.server_id = {server_id}
+        UNION
+        SELECT s.destination as target FROM mail_forwarding as s
+            WHERE s.source = '@%d' AND s.type IN ('catchall') and s.active = 'y' AND s.server_id = {server_id}
+        UNION
+        SELECT s.destination as target FROM mail_forwarding as s
+            INNER JOIN mail_forwarding as t ON (t.source = s.destination AND t.type = 'catchall')
+            WHERE s.source = '@%d' AND s.type = 'aliasdomain' and s.active = 'y' AND t.active = 'y' AND s.server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_gids.cf.master b/install/tpl/mysql-virtual_gids.cf.master
index 7c7d995fc9..5611b935dd 100644
--- a/install/tpl/mysql-virtual_gids.cf.master
+++ b/install/tpl/mysql-virtual_gids.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = gid
-where_field = email
-additional_conditions = and postfix = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select gid from mail_user where email = '%s' and postfix = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_mailboxes.cf.master b/install/tpl/mysql-virtual_mailboxes.cf.master
index 2fe47bbdf5..97825f9ffc 100644
--- a/install/tpl/mysql-virtual_mailboxes.cf.master
+++ b/install/tpl/mysql-virtual_mailboxes.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
-where_field = login
-additional_conditions = and postfix = 'y' and server_id = {server_id}
 hosts = {mysql_server_ip}
+query = select CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') from mail_user where login = '%s' and postfix = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf b/install/tpl/mysql-virtual_outgoing_bcc.cf
deleted file mode 100644
index 78fca41a2f..0000000000
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf
+++ /dev/null
@@ -1,8 +0,0 @@
-user = {mysql_server_ispconfig_user}
-password = {mysql_server_ispconfig_password}
-dbname = {mysql_server_database}
-table = mail_user
-select_field = sender_cc
-where_field = email
-additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disables$
-hosts = {mysql_server_ip}
\ No newline at end of file
diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
index 53afa53106..9554847a9f 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = sender_cc
-where_field = email
-additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disablesmtp = 'n' and sender_cc != ''
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select sender_cc from mail_user where email = '%s' and postfix = 'y' and disabledeliver = 'n' and disablesmtp = 'n' and sender_cc != ''
diff --git a/install/tpl/mysql-virtual_policy_greylist.cf.master b/install/tpl/mysql-virtual_policy_greylist.cf.master
index 55378b29ca..6ad282324e 100644
--- a/install/tpl/mysql-virtual_policy_greylist.cf.master
+++ b/install/tpl/mysql-virtual_policy_greylist.cf.master
@@ -1,10 +1,9 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
 query = SELECT 'greylisting' FROM
   (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' 
   UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' 
   UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1) as rules 
   WHERE rules.greylisting = 'y'
-
-hosts = {mysql_server_ip}
diff --git a/install/tpl/mysql-virtual_recipient.cf.master b/install/tpl/mysql-virtual_recipient.cf.master
index 49024f3ebd..2099966df2 100644
--- a/install/tpl/mysql-virtual_recipient.cf.master
+++ b/install/tpl/mysql-virtual_recipient.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table        = mail_access
-select_field = access
-where_field  = source
-additional_conditions = and type = 'recipient' and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select access from mail_access where source = '%s' and type = 'recipient' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_relaydomains.cf.master b/install/tpl/mysql-virtual_relaydomains.cf.master
index fb7bec1a3a..5ce2db6954 100644
--- a/install/tpl/mysql-virtual_relaydomains.cf.master
+++ b/install/tpl/mysql-virtual_relaydomains.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_transport
-select_field = domain
-where_field = domain
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select domain from mail_transport where domain = '%s' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_relayrecipientmaps.cf.master b/install/tpl/mysql-virtual_relayrecipientmaps.cf.master
index a6304fe323..ea67220215 100644
--- a/install/tpl/mysql-virtual_relayrecipientmaps.cf.master
+++ b/install/tpl/mysql-virtual_relayrecipientmaps.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_relay_recipient
-select_field = access
-where_field = source
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select access from mail_relay_recipient where source = '%s' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_sender.cf.master b/install/tpl/mysql-virtual_sender.cf.master
index 0ef634aec7..1a5c4cb877 100644
--- a/install/tpl/mysql-virtual_sender.cf.master
+++ b/install/tpl/mysql-virtual_sender.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table        = mail_access
-select_field = access
-where_field  = source
-additional_conditions = and type = 'sender' and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select access from mail_access where source = '%s' and type = 'sender' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_sender_login_maps.cf.master b/install/tpl/mysql-virtual_sender_login_maps.cf.master
index 5b7f144f8c..b51bddc96d 100644
--- a/install/tpl/mysql-virtual_sender_login_maps.cf.master
+++ b/install/tpl/mysql-virtual_sender_login_maps.cf.master
@@ -1,5 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
 query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND allow_send_as = 'y' AND server_id = {server_id} UNION SELECT email FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id};
-hosts = {mysql_server_ip}
\ No newline at end of file
diff --git a/install/tpl/mysql-virtual_transports.cf.master b/install/tpl/mysql-virtual_transports.cf.master
index 048a7a81ac..e9585ca6cc 100644
--- a/install/tpl/mysql-virtual_transports.cf.master
+++ b/install/tpl/mysql-virtual_transports.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_transport
-select_field = transport
-where_field = domain
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select transport from mail_transport where domain = '%s' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_uids.cf.master b/install/tpl/mysql-virtual_uids.cf.master
index da3cd7c2a0..de35368c0a 100644
--- a/install/tpl/mysql-virtual_uids.cf.master
+++ b/install/tpl/mysql-virtual_uids.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = uid
-where_field = email
-additional_conditions = and postfix = 'y' and server_id = {server_id}
 hosts = {mysql_server_ip}
+query = select uid from mail_user where email = '%s' and postfix = 'y' and server_id = {server_id}
-- 
GitLab


From 036575e8647a3853a6ab2d847b158a1b50b57301 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 5 Jun 2020 11:44:57 -0600
Subject: [PATCH 463/571] respect outgoing bcc for mail aliases/forwards

---
 install/tpl/mysql-virtual_outgoing_bcc.cf.master | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
index 9554847a9f..26090bce5b 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -2,4 +2,10 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = select sender_cc from mail_user where email = '%s' and postfix = 'y' and disabledeliver = 'n' and disablesmtp = 'n' and sender_cc != ''
+query = SELECT sender_cc FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+        UNION
+        SELECT u.sender_cc
+          FROM mail_user u, mail_forwarding f
+         WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+           AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+           AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-- 
GitLab


From 3e5ff9a0a3972a413adcd4563d5db18670b04da9 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 5 Jun 2020 14:35:18 -0600
Subject: [PATCH 464/571] mail_user.disabledeliver has a checkbox and controls
 if local delivery is performed.  fixed #5011

---
 .../tpl/mysql-virtual_email2email.cf.master   |  6 ++---
 .../mysql-virtual_policy_greylist.cf.master   | 10 +++++---
 .../mysql-virtual_sender_login_maps.cf.master |  4 +++-
 interface/web/mail/form/mail_user.tform.php   |  6 +++++
 interface/web/mail/lib/lang/ar_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/ar_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/bg_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/bg_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/br_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/br_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/ca_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/ca_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/cz_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/cz_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/de_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/de_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/dk_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/dk_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/el_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/el_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/en_mail_user.lng  | 10 +++++---
 .../web/mail/lib/lang/en_mail_user_list.lng   | 23 ++++++++++---------
 interface/web/mail/lib/lang/es_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/es_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/fi_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/fi_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/fr_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/fr_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/hr_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/hr_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/hu_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/hu_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/id_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/id_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/it_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/it_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/ja_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/ja_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/nl_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/nl_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/pl_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/pl_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/pt_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/pt_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/ro_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/ro_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/ru_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/ru_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/se_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/se_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/sk_mail_user.lng  |  6 ++++-
 .../web/mail/lib/lang/sk_mail_user_list.lng   |  1 +
 interface/web/mail/lib/lang/tr_mail_user.lng  |  4 ++++
 .../web/mail/lib/lang/tr_mail_user_list.lng   |  1 +
 interface/web/mail/list/mail_user.list.php    |  9 ++++++++
 interface/web/mail/mail_user_edit.php         |  4 ++--
 .../web/mail/templates/mail_user_list.htm     |  3 +++
 .../mail/templates/mail_user_mailbox_edit.htm | 10 ++++++--
 58 files changed, 193 insertions(+), 38 deletions(-)

diff --git a/install/tpl/mysql-virtual_email2email.cf.master b/install/tpl/mysql-virtual_email2email.cf.master
index 68d7f70ba9..17e1cdf0bf 100644
--- a/install/tpl/mysql-virtual_email2email.cf.master
+++ b/install/tpl/mysql-virtual_email2email.cf.master
@@ -2,6 +2,6 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = select email from mail_user where email = '%s' and postfix = 'y' and disabledeliver = 'n' and server_id = {server_id}
-        union
-        select cc as email from mail_user where email = '%s' and postfix = 'y' and disabledeliver = 'y' and server_id = {server_id}
+query = SELECT email FROM mail_user WHERE email = '%s' AND postfix = 'y' AND disabledeliver = 'n' AND server_id = {server_id}
+        UNION
+        SELECT cc AS email FROM mail_user WHERE email = '%s' AND postfix = 'y' AND disabledeliver = 'y' AND server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_policy_greylist.cf.master b/install/tpl/mysql-virtual_policy_greylist.cf.master
index 6ad282324e..5203b1a2ea 100644
--- a/install/tpl/mysql-virtual_policy_greylist.cf.master
+++ b/install/tpl/mysql-virtual_policy_greylist.cf.master
@@ -3,7 +3,11 @@ password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
 query = SELECT 'greylisting' FROM
-  (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' 
-  UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' 
-  UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1) as rules 
+  (
+   SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s'
+   UNION
+   SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s'
+   UNION
+   SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1
+  ) AS rules
   WHERE rules.greylisting = 'y'
diff --git a/install/tpl/mysql-virtual_sender_login_maps.cf.master b/install/tpl/mysql-virtual_sender_login_maps.cf.master
index b51bddc96d..f97229d213 100644
--- a/install/tpl/mysql-virtual_sender_login_maps.cf.master
+++ b/install/tpl/mysql-virtual_sender_login_maps.cf.master
@@ -2,4 +2,6 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND allow_send_as = 'y' AND server_id = {server_id} UNION SELECT email FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id};
+query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND allow_send_as = 'y' AND server_id = {server_id}
+        UNION
+        SELECT email FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id};
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 3d1a8fde7f..19c74121f4 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -292,6 +292,12 @@ $form["tabs"]['mailuser'] = array(
 			'default' => 'n',
 			'value'  => array(1 => 'y', 0 => 'n')
 		),
+		'disabledeliver' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(1 => 'y', 0 => 'n')
+		),
 		'disableimap' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index 9d4828b557..f5a8c82de0 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Aerver_id';
 $wb['password_txt'] = 'Password';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
@@ -56,7 +57,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/ar_mail_user_list.lng b/interface/web/mail/lib/lang/ar_mail_user_list.lng
index 0bb531f785..bf905ed40a 100644
--- a/interface/web/mail/lib/lang/ar_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 1b9595da42..f0b446904d 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -16,6 +16,7 @@ $wb['server_id_txt'] = 'server_id';
 $wb['password_txt'] = 'парола';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Разреши получаване';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Разреши достъп';
 $wb['policy_txt'] = 'Спам филтър';
@@ -50,7 +51,10 @@ $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/bg_mail_user_list.lng b/interface/web/mail/lib/lang/bg_mail_user_list.lng
index 9ccdb51124..f761ea4f23 100644
--- a/interface/web/mail/lib/lang/bg_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Истинско име';
 $wb['login_txt'] = 'Вход';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index 2abe1931f6..3ff0114ecd 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -24,6 +24,7 @@ $wb['password_txt'] = 'Senha';
 $wb['password_click_to_set_txt'] = 'Clique para configurar';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Habilitar recebimento';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Habilitar greylist';
 $wb['access_txt'] = 'Habilitar acesso';
 $wb['policy_txt'] = 'Filtros anti-spam';
@@ -31,6 +32,9 @@ $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'O limite de contas de e-mail para esta conta foi alcançado.';
 $wb['limit_mailquota_txt'] = 'O limite de tamanho para as contas de e-mails foi alcançado. O espaço disponível em MB é';
 $wb['disablesmtp_txt'] = 'Desabilitar SMTP (envio)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['disableimap_txt'] = 'Desabilitar IMAP';
 $wb['disablepop3_txt'] = 'Desabilitar POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Já existe um alias ou encaminhamento para este endereço de e-mail.';
diff --git a/interface/web/mail/lib/lang/br_mail_user_list.lng b/interface/web/mail/lib/lang/br_mail_user_list.lng
index 3cd9c51740..01db690515 100644
--- a/interface/web/mail/lib/lang/br_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nome real';
 $wb['login_txt'] = 'acesso';
 $wb['postfix_txt'] = 'Recebendo';
 $wb['disablesmtp_txt'] = 'SMTP (envio)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index 08c9bc78ec..2c63fa3353 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -16,6 +16,7 @@ $wb['server_id_txt'] = 'ID Serveur';
 $wb['password_txt'] = 'Mot de passe';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Activer l\'accès';
 $wb['policy_txt'] = 'Filtre antispam';
 $wb['inherit_policy'] = '- Inherit domain setting -';
@@ -48,6 +49,9 @@ $wb['repeat_password_txt'] = 'Retaper le mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
 $wb['disablesmtp_txt'] = 'Désactiver SMTP (envoi)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Séparer chaque adresses par une virgule)';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
diff --git a/interface/web/mail/lib/lang/ca_mail_user_list.lng b/interface/web/mail/lib/lang/ca_mail_user_list.lng
index c3b79e38be..8d6ae9c30e 100644
--- a/interface/web/mail/lib/lang/ca_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nom véritable';
 $wb['login_txt'] = 'Nom d\'utilisateur';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index fb09f0c0a0..ca113dc74c 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server_id';
 $wb['password_txt'] = 'Heslo';
 $wb['maildir_txt'] = 'E-mailový adresář';
 $wb['postfix_txt'] = 'Povolit příjem';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Povolit přístup';
 $wb['policy_txt'] = 'Spamový filtr';
 $wb['inherit_policy'] = '- Inherit domain setting -';
@@ -50,6 +51,9 @@ $wb['password_match_txt'] = 'Hesla se shodují.';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Při posílání kopií na více e-mailových adres, oddělte čárkami.)';
 $wb['disablesmtp_txt'] = 'Zakázat SMTP (pouze odesílání)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['greylisting_txt'] = 'Povolit greylisting';
 $wb['sender_cc_txt'] = 'Odeslat odchozí kopii na';
diff --git a/interface/web/mail/lib/lang/cz_mail_user_list.lng b/interface/web/mail/lib/lang/cz_mail_user_list.lng
index e4e2241599..dcca69d8fe 100644
--- a/interface/web/mail/lib/lang/cz_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Skutečný název';
 $wb['login_txt'] = 'Přihlášení';
 $wb['postfix_txt'] = 'Příjem';
 $wb['disablesmtp_txt'] = 'SMTP (odesílání)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index e653fbe288..61b933d73a 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -17,6 +17,7 @@ $wb['server_id_txt'] = 'Server ID';
 $wb['password_txt'] = 'Passwort';
 $wb['maildir_txt'] = 'E-Mail Verzeichnis';
 $wb['postfix_txt'] = 'Aktiviere Empfang';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Aktiviere Greylisting';
 $wb['access_txt'] = 'Aktiviere Zugriff';
 $wb['policy_txt'] = 'Spamfilter';
@@ -24,6 +25,9 @@ $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Die maximale Anzahl an E-Mailkonten für Ihr Konto wurde erreicht.';
 $wb['limit_mailquota_txt'] = 'Der maximale Speicherplatz für Ihr E-Mail Konto wurde erreicht. Der maximal verfügbare Speicher in MB ist';
 $wb['disablesmtp_txt'] = 'SMTP (Mailversand) deaktivieren';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['disableimap_txt'] = 'IMAP deaktivieren';
 $wb['disablepop3_txt'] = 'POP3 deaktivieren';
 $wb['password_strength_txt'] = 'Passwortkomplexität';
diff --git a/interface/web/mail/lib/lang/de_mail_user_list.lng b/interface/web/mail/lib/lang/de_mail_user_list.lng
index 5eeff280c2..255b25612f 100644
--- a/interface/web/mail/lib/lang/de_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/de_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Anmelden';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index 34bf076359..84b7744874 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -22,12 +22,16 @@ $wb['server_id_txt'] = 'Server ID';
 $wb['password_txt'] = 'Adgangskode';
 $wb['maildir_txt'] = 'Mailmappe';
 $wb['postfix_txt'] = 'Aktiver modtagelse';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Aktiver adgang';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Max. antal af mailbokse for din konto er nået.';
 $wb['limit_mailquota_txt'] = 'Max. plads for postkasser er nået. Max. tilgængelig plads i MB er';
 $wb['disablesmtp_txt'] = 'Deaktiver SMTP (afsending)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['disableimap_txt'] = 'Deaktiver IMAP';
 $wb['disablepop3_txt'] = 'Deaktiver POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Der er allerede et alias eller forward for denne e-mail adresse.';
diff --git a/interface/web/mail/lib/lang/dk_mail_user_list.lng b/interface/web/mail/lib/lang/dk_mail_user_list.lng
index ac07bb92b3..fc3afb7c46 100644
--- a/interface/web/mail/lib/lang/dk_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Navn';
 $wb['login_txt'] = 'Log ind';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index 76c266d591..1d15de986b 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Aerver_id';
 $wb['password_txt'] = 'Συνθηματικό';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Ενεργοποίηση Λήψης';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Ενεργοποίηση Πρόσβασης';
 $wb['policy_txt'] = 'Φίλτρο Spam';
@@ -48,7 +49,10 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
diff --git a/interface/web/mail/lib/lang/el_mail_user_list.lng b/interface/web/mail/lib/lang/el_mail_user_list.lng
index 98cf9c200d..4a53225186 100644
--- a/interface/web/mail/lib/lang/el_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/el_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Πραγματικό Όνομα';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 69ac0a00a9..7307a77379 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -23,19 +23,23 @@ $wb["server_id_txt"] = 'Aerver_id';
 $wb["password_txt"] = 'Password';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb["maildir_txt"] = 'Maildir';
-$wb["postfix_txt"] = 'Enable receiving';
+$wb['postfix_txt'] = 'Enable receiving';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb["access_txt"] = 'Enable access';
 $wb["policy_txt"] = 'Spamfilter';
 $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb["limit_mailbox_txt"] = 'The max. number of mailboxes for your account is reached.';
 $wb["limit_mailquota_txt"] = 'The max space for mailboxes is reached. The max. available space in MB is';
-$wb["disablesmtp_txt"] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb["disableimap_txt"] = 'Disable IMAP';
 $wb["disablepop3_txt"] = 'Disable POP3';
 $wb["duplicate_alias_or_forward_txt"] = 'There is already an alias or forward with this email address.';
 $wb["quota_error_value"] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
-$wb["move_junk_txt"] = 'Move Spam Emails to Junk directory.';
+$wb["move_junk_txt"] = 'Move Spam Emails to Junk folder.';
 $wb["name_txt"] = 'Name';
 $wb["name_optional_txt"] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
diff --git a/interface/web/mail/lib/lang/en_mail_user_list.lng b/interface/web/mail/lib/lang/en_mail_user_list.lng
index c7b0a43ad2..bf905ed40a 100644
--- a/interface/web/mail/lib/lang/en_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_user_list.lng
@@ -1,12 +1,13 @@
 <?php
-$wb["list_head_txt"] = 'Mailbox';
-$wb["email_txt"] = 'Email';
-$wb["autoresponder_txt"] = 'Autoresponder';
-$wb["add_new_record_txt"] = 'Add new Mailbox';
-$wb["name_txt"] = 'Realname';
-$wb["login_txt"] = 'Login';
-$wb["postfix_txt"] = 'Receiving';
-$wb["disablesmtp_txt"] = 'SMTP (sending)';
-$wb["disableimap_txt"] = 'IMAP';
-$wb["disablepop3_txt"] = 'POP3';
-?>
\ No newline at end of file
+$wb['list_head_txt'] = 'Mailbox';
+$wb['email_txt'] = 'Email';
+$wb['autoresponder_txt'] = 'Autoresponder';
+$wb['add_new_record_txt'] = 'Add new Mailbox';
+$wb['name_txt'] = 'Realname';
+$wb['login_txt'] = 'Login';
+$wb['postfix_txt'] = 'Receiving';
+$wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
+$wb['disableimap_txt'] = 'IMAP';
+$wb['disablepop3_txt'] = 'POP3';
+?>
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index be329c304a..f22e051031 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -22,6 +22,9 @@ $wb['daily_backup_txt'] = 'Diariamente';
 $wb['disableimap_txt'] = 'Deshabilitar IMAP';
 $wb['disablepop3_txt'] = 'Deshabilitar POP3';
 $wb['disablesmtp_txt'] = 'Deshabilitar SMTP (envío)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['domain_txt'] = 'Dominio';
 $wb['duplicate_alias_or_forward_txt'] = 'Ya existe un alias o reenvío con esta dirección de correo.';
 $wb['email_error_isascii'] = 'Por favor, no use caracteres unicode especiales en su contraseña. Esto puede conllevar a errores en su cliente de correo.';
@@ -52,6 +55,7 @@ $wb['password_strength_txt'] = 'Seguridad de la contraseña';
 $wb['password_txt'] = 'Contraseña';
 $wb['policy_txt'] = 'Filtro de spam';
 $wb['postfix_txt'] = 'Habilitar recepción';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['quota_error_isint'] = 'La cuota debe ser un número.';
 $wb['quota_error_value'] = 'La cuota es inválida. Los valores permitidos son: 0 para cuota ilimitada o una cantidad superior a 1';
 $wb['quota_txt'] = 'Cuota (0 para ilimitada)';
diff --git a/interface/web/mail/lib/lang/es_mail_user_list.lng b/interface/web/mail/lib/lang/es_mail_user_list.lng
index 43a09d2808..19a2129307 100644
--- a/interface/web/mail/lib/lang/es_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/es_mail_user_list.lng
@@ -4,6 +4,7 @@ $wb['autoresponder_txt'] = 'Auto respuesta';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 $wb['disablesmtp_txt'] = 'SMTP (envío)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['email_txt'] = 'Correo';
 $wb['list_head_txt'] = 'Buzón';
 $wb['login_txt'] = 'Entrar';
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index 45ea1d9b8b..549f4048a6 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -15,6 +15,7 @@ $wb['server_id_txt'] = 'Palvelimen tunnus';
 $wb['password_txt'] = 'Salasana';
 $wb['maildir_txt'] = 'Postikansio';
 $wb['postfix_txt'] = 'Salli vastaanotto';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Salli yhteys';
 $wb['policy_txt'] = 'Roskapostisuodatin';
@@ -56,7 +57,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/fi_mail_user_list.lng b/interface/web/mail/lib/lang/fi_mail_user_list.lng
index ee3f2cec45..fefb8b0b79 100644
--- a/interface/web/mail/lib/lang/fi_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Oikea nimi';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 8df58233a3..2f131cb31d 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -16,6 +16,7 @@ $wb['server_id_txt'] = 'ID Serveur';
 $wb['password_txt'] = 'Mot de passe';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Activer l’accès';
 $wb['policy_txt'] = 'Filtre antispam';
 $wb['inherit_policy'] = '- Inherit domain setting -';
@@ -48,6 +49,9 @@ $wb['repeat_password_txt'] = 'Répéter le mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
 $wb['disablesmtp_txt'] = 'Désactiver SMTP (envoi)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['email_error_isascii'] = 'Merci de ne pas utiliser de caractères spéciaux Unicode dans votre mot de passe. Ceci pourrait engendrer des problèmes avec votre client mail.';
 $wb['cc_note_txt'] = '(Séparer les adresses e-mail multiples par des virgules)';
 $wb['autoresponder_start_date_is_required'] = 'Une date de démarrage doit être renseignée quand le répondeur automatique est activé.';
diff --git a/interface/web/mail/lib/lang/fr_mail_user_list.lng b/interface/web/mail/lib/lang/fr_mail_user_list.lng
index 0d4152913a..79e999b639 100644
--- a/interface/web/mail/lib/lang/fr_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nom véritable';
 $wb['login_txt'] = 'Nom d’utilisateur';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 170aaa6b61..8885a212f4 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -20,6 +20,7 @@ $wb['password_txt'] = 'Å ifra';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
@@ -53,7 +54,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/hr_mail_user_list.lng b/interface/web/mail/lib/lang/hr_mail_user_list.lng
index 498570c344..1c27b725d3 100644
--- a/interface/web/mail/lib/lang/hr_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Ime';
 $wb['login_txt'] = 'Prijava';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index 65962cd21c..22ccb86b73 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -16,6 +16,7 @@ $wb['password_txt'] = 'Jelszó';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'levelezőláda';
 $wb['postfix_txt'] = 'Bejövő engedélyezés';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Hozzáférés engelyezés';
 $wb['policy_txt'] = 'Spam szűrő';
@@ -57,7 +58,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/hu_mail_user_list.lng b/interface/web/mail/lib/lang/hu_mail_user_list.lng
index 8bf44e936c..7f1ec6265b 100644
--- a/interface/web/mail/lib/lang/hu_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Név';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index 3bedbd9b93..f7aef165be 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -21,6 +21,7 @@ $wb['password_txt'] = 'Kata Sandi';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Dapat Menerima';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Dapat Mengakses';
 $wb['policy_txt'] = 'Spamfilter';
@@ -57,7 +58,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/id_mail_user_list.lng b/interface/web/mail/lib/lang/id_mail_user_list.lng
index 49a2afe943..3127853a0e 100644
--- a/interface/web/mail/lib/lang/id_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/id_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nama Lengkap';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index a1a0f8cfd5..0fd610c22e 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'password';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Abilita ricezione';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Abilita indirizzo';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['inherit_policy'] = '- Inherit domain setting -';
@@ -51,6 +52,9 @@ $wb['password_match_txt'] = 'Le passwords coincidono.';
 $wb['email_error_isascii'] = 'Non utilizzare caratteri speciali unicode per la password. Potresti avere problemi con il tuo client di psota.';
 $wb['cc_note_txt'] = '(Separa indirizzi email multipli con la virgola)';
 $wb['disablesmtp_txt'] = 'Disabilita SMTP (trasmissione)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
diff --git a/interface/web/mail/lib/lang/it_mail_user_list.lng b/interface/web/mail/lib/lang/it_mail_user_list.lng
index 098cb1a162..87038b875e 100644
--- a/interface/web/mail/lib/lang/it_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nome reale';
 $wb['login_txt'] = 'Accedi';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index b58b9d13dd..55c48abe03 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'パスワード';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'メールディレクトリ';
 $wb['postfix_txt'] = 'メールを受信する';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'アクセスを許可する';
 $wb['policy_txt'] = 'スパムフィルター';
@@ -57,7 +58,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/ja_mail_user_list.lng b/interface/web/mail/lib/lang/ja_mail_user_list.lng
index 0bb531f785..bf905ed40a 100644
--- a/interface/web/mail/lib/lang/ja_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 9a644a129b..d66c64a9b6 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -20,6 +20,7 @@ $wb['password_txt'] = 'Wachtwoord';
 $wb['password_click_to_set_txt'] = 'Klik om in te stellen';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Ontvangen inschakelen';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Greylisting inschakelen';
 $wb['access_txt'] = 'Toegang inschakelen';
 $wb['policy_txt'] = 'Spamfilter';
@@ -57,6 +58,9 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 $wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Een startdatun is vereist voor het inschakelen van Autobeantwoorden.';
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
 $wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
diff --git a/interface/web/mail/lib/lang/nl_mail_user_list.lng b/interface/web/mail/lib/lang/nl_mail_user_list.lng
index 39125af2e0..da872b2c28 100644
--- a/interface/web/mail/lib/lang/nl_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Echte naam';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Ontvangen';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index 593f83531e..91b33eb06f 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'Hasło';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Zezwól na odbiór poczty';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Możliwy dostęp';
 $wb['policy_txt'] = 'Filtr spamu';
@@ -57,7 +58,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/pl_mail_user_list.lng b/interface/web/mail/lib/lang/pl_mail_user_list.lng
index 74ca840e30..f839a56720 100644
--- a/interface/web/mail/lib/lang/pl_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nazwa rzeczywista';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index 0b7ffe3d37..edbe7f9522 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'Senha';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Permitir Recepção';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Permitir Acesso';
 $wb['policy_txt'] = 'Spamfilter';
@@ -57,7 +58,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/pt_mail_user_list.lng b/interface/web/mail/lib/lang/pt_mail_user_list.lng
index fe89939e2b..9f19168fba 100644
--- a/interface/web/mail/lib/lang/pt_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index 97dfdafd88..b9de9b56f9 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'Password';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
@@ -57,7 +58,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/ro_mail_user_list.lng b/interface/web/mail/lib/lang/ro_mail_user_list.lng
index f55f8647a8..3eda064b75 100644
--- a/interface/web/mail/lib/lang/ro_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index 07bab6fd4f..ae6b06c084 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -16,6 +16,7 @@ $wb['password_txt'] = 'Пароль';
 $wb['password_click_to_set_txt'] = 'Клик для установки';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Разрешить получение';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Включить серый список (Greylisting)';
 $wb['access_txt'] = 'Включить доступ';
 $wb['policy_txt'] = 'Спам-фильтр';
@@ -58,6 +59,9 @@ $wb['monthly_backup_txt'] = 'Ежемесячно';
 $wb['email_error_isascii'] = 'Пожалуйста, не используйте специальные символы Юникода для вашего пароля. Это может привести к проблемам с вашим почтовым клиентом.';
 $wb['cc_note_txt'] = '(Разделите несколько адресов электронной почты запятыми)';
 $wb['disablesmtp_txt'] = 'Отключить SMTP (отправка)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Дата начала должна быть установлена когда автоответчик включен.';
 $wb['sender_cc_txt'] = 'Отправка исходящей копии на';
 $wb['sender_cc_error_isemail'] = 'Поле -Отправка исходящей копии на- не содержит действительный адрес электронной почты';
diff --git a/interface/web/mail/lib/lang/ru_mail_user_list.lng b/interface/web/mail/lib/lang/ru_mail_user_list.lng
index 7dad47a416..d323d34750 100644
--- a/interface/web/mail/lib/lang/ru_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Реальное имя';
 $wb['login_txt'] = 'Логин';
 $wb['postfix_txt'] = 'Получатель';
 $wb['disablesmtp_txt'] = 'SMTP (отправка)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index da0282e118..26787d2a87 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'lösenord';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Aktivera mottagning';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Aktivera åtkomst';
 $wb['policy_txt'] = 'Spamfilter';
@@ -57,7 +58,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/se_mail_user_list.lng b/interface/web/mail/lib/lang/se_mail_user_list.lng
index 65c724c292..4f6a7305d6 100644
--- a/interface/web/mail/lib/lang/se_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Riktigt namn';
 $wb['login_txt'] = 'Logga in';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index d9a68404ae..176e879a90 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'Heslo';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Mailová záložka';
 $wb['postfix_txt'] = 'Povoliť príjem';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Povoliť Prístup';
 $wb['policy_txt'] = 'Spamfilter';
@@ -57,7 +58,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/sk_mail_user_list.lng b/interface/web/mail/lib/lang/sk_mail_user_list.lng
index 3d18ad41f6..3a341f0967 100644
--- a/interface/web/mail/lib/lang/sk_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 9e964e5e8a..39939b4e19 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -24,6 +24,7 @@ $wb['password_txt'] = 'Parola';
 $wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
 $wb['maildir_txt'] = 'E-posta Klasörü';
 $wb['postfix_txt'] = 'Alım Etkin';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 $wb['access_txt'] = 'EriÅŸim Etkin';
 $wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
@@ -31,6 +32,9 @@ $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta kutusu sayısına ulaştınız.';
 $wb['limit_mailquota_txt'] = 'E-posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
 $wb['disablesmtp_txt'] = 'SMTP Kullanılmasın (gönderim)';
+$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
+$wb['disabledeliver_txt'] = 'Disable (local) delivering';
+$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
 $wb['disableimap_txt'] = 'IMAP Kullanılmasın';
 $wb['disablepop3_txt'] = 'POP3 Kullanılmasın';
 $wb['duplicate_alias_or_forward_txt'] = 'Bu e-posta adresi zaten takma ya da yönlendirilmiş.';
diff --git a/interface/web/mail/lib/lang/tr_mail_user_list.lng b/interface/web/mail/lib/lang/tr_mail_user_list.lng
index 66d33becae..3137af8928 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Gerçek Ad';
 $wb['login_txt'] = 'Oturum Aç';
 $wb['postfix_txt'] = 'Alınıyor';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/list/mail_user.list.php b/interface/web/mail/list/mail_user.list.php
index 4513a516c9..3e020ea603 100644
--- a/interface/web/mail/list/mail_user.list.php
+++ b/interface/web/mail/list/mail_user.list.php
@@ -107,6 +107,15 @@ $liste["item"][] = array( 'field'  => "disablesmtp",
 	'width'  => "",
 	'value'  => array('n' => $app->lng('yes_txt'), 'y' => $app->lng('no_txt')));
 
+$liste["item"][] = array( 'field'  => "disabledeliver",
+	'datatype' => "VARCHAR",
+	'formtype' => "SELECT",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
+	'width'  => "",
+	'value'  => array('n' => $app->lng('yes_txt'), 'y' => $app->lng('no_txt')));
+
 $liste["item"][] = array( 'field'  => "disableimap",
 	'datatype' => "VARCHAR",
 	'formtype' => "SELECT",
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 83a02e0ed2..1dca1db848 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -310,8 +310,8 @@ class page_action extends tform_actions {
 		if(isset($this->dataRecord["email"])) {
 			$disableimap = ($this->dataRecord["disableimap"])?'y':'n';
 			$disablepop3 = ($this->dataRecord["disablepop3"])?'y':'n';
-			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = ($this->dataRecord["disablesmtp"])?'y':'n';
+			$disabledeliver = ($this->dataRecord["disabledeliver"])?'y':'n';
 
 			$app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $this->id);
 			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disablelmtp = ? WHERE mailuser_id = ?";
@@ -363,8 +363,8 @@ class page_action extends tform_actions {
 		if(isset($this->dataRecord["email"])) {
 			$disableimap = (isset($this->dataRecord["disableimap"]) && $this->dataRecord["disableimap"])?'y':'n';
 			$disablepop3 = (isset($this->dataRecord["disablepop3"]) && $this->dataRecord["disablepop3"])?'y':'n';
-			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = (isset($this->dataRecord["disablesmtp"]) && $this->dataRecord["disablesmtp"])?'y':'n';
+			$disabledeliver = (isset($this->dataRecord["disabledeliver"]) && $this->dataRecord["disabledeliver"])?'y':'n';
 
 			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disablelmtp = ? WHERE mailuser_id = ?";
 			$app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disabledeliver, $this->id);
diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm
index 6d800de57e..6cd5961fcc 100644
--- a/interface/web/mail/templates/mail_user_list.htm
+++ b/interface/web/mail/templates/mail_user_list.htm
@@ -38,6 +38,7 @@
                         <th class="tiny-col" data-column="autoresponder"><tmpl_var name="autoresponder_txt"></th>
                         <th class="tiny-col" data-column="postfix"><tmpl_var name="postfix_txt"></th>
                         <th class="tiny-col" data-column="disablesmtp"><tmpl_var name="disablesmtp_txt"></th>
+                        <th class="tiny-col" data-column="disabledeliver"><tmpl_var name="disabledeliver_txt"></th>
                         <th class="tiny-col" data-column="disableimap"><tmpl_var name="disableimap_txt"></th>
                         <th class="tiny-col" data-column="disablepop3"><tmpl_var name="disablepop3_txt"></th>
                         <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
@@ -49,6 +50,7 @@
                         <td><select class="form-control" name="search_autoresponder">{tmpl_var name='search_autoresponder'}</select></td>
                         <td><select class="form-control" name="search_postfix">{tmpl_var name='search_postfix'}</select></td>
                         <td><select class="form-control" name="search_disablesmtp">{tmpl_var name='search_disablesmtp'}</select></td>
+                        <td><select class="form-control" name="search_disabledeliver">{tmpl_var name='search_disabledeliver'}</select></td>
                         <td><select class="form-control" name="search_disableimap">{tmpl_var name='search_disableimap'}</select></td>
                         <td><select class="form-control" name="search_disablepop3">{tmpl_var name='search_disablepop3'}</select></td>
                         <td class="text-right">
@@ -69,6 +71,7 @@
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="autoresponder"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="postfix"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disablesmtp"}</a></td>
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disabledeliver"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disableimap"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disablepop3"}</a></td>
                         <td class="text-right">
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm
index a90799cf11..c53bc85292 100644
--- a/interface/web/mail/templates/mail_user_mailbox_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm
@@ -67,13 +67,19 @@
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='postfix_txt'}</label>
                 <div class="col-sm-9">
-                    {tmpl_var name='postfix'}
+                    <a href="#" data-toggle="tooltip" title="{tmpl_var name='tooltip_postfix_txt'}">{tmpl_var name='postfix'}</a>
                 </div>
             </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='disablesmtp_txt'}</label>
                 <div class="col-sm-9">
-                    {tmpl_var name='disablesmtp'}
+                    <a href="#" data-toggle="tooltip" title="{tmpl_var name='tooltip_disablesmtp_txt'}">{tmpl_var name='disablesmtp'}</a>
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='disabledeliver_txt'}</label>
+                <div class="col-sm-9">
+                    <a href="#" data-toggle="tooltip" title="{tmpl_var name='tooltip_disabledeliver_txt'}">{tmpl_var name='disabledeliver'}</a>
                 </div>
             </div>
             <div class="form-group">
-- 
GitLab


From 4339dba0f7b6b8b800bceb977ec64985c5556234 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 9 Jul 2020 12:53:52 -0600
Subject: [PATCH 465/571] split multiple sender_cc addrs on comma

---
 .../tpl/mysql-virtual_outgoing_bcc.cf.master  | 118 +++++++++++++++++-
 1 file changed, 112 insertions(+), 6 deletions(-)

diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
index 26090bce5b..a46835c235 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -2,10 +2,116 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = SELECT sender_cc FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+query = SELECT sender_cc FROM (
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                   SUBSTRING_INDEX(sender_cc, ',', 1) AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 1, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 2), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 2, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 3), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 3, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 4), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 4, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 5), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 5, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 6), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 6, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 7), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 7, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 8), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 8, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 9), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 9, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 10), ',', -1), '') AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+	) table1 WHERE sender_cc != ''
         UNION
-        SELECT u.sender_cc
-          FROM mail_user u, mail_forwarding f
-         WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-           AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-           AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+        SELECT sender_cc FROM (
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                   SUBSTRING_INDEX(u.sender_cc, ',', 1) AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 1, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 2), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 2, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 3), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 3, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 4), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 4, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 5), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 5, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 6), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 6, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 7), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 7, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 8), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 8, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 9), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+            UNION
+            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
+                IF(@num_sender_cc > 9, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 10), ',', -1), '') AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
+        ) table2 WHERE sender_cc != ''
-- 
GitLab


From f8cc822f5cdcbbf46f2bfd15fa274537c5e710f6 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 9 Jul 2020 16:18:03 -0600
Subject: [PATCH 466/571] sender_cc should only have one email address.  fixes
 #5298

---
 .../tpl/mysql-virtual_outgoing_bcc.cf.master  | 105 +-----------------
 interface/web/mail/form/mail_user.tform.php   |   6 +-
 interface/web/mail/lib/lang/ar_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/bg_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/br_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/ca_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/cz_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/de_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/dk_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/el_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/en_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/es_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/fi_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/fr_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/hr_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/hu_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/id_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/it_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/ja_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/nl_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/pl_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/pt_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/ro_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/ru_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/se_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/sk_mail_user.lng  |   2 +-
 interface/web/mail/lib/lang/tr_mail_user.lng  |   2 +-
 27 files changed, 30 insertions(+), 131 deletions(-)

diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
index a46835c235..bea39f8451 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -7,111 +7,10 @@ query = SELECT sender_cc FROM (
                    SUBSTRING_INDEX(sender_cc, ',', 1) AS sender_cc
               FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
             UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 1, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 2), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 2, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 3), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 3, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 4), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 4, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 5), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 5, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 6), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 6, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 7), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 7, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 8), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 8, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 9), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 9, SUBSTRING_INDEX(SUBSTRING_INDEX(sender_cc, ',', 10), ',', -1), '') AS sender_cc
-              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
-	) table1 WHERE sender_cc != ''
-        UNION
-        SELECT sender_cc FROM (
             SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
                    SUBSTRING_INDEX(u.sender_cc, ',', 1) AS sender_cc
               FROM mail_user u, mail_forwarding f
              WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
                AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 1, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 2), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 2, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 3), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 3, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 4), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 4, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 5), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 5, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 6), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 6, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 7), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 7, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 8), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 8, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 9), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-            UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                IF(@num_sender_cc > 9, SUBSTRING_INDEX(SUBSTRING_INDEX(u.sender_cc, ',', 10), ',', -1), '') AS sender_cc
-              FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
-               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
-               AND f.source = '%s' AND f.active = 'y' AND f.allow_send_as = 'y' AND f.server_id = {server_id}
-        ) table2 WHERE sender_cc != ''
+               AND f.source = '%s' AND f.allow_send_as = 'y' AND f.active = 'y' AND f.server_id = {server_id}
+        ) table1 WHERE sender_cc != '' LIMIT 1
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 19c74121f4..9a5f1889d8 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -199,14 +199,14 @@ $form["tabs"]['mailuser'] = array(
 				2 => array( 'event' => 'SAVE',
 					'type' => 'TOLOWER')
 			),
-			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex'=>'/^(\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,63}){0,1}(,\s*\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,63}){0,}$/i',
+			'validators' => array (  0 => array ( 'type' => 'ISEMAIL',
 					'errmsg'=> 'sender_cc_error_isemail'),
 			),
 			'default' => '',
 			'value'  => '',
 			'width'  => '30',
-			'maxlength' => '255'
+			'maxlength' => '255',
+			'searchable' => 2
 		),
 		'maildir' => array (
 			'datatype' => 'VARCHAR',
diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index f5a8c82de0..532386d411 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -64,7 +64,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index f0b446904d..b90a53498c 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -64,7 +64,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index 3ff0114ecd..01a2d6a086 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -65,7 +65,7 @@ $wb['weekly_backup_txt'] = 'Semanal';
 $wb['monthly_backup_txt'] = 'Mensal';
 $wb['email_error_isascii'] = 'Por favor, não use caracteres especiais para a senha. Isto poderá causar problemas no cliente de e-mail.';
 $wb['cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
-$wb['sender_cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index 2c63fa3353..247c061897 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -64,7 +64,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index ca113dc74c..db31f402d9 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -64,7 +64,7 @@ $wb['no_backup_txt'] = 'Žádná záloha';
 $wb['daily_backup_txt'] = 'Denní';
 $wb['weekly_backup_txt'] = 'Týdenní';
 $wb['monthly_backup_txt'] = 'Měsíční';
-$wb['sender_cc_note_txt'] = '(Při posílání kopií na více e-mailových adres, oddělte čárkami.) ';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Pro nastavení klikni zde';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index 61b933d73a..a0975a18ff 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -64,7 +64,7 @@ $wb['cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
 $wb['autoresponder_start_date_is_required'] = 'Startdatum muss angegeben werden.';
 $wb['sender_cc_txt'] = 'Kopie ausgehender Emails senden an (BCC)';
 $wb['sender_cc_error_isemail'] = '-Kopie ausgehender Emails senden an- Feld enthält keine gültige Emailadresse';
-$wb['sender_cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index 84b7744874..e467053890 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -65,7 +65,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index 1d15de986b..1fefb9de62 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -64,7 +64,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 7307a77379..33bd19b45d 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -65,7 +65,7 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index f22e051031..97404c9451 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -61,7 +61,7 @@ $wb['quota_error_value'] = 'La cuota es inválida. Los valores permitidos son: 0
 $wb['quota_txt'] = 'Cuota (0 para ilimitada)';
 $wb['repeat_password_txt'] = 'Repetir contraseña';
 $wb['sender_cc_error_isemail'] = 'El campo -Enviar copia a- no contiene una dirección de correo válida';
-$wb['sender_cc_note_txt'] = '(Separe múltiples cuentas de correo con comas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['sender_cc_txt'] = 'Enviar copia saliente a';
 $wb['server_id_txt'] = 'id_del_servidor';
 $wb['weekly_backup_txt'] = 'Semanalmente';
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index 549f4048a6..6893273b9c 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -64,7 +64,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 2f131cb31d..dad892c470 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -64,7 +64,7 @@ $wb['no_backup_txt'] = 'Pas de backup';
 $wb['daily_backup_txt'] = 'Journalier';
 $wb['weekly_backup_txt'] = 'Hebdomadaire';
 $wb['monthly_backup_txt'] = 'Mensuel';
-$wb['sender_cc_note_txt'] = '(Séparer les adresses e-mail multiples par des virgules)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Cliquez pour définir';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 8885a212f4..6d2907a1e2 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -65,7 +65,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index 22ccb86b73..283a1eb209 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index f7aef165be..b0b7ef8770 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index 0fd610c22e..94625205da 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -65,7 +65,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index 55c48abe03..332a500754 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index d66c64a9b6..9b260d7391 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -64,7 +64,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Een startdatun is vereist voor het inschakelen van Autobeantwoorden.';
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
 $wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
-$wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index 91b33eb06f..c4d458705f 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index edbe7f9522..ac20e53696 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index b9de9b56f9..c623744635 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index ae6b06c084..ad2b4b5e7b 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Дата начала должна быть установлена когда автоответчик включен.';
 $wb['sender_cc_txt'] = 'Отправка исходящей копии на';
 $wb['sender_cc_error_isemail'] = 'Поле -Отправка исходящей копии на- не содержит действительный адрес электронной почты';
-$wb['sender_cc_note_txt'] = '(Разделите несколько адресов электронной почты запятыми)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index 26787d2a87..e540533a61 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index 176e879a90..8cd4614783 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -65,7 +65,7 @@ $wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing
 $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 39939b4e19..6cac8790ca 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -65,7 +65,7 @@ $wb['weekly_backup_txt'] = 'Haftalık';
 $wb['monthly_backup_txt'] = 'Aylık';
 $wb['email_error_isascii'] = 'E-posta istemcinizde sorun yaşamamak için lütfen parolanızda dile özel unikod karakterler kullanmayın.';
 $wb['cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
-$wb['sender_cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
 $wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
-- 
GitLab


From 51671568345be6cd608d1fd0498db08746e33649 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 10 Jul 2020 20:15:45 +0200
Subject: [PATCH 467/571] Avoid a fatal error when the dir does not exist

---
 server/lib/classes/backup.inc.php | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php
index f996340bd5..ba28cd4c90 100644
--- a/server/lib/classes/backup.inc.php
+++ b/server/lib/classes/backup.inc.php
@@ -856,6 +856,10 @@ class backup
         if (is_null($endings_list))
             $endings_list = $default_endings_list;
 
+       if (!is_dir($directory)) {
+               return array();
+       }
+
         $dir_handle = dir($directory);
         $files = array();
         while (false !== ($entry = $dir_handle->read())) {
-- 
GitLab


From 193295929b4b449443587e944fe245429bed95c5 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 12 Mar 2020 16:35:17 +0100
Subject: [PATCH 468/571] Add Username field to datalog view

---
 interface/web/monitor/dataloghistory_view.php             | 1 +
 interface/web/monitor/lib/lang/en_dataloghistory_view.lng | 1 +
 interface/web/monitor/templates/dataloghistory_view.htm   | 4 ++++
 3 files changed, 6 insertions(+)

diff --git a/interface/web/monitor/dataloghistory_view.php b/interface/web/monitor/dataloghistory_view.php
index 2b5ea1e032..f956591969 100644
--- a/interface/web/monitor/dataloghistory_view.php
+++ b/interface/web/monitor/dataloghistory_view.php
@@ -50,6 +50,7 @@ $id = intval($_GET['id']);
 $record = $app->db->queryOneRecord('SELECT * FROM sys_datalog WHERE datalog_id = ?', $id);
 
 $out['id'] = $id;
+$out['username'] = $record['user'];
 
 $out['timestamp'] = date($app->lng('conf_format_datetime'), $record['tstamp']);
 $out['table'] = $record['dbtable'];
diff --git a/interface/web/monitor/lib/lang/en_dataloghistory_view.lng b/interface/web/monitor/lib/lang/en_dataloghistory_view.lng
index df9ddd286f..3d5d6829ae 100644
--- a/interface/web/monitor/lib/lang/en_dataloghistory_view.lng
+++ b/interface/web/monitor/lib/lang/en_dataloghistory_view.lng
@@ -23,4 +23,5 @@ $wb['new_txt'] = 'New';
 $wb['btn_cancel_txt'] = 'Back';
 $wb['undo_txt'] = 'Undo action';
 $wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+$wb['username_txt'] = 'Username';
 ?>
diff --git a/interface/web/monitor/templates/dataloghistory_view.htm b/interface/web/monitor/templates/dataloghistory_view.htm
index 4ba82bbf05..1e0feda9c6 100644
--- a/interface/web/monitor/templates/dataloghistory_view.htm
+++ b/interface/web/monitor/templates/dataloghistory_view.htm
@@ -12,6 +12,10 @@
 			</tr>
 		</thead>
 		<tbody>
+			<tr>
+				<td><tmpl_var name="username_txt"></td>
+				<td><tmpl_var name="username"></td>
+			</tr>
 			<tr>
 				<td><tmpl_var name="timestamp_txt"></td>
 				<td><tmpl_var name="timestamp"></td>
-- 
GitLab


From 0ab69a8a017086d958ad7274f78025ff2c887086 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 12 Mar 2020 20:29:29 +0100
Subject: [PATCH 469/571] Draft link to modified record

---
 interface/web/monitor/dataloghistory_view.php          | 10 ++++++++++
 .../web/monitor/templates/dataloghistory_view.htm      |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/interface/web/monitor/dataloghistory_view.php b/interface/web/monitor/dataloghistory_view.php
index f956591969..5c2043d63f 100644
--- a/interface/web/monitor/dataloghistory_view.php
+++ b/interface/web/monitor/dataloghistory_view.php
@@ -54,6 +54,16 @@ $out['username'] = $record['user'];
 
 $out['timestamp'] = date($app->lng('conf_format_datetime'), $record['tstamp']);
 $out['table'] = $record['dbtable'];
+list($key, $value) = explode(':', $record['dbidx']);
+if (!empty($value)) {
+       if ($record['action'] == 'd') {
+               // No link for deleted content.
+               $out['table_id'] = $record['dbidx'];
+       } else {
+               // TODO link per content type
+               $out['table_id'] = '<a href="#" data-load-content="mail/mail_user_edit.php?id=' . $value .'" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="link">'.$record['dbidx'].'</a>';
+       }
+}
 
 $out['action_char'] = $record['action'];
 $out['action_name'] = $app->lng($record['action']);
diff --git a/interface/web/monitor/templates/dataloghistory_view.htm b/interface/web/monitor/templates/dataloghistory_view.htm
index 1e0feda9c6..3e61e4cf6d 100644
--- a/interface/web/monitor/templates/dataloghistory_view.htm
+++ b/interface/web/monitor/templates/dataloghistory_view.htm
@@ -22,7 +22,7 @@
 			</tr>
 			<tr>
 				<td><tmpl_var name="table_txt"></td>
-				<td><tmpl_var name="table"></td>
+				<td><tmpl_var name="table"> (<tmpl_var name="table_id">)</td>
 			</tr>
 			<tr>
 				<td><tmpl_var name="action_txt"></td>
-- 
GitLab


From 72c9b5b91e689e6cc6f2d5138fc405ab506ee07f Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 12 Mar 2020 20:40:52 +0100
Subject: [PATCH 470/571] Add a few types

---
 interface/web/monitor/dataloghistory_view.php | 27 ++++++++++++++-----
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/interface/web/monitor/dataloghistory_view.php b/interface/web/monitor/dataloghistory_view.php
index 5c2043d63f..2e3d3bd2f9 100644
--- a/interface/web/monitor/dataloghistory_view.php
+++ b/interface/web/monitor/dataloghistory_view.php
@@ -56,13 +56,26 @@ $out['timestamp'] = date($app->lng('conf_format_datetime'), $record['tstamp']);
 $out['table'] = $record['dbtable'];
 list($key, $value) = explode(':', $record['dbidx']);
 if (!empty($value)) {
-       if ($record['action'] == 'd') {
-               // No link for deleted content.
-               $out['table_id'] = $record['dbidx'];
-       } else {
-               // TODO link per content type
-               $out['table_id'] = '<a href="#" data-load-content="mail/mail_user_edit.php?id=' . $value .'" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="link">'.$record['dbidx'].'</a>';
-       }
+  if ($record['action'] == 'd') {
+    // No link for deleted content.
+    $out['table_id'] = $record['dbidx'];
+  } else {
+    switch ($out['table']) {
+      case 'mail_forwarding':
+        $file = 'mail/mail_forward_edit.php';
+        break;
+      case 'mail_user':
+        $file = 'mail/mail_user_edit.php';
+        break;
+      case 'mail_domain':
+        $file = 'mail/mail_domain_edit.php';
+        break;
+      default:
+        $file = '';
+    }
+    // TODO link per content type
+    $out['table_id'] = '<a href="#" data-load-content="' . $file . '?id=' . $value .'" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="link">'.$record['dbidx'] . $file .'</a>';
+  }
 }
 
 $out['action_char'] = $record['action'];
-- 
GitLab


From 9441fb35c9a25799468d8c8b5b800593cd5cceb4 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 10 Jul 2020 21:40:32 +0200
Subject: [PATCH 471/571] Add a few types and tab indent

---
 interface/web/monitor/dataloghistory_view.php | 55 ++++++++++++-------
 1 file changed, 35 insertions(+), 20 deletions(-)

diff --git a/interface/web/monitor/dataloghistory_view.php b/interface/web/monitor/dataloghistory_view.php
index 2e3d3bd2f9..b86334b0af 100644
--- a/interface/web/monitor/dataloghistory_view.php
+++ b/interface/web/monitor/dataloghistory_view.php
@@ -56,26 +56,41 @@ $out['timestamp'] = date($app->lng('conf_format_datetime'), $record['tstamp']);
 $out['table'] = $record['dbtable'];
 list($key, $value) = explode(':', $record['dbidx']);
 if (!empty($value)) {
-  if ($record['action'] == 'd') {
-    // No link for deleted content.
-    $out['table_id'] = $record['dbidx'];
-  } else {
-    switch ($out['table']) {
-      case 'mail_forwarding':
-        $file = 'mail/mail_forward_edit.php';
-        break;
-      case 'mail_user':
-        $file = 'mail/mail_user_edit.php';
-        break;
-      case 'mail_domain':
-        $file = 'mail/mail_domain_edit.php';
-        break;
-      default:
-        $file = '';
-    }
-    // TODO link per content type
-    $out['table_id'] = '<a href="#" data-load-content="' . $file . '?id=' . $value .'" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="link">'.$record['dbidx'] . $file .'</a>';
-  }
+	if ($record['action'] == 'd') {
+		// No link for deleted content.
+		$out['table_id'] = $record['dbidx'];
+	} else {
+		switch ($out['table']) {
+			case 'mail_forwarding':
+				$file = 'mail/mail_forward_edit.php';
+			break;
+			case 'mail_user':
+				$file = 'mail/mail_user_edit.php';
+			break;
+			case 'mail_domain':
+				$file = 'mail/mail_domain_edit.php';
+			break;
+			case 'web_domain':
+				$file = 'sites/web_vhost_domain_edit.php';
+			break;
+			case 'web_database':
+				$file = 'sites/database_edit.php';
+			break;
+			case 'web_database_user':
+				$file = 'sites/database_user_edit.php';
+			break;
+
+			// TODO Add a link per content type
+			default:
+				$file = '';
+		}
+
+		if (!empty($file)) {
+			$out['table_id'] = '<a href="#" data-load-content="' . $file . '?id=' . $value
+						. '" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="link">'
+						. $record['dbidx'] . '</a>';
+		}
+	}
 }
 
 $out['action_char'] = $record['action'];
-- 
GitLab


From c9466db4d39d1b1fc163f3da41aea19c3ea6c4c3 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 10 Jul 2020 21:40:51 +0200
Subject: [PATCH 472/571] Skip if empty

---
 interface/web/monitor/templates/dataloghistory_view.htm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/monitor/templates/dataloghistory_view.htm b/interface/web/monitor/templates/dataloghistory_view.htm
index 3e61e4cf6d..d02953ede9 100644
--- a/interface/web/monitor/templates/dataloghistory_view.htm
+++ b/interface/web/monitor/templates/dataloghistory_view.htm
@@ -22,7 +22,7 @@
 			</tr>
 			<tr>
 				<td><tmpl_var name="table_txt"></td>
-				<td><tmpl_var name="table"> (<tmpl_var name="table_id">)</td>
+                               <td><tmpl_var name="table"><tmpl_if name='table_id'> (<tmpl_var name="table_id">)</tmpl_if></td>
 			</tr>
 			<tr>
 				<td><tmpl_var name="action_txt"></td>
-- 
GitLab


From aba983e151f1d4e8a77cd2ad6a5be7be899fefc1 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Fri, 10 Jul 2020 21:46:47 +0200
Subject: [PATCH 473/571] tab indent

---
 interface/web/monitor/templates/dataloghistory_view.htm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/monitor/templates/dataloghistory_view.htm b/interface/web/monitor/templates/dataloghistory_view.htm
index d02953ede9..9741d70be8 100644
--- a/interface/web/monitor/templates/dataloghistory_view.htm
+++ b/interface/web/monitor/templates/dataloghistory_view.htm
@@ -22,7 +22,7 @@
 			</tr>
 			<tr>
 				<td><tmpl_var name="table_txt"></td>
-                               <td><tmpl_var name="table"><tmpl_if name='table_id'> (<tmpl_var name="table_id">)</tmpl_if></td>
+				<td><tmpl_var name="table"><tmpl_if name='table_id'> (<tmpl_var name="table_id">)</tmpl_if></td>
 			</tr>
 			<tr>
 				<td><tmpl_var name="action_txt"></td>
-- 
GitLab


From 21c60636411586bee4eb9ec998fa370bf8f19ecb Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Sat, 11 Jul 2020 10:40:27 +0200
Subject: [PATCH 474/571] tab indent

---
 interface/web/admin/templates/server_ip_map_list.htm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/admin/templates/server_ip_map_list.htm b/interface/web/admin/templates/server_ip_map_list.htm
index 5523448c7b..527ef69b9a 100644
--- a/interface/web/admin/templates/server_ip_map_list.htm
+++ b/interface/web/admin/templates/server_ip_map_list.htm
@@ -38,13 +38,13 @@
 			</tmpl_loop>
 			<tmpl_unless name="records">
 				<tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                                       <td colspan="5">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+					<td colspan="5">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
 				</tr>
 			</tmpl_unless>
 		</tbody>
 		<tfoot>
 			<tr>
-                               <td colspan="5"><tmpl_var name="paging"></td>
+				<td colspan="5"><tmpl_var name="paging"></td>
 			</tr>
 		</tfoot>
 	</table>
-- 
GitLab


From 2a45bd1b3940a80cc93ef46696a509fc1f21f9e8 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 13 Jul 2020 22:20:55 +0200
Subject: [PATCH 475/571] auto sidebar width (#4465)

---
 interface/web/themes/default/assets/stylesheets/ispconfig.css | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css
index 534d2390f8..c255573e6c 100644
--- a/interface/web/themes/default/assets/stylesheets/ispconfig.css
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -141,7 +141,9 @@ body {
 
 #sidebar {
   margin-top: 27px;
-  width: 18%;
+  min-width: 18%;
+  max-width: 21%;
+  width: auto;
   border-style: solid;
   border-width: 1px;
   border-radius: 4px; }
-- 
GitLab


From bf736d765f2e99d381b90d5e3c8e8872b624a38d Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 14 Jul 2020 10:27:09 +0200
Subject: [PATCH 476/571] Update cron.php, added newline to finished cron
 message.

---
 server/cron.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/cron.php b/server/cron.php
index d21dcfa8ae..0fe1dfc6cf 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -128,6 +128,6 @@ $app->services->processDelayedActions();
 @unlink($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock');
 $app->log('Remove Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock', LOGLEVEL_DEBUG);
 
-if($conf['log_priority'] <= LOGLEVEL_DEBUG) die("finished cron run.");
+if($conf['log_priority'] <= LOGLEVEL_DEBUG) die("finished cron run.\n");
 
 ?>
-- 
GitLab


From 689efa98f24574ab95f32604642db9c1b0d38326 Mon Sep 17 00:00:00 2001
From: Dominik <info@profi-webdesign.net>
Date: Tue, 14 Jul 2020 12:34:42 +0200
Subject: [PATCH 477/571] change cc and sender_cc column type to text to
 support more than 4-5 redirects

---
 install/sql/incremental/upd_dev_collection.sql | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 8e924a62b0..9dc0d0cd22 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -35,3 +35,7 @@ ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET
 
 -- add SSHFP and DNAME record
 ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME','DNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') NULL DEFAULT NULL AFTER `name`;
+
+-- change cc and sender_cc column type
+ALTER TABLE `mail_user` CHANGE `cc` `cc` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
+ALTER TABLE `mail_user` CHANGE `sender_cc` `sender_cc` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
-- 
GitLab


From e6c50f0a75c8c55ebda1865f157dedfa48ed54ff Mon Sep 17 00:00:00 2001
From: Dominik <info@profi-webdesign.net>
Date: Tue, 14 Jul 2020 12:36:54 +0200
Subject: [PATCH 478/571] change cc and sender_cc column type to text to
 support more than 4-5 redirects

---
 install/sql/ispconfig3.sql | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index c54f0ac345..a41853324b 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1038,8 +1038,8 @@ CREATE TABLE `mail_user` (
   `maildir` varchar(255) NOT NULL default '',
   `maildir_format` varchar(255) NOT NULL default 'maildir',
   `quota` bigint(20) NOT NULL default '-1',
-  `cc` varchar(255) NOT NULL default '',
-  `sender_cc` varchar(255) NOT NULL default '',
+  `cc` text,
+  `sender_cc` text,
   `homedir` varchar(255) NOT NULL default '',
   `autoresponder` enum('n','y') NOT NULL default 'n',
   `autoresponder_start_date` datetime NULL default NULL,
-- 
GitLab


From 85f9d1d8c5d319305fe2ca9b626fc791a1120805 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 14 Jul 2020 16:58:29 +0200
Subject: [PATCH 479/571] folder_directive_snippets was missing in incremental,
 inserted for fixing older installations

---
 install/sql/incremental/upd_0085.sql           | 2 ++
 install/sql/incremental/upd_dev_collection.sql | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/install/sql/incremental/upd_0085.sql b/install/sql/incremental/upd_0085.sql
index 1291262ee7..755143fc4f 100644
--- a/install/sql/incremental/upd_0085.sql
+++ b/install/sql/incremental/upd_0085.sql
@@ -1,3 +1,5 @@
+-- folder_directive_snippets was missing in incremental, inserted for fixing older installations
+ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
 ALTER TABLE `web_domain` CHANGE `folder_directive_snippets` `folder_directive_snippets` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL;
 ALTER TABLE `web_domain` ADD `log_retention` INT NOT NULL DEFAULT '30' AFTER `https_port`;
 ALTER TABLE `web_domain` CHANGE `stats_type` `stats_type` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'awstats';
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 8e924a62b0..bf2f02f677 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -35,3 +35,6 @@ ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET
 
 -- add SSHFP and DNAME record
 ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME','DNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') NULL DEFAULT NULL AFTER `name`;
+
+-- was missing in incremental, inserted for fixing older installations
+ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
\ No newline at end of file
-- 
GitLab


From ff5fe5dbaac63c56b7f2b1e39e5fefc9a6064ac4 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 14 Jul 2020 17:00:03 +0200
Subject: [PATCH 480/571] Fixed PHP 7.4 compatibility problem with limit query
 in mysql database lib.

---
 install/lib/mysql.lib.php              | 13 +++++++++----
 interface/lib/classes/db_mysql.inc.php | 13 +++++++++----
 interface/lib/classes/getconf.inc.php  |  2 +-
 server/lib/classes/db_mysql.inc.php    | 14 ++++++++++----
 4 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/install/lib/mysql.lib.php b/install/lib/mysql.lib.php
index 3e091d10b8..c24a454d04 100644
--- a/install/lib/mysql.lib.php
+++ b/install/lib/mysql.lib.php
@@ -286,10 +286,15 @@ class db
 	public function queryOneRecord($sQuery = '') {
 		
 		$aArgs = func_get_args();
-		
-		if(!preg_match('/limit \d+\s*,\s*\d+$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
-		
-		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
+		if(!empty($aArgs)) {
+			$sQuery = array_shift($aArgs);
+			if($sQuery && !preg_match('/limit \d+(\s*,\s*\d+)?$/i', $sQuery)) {
+				$sQuery .= ' LIMIT 0,1';
+		}
+		array_unshift($aArgs, $sQuery);
+		}
+  
+		$oResult = call_user_func_array([&$this, 'query'], $aArgs);
 		if(!$oResult) return null;
 
 		$aReturn = $oResult->get();
diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index 5348e41708..014feec8c3 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -356,10 +356,15 @@ class db
 	public function queryOneRecord($sQuery = '') {
 		
 		$aArgs = func_get_args();
-		
-		if(!preg_match('/limit \d+\s*(,\s*\d+)?$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
-
-		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
+		if(!empty($aArgs)) {
+			$sQuery = array_shift($aArgs);
+			if($sQuery && !preg_match('/limit \d+(\s*,\s*\d+)?$/i', $sQuery)) {
+				$sQuery .= ' LIMIT 0,1';
+		}
+		array_unshift($aArgs, $sQuery);
+		}
+  
+		$oResult = call_user_func_array([&$this, 'query'], $aArgs);
 		if(!$oResult) return null;
 
 		$aReturn = $oResult->get();
diff --git a/interface/lib/classes/getconf.inc.php b/interface/lib/classes/getconf.inc.php
index ef9e0702d2..bbb57d6014 100644
--- a/interface/lib/classes/getconf.inc.php
+++ b/interface/lib/classes/getconf.inc.php
@@ -65,7 +65,7 @@ class getconf {
 		} else {
 			$app->uses('ini_parser');
 			$security_config_path = '/usr/local/ispconfig/security/security_settings.ini';
-			if(!is_file($security_config_path)) $security_config_path = realpath(ISPC_ROOT_PATH.'/../security/security_settings.ini');
+			if(!is_readable($security_config_path)) $security_config_path = realpath(ISPC_ROOT_PATH.'/../security/security_settings.ini');
 			$this->security_config = $app->ini_parser->parse_ini_string(file_get_contents($security_config_path));
 
 			return ($section == '') ? $this->security_config : $this->security_config[$section];
diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 2bccf1ecb7..8c38123096 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -354,11 +354,17 @@ class db
 	 * @return array result row or NULL if none found
 	 */
 	public function queryOneRecord($sQuery = '') {
-
+		
 		$aArgs = func_get_args();
-		if(!preg_match('/limit \d+\s*(,\s*\d+)?$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
-
-		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
+		if(!empty($aArgs)) {
+			$sQuery = array_shift($aArgs);
+			if($sQuery && !preg_match('/limit \d+(\s*,\s*\d+)?$/i', $sQuery)) {
+				$sQuery .= ' LIMIT 0,1';
+		}
+		array_unshift($aArgs, $sQuery);
+		}
+  
+		$oResult = call_user_func_array([&$this, 'query'], $aArgs);
 		if(!$oResult) return null;
 
 		$aReturn = $oResult->get();
-- 
GitLab


From f31b004c6db29a8b494f2479ea82de98bab180bd Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Wed, 15 Jul 2020 22:49:09 +0200
Subject: [PATCH 481/571] Resolve merge conflict for 1033

---
 install/sql/incremental/upd_dev_collection.sql | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index e446b60c9f..8d673ae866 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -38,3 +38,6 @@ ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME','DNAME
 
 -- remove SPDY option
 ALTER TABLE `web_domain` DROP COLUMN `enable_spdy`;
+
+-- was missing in incremental, inserted for fixing older installations
+ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
-- 
GitLab


From ecd7f3d7d8b0e77b31b21ce92d6a8f38d8204a7b Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 18 Jul 2020 14:32:40 +0200
Subject: [PATCH 482/571] Allow separator in catchall email adress (#4999)

---
 interface/lib/classes/tform_base.inc.php      | 55 +++++++++++++------
 .../mail/form/mail_domain_catchall.tform.php  |  2 +-
 2 files changed, 40 insertions(+), 17 deletions(-)

diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php
index e6174d2da7..a28644e3ef 100644
--- a/interface/lib/classes/tform_base.inc.php
+++ b/interface/lib/classes/tform_base.inc.php
@@ -152,9 +152,9 @@ class tform_base {
 			$wb = $app->functions->array_merge($wb_global, $wb);
 		}
 		if(isset($wb_global)) unset($wb_global);
-		
+
 		$this->wordbook = $wb;
-		
+
 		$app->plugin->raiseEvent($_SESSION['s']['module']['name'].':'.$app->tform->formDef['name'] . ':on_after_formdef', $this);
 
 		$this->dateformat = $app->lng('conf_format_dateshort');
@@ -323,7 +323,7 @@ class tform_base {
 		return $this->getAuthSQL('r', $matches[1]);
 	}
 	*/
-	
+
 	/**
 	 * Get the key => value array of a form filled from a datasource definitiom
 	 *
@@ -339,12 +339,12 @@ class tform_base {
 	function applyValueLimit($limit, $values, $current_value = '') {
 
 		global $app;
-		
+
 		// we mas have multiple limits, therefore we explode by ; first
 		// Example: "system:sites:web_php_options;client:web_php_options"
 		$limits = explode(';',$limit);
-		
-		
+
+
 		foreach($limits as $limit) {
 
 			$limit_parts = explode(':', $limit);
@@ -399,7 +399,7 @@ class tform_base {
 				$tmp_key = $limit_parts[2];
 				$allowed = $allowed = explode(',',$tmp_conf[$tmp_key]);
 			}
-			
+
 			// add the current value to the allowed array
 			$allowed[] = $current_value;
 
@@ -438,7 +438,7 @@ class tform_base {
 		$csrf_token = $app->auth->csrf_token_get($this->formDef['name']);
 		$_csrf_id = $csrf_token['csrf_id'];
 		$_csrf_value = $csrf_token['csrf_key'];
-		
+
 		$this->formDef['tabs'][$tab]['fields']['_csrf_id'] = array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -454,7 +454,7 @@ class tform_base {
 		$record['_csrf_id'] = $_csrf_id;
 		$record['_csrf_key'] = $_csrf_value;
 		/* CSRF PROTECTION */
-		
+
 		$new_record = array();
 		if($action == 'EDIT') {
 			$record = $this->decode($record, $tab);
@@ -589,7 +589,7 @@ class tform_base {
 
 						$new_record[$key] = $this->_getDateHTML($key, $dt_value);
 						break;
-					
+
 					default:
 						if(isset($record[$key])) {
 							$new_record[$key] = $app->functions->htmlentities($record[$key]);
@@ -701,7 +701,7 @@ class tform_base {
 
 					$new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds);
 					break;
-				
+
 				case 'DATE':
 					$dt_value = (isset($field['default'])) ? $field['default'] : 0;
 
@@ -750,7 +750,7 @@ class tform_base {
 					unset($_POST);
 					unset($record);
 				}
-				
+
 				if(isset($_SESSION['_csrf_timeout']) && is_array($_SESSION['_csrf_timeout'])) {
 					$to_unset = array();
 					foreach($_SESSION['_csrf_timeout'] as $_csrf_id => $timeout) {
@@ -767,7 +767,7 @@ class tform_base {
 			}
 			/* CSRF PROTECTION */
 		}
-		
+
 		$new_record = array();
 		if(is_array($record)) {
 			foreach($fields as $key => $field) {
@@ -1065,6 +1065,29 @@ class tform_base {
 				}
 				unset($error);
 				break;
+			case 'ISEMAILADRESS':
+				$error = false;
+				if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
+				if($validator['allowempty'] == 'y' && $field_value == '') {
+					//* Do nothing
+				} else {
+					if(function_exists('filter_var')) {
+						if(filter_var($field_value, FILTER_VALIDATE_EMAIL) === false) {
+							$error = true;
+						}
+						if ($error) {
+							$errmsg = $validator['errmsg'];
+							if(isset($this->wordbook[$errmsg])) {
+								$this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
+							} else {
+								$this->errorMessage .= $errmsg."<br />\r\n";
+							}
+						}
+
+					} else $this->errorMessage .= "function filter_var missing <br />\r\n";
+				}
+				unset($error);
+				break;
 			case 'ISINT':
 				if(function_exists('filter_var') && $field_value < PHP_INT_MAX) {
 					//if($field_value != '' && filter_var($field_value, FILTER_VALIDATE_INT, array("options" => array('min_range'=>0))) === false) {
@@ -1198,7 +1221,7 @@ class tform_base {
 					}
 				}
 				break;
-			
+
 			case 'ISDATETIME':
 				/* Checks a datetime value against the date format of the current language */
 				if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
@@ -1216,7 +1239,7 @@ class tform_base {
 					}
 				}
 				break;
-			
+
 			case 'RANGE':
 				//* Checks if the value is within the given range or above / below a value
 				//* Range examples: < 10 = ":10", between 2 and 10 = "2:10", above 5 = "5:".
@@ -1281,7 +1304,7 @@ class tform_base {
 		$sql_update = '';
 
 		$record = $this->encode($record, $tab, true);
-		
+
 		if(($this->primary_id_override > 0)) {
 			$sql_insert_key .= '`'.$this->formDef["db_table_idx"].'`, ';
 			$sql_insert_val .= $this->primary_id_override.", ";
diff --git a/interface/web/mail/form/mail_domain_catchall.tform.php b/interface/web/mail/form/mail_domain_catchall.tform.php
index 72261e05e0..ebc4cebd7c 100644
--- a/interface/web/mail/form/mail_domain_catchall.tform.php
+++ b/interface/web/mail/form/mail_domain_catchall.tform.php
@@ -113,7 +113,7 @@ $form["tabs"]['catchall'] = array (
 										'valuefield'	=> 'email'
 									 ),
 			*/
-			'validators' => array (  0 => array ( 'type' => 'ISEMAIL',
+			'validators' => array (  0 => array ( 'type' => 'ISEMAILADRESS',
 					'errmsg'=> 'destination_error_isemail'),
 			),
 			'value'  => '',
-- 
GitLab


From 464cc4f31dd7578d5997dd10d186719479d70395 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 18 Jul 2020 14:36:04 +0200
Subject: [PATCH 483/571] Mispelled address

---
 interface/lib/classes/tform_base.inc.php               | 2 +-
 interface/web/mail/form/mail_domain_catchall.tform.php | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php
index a28644e3ef..bd9f70a626 100644
--- a/interface/lib/classes/tform_base.inc.php
+++ b/interface/lib/classes/tform_base.inc.php
@@ -1065,7 +1065,7 @@ class tform_base {
 				}
 				unset($error);
 				break;
-			case 'ISEMAILADRESS':
+			case 'ISEMAILADDRESS':
 				$error = false;
 				if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
 				if($validator['allowempty'] == 'y' && $field_value == '') {
diff --git a/interface/web/mail/form/mail_domain_catchall.tform.php b/interface/web/mail/form/mail_domain_catchall.tform.php
index ebc4cebd7c..c43aeb3339 100644
--- a/interface/web/mail/form/mail_domain_catchall.tform.php
+++ b/interface/web/mail/form/mail_domain_catchall.tform.php
@@ -113,7 +113,7 @@ $form["tabs"]['catchall'] = array (
 										'valuefield'	=> 'email'
 									 ),
 			*/
-			'validators' => array (  0 => array ( 'type' => 'ISEMAILADRESS',
+			'validators' => array (  0 => array ( 'type' => 'ISEMAILADDRESS',
 					'errmsg'=> 'destination_error_isemail'),
 			),
 			'value'  => '',
-- 
GitLab


From 0b65e47a41571e46ac9aeb46163b57d196b2b9ec Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 18 Jul 2020 14:56:40 +0200
Subject: [PATCH 484/571] Fix whitespace (#4507)

---
 interface/web/mail/templates/mail_user_list.htm | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm
index 6d800de57e..69291f4be8 100644
--- a/interface/web/mail/templates/mail_user_list.htm
+++ b/interface/web/mail/templates/mail_user_list.htm
@@ -21,12 +21,12 @@
         </div>
         </tmpl_if>
         <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
-            
+
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
-            
-        
 
-    
+
+
+
         <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
             <div class="table-wrapper marginTop15">
 <table class="table">
@@ -60,11 +60,7 @@
                 <tmpl_loop name="records">
                     <tr>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='email'}">{tmpl_var name="email"}</a></td>
-                        <tmpl_if name="enable_custom_login">
-                            <td>
-                                <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="login"}</a>
-                            </td>
-                        </tmpl_if>
+                        <tmpl_if name="enable_custom_login"><td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="login"}</a></td></tmpl_if>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="autoresponder"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="postfix"}</a></td>
-- 
GitLab


From 61867049ba3eca7560bc4c3eb122368d3f364a26 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 18 Jul 2020 15:05:26 +0200
Subject: [PATCH 485/571] Variable for mpm_itk_module (#4756)

---
 server/conf/apache_ispconfig.conf.master | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/conf/apache_ispconfig.conf.master b/server/conf/apache_ispconfig.conf.master
index 6acb16f7c8..e30ccd6d3b 100644
--- a/server/conf/apache_ispconfig.conf.master
+++ b/server/conf/apache_ispconfig.conf.master
@@ -132,7 +132,7 @@ Alias /.well-known/acme-challenge /usr/local/ispconfig/interface/acme/.well-know
         Allow from all
     </tmpl_if>
 	<IfModule mpm_itk_module>
-       AssignUserId www-data www-data
+       AssignUserId <tmpl_var name='system_user'> <tmpl_var name='system_group'>
     </IfModule>
 </Directory>
 
-- 
GitLab


From 9a2c9326a3cbaf7f9c054684e1ebf9356e8fc4a5 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 18 Jul 2020 15:29:06 +0200
Subject: [PATCH 486/571] Allow separator in email address

---
 interface/web/client/form/client.tform.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 5b45ffb972..17b9e623b6 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -390,8 +390,8 @@ $form["tabs"]['address'] = array (
 				2 => array( 'event' => 'SAVE',
 					'type' => 'TOLOWER')
 			),
-			'validators' => array (  
-				0 => array ( 'type' => 'ISEMAIL', 'errmsg'=> 'email_error_isemail'),
+			'validators' => array (
+				0 => array ( 'type' => 'ISEMAILADDRESS', 'errmsg'=> 'email_error_isemail'),
 				1 => array ( 'type' => 'NOTEMPTY',
 					'errmsg'=> 'email_error_empty'),
 			),
@@ -621,7 +621,7 @@ $form["tabs"]['address'] = array (
 					'type' => 'TOLOWER')
 			),
 			'validators' => array (
-				0 => array ( 'type' => 'ISEMAIL', 'allowempty' => 'y', 'errmsg'=> 'email_error_isemail'),
+				0 => array ( 'type' => 'ISEMAILADDRESS', 'allowempty' => 'y', 'errmsg'=> 'email_error_isemail'),
 			),
 			'default' => '',
 			'value'  => '',
-- 
GitLab


From e5b006009006dbd738a8a11cf2415bb9a30580d0 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 21 Jul 2020 15:17:58 +0200
Subject: [PATCH 487/571] Fixed issue with security_settings.ini not being
 creted on CentOS.

---
 install/dist/lib/fedora.lib.php | 23 ++++++-----------------
 1 file changed, 6 insertions(+), 17 deletions(-)

diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 3af8746908..6a1c5048e8 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -953,24 +953,13 @@ class installer_dist extends installer_base {
 		//* copy the ISPConfig security part
 		$command = 'cp -rf ../security '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
-		//* Apply changed security_settings.ini values to new security_settings.ini file
-		if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) {
-			$security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~'));
-			$security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini'));
-			if(is_array($security_settings_new) && is_array($security_settings_old)) {
-				foreach($security_settings_new as $section => $sval) {
-					if(is_array($sval)) {
-						foreach($sval as $key => $val) {
-							if(isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) {
-								$security_settings_new[$section][$key] = $security_settings_old[$section][$key];
-							}
-						}
-					}
-				}
-				file_put_contents('/usr/local/ispconfig/security/security_settings.ini',array_to_ini($security_settings_new));
-			}
+	
+		$configfile = 'security_settings.ini';
+		if(is_file($install_dir.'/security/'.$configfile)) {
+			copy($install_dir.'/security/'.$configfile, $install_dir.'/security/'.$configfile.'~');
 		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		wf($install_dir.'/security/'.$configfile, $content);
 
 		//* Create a symlink, so ISPConfig is accessible via web
 		// Replaced by a separate vhost definition for port 8080
-- 
GitLab


From f765f1b55fec7402cb327f8b26a18ce88580271c Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 21 Jul 2020 15:18:14 +0200
Subject: [PATCH 488/571] Fixed formatting

---
 install/lib/install.lib.php              | 16 ++++++++--------
 server/lib/classes/monitor_tools.inc.php | 16 ++++++++--------
 2 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 9312a8981a..2ed873d9ba 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -345,15 +345,15 @@ function get_distname() {
 				$distid = 'centos72';
 			}
 			swriteln("Operating System: CentOS $var\n");
-                } elseif(stristr($content, 'CentOS Linux release 8')) {
-                        $distname = 'CentOS';
-                        $distver = 'Unknown';
-                        $distbaseid = 'fedora';
+        } elseif(stristr($content, 'CentOS Linux release 8')) {
+			$distname = 'CentOS';
+			$distver = 'Unknown';
+			$distbaseid = 'fedora';
 			$distid = 'centos80';
-                        $var=explode(" ", $content);
-                        $var=explode(".", $var[3]);
-                        $var=$var[0].".".$var[1];
-                        swriteln("Operating System: CentOS $var\n");
+			$var=explode(" ", $content);
+			$var=explode(".", $var[3]);
+			$var=$var[0].".".$var[1];
+			swriteln("Operating System: CentOS $var\n");
 		} else {
 			$distname = 'Redhat';
 			$distver = 'Unknown';
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index 75e75c7f30..e349acd128 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -323,14 +323,14 @@ class monitor_tools {
 			} else {
 				$distid = 'centos72';
 			}
-                } elseif(stristr($content, 'CentOS Linux release 8')) {
-                        preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
-                        $distname = 'CentOS';
-                        $distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
-                        $distbaseid = 'fedora';
-                        $var=explode(" ", $content);
-                        $var=explode(".", $var[3]);
-                        $var=$var[0].".".$var[1];
+		} elseif(stristr($content, 'CentOS Linux release 8')) {
+			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
+			$distname = 'CentOS';
+			$distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
+			$distbaseid = 'fedora';
+			$var=explode(" ", $content);
+			$var=explode(".", $var[3]);
+			$var=$var[0].".".$var[1];
 		} else {
 			$distname = 'Redhat';
 			$distver = 'Unknown';
-- 
GitLab


From 60f83685bccbe050c17694149db696ae5ced9a10 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 21 Jul 2020 17:57:05 +0200
Subject: [PATCH 489/571] Prevent error to be shown on the shell when bind
 version is queried.

---
 server/plugins-available/bind_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index f2dc603ec5..d4b4a7c01c 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -225,7 +225,7 @@ class bind_plugin {
 
 		//* Get the bind version
 		$bind_caa = false;
-        $bind = explode("\n", shell_exec('which named bind'));
+        $bind = explode("\n", shell_exec('which named bind 2> /dev/null'));
         $bind = reset($bind);
         if(is_executable($bind)) {
 			exec($bind . ' -v 2>&1', $tmp);
-- 
GitLab


From f3c43b1411112441b93f0293c6e538f0a7f1b80b Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Tue, 31 Dec 2019 21:51:40 +0100
Subject: [PATCH 490/571] Check if we actually have a service enabled

---
 interface/lib/classes/system.inc.php   | 12 +++++++
 interface/web/mail/lib/module.conf.php | 48 ++++++++++++++------------
 2 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index 89507ea68c..a4e1d06550 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -39,6 +39,18 @@ class system {
 
 		if(!preg_match('/^[a-z]+$/', $service)) $app->error('Invalid service '.$service);
 
+               // Check the servers table to see which kinds of servers we actually have enabled.
+               // simple query cache
+               if($this->server_count===null) {
+                       $this->server_count = $app->db->queryOneRecord("SELECT SUM(mail_server) as mail, SUM(web_server) AS web, SUM(dns_server) AS dns, SUM(file_server) AS file,
+                               SUM(db_server) AS db, SUM(vserver_server) AS vserver, SUM(proxy_server) AS proxy, SUM(firewall_server) AS firewall, SUM(xmpp_server) AS xmpp
+                               FROM `server` WHERE mirror_server_id = 0");
+               }
+               // Check if we have the service enabled.
+               if ($this->server_count[$service] == 0) {
+                       return FALSE;
+               }
+
 		if(isset($_SESSION['s']['user']) && $_SESSION['s']['user']['typ'] == 'admin') return true; //* We do not check admin-users
 
 		// simple query cache
diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php
index cc100cd7d2..5a06eb8b65 100644
--- a/interface/web/mail/lib/module.conf.php
+++ b/interface/web/mail/lib/module.conf.php
@@ -150,31 +150,33 @@ if($app->auth->get_client_limit($userid, 'fetchmail') != 0)
 }
 
 //**** XMPP Menu
-$items = array();
-
-if($app->auth->get_client_limit($userid, 'xmpp_domain') != 0)
-{
-    $items[] = array( 'title'  => 'XMPP Domain',
-        'target'  => 'content',
-        'link' => 'mail/xmpp_domain_list.php',
-        'html_id' => 'xmpp_domain_list');
+if ($app->system->has_service($userid, 'xmpp')) {
+       $items = array();
+
+       if($app->auth->get_client_limit($userid, 'xmpp_domain') != 0)
+       {
+           $items[] = array( 'title'  => 'XMPP Domain',
+               'target'  => 'content',
+               'link' => 'mail/xmpp_domain_list.php',
+               'html_id' => 'xmpp_domain_list');
+       }
+
+       if($app->auth->get_client_limit($userid, 'xmpp_user') != 0)
+       {
+           $items[] = array( 'title'  => 'XMPP Account',
+               'target'  => 'content',
+               'link' => 'mail/xmpp_user_list.php',
+               'html_id' => 'xmpp_user_list');
+       }
+
+       if(count($items))
+       {
+           $module['nav'][] = array( 'title' => 'Jabber / XMPP',
+               'open'  => 1,
+               'items' => $items);
+       }
 }
 
-if($app->auth->get_client_limit($userid, 'xmpp_user') != 0)
-{
-    $items[] = array( 'title'  => 'XMPP Account',
-        'target'  => 'content',
-        'link' => 'mail/xmpp_user_list.php',
-        'html_id' => 'xmpp_user_list');
-}
-
-if(count($items) && $app->system->has_service($userid, 'xmpp'))
-    $module['nav'][] = array( 'title' => 'Jabber / XMPP',
-        'open'  => 1,
-        'items' => $items);
-
-
-
 //**** Statistics menu
 $items = array();
 
-- 
GitLab


From 59f5fa875d97d0e613e6d94077c1cfaff34dad20 Mon Sep 17 00:00:00 2001
From: Dominik <info@profi-webdesign.net>
Date: Wed, 22 Jul 2020 14:23:19 +0200
Subject: [PATCH 491/571] rollback sender_cc change

---
 install/sql/incremental/upd_dev_collection.sql | 1 -
 1 file changed, 1 deletion(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index d4acf6914d..a5d4acdc62 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -38,7 +38,6 @@ ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME','DNAME
 
 -- change cc and sender_cc column type
 ALTER TABLE `mail_user` CHANGE `cc` `cc` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
-ALTER TABLE `mail_user` CHANGE `sender_cc` `sender_cc` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
 
 -- was missing in incremental, inserted for fixing older installations
 ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
-- 
GitLab


From c8ac70ba7ccf3ba14eab6c9ad934808b5fdf9869 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Wed, 22 Jul 2020 15:04:44 +0200
Subject: [PATCH 492/571] space to tabs

---
 interface/lib/classes/system.inc.php   | 22 ++++++-------
 interface/web/mail/lib/module.conf.php | 44 +++++++++++++-------------
 2 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index a4e1d06550..484ef2b665 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -39,17 +39,17 @@ class system {
 
 		if(!preg_match('/^[a-z]+$/', $service)) $app->error('Invalid service '.$service);
 
-               // Check the servers table to see which kinds of servers we actually have enabled.
-               // simple query cache
-               if($this->server_count===null) {
-                       $this->server_count = $app->db->queryOneRecord("SELECT SUM(mail_server) as mail, SUM(web_server) AS web, SUM(dns_server) AS dns, SUM(file_server) AS file,
-                               SUM(db_server) AS db, SUM(vserver_server) AS vserver, SUM(proxy_server) AS proxy, SUM(firewall_server) AS firewall, SUM(xmpp_server) AS xmpp
-                               FROM `server` WHERE mirror_server_id = 0");
-               }
-               // Check if we have the service enabled.
-               if ($this->server_count[$service] == 0) {
-                       return FALSE;
-               }
+		// Check the servers table to see which kinds of servers we actually have enabled.
+		// simple query cache
+		if($this->server_count === null) {
+			$this->server_count = $app->db->queryOneRecord("SELECT SUM(mail_server) as mail, SUM(web_server) AS web, SUM(dns_server) AS dns, SUM(file_server) AS file,
+				SUM(db_server) AS db, SUM(vserver_server) AS vserver, SUM(proxy_server) AS proxy, SUM(firewall_server) AS firewall, SUM(xmpp_server) AS xmpp
+				FROM `server` WHERE mirror_server_id = 0");
+		}
+		// Check if we have the service enabled.
+		if ($this->server_count[$service] == 0) {
+			return FALSE;
+		}
 
 		if(isset($_SESSION['s']['user']) && $_SESSION['s']['user']['typ'] == 'admin') return true; //* We do not check admin-users
 
diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php
index 5a06eb8b65..d9d97bc8b2 100644
--- a/interface/web/mail/lib/module.conf.php
+++ b/interface/web/mail/lib/module.conf.php
@@ -153,28 +153,28 @@ if($app->auth->get_client_limit($userid, 'fetchmail') != 0)
 if ($app->system->has_service($userid, 'xmpp')) {
        $items = array();
 
-       if($app->auth->get_client_limit($userid, 'xmpp_domain') != 0)
-       {
-           $items[] = array( 'title'  => 'XMPP Domain',
-               'target'  => 'content',
-               'link' => 'mail/xmpp_domain_list.php',
-               'html_id' => 'xmpp_domain_list');
-       }
-
-       if($app->auth->get_client_limit($userid, 'xmpp_user') != 0)
-       {
-           $items[] = array( 'title'  => 'XMPP Account',
-               'target'  => 'content',
-               'link' => 'mail/xmpp_user_list.php',
-               'html_id' => 'xmpp_user_list');
-       }
-
-       if(count($items))
-       {
-           $module['nav'][] = array( 'title' => 'Jabber / XMPP',
-               'open'  => 1,
-               'items' => $items);
-       }
+	if($app->auth->get_client_limit($userid, 'xmpp_domain') != 0)
+	{
+		$items[] = array( 'title'  => 'XMPP Domain',
+			'target'  => 'content',
+			'link' => 'mail/xmpp_domain_list.php',
+			'html_id' => 'xmpp_domain_list');
+	}
+
+	if($app->auth->get_client_limit($userid, 'xmpp_user') != 0)
+	{
+		$items[] = array( 'title'  => 'XMPP Account',
+			'target'  => 'content',
+			'link' => 'mail/xmpp_user_list.php',
+			'html_id' => 'xmpp_user_list');
+	}
+
+	if(count($items))
+	{
+		$module['nav'][] = array( 'title' => 'Jabber / XMPP',
+			'open'  => 1,
+			'items' => $items);
+	}
 }
 
 //**** Statistics menu
-- 
GitLab


From 09da773b12b32ce79a73cd2824bd6414ff45004c Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Wed, 22 Jul 2020 17:04:07 +0200
Subject: [PATCH 493/571] Extended client delete dialog (Implements #4370)

---
 interface/web/client/client_del.php           | 53 +++++++++++++-----
 .../web/client/lib/lang/ar_client_del.lng     |  3 +
 .../web/client/lib/lang/bg_client_del.lng     |  3 +
 .../web/client/lib/lang/br_client_del.lng     |  3 +
 .../web/client/lib/lang/ca_client_del.lng     |  3 +
 .../web/client/lib/lang/cz_client_del.lng     |  3 +
 .../web/client/lib/lang/de_client_del.lng     |  5 +-
 .../web/client/lib/lang/dk_client_del.lng     |  3 +
 .../web/client/lib/lang/el_client_del.lng     |  3 +
 .../web/client/lib/lang/en_client_del.lng     |  3 +
 .../web/client/lib/lang/es_client_del.lng     |  3 +
 .../web/client/lib/lang/fi_client_del.lng     |  3 +
 .../web/client/lib/lang/fr_client_del.lng     |  3 +
 .../web/client/lib/lang/hr_client_del.lng     |  3 +
 .../web/client/lib/lang/hu_client_del.lng     |  3 +
 .../web/client/lib/lang/id_client_del.lng     |  3 +
 .../web/client/lib/lang/it_client_del.lng     |  3 +
 .../web/client/lib/lang/ja_client_del.lng     |  3 +
 .../web/client/lib/lang/nl_client_del.lng     |  3 +
 .../web/client/lib/lang/pl_client_del.lng     |  3 +
 .../web/client/lib/lang/pt_client_del.lng     |  3 +
 .../web/client/lib/lang/ro_client_del.lng     |  3 +
 .../web/client/lib/lang/ru_client_del.lng     |  3 +
 .../web/client/lib/lang/se_client_del.lng     |  3 +
 .../web/client/lib/lang/sk_client_del.lng     |  3 +
 .../web/client/lib/lang/tr_client_del.lng     |  3 +
 interface/web/client/templates/client_del.htm | 56 +++++++++++--------
 27 files changed, 148 insertions(+), 38 deletions(-)

diff --git a/interface/web/client/client_del.php b/interface/web/client/client_del.php
index d92dc56008..c018b7a27d 100644
--- a/interface/web/client/client_del.php
+++ b/interface/web/client/client_del.php
@@ -51,6 +51,32 @@ $app->load('tform_actions');
 
 class page_action extends tform_actions {
 
+	// db_table => info_field for onDelete - empty = show only the amount 
+	private $tables = array(
+		'cron' => '',
+		'client' => 'contact_name',
+		'dns_rr' => '', 
+		'dns_soa' => 'origin', 
+		'dns_slave' => 'origin',
+		'domain' => 'domain',
+		'ftp_user' => 'username', 
+		'mail_access' => 'source', 
+		'mail_content_filter' => '', 
+		'mail_domain' => 'domain', 
+		'mail_forwarding' => '', 
+		'mail_get' => '', 
+		'mail_mailinglist' => 'listname',
+		'mail_user' => 'email', 
+		'mail_user_filter' => '', 
+		'shell_user' => 'username', 
+		'spamfilter_users' => '', 'spamfilter_wblist' => '',
+		'support_message' => '',
+		'web_domain' => 'domain', 
+		'web_folder' => 'path', 
+		'web_folder_user' => 'username', 
+		'web_database_user' => 'database_user', 
+	);
+
 	function onDelete() {
 		global $app, $conf, $list_def_file, $tform_def_file;
 
@@ -80,19 +106,22 @@ class page_action extends tform_actions {
 			$this->dataRecord = $app->tform->getDataRecord($this->id);
 			$client_id = $app->functions->intval($this->dataRecord['client_id']);
 			$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client_id);
-
-			// Get all records (sub-clients, mail, web, etc....)  of this client.
-			$tables = 'cron,client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_database_user,web_domain,web_traffic,domain';
-			$tables_array = explode(',', $tables);
-			$client_group_id = $app->functions->intval($client_group['groupid']);
-
 			$table_list = array();
+			$client_group_id = $app->functions->intval($client_group['groupid']);
 			if($client_group_id > 1) {
-				foreach($tables_array as $table) {
+				foreach($this->tables as $table => $field) {
 					if($table != '') {
 						$records = $app->db->queryAllRecords("SELECT * FROM ?? WHERE sys_groupid = ?", $table, $client_group_id);
-						$number = count($records);
-						if($number > 0) $table_list[] = array('table' => $table."(".$number.")");
+						if(is_array($records) && !empty($records) && $field !== false) {
+							$data = array();
+							$number = count($records);
+							foreach($records as $rec) {
+								if($field != '' && $field !== false) $data['data'] .= '<li>'.$rec[$field].'</li>';
+							}
+							$data['count'] = $number;
+							$data['table'] =  $table;
+							$table_list[] = $data;
+						}	 
 					}
 				}
 			}
@@ -100,7 +129,6 @@ class page_action extends tform_actions {
 			$app->tpl->setVar('id', $this->id);
 			$app->tpl->setVar('number_records', $number);
 			$app->tpl->setLoop('records', $table_list);
-
 			//* load language file
 			$lng_file = 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'_client_del.lng';
 			include $lng_file;
@@ -138,11 +166,9 @@ class page_action extends tform_actions {
 			$app->db->query("DELETE FROM sys_user WHERE client_id = ?", $client_id);
 
 			// Delete all records (sub-clients, mail, web, etc....)  of this client.
-			$tables = 'cron,client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_database_user,web_domain,web_folder,web_folder_user,domain,mail_mailinglist,spamfilter_wblist';
-			$tables_array = explode(',', $tables);
 			$client_group_id = $app->functions->intval($client_group['groupid']);
 			if($client_group_id > 1) {
-				foreach($tables_array as $table) {
+				foreach($this->tables as $table => $field) {
 					if($table != '') {
 						//* find the primary ID of the table
 						$table_info = $app->db->tableInfo($table);
@@ -150,6 +176,7 @@ class page_action extends tform_actions {
 						foreach($table_info as $tmp) {
 							if($tmp['option'] == 'primary') $index_field = $tmp['name'];
 						}
+						
 						//* Delete the records
 						if($index_field != '') {
 							$records = $app->db->queryAllRecords("SELECT * FROM ?? WHERE sys_groupid = ? ORDER BY ?? DESC", $table, $client_group_id, $index_field);
diff --git a/interface/web/client/lib/lang/ar_client_del.lng b/interface/web/client/lib/lang/ar_client_del.lng
index 0932e9568a..21ddcb9ea4 100644
--- a/interface/web/client/lib/lang/ar_client_del.lng
+++ b/interface/web/client/lib/lang/ar_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'This action will delete the following number of rec
 $wb['btn_save_txt'] = 'Delete the client';
 $wb['btn_cancel_txt'] = 'Cancel without deleting the client';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/bg_client_del.lng b/interface/web/client/lib/lang/bg_client_del.lng
index 54d4831d77..418abdc20c 100644
--- a/interface/web/client/lib/lang/bg_client_del.lng
+++ b/interface/web/client/lib/lang/bg_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'This action will delete the following number of rec
 $wb['btn_save_txt'] = 'Изтрии клиента';
 $wb['btn_cancel_txt'] = 'Отказ, без изтриване на клиента';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/br_client_del.lng b/interface/web/client/lib/lang/br_client_del.lng
index 880c12c36a..fbea0a66a0 100644
--- a/interface/web/client/lib/lang/br_client_del.lng
+++ b/interface/web/client/lib/lang/br_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Esta ação removerá os seguintes registros associ
 $wb['btn_save_txt'] = 'Remover o cliente';
 $wb['btn_cancel_txt'] = 'Cancelar sem remover o cliente';
 $wb['confirm_client_delete_txt'] = 'Você tem certeza que deseja remover este cliente?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/ca_client_del.lng b/interface/web/client/lib/lang/ca_client_del.lng
index 2ec2d877bf..4c4506c99b 100644
--- a/interface/web/client/lib/lang/ca_client_del.lng
+++ b/interface/web/client/lib/lang/ca_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Cette action va supprimer le nombre d\'enregistreme
 $wb['btn_save_txt'] = 'Effacer le client';
 $wb['btn_cancel_txt'] = 'Annuler sans effacer le client';
 $wb['confirm_client_delete_txt'] = 'Confirmez-vous la suppression de ce client ?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/cz_client_del.lng b/interface/web/client/lib/lang/cz_client_del.lng
index 5374ea6f75..d19949fec5 100644
--- a/interface/web/client/lib/lang/cz_client_del.lng
+++ b/interface/web/client/lib/lang/cz_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Tato akce smaže následující počet záznamů p
 $wb['btn_save_txt'] = 'Smazat klienta';
 $wb['btn_cancel_txt'] = 'Zrušit bez smazání klienta';
 $wb['confirm_client_delete_txt'] = 'Jste si jisti, že chcete smazat tohoto klienta ?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/de_client_del.lng b/interface/web/client/lib/lang/de_client_del.lng
index d13fcfa8fc..53aa0973c4 100644
--- a/interface/web/client/lib/lang/de_client_del.lng
+++ b/interface/web/client/lib/lang/de_client_del.lng
@@ -3,5 +3,8 @@ $wb['confirm_action_txt'] = 'Aktion bestätigen';
 $wb['delete_explanation'] = 'Diese Aktion wird folgende Anzahl an Datensätzen des Kunden löschen';
 $wb['btn_save_txt'] = 'Kunden löschen';
 $wb['btn_cancel_txt'] = 'Abbrechen, ohne den Kunden zu löschen';
-$wb['confirm_client_delete_txt'] = 'Sind Sie sicher, daß Sie den Kunden löschen möchten?';
+$wb['confirm_client_delete_txt'] = 'Sind Sie sicher, dass Sie den Kunden löschen möchte';
+$wb['table_txt'] = 'Tabelle';
+$wb['data_txt'] = 'Daten';
+$wb['list_head_txt'] = 'Kunde löschen';
 ?>
diff --git a/interface/web/client/lib/lang/dk_client_del.lng b/interface/web/client/lib/lang/dk_client_del.lng
index ba5f592219..9bb157cdf4 100644
--- a/interface/web/client/lib/lang/dk_client_del.lng
+++ b/interface/web/client/lib/lang/dk_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Denne handling vil slette følgende antal poster fo
 $wb['btn_save_txt'] = 'Slet kunden';
 $wb['btn_cancel_txt'] = 'Annullere uden at slette kunden';
 $wb['confirm_client_delete_txt'] = 'Er du sikker på at du vil slette denne kunde?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/el_client_del.lng b/interface/web/client/lib/lang/el_client_del.lng
index 60ebd617d0..3f91a5c2b0 100644
--- a/interface/web/client/lib/lang/el_client_del.lng
+++ b/interface/web/client/lib/lang/el_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Η ενέργεια θα διαγράψει τις
 $wb['btn_save_txt'] = 'Διαγραφή πελάτη';
 $wb['btn_cancel_txt'] = 'Ακύρωση χωρίς διαγραφή πελάτη';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/en_client_del.lng b/interface/web/client/lib/lang/en_client_del.lng
index 7b1bbf9d70..5e2a00b929 100644
--- a/interface/web/client/lib/lang/en_client_del.lng
+++ b/interface/web/client/lib/lang/en_client_del.lng
@@ -4,4 +4,7 @@ $wb["delete_explanation"] = 'This action will delete the following number of rec
 $wb["btn_save_txt"] = 'Delete the client';
 $wb["btn_cancel_txt"] = 'Cancel without deleting the client';
 $wb["confirm_client_delete_txt"] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/es_client_del.lng b/interface/web/client/lib/lang/es_client_del.lng
index ff7c09c191..9496eb8146 100644
--- a/interface/web/client/lib/lang/es_client_del.lng
+++ b/interface/web/client/lib/lang/es_client_del.lng
@@ -4,4 +4,7 @@ $wb['btn_save_txt'] = 'Borrar el cliente';
 $wb['confirm_action_txt'] = 'Confirmar acción';
 $wb['confirm_client_delete_txt'] = '¿Está seguro de que desea borrar el cliente?';
 $wb['delete_explanation'] = 'Esta acción eliminará el siguiente número de registros asociados con este cliente';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/fi_client_del.lng b/interface/web/client/lib/lang/fi_client_del.lng
index b87895b8c0..4336b765d3 100644
--- a/interface/web/client/lib/lang/fi_client_del.lng
+++ b/interface/web/client/lib/lang/fi_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Tämä toiminto alla olevan määrän tämän asiak
 $wb['btn_save_txt'] = 'Poista käyttäjä';
 $wb['btn_cancel_txt'] = 'Keskeytä poistamatta asiakasta';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/fr_client_del.lng b/interface/web/client/lib/lang/fr_client_del.lng
index 4fdb5dac77..051c840fb2 100644
--- a/interface/web/client/lib/lang/fr_client_del.lng
+++ b/interface/web/client/lib/lang/fr_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Cette action va supprimer le nombre d’enregistrem
 $wb['btn_save_txt'] = 'Effacer le client';
 $wb['btn_cancel_txt'] = 'Annuler sans effacer le client';
 $wb['confirm_client_delete_txt'] = 'Confirmez-vous la suppression de ce client ?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/hr_client_del.lng b/interface/web/client/lib/lang/hr_client_del.lng
index 939cc59fb6..5f06b87008 100644
--- a/interface/web/client/lib/lang/hr_client_del.lng
+++ b/interface/web/client/lib/lang/hr_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Ukoliko potvrdite izbrisati će se svi zapisi povez
 $wb['btn_save_txt'] = 'Obriši klijenta';
 $wb['btn_cancel_txt'] = 'Prekini i ne briši klijenta';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/hu_client_del.lng b/interface/web/client/lib/lang/hu_client_del.lng
index 0932e9568a..21ddcb9ea4 100644
--- a/interface/web/client/lib/lang/hu_client_del.lng
+++ b/interface/web/client/lib/lang/hu_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'This action will delete the following number of rec
 $wb['btn_save_txt'] = 'Delete the client';
 $wb['btn_cancel_txt'] = 'Cancel without deleting the client';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/id_client_del.lng b/interface/web/client/lib/lang/id_client_del.lng
index 1adf18bd7d..2a8c6e32a1 100644
--- a/interface/web/client/lib/lang/id_client_del.lng
+++ b/interface/web/client/lib/lang/id_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Tindakan ini akan menghapus sejumlah record yang te
 $wb['btn_save_txt'] = 'Hapus Klien';
 $wb['btn_cancel_txt'] = 'Batalkan Tanpa Menghapus Klien';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_del.lng b/interface/web/client/lib/lang/it_client_del.lng
index 49811c377e..a17dc6a7ff 100644
--- a/interface/web/client/lib/lang/it_client_del.lng
+++ b/interface/web/client/lib/lang/it_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Questa operazione cancellerà i seguenti record ass
 $wb['btn_save_txt'] = 'Cancella cliente';
 $wb['btn_cancel_txt'] = 'Annulla senza cancellare il cliente';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/ja_client_del.lng b/interface/web/client/lib/lang/ja_client_del.lng
index 0932e9568a..21ddcb9ea4 100644
--- a/interface/web/client/lib/lang/ja_client_del.lng
+++ b/interface/web/client/lib/lang/ja_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'This action will delete the following number of rec
 $wb['btn_save_txt'] = 'Delete the client';
 $wb['btn_cancel_txt'] = 'Cancel without deleting the client';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/nl_client_del.lng b/interface/web/client/lib/lang/nl_client_del.lng
index 294fb5011b..9b9e5d5bc3 100644
--- a/interface/web/client/lib/lang/nl_client_del.lng
+++ b/interface/web/client/lib/lang/nl_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Deze actie verwijderd het volgende aantal aan recor
 $wb['btn_save_txt'] = 'Verwijder de klant';
 $wb['btn_cancel_txt'] = 'Annuleren zonder de klant te verwijderen';
 $wb['confirm_client_delete_txt'] = 'Weet je zeker dat je deze klant wil verwijderen ?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/pl_client_del.lng b/interface/web/client/lib/lang/pl_client_del.lng
index 429c61b4c7..4e5a2386f9 100644
--- a/interface/web/client/lib/lang/pl_client_del.lng
+++ b/interface/web/client/lib/lang/pl_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Ta akcja usunie następującą liczbę rekordów po
 $wb['btn_save_txt'] = 'Usuń klienta';
 $wb['btn_cancel_txt'] = 'Anuluj bez usuwania klienta';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/pt_client_del.lng b/interface/web/client/lib/lang/pt_client_del.lng
index ef71fa91e5..7b56473550 100644
--- a/interface/web/client/lib/lang/pt_client_del.lng
+++ b/interface/web/client/lib/lang/pt_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Atenção: está acção ira remover todos os objec
 $wb['btn_save_txt'] = 'Remover o cliente';
 $wb['btn_cancel_txt'] = 'Cancelar sem remover o cliente';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/ro_client_del.lng b/interface/web/client/lib/lang/ro_client_del.lng
index 0932e9568a..21ddcb9ea4 100644
--- a/interface/web/client/lib/lang/ro_client_del.lng
+++ b/interface/web/client/lib/lang/ro_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'This action will delete the following number of rec
 $wb['btn_save_txt'] = 'Delete the client';
 $wb['btn_cancel_txt'] = 'Cancel without deleting the client';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/ru_client_del.lng b/interface/web/client/lib/lang/ru_client_del.lng
index 94a05acca0..cf371efeb9 100644
--- a/interface/web/client/lib/lang/ru_client_del.lng
+++ b/interface/web/client/lib/lang/ru_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Это действие удалит следующ
 $wb['btn_save_txt'] = 'Удалить клиента';
 $wb['btn_cancel_txt'] = 'Отменить без удаления';
 $wb['confirm_client_delete_txt'] = 'Вы уверены, что хотите удалить этот клиента?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/se_client_del.lng b/interface/web/client/lib/lang/se_client_del.lng
index 99aa9d8a42..56f2f0d9d7 100644
--- a/interface/web/client/lib/lang/se_client_del.lng
+++ b/interface/web/client/lib/lang/se_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'This action will delete the following number of rec
 $wb['btn_save_txt'] = 'Radera kunden';
 $wb['btn_cancel_txt'] = 'Avbryt utan att radera kunden';
 $wb['confirm_client_delete_txt'] = 'Är du säker på att du vill radera den här kunden?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/sk_client_del.lng b/interface/web/client/lib/lang/sk_client_del.lng
index 0932e9568a..21ddcb9ea4 100644
--- a/interface/web/client/lib/lang/sk_client_del.lng
+++ b/interface/web/client/lib/lang/sk_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'This action will delete the following number of rec
 $wb['btn_save_txt'] = 'Delete the client';
 $wb['btn_cancel_txt'] = 'Cancel without deleting the client';
 $wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_del.lng b/interface/web/client/lib/lang/tr_client_del.lng
index b93579998b..82f00ba9d5 100644
--- a/interface/web/client/lib/lang/tr_client_del.lng
+++ b/interface/web/client/lib/lang/tr_client_del.lng
@@ -4,4 +4,7 @@ $wb['delete_explanation'] = 'Bu işlem bu müşteri ile ilgili şu kayıtları s
 $wb['btn_save_txt'] = 'Müşteriyi sil';
 $wb['btn_cancel_txt'] = 'Müşteriyi silmeden iptal et';
 $wb['confirm_client_delete_txt'] = 'Bu müşteriyi silmek istediğinize emin misiniz?';
+$wb['list_head_txt'] = 'Delete Client';
+$wb['table_txt'] = 'Table';
+$wb['data_txt'] = 'Data';
 ?>
diff --git a/interface/web/client/templates/client_del.htm b/interface/web/client/templates/client_del.htm
index e24ca768c2..5e7201ce5c 100644
--- a/interface/web/client/templates/client_del.htm
+++ b/interface/web/client/templates/client_del.htm
@@ -1,24 +1,32 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-        <div id="OKMsg">
-			<tmpl_if name='number_records'>
-            <tmpl_var name="delete_explanation">:<br /><br />
-                <tmpl_loop name="records">
-                    <tmpl_var name="table">, 
-                </tmpl_loop>
-			</tmpl_else>
-				<h3><tmpl_var name="confirm_client_delete_txt"></h3>
-			</tmpl_if>
-        </div>
-		&nbsp;
-		<div> <input type="checkbox" name="confirm" value="yes" /> <b><tmpl_var name="confirm_action_txt"></b></div>
-		&nbsp;
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-        <div class="clear"><div class="left">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_del.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+<div class='page-header'><h1><tmpl_var name="list_head_txt"></h1></div>
+<tmpl_if name='number_records'>
+	<tmpl_var name="delete_explanation">:<br /><br />
+	<div class="table-wrapper marginTop15">
+		<table class="table">
+		<thead class="dark form-group-sm">
+			<tr>
+				<th class="tiny-col"><tmpl_var name="table_txt"></th>
+				<th class="tiny-col"><tmpl_var name="data_txt"></th>
+			</tr>
+		</thead>
+		<tbody>
+		<tmpl_loop name="records">
+			<tr>
+				<td>{tmpl_var name="table"} ({tmpl_var name="count"})</td>
+				<td>{tmpl_var name="data"}</td>
+			</tr>
+		</tmpl_loop>
+		</tbody>
+		</table>
+	</div>
+</tmpl_else>
+	<h3><tmpl_var name="confirm_client_delete_txt"></h3>
+</tmpl_if>
+&nbsp;
+<div> <input type="checkbox" name="confirm" value="yes" /> <b><tmpl_var name="confirm_action_txt"></b></div>
+&nbsp;
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<div class="clear"><div class="left">
+	<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_del.php">{tmpl_var name='btn_save_txt'}</button>
+	<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+</div></div>
-- 
GitLab


From 21b6004208d44289e4695016e9c7634ea658bd77 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Mon, 10 Feb 2020 09:40:53 +0100
Subject: [PATCH 494/571] Show (disabled) client field on mail_domain edit

---
 interface/web/mail/mail_domain_edit.php           |  8 +++++++-
 interface/web/mail/templates/mail_domain_edit.htm | 13 ++++++++++---
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index 51d55ef2de..6f2bdb8f91 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -75,7 +75,13 @@ class page_action extends tform_actions {
 		$app->uses('ini_parser,getconf');
 		$settings = $app->getconf->get_global_config('domains');
 
-		if($_SESSION["s"]["user"]["typ"] == 'admin' && $settings['use_domain_module'] != 'y') {
+               if($_SESSION["s"]["user"]["typ"] == 'admin' && $settings['use_domain_module'] == 'y') {
+                       $sql = "SELECT CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id = ?";
+                       $clients = $app->db->queryAllRecords($sql, $this->dataRecord['sys_groupid']);
+                       $client_select = '<option value="dummy">'.$clients[0]['contactname'].'</option>';
+                       $app->tpl->setVar("client_group_name", $client_select);
+               }
+               elseif($_SESSION["s"]["user"]["typ"] == 'admin' && $settings['use_domain_module'] != 'y') {
 			// Getting Clients of the user
 			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id > 0 ORDER BY client.company_name, client.contact_name, sys_group.name";
 
diff --git a/interface/web/mail/templates/mail_domain_edit.htm b/interface/web/mail/templates/mail_domain_edit.htm
index 1e4a49c2a5..42ae8fe280 100644
--- a/interface/web/mail/templates/mail_domain_edit.htm
+++ b/interface/web/mail/templates/mail_domain_edit.htm
@@ -6,21 +6,28 @@
                             {tmpl_var name='server_id'}
                         </select></div>
                         <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
-                        <tmpl_else>
+                    <tmpl_else>
                             <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
                             <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='server_id'}
                             </select></div>
                     </tmpl_if>
                 </div>
-                <tmpl_unless name="domain_option">
+                <tmpl_if name="domain_option">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                       <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
+                           {tmpl_var name='client_group_name'}
+                       </select></div>
+                    </div>
+                <tmpl_else>
                     <div class="form-group">
                         <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
                         <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
                         </select></div>
                     </div>
-                </tmpl_unless>
+               </tmpl_if>
             <tmpl_else>
                 <tmpl_if name="only_one_server">
                     <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
-- 
GitLab


From 272fc9ac8fc74b1e595598dc04c40ca66e724d12 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Thu, 23 Jul 2020 10:22:24 +0200
Subject: [PATCH 495/571] Fix query and tab indent

---
 interface/web/mail/mail_domain_edit.php | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index 6f2bdb8f91..19aa4f91e6 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -75,13 +75,13 @@ class page_action extends tform_actions {
 		$app->uses('ini_parser,getconf');
 		$settings = $app->getconf->get_global_config('domains');
 
-               if($_SESSION["s"]["user"]["typ"] == 'admin' && $settings['use_domain_module'] == 'y') {
-                       $sql = "SELECT CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id = ?";
-                       $clients = $app->db->queryAllRecords($sql, $this->dataRecord['sys_groupid']);
-                       $client_select = '<option value="dummy">'.$clients[0]['contactname'].'</option>';
-                       $app->tpl->setVar("client_group_name", $client_select);
-               }
-               elseif($_SESSION["s"]["user"]["typ"] == 'admin' && $settings['use_domain_module'] != 'y') {
+		if($_SESSION["s"]["user"]["typ"] == 'admin' && $settings['use_domain_module'] == 'y') {
+			$sql = "SELECT CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.groupid = ?";
+			$clients = $app->db->queryAllRecords($sql, $this->dataRecord['sys_groupid']);
+			$client_select = '<option value="dummy">' . $clients[0]['contactname'] . '</option>';
+			$app->tpl->setVar("client_group_name", $client_select);
+		}
+		elseif($_SESSION["s"]["user"]["typ"] == 'admin' && $settings['use_domain_module'] != 'y') {
 			// Getting Clients of the user
 			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id > 0 ORDER BY client.company_name, client.contact_name, sys_group.name";
 
-- 
GitLab


From 0d61c249a2e10fbaa93faaadec93391e6f9ef2ed Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 23 Jul 2020 11:28:27 +0200
Subject: [PATCH 496/571] Revert "Merge branch 'http2-always' into
 'stable-3.1'"

This reverts merge request !1033
---
 .../sql/incremental/upd_dev_collection.sql    |  5 +--
 install/sql/ispconfig3.sql                    |  1 +
 install/tpl/apache_apps.vhost.master          | 16 +++++++---
 install/tpl/server.ini.master                 |  1 +
 .../web/admin/form/server_config.tform.php    |  9 ++++++
 .../web/admin/lib/lang/ar_server_config.lng   |  1 +
 .../web/admin/lib/lang/bg_server_config.lng   |  1 +
 .../web/admin/lib/lang/br_server_config.lng   |  1 +
 .../web/admin/lib/lang/ca_server_config.lng   |  1 +
 .../web/admin/lib/lang/cz_server_config.lng   |  1 +
 .../web/admin/lib/lang/de_server_config.lng   |  1 +
 .../web/admin/lib/lang/dk_server_config.lng   |  1 +
 .../web/admin/lib/lang/el_server_config.lng   |  1 +
 .../web/admin/lib/lang/en_server_config.lng   |  1 +
 .../web/admin/lib/lang/es_server_config.lng   |  1 +
 .../web/admin/lib/lang/fi_server_config.lng   |  1 +
 .../web/admin/lib/lang/fr_server_config.lng   |  1 +
 .../web/admin/lib/lang/hr_server_config.lng   |  1 +
 .../web/admin/lib/lang/hu_server_config.lng   |  1 +
 .../web/admin/lib/lang/id_server_config.lng   |  1 +
 .../web/admin/lib/lang/it_server_config.lng   |  1 +
 .../web/admin/lib/lang/ja_server_config.lng   |  1 +
 .../web/admin/lib/lang/nl_server_config.lng   |  1 +
 .../web/admin/lib/lang/pl_server_config.lng   |  1 +
 .../web/admin/lib/lang/pt_server_config.lng   |  1 +
 .../web/admin/lib/lang/ro_server_config.lng   |  1 +
 .../web/admin/lib/lang/ru_server_config.lng   |  1 +
 .../web/admin/lib/lang/se_server_config.lng   |  1 +
 .../web/admin/lib/lang/sk_server_config.lng   |  1 +
 .../web/admin/lib/lang/tr_server_config.lng   |  1 +
 .../templates/server_config_web_edit.htm      | 22 +++++++++----
 .../web/sites/form/web_vhost_domain.tform.php |  9 ++++++
 .../sites/lib/lang/ar_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/bg_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/br_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ca_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/cz_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/de_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/dk_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/el_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/en_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/es_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/fi_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/fr_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/hr_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/hu_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/id_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/it_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ja_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/nl_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/pl_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/pt_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ro_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/ru_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/se_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/sk_web_vhost_domain.lng    |  1 +
 .../sites/lib/lang/tr_web_vhost_domain.lng    |  1 +
 .../sites/templates/web_vhost_domain_ssl.htm  | 16 +++++++---
 interface/web/sites/web_vhost_domain_edit.php |  7 ++++
 server/conf/apache_apps.vhost.master          | 14 ++++++--
 server/conf/nginx_vhost.conf.master           | 32 +++++++++----------
 server/conf/vhost.conf.master                 |  8 +++--
 .../plugins-available/apache2_plugin.inc.php  | 11 +++++++
 server/plugins-available/nginx_plugin.inc.php | 12 +++++++
 64 files changed, 172 insertions(+), 41 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 8d673ae866..bf2f02f677 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -36,8 +36,5 @@ ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET
 -- add SSHFP and DNAME record
 ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME','DNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') NULL DEFAULT NULL AFTER `name`;
 
--- remove SPDY option
-ALTER TABLE `web_domain` DROP COLUMN `enable_spdy`;
-
 -- was missing in incremental, inserted for fixing older installations
-ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
+ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index e0c3848aa5..c54f0ac345 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2070,6 +2070,7 @@ CREATE TABLE `web_domain` (
   `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
   `fastcgi_php_version` varchar(255) DEFAULT NULL,
   `proxy_directives` mediumtext,
+  `enable_spdy` ENUM('y','n') NULL DEFAULT 'n',
   `last_quota_notification` date NULL default NULL,
   `rewrite_rules` mediumtext,
   `added_date` date NULL DEFAULT NULL,
diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index 14f0f10da2..9cccf8d38e 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -10,14 +10,20 @@
 <VirtualHost {tmpl_var name='apps_vhost_ip'}:{tmpl_var name='apps_vhost_port'}>
   ServerAdmin webmaster@localhost
   {tmpl_var name='apps_vhost_servername'}
-
+  
   <FilesMatch "\.ph(p3?|tml)$">
     SetHandler None
   </FilesMatch>
-
+  
   <IfModule mod_headers.c>
 	RequestHeader unset Proxy early
   </IfModule>
+  
+  {tmpl_if name="enable_spdy" op="==" value="y"}
+  <IfModule spdy_module>
+	SpdyEnabled on
+  </IfModule>
+  {/tmpl_if}
 
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
@@ -33,7 +39,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-
+  
   <IfModule mod_php7.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -48,7 +54,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-
+  
   <IfModule mod_fcgid.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     SuexecUserGroup ispapps ispapps
@@ -81,3 +87,5 @@
 
 
 </VirtualHost>
+
+
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index c500fb0cc2..5edc09807c 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -94,6 +94,7 @@ php_ini_path_apache=/etc/php5/apache2/php.ini
 php_ini_path_cgi=/etc/php5/cgi/php.ini
 check_apache_config=y
 enable_sni=y
+enable_spdy=n
 skip_le_check=n
 enable_ip_wildcard=y
 overtraffic_notify_admin=y
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index de2caf1750..0d570f2e94 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -1317,6 +1317,15 @@ $form["tabs"]['web'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'enable_spdy' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'y',
+			'value' => array (
+				0 => 'n',
+				1 => 'y'
+			)
+		),
 		'apps_vhost_enabled' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 4123c113d1..0bd4567220 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 463d1c7b2a..ae760d95cc 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 65a2dc4fd7..b24f1ef905 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -277,6 +277,7 @@ $wb['network_filesystem_txt'] = 'Sistema de arquivos de rede';
 $wb['php_ini_check_minutes_txt'] = 'Verificar alterações no php.ini a cada X minutos';
 $wb['php_ini_check_minutes_error_empty'] = 'Por favor, insira um valor para verificação de alterações no php.ini.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = sem verificações';
+$wb['enable_spdy_txt'] = 'Tornar SPDY/HTTP2 disponível';
 $wb['web_settings_txt'] = 'Servidor web';
 $wb['xmpp_server_txt'] = 'Servidor xmpp';
 $wb['xmpp_use_ipv6_txt'] = 'Usar IPv6';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 496df78f77..b4af211185 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -272,6 +272,7 @@ $wb['network_filesystem_txt'] = 'Network Filesystem';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index fbc1d777c3..76783fd95a 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -269,6 +269,7 @@ $wb['disabled_txt'] = 'Vypnuto';
 $wb['php_ini_check_minutes_txt'] = 'Provádět kontrolu změny obsahu souboru php.ini každých X minut';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Použít IPv6';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 1646360a7a..7487bec764 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -275,6 +275,7 @@ $wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung';
 $wb['php_handler_txt'] = 'Standard-PHP-Handler';
 $wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
+$wb['enable_spdy_txt'] = 'Stellt SPDY/HTTP2 zur Verfügung';
 $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['disabled_txt'] = 'Disabled';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 476e432161..44ffc53391 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -273,6 +273,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index cf215b939e..46ce9bfcfc 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index e12e1d4042..2eea4f220d 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -277,6 +277,7 @@ $wb['network_filesystem_txt'] = 'Network Filesystem';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index f343931695..d400e81367 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -68,6 +68,7 @@ $wb['do_not_try_rescue_mongodb_txt'] = 'Deshabilitar monitorización de MongoDB'
 $wb['do_not_try_rescue_mysql_txt'] = 'Deshabilitar monitorización de MySQL';
 $wb['enable_ip_wildcard_txt'] = 'Activar comodín IP (*)';
 $wb['enable_sni_txt'] = 'Habilitar SNI';
+$wb['enable_spdy_txt'] = 'Hacer que SPDY/HTTP2 esté disponible';
 $wb['fastcgi_alias_error_empty'] = 'El alias de FastCGI está vacío.';
 $wb['fastcgi_alias_error_regex'] = 'El alias de fastcgi es inválido.';
 $wb['fastcgi_alias_txt'] = 'Alias de FastCGI';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 6eefadb45f..b5fd51c4f8 100644
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 8871795209..4b020da068 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -272,6 +272,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index b36fd13486..93333280b6 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 789e86a649..e48f231f2e 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index ee197a4d0a..4023e619b0 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index cd71123720..928ca7ebc2 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -272,6 +272,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 4ef8d13422..1220886fc3 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 5b5fcf122b..9ff06f34d3 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 1d6caa8e5e..95b289ef72 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index fcf7a23e88..31360c0b0e 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 2c3b4fdce4..74055e9874 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index f3f5a47c7d..8754aece3c 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'Стойкость DKIM';
 $wb['php_ini_check_minutes_txt'] = 'Проверять изменения в PHP.ini файле каждые Х минут';
 $wb['php_ini_check_minutes_error_empty'] = 'Пожалуйста, укажите значение, как часто php.ini должен быть проверен на изменения.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = не проверять';
+$wb['enable_spdy_txt'] = 'Сделать SPDY/HTTP2 доступным';
 $wb['web_settings_txt'] = 'Web-сервер';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Использовать IPv6';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 634c3655a7..c45116d4fa 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 50c8c0b4c9..c4858143b0 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -274,6 +274,7 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 09aa3adf2d..b52479ecf5 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -276,6 +276,7 @@ $wb['network_filesystem_txt'] = 'AÄŸ Dosya Sistemi';
 $wb['php_ini_check_minutes_txt'] = 'Her X dakikada php.ini dosyasındaki değişiklikler denetlensin';
 $wb['php_ini_check_minutes_error_empty'] = 'php.ini dosyasındaki değişikliklerin kaç dakikada bir denetleneceğini yazın.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = denetim yapılmaz';
+$wb['enable_spdy_txt'] = 'SPDY/HTTP2 Kullanılsın';
 $wb['web_settings_txt'] = 'Web Sunucu';
 $wb['xmpp_server_txt'] = 'XMPP Sunucu';
 $wb['xmpp_use_ipv6_txt'] = 'IPv6 Kullanılsın';
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 64173549c9..f5f38affe7 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -163,7 +163,7 @@
 			<div class="form-group">
 				<label class="col-sm-3 control-label">{tmpl_var name='overquota_db_notify_client_txt'}</label>
 				<div class="col-sm-9">
-					{tmpl_var name='overquota_db_notify_client'}
+					{tmpl_var name='overquota_db_notify_client'}	
 				 </div>
 			</div>
             <div class="form-group">
@@ -197,6 +197,14 @@
                         {tmpl_var name='enable_sni'}
                     </div>
                 </div>
+				<div class="form-group">
+					<label class="col-sm-3 control-label">
+						<tmpl_var name="enable_spdy_txt">
+					</label>
+					<div class="col-sm-9">
+						<tmpl_var name="enable_spdy">
+					</div>
+				</div>
                 <div class="form-group">
                     <label for="CA_path" class="col-sm-3 control-label">{tmpl_var name='CA_path_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="CA_path" id="CA_path" value="{tmpl_var name='CA_path'}" autocomplete="new-password" class="form-control" /></div></div>
@@ -249,7 +257,7 @@
                 <div class="form-group">
                     <label for="connect_userid_to_webid_start" class="col-sm-3 control-label">{tmpl_var name='connect_userid_to_webid_start_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="connect_userid_to_webid_start" id="connect_userid_to_webid_start" value="{tmpl_var name='connect_userid_to_webid_start'}" class="form-control" /></div></div>
-
+            
 	  <!-- End content -->
 	  </div>
 	</div>
@@ -353,7 +361,7 @@
                 <div class="form-group">
                     <label for="apps_vhost_servername" class="col-sm-3 control-label">{tmpl_var name='apps_vhost_servername_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="apps_vhost_servername" id="apps_vhost_servername" value="{tmpl_var name='apps_vhost_servername'}" class="form-control" /></div></div>
-
+            
 	  <!-- End content -->
 	  </div>
 	</div>
@@ -381,15 +389,15 @@
                 <div class="form-group">
                     <label for="awstats_buildstaticpages_pl" class="col-sm-3 control-label">{tmpl_var name='awstats_buildstaticpages_pl_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="awstats_buildstaticpages_pl" id="awstats_buildstaticpages_pl" value="{tmpl_var name='awstats_buildstaticpages_pl'}" class="form-control" /></div></div>
-
+            
 	  <!-- End content -->
 	  </div>
 	</div>
   </div>
 </div>
-
+			
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
+            
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
@@ -402,7 +410,7 @@
         serverType = $(this).val();
         adjustForm();
     });
-
+    
     function adjustForm(){
         if(serverType == "nginx"){
             jQuery('.nginx').show();
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 7da71281cf..beb952bfe6 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -591,6 +591,15 @@ if($ssl_available) {
 				'default' => '',
 				'value'  => array('' => 'none_txt', 'save' => 'save_certificate_txt', 'create' => 'create_certificate_txt', 'del' => 'delete_certificate_txt')
 			),
+			'enable_spdy' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'CHECKBOX',
+				'default'  => 'n',
+				'value' => array (
+					0 => 'n',
+					1 => 'y'
+				)
+			),
 			//#################################
 			// END Datatable fields
 			//#################################
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index 136829a7b2..f9c396616b 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -140,6 +140,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index 8c48f035fe..1ab6c244cc 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index a3a14e335b..a074b160a3 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -143,6 +143,7 @@ $wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracter
 $wb['subdomain_error_empty'] = 'O subdomínio está em branco ou possui caracteres inválidos.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
+$wb['enable_spdy_txt'] = 'Habilitar SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Carregar detalhes do cliente';
 $wb['load_my_data_txt'] = 'Carregar detalhes do contato';
 $wb['reset_client_data_txt'] = 'Limpar dados';
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index cf25d81260..d0a5a58bd3 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index ea814b0cb9..250f98c890 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -138,6 +138,7 @@ $wb['server_chosen_not_ok'] = 'Vybraný server není pro tento účet povolen.';
 $wb['subdomain_error_empty'] = 'Pole subdomény je prázdné nebo obsahuje neplatné znaky.';
 $wb['btn_save_txt'] = 'Uložit';
 $wb['btn_cancel_txt'] = 'Zrušit';
+$wb['enable_spdy_txt'] = 'Povolit SPDY / HTTP2';
 $wb['load_client_data_txt'] = 'Nahrát údaje z podrobností registrovaného klienta';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Obnovit údaje (resetovat)';
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index 449bcb588a..e4424799a6 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -138,6 +138,7 @@ $wb['host_txt'] = 'Host';
 $wb['domain_error_wildcard'] = 'Wildcard-Subdomains sind nicht erlaubt.';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
+$wb['enable_spdy_txt'] = 'Aktiviere SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Kundendaten übernehmen';
 $wb['load_my_data_txt'] = 'Meine Kontaktdaten laden';
 $wb['reset_client_data_txt'] = 'Daten verwerfen';
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index cf25d81260..d0a5a58bd3 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index f39ce19a9b..d4cb988a17 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -140,6 +140,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index 497fcd1993..66bfd1ca19 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -143,6 +143,7 @@ $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid c
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = "Save";
 $wb['btn_cancel_txt'] = "Cancel";
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index 3f60826008..504bea2aa6 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -138,6 +138,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index 82fd44a56a..460fbadff7 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 5d817c611b..306a48aedc 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid c
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index 4d70565928..d883532397 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index d8bb15537b..4d54b0a4c7 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 39df360c89..3aa65982cd 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index 807039ca6c..cc890d855e 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -140,6 +140,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index 288b9fab11..bfb5e8b137 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index 27371eee35..d67cde421a 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Opslaan';
 $wb['btn_cancel_txt'] = 'Annuleren';
+$wb['enable_spdy_txt'] = 'SPDY/HTTP2 inschakelen';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index f1e945df6f..c24c319fe5 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index 9eb927f000..dc6895c3e1 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index 0127c4ee80..8e27105a6a 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -140,6 +140,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index 827f149dd8..c9a2a0a4ba 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'Выбранный сервер запрещён
 $wb['subdomain_error_empty'] = 'Поле поддомена пуст или содержит недопустимые символы.';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
+$wb['enable_spdy_txt'] = 'Включить SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Загрузить информацию о клиенте';
 $wb['load_my_data_txt'] = 'Загрузить мои контактные данные';
 $wb['reset_client_data_txt'] = 'Сброс данных';
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index 1bac2468c1..ec509b333a 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -140,6 +140,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index c3b680b2b4..0509b1a3bb 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -139,6 +139,7 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
+$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 2e004d87ef..071df396e4 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -142,6 +142,7 @@ $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karak
 $wb['subdomain_error_empty'] = 'Alt etki alanı boş ya da geçersiz karakterler içeriyor.';
 $wb['btn_save_txt'] = 'Kaydet';
 $wb['btn_cancel_txt'] = 'Ä°ptal';
+$wb['enable_spdy_txt'] = 'SPDY kullanılsın';
 $wb['load_client_data_txt'] = 'Müşteri Bilgilerini Yükle';
 $wb['load_my_data_txt'] = 'Profil Bilgilerimi Yükle';
 $wb['reset_client_data_txt'] = 'Verileri Sıfırla';
diff --git a/interface/web/sites/templates/web_vhost_domain_ssl.htm b/interface/web/sites/templates/web_vhost_domain_ssl.htm
index d4ec6749e2..8b3d986a02 100644
--- a/interface/web/sites/templates/web_vhost_domain_ssl.htm
+++ b/interface/web/sites/templates/web_vhost_domain_ssl.htm
@@ -62,7 +62,15 @@
                     {tmpl_var name='ssl_action'}
                 </select></div>
             </div>
-
+			{tmpl_if name="is_spdy_enabled"}
+			<div class="form-group">
+				<label class="col-sm-3 control-label">{tmpl_var name='enable_spdy_txt'}</label>
+				<div class="col-sm-9">
+					{tmpl_var name="enable_spdy"}
+				</div>
+			</div>
+			{/tmpl_if}
+        
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
@@ -83,11 +91,11 @@
 	$('#load_data').click(function(){
 		loadClientData();
 	});
-
-
+	
+	
 	function loadClientData() {
         var web_id = $("input[name=id]").val();
-
+        
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {'web_id': web_id, 'type': "getclientssldata"}, function(data) {
 			$('#ssl_organisation').val(data['company_name']);
 			$('#ssl_locality').val(data['city']);
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 0d770476d1..82da18ae1e 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -840,6 +840,7 @@ class page_action extends tform_actions {
 
 		$app->tpl->setVar('vhostdomain_type', $this->_vhostdomain_type, true);
 
+		$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
 		$app->tpl->setVar('is_pagespeed_enabled', ($web_config['nginx_enable_pagespeed'] === 'y'));
 		$app->tpl->setVar("is_admin", $is_admin);
 
@@ -949,8 +950,10 @@ class page_action extends tform_actions {
 		}
 		$app->tpl->setLoop('folder_directive_snippets', $folder_directive_snippets);
 		if(is_array($web_config[$server_id])) {
+			$app->tpl->setVar('is_spdy_enabled', ($web_config[$server_id]['enable_spdy'] === 'y'));
 			$app->tpl->setVar('is_pagespeed_enabled', ($web_config[$server_id]['nginx_enable_pagespeed']));
 		} else {
+			$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
 			$app->tpl->setVar('is_pagespeed_enabled', ($web_config['nginx_enable_pagespeed']));
 		}
 
@@ -1322,6 +1325,10 @@ class page_action extends tform_actions {
 				$app->tform->errorMessage .= $app->tform->lng("invalid_custom_php_ini_settings_txt").'<br>';
 			}
 		}
+
+		if($web_config['enable_spdy'] === 'n') {
+			unset($app->tform->formDef["tabs"]['ssl']['fields']['enable_spdy']);
+		}
 	//	if($this->dataRecord["directive_snippets_id"] < 1) $this->dataRecord["enable_pagespeed"] = 'n';
 
 		//print_r($_POST['folder_directive_snippets']);
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index fe73487fa0..94982a6dc1 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -14,11 +14,17 @@
   <FilesMatch "\.ph(p3?|tml)$">
     SetHandler None
   </FilesMatch>
-
+  
   <IfModule mod_headers.c>
 	RequestHeader unset Proxy early
   </IfModule>
 
+  {tmpl_if name="enable_spdy" op="==" value="y"}
+  <IfModule spdy_module>
+	SpdyEnabled on
+  </IfModule>
+  {/tmpl_if}
+
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -33,7 +39,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-
+  
   <IfModule mod_php7.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -48,7 +54,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-
+  
   <IfModule mod_fcgid.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     SuexecUserGroup ispapps ispapps
@@ -79,3 +85,5 @@
 {/tmpl_if}
 
 </VirtualHost>
+
+
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index ce245787a5..978139174f 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -12,7 +12,7 @@ server {
         listen [::]:<tmpl_var name='http_port'>;
 </tmpl_if>
 <tmpl_if name='ssl_enabled'>
-        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl http2;
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 <tmpl_if name='use_proxy_protocol' op='==' value='y'>
 <tmpl_if name='proxy_protocol_https' op='>' value='0'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_https'> ssl proxy_protocol;
@@ -22,19 +22,19 @@ server {
 		# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
 		# ssl_prefer_server_ciphers on;
 <tmpl_if name='ipv6_enabled'>
-        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl http2;
+        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 </tmpl_if>
 <tmpl_if name='ipv6_wildcard'>
-        listen [::]:<tmpl_var name='https_port'> ssl http2;
+        listen [::]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 </tmpl_if>
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
 </tmpl_if>
-
+        
         server_name <tmpl_var name='domain'> <tmpl_var name='alias'>;
 
         root   <tmpl_var name='web_document_root_www'>;
-
+		
 <tmpl_if name='ssl_enabled'>
 <tmpl_if name='rewrite_to_https' op='==' value='y'>
         if ($scheme != "https") {
@@ -72,16 +72,16 @@ server {
         }
 </tmpl_if>
 </tmpl_loop>
-<tmpl_if name='use_proxy' op='!=' value='y'>
+<tmpl_if name='use_proxy' op='!=' value='y'>		
         index index.html index.htm index.php index.cgi index.pl index.xhtml;
-
-<tmpl_if name='ssi' op='==' value='y'>
+		
+<tmpl_if name='ssi' op='==' value='y'>		
         location ~ \.shtml$ {
             ssi on;
         }
 </tmpl_if>
 
-<tmpl_if name='errordocs'>
+<tmpl_if name='errordocs'>		
         error_page 400 /error/400.html;
         error_page 401 /error/401.html;
         error_page 403 /error/403.html;
@@ -124,7 +124,7 @@ server {
             internal;
         }
 </tmpl_if>
-
+		
 <tmpl_if name='logging' op='==' value='yes'>
         error_log /var/log/ispconfig/httpd/<tmpl_var name='domain'>/error.log;
         access_log /var/log/ispconfig/httpd/<tmpl_var name='domain'>/access.log combined;
@@ -149,7 +149,7 @@ server {
 			index index.html;
 			try_files $uri $uri/ =404;
         }
-
+		
         location = /favicon.ico {
             log_not_found off;
             access_log off;
@@ -162,7 +162,7 @@ server {
             log_not_found off;
             access_log off;
         }
-
+		
         location /stats/ {
             <tmpl_var name='web_document_root_www_proxy'>
             index index.html index.php;
@@ -325,13 +325,13 @@ server {
         location <tmpl_var name='htpasswd_location'> { ##merge##
                 auth_basic "Members Only";
                 auth_basic_user_file <tmpl_var name='htpasswd_path'>.htpasswd;
-
+				
                 location ~ \.php$ {
                     try_files <tmpl_var name='rnd_php_dummy_file'> @php;
                 }
         }
 </tmpl_loop>
-</tmpl_if>
+</tmpl_if>	
 }
 
 <tmpl_loop name="redirects">
@@ -340,7 +340,7 @@ server {
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:80;
 </tmpl_if>
-
+		
 <tmpl_if name='ssl_enabled'>
         listen <tmpl_var name='ip_address'>:443 ssl;
 <tmpl_if name='ipv6_enabled'>
@@ -349,7 +349,7 @@ server {
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
 </tmpl_if>
-
+        
         server_name <tmpl_var name='rewrite_domain'>;
 
 <tmpl_if name='alias_seo_redirects2'>
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 1857499299..0612c13f7f 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -50,10 +50,12 @@
 		ServerAdmin webmaster@<tmpl_var name='domain'>
 
 <tmpl_if name='ssl_enabled'>
+<tmpl_if name='enable_http2' op='==' value='y'>
 		Protocols h2 http/1.1
 		SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 		SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
 </tmpl_if>
+</tmpl_if>
 
 <tmpl_if name='logging' op='==' value='anon'>
 		ErrorLog "|/usr/local/ispconfig/server/scripts/vlogger -e -n -P -t \"error.log\" /var/log/ispconfig/httpd/<tmpl_var name='domain'>"
@@ -385,7 +387,7 @@
                 Action php-fcgi /php-fcgi virtual
 				Alias /php-fcgi {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'}
 <tmpl_if name='use_tcp'>
-                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization  -pass-header Content-Type
+                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization  -pass-header Content-Type    
 </tmpl_if>
 <tmpl_if name='use_socket'>
                 FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -socket <tmpl_var name='fpm_socket'> -pass-header Authorization  -pass-header Content-Type
@@ -511,9 +513,9 @@
 		RewriteCond %{REQUEST_URI} !^/php-fcgi/
 		RewriteCond %{REQUEST_URI} !^<tmpl_var name='rewrite_target'>
 </tmpl_if>
-
+		
 		RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'><tmpl_if name="rewrite_add_path" op="==" value="y">$1</tmpl_if>  <tmpl_var name='rewrite_type'>
-
+	
 </tmpl_loop>
 <tmpl_if name='ssl_enabled'>
 <tmpl_else>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index b969882f2b..5f697d060e 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1235,6 +1235,17 @@ class apache2_plugin {
 		// Use separate bundle file only for apache versions < 2.4.8
 		if(@is_file($bundle_file) && version_compare($app->system->getapacheversion(true), '2.4.8', '<')) $vhost_data['has_bundle_cert'] = 1;
 
+		// HTTP/2.0 ?
+		$vhost_data['enable_http2']  = 'n';
+		if($vhost_data['enable_spdy'] == 'y'){
+			// check if apache supports http_v2
+			exec("2>&1 apachectl -M | grep http2_module", $tmp_output, $tmp_retval);
+			if($tmp_retval == 0){
+				$vhost_data['enable_http2']  = 'y';
+			}
+			unset($tmp_output, $tmp_retval);
+		}
+
 		// Set SEO Redirect
 		if($data['new']['seo_redirect'] != ''){
 			$vhost_data['seo_redirect_enabled'] = 1;
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index b57d38516e..89ac35734d 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1517,6 +1517,18 @@ class nginx_plugin {
 			}
 		}
 
+		// http2 or spdy?
+		$vhost_data['enable_http2']  = 'n';
+		if($vhost_data['enable_spdy'] == 'y'){
+			// check if nginx support http_v2; if so, use that instead of spdy
+			exec("2>&1 nginx -V | tr -- - '\n' | grep http_v2_module", $tmp_output, $tmp_retval);
+			if($tmp_retval == 0){
+				$vhost_data['enable_http2']  = 'y';
+				$vhost_data['enable_spdy'] = 'n';
+			}
+			unset($tmp_output, $tmp_retval);
+		}
+
 		//proxy protocol settings
 		if($web_config['vhost_proxy_protocol_enabled'] == "y"){
 		    if((int)$web_config['vhost_proxy_protocol_https_port'] > 0) {
-- 
GitLab


From d80257cf2b46d8f78da5b197a548604f55821843 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 23 Jul 2020 11:57:24 +0200
Subject: [PATCH 497/571] Revert "Revert "Merge branch 'http2-always' into
 'stable-3.1'""

This reverts commit 0d61c249a2e10fbaa93faaadec93391e6f9ef2ed
---
 .../sql/incremental/upd_dev_collection.sql    |  5 ++-
 install/sql/ispconfig3.sql                    |  1 -
 install/tpl/apache_apps.vhost.master          | 16 +++-------
 install/tpl/server.ini.master                 |  1 -
 .../web/admin/form/server_config.tform.php    |  9 ------
 .../web/admin/lib/lang/ar_server_config.lng   |  1 -
 .../web/admin/lib/lang/bg_server_config.lng   |  1 -
 .../web/admin/lib/lang/br_server_config.lng   |  1 -
 .../web/admin/lib/lang/ca_server_config.lng   |  1 -
 .../web/admin/lib/lang/cz_server_config.lng   |  1 -
 .../web/admin/lib/lang/de_server_config.lng   |  1 -
 .../web/admin/lib/lang/dk_server_config.lng   |  1 -
 .../web/admin/lib/lang/el_server_config.lng   |  1 -
 .../web/admin/lib/lang/en_server_config.lng   |  1 -
 .../web/admin/lib/lang/es_server_config.lng   |  1 -
 .../web/admin/lib/lang/fi_server_config.lng   |  1 -
 .../web/admin/lib/lang/fr_server_config.lng   |  1 -
 .../web/admin/lib/lang/hr_server_config.lng   |  1 -
 .../web/admin/lib/lang/hu_server_config.lng   |  1 -
 .../web/admin/lib/lang/id_server_config.lng   |  1 -
 .../web/admin/lib/lang/it_server_config.lng   |  1 -
 .../web/admin/lib/lang/ja_server_config.lng   |  1 -
 .../web/admin/lib/lang/nl_server_config.lng   |  1 -
 .../web/admin/lib/lang/pl_server_config.lng   |  1 -
 .../web/admin/lib/lang/pt_server_config.lng   |  1 -
 .../web/admin/lib/lang/ro_server_config.lng   |  1 -
 .../web/admin/lib/lang/ru_server_config.lng   |  1 -
 .../web/admin/lib/lang/se_server_config.lng   |  1 -
 .../web/admin/lib/lang/sk_server_config.lng   |  1 -
 .../web/admin/lib/lang/tr_server_config.lng   |  1 -
 .../templates/server_config_web_edit.htm      | 22 ++++---------
 .../web/sites/form/web_vhost_domain.tform.php |  9 ------
 .../sites/lib/lang/ar_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/bg_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/br_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/ca_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/cz_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/de_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/dk_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/el_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/en_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/es_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/fi_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/fr_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/hr_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/hu_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/id_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/it_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/ja_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/nl_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/pl_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/pt_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/ro_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/ru_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/se_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/sk_web_vhost_domain.lng    |  1 -
 .../sites/lib/lang/tr_web_vhost_domain.lng    |  1 -
 .../sites/templates/web_vhost_domain_ssl.htm  | 16 +++-------
 interface/web/sites/web_vhost_domain_edit.php |  7 ----
 server/conf/apache_apps.vhost.master          | 14 ++------
 server/conf/nginx_vhost.conf.master           | 32 +++++++++----------
 server/conf/vhost.conf.master                 |  8 ++---
 .../plugins-available/apache2_plugin.inc.php  | 11 -------
 server/plugins-available/nginx_plugin.inc.php | 12 -------
 64 files changed, 41 insertions(+), 172 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index bf2f02f677..8d673ae866 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -36,5 +36,8 @@ ALTER TABLE `mail_user` ADD `disableindexer-worker` ENUM('n','y') CHARACTER SET
 -- add SSHFP and DNAME record
 ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CNAME','DNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','SSHFP','TXT','TLSA','DNSKEY') NULL DEFAULT NULL AFTER `name`;
 
+-- remove SPDY option
+ALTER TABLE `web_domain` DROP COLUMN `enable_spdy`;
+
 -- was missing in incremental, inserted for fixing older installations
-ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
\ No newline at end of file
+ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index c54f0ac345..e0c3848aa5 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2070,7 +2070,6 @@ CREATE TABLE `web_domain` (
   `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
   `fastcgi_php_version` varchar(255) DEFAULT NULL,
   `proxy_directives` mediumtext,
-  `enable_spdy` ENUM('y','n') NULL DEFAULT 'n',
   `last_quota_notification` date NULL default NULL,
   `rewrite_rules` mediumtext,
   `added_date` date NULL DEFAULT NULL,
diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index 9cccf8d38e..14f0f10da2 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -10,20 +10,14 @@
 <VirtualHost {tmpl_var name='apps_vhost_ip'}:{tmpl_var name='apps_vhost_port'}>
   ServerAdmin webmaster@localhost
   {tmpl_var name='apps_vhost_servername'}
-  
+
   <FilesMatch "\.ph(p3?|tml)$">
     SetHandler None
   </FilesMatch>
-  
+
   <IfModule mod_headers.c>
 	RequestHeader unset Proxy early
   </IfModule>
-  
-  {tmpl_if name="enable_spdy" op="==" value="y"}
-  <IfModule spdy_module>
-	SpdyEnabled on
-  </IfModule>
-  {/tmpl_if}
 
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
@@ -39,7 +33,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-  
+
   <IfModule mod_php7.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -54,7 +48,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-  
+
   <IfModule mod_fcgid.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     SuexecUserGroup ispapps ispapps
@@ -87,5 +81,3 @@
 
 
 </VirtualHost>
-
-
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 5edc09807c..c500fb0cc2 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -94,7 +94,6 @@ php_ini_path_apache=/etc/php5/apache2/php.ini
 php_ini_path_cgi=/etc/php5/cgi/php.ini
 check_apache_config=y
 enable_sni=y
-enable_spdy=n
 skip_le_check=n
 enable_ip_wildcard=y
 overtraffic_notify_admin=y
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 0d570f2e94..de2caf1750 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -1317,15 +1317,6 @@ $form["tabs"]['web'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
-		'enable_spdy' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default'  => 'y',
-			'value' => array (
-				0 => 'n',
-				1 => 'y'
-			)
-		),
 		'apps_vhost_enabled' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 0bd4567220..4123c113d1 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index ae760d95cc..463d1c7b2a 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index b24f1ef905..65a2dc4fd7 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -277,7 +277,6 @@ $wb['network_filesystem_txt'] = 'Sistema de arquivos de rede';
 $wb['php_ini_check_minutes_txt'] = 'Verificar alterações no php.ini a cada X minutos';
 $wb['php_ini_check_minutes_error_empty'] = 'Por favor, insira um valor para verificação de alterações no php.ini.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = sem verificações';
-$wb['enable_spdy_txt'] = 'Tornar SPDY/HTTP2 disponível';
 $wb['web_settings_txt'] = 'Servidor web';
 $wb['xmpp_server_txt'] = 'Servidor xmpp';
 $wb['xmpp_use_ipv6_txt'] = 'Usar IPv6';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index b4af211185..496df78f77 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -272,7 +272,6 @@ $wb['network_filesystem_txt'] = 'Network Filesystem';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 76783fd95a..fbc1d777c3 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -269,7 +269,6 @@ $wb['disabled_txt'] = 'Vypnuto';
 $wb['php_ini_check_minutes_txt'] = 'Provádět kontrolu změny obsahu souboru php.ini každých X minut';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Použít IPv6';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 7487bec764..1646360a7a 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -275,7 +275,6 @@ $wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung';
 $wb['php_handler_txt'] = 'Standard-PHP-Handler';
 $wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
 $wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
-$wb['enable_spdy_txt'] = 'Stellt SPDY/HTTP2 zur Verfügung';
 $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['disabled_txt'] = 'Disabled';
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 44ffc53391..476e432161 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -273,7 +273,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 46ce9bfcfc..cf215b939e 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 2eea4f220d..e12e1d4042 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -277,7 +277,6 @@ $wb['network_filesystem_txt'] = 'Network Filesystem';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index d400e81367..f343931695 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -68,7 +68,6 @@ $wb['do_not_try_rescue_mongodb_txt'] = 'Deshabilitar monitorización de MongoDB'
 $wb['do_not_try_rescue_mysql_txt'] = 'Deshabilitar monitorización de MySQL';
 $wb['enable_ip_wildcard_txt'] = 'Activar comodín IP (*)';
 $wb['enable_sni_txt'] = 'Habilitar SNI';
-$wb['enable_spdy_txt'] = 'Hacer que SPDY/HTTP2 esté disponible';
 $wb['fastcgi_alias_error_empty'] = 'El alias de FastCGI está vacío.';
 $wb['fastcgi_alias_error_regex'] = 'El alias de fastcgi es inválido.';
 $wb['fastcgi_alias_txt'] = 'Alias de FastCGI';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index b5fd51c4f8..6eefadb45f 100644
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 4b020da068..8871795209 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index 93333280b6..b36fd13486 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index e48f231f2e..789e86a649 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index 4023e619b0..ee197a4d0a 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 928ca7ebc2..cd71123720 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -272,7 +272,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 1220886fc3..4ef8d13422 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 9ff06f34d3..5b5fcf122b 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 95b289ef72..1d6caa8e5e 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 31360c0b0e..fcf7a23e88 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 74055e9874..2c3b4fdce4 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 8754aece3c..f3f5a47c7d 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'Стойкость DKIM';
 $wb['php_ini_check_minutes_txt'] = 'Проверять изменения в PHP.ini файле каждые Х минут';
 $wb['php_ini_check_minutes_error_empty'] = 'Пожалуйста, укажите значение, как часто php.ini должен быть проверен на изменения.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = не проверять';
-$wb['enable_spdy_txt'] = 'Сделать SPDY/HTTP2 доступным';
 $wb['web_settings_txt'] = 'Web-сервер';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Использовать IPv6';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index c45116d4fa..634c3655a7 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index c4858143b0..50c8c0b4c9 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -274,7 +274,6 @@ $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
 $wb['web_settings_txt'] = 'Web Server';
 $wb['xmpp_server_txt'] = 'XMPP Server';
 $wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index b52479ecf5..09aa3adf2d 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -276,7 +276,6 @@ $wb['network_filesystem_txt'] = 'AÄŸ Dosya Sistemi';
 $wb['php_ini_check_minutes_txt'] = 'Her X dakikada php.ini dosyasındaki değişiklikler denetlensin';
 $wb['php_ini_check_minutes_error_empty'] = 'php.ini dosyasındaki değişikliklerin kaç dakikada bir denetleneceğini yazın.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = denetim yapılmaz';
-$wb['enable_spdy_txt'] = 'SPDY/HTTP2 Kullanılsın';
 $wb['web_settings_txt'] = 'Web Sunucu';
 $wb['xmpp_server_txt'] = 'XMPP Sunucu';
 $wb['xmpp_use_ipv6_txt'] = 'IPv6 Kullanılsın';
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index f5f38affe7..64173549c9 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -163,7 +163,7 @@
 			<div class="form-group">
 				<label class="col-sm-3 control-label">{tmpl_var name='overquota_db_notify_client_txt'}</label>
 				<div class="col-sm-9">
-					{tmpl_var name='overquota_db_notify_client'}	
+					{tmpl_var name='overquota_db_notify_client'}
 				 </div>
 			</div>
             <div class="form-group">
@@ -197,14 +197,6 @@
                         {tmpl_var name='enable_sni'}
                     </div>
                 </div>
-				<div class="form-group">
-					<label class="col-sm-3 control-label">
-						<tmpl_var name="enable_spdy_txt">
-					</label>
-					<div class="col-sm-9">
-						<tmpl_var name="enable_spdy">
-					</div>
-				</div>
                 <div class="form-group">
                     <label for="CA_path" class="col-sm-3 control-label">{tmpl_var name='CA_path_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="CA_path" id="CA_path" value="{tmpl_var name='CA_path'}" autocomplete="new-password" class="form-control" /></div></div>
@@ -257,7 +249,7 @@
                 <div class="form-group">
                     <label for="connect_userid_to_webid_start" class="col-sm-3 control-label">{tmpl_var name='connect_userid_to_webid_start_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="connect_userid_to_webid_start" id="connect_userid_to_webid_start" value="{tmpl_var name='connect_userid_to_webid_start'}" class="form-control" /></div></div>
-            
+
 	  <!-- End content -->
 	  </div>
 	</div>
@@ -361,7 +353,7 @@
                 <div class="form-group">
                     <label for="apps_vhost_servername" class="col-sm-3 control-label">{tmpl_var name='apps_vhost_servername_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="apps_vhost_servername" id="apps_vhost_servername" value="{tmpl_var name='apps_vhost_servername'}" class="form-control" /></div></div>
-            
+
 	  <!-- End content -->
 	  </div>
 	</div>
@@ -389,15 +381,15 @@
                 <div class="form-group">
                     <label for="awstats_buildstaticpages_pl" class="col-sm-3 control-label">{tmpl_var name='awstats_buildstaticpages_pl_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="awstats_buildstaticpages_pl" id="awstats_buildstaticpages_pl" value="{tmpl_var name='awstats_buildstaticpages_pl'}" class="form-control" /></div></div>
-            
+
 	  <!-- End content -->
 	  </div>
 	</div>
   </div>
 </div>
-			
+
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
-            
+
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
@@ -410,7 +402,7 @@
         serverType = $(this).val();
         adjustForm();
     });
-    
+
     function adjustForm(){
         if(serverType == "nginx"){
             jQuery('.nginx').show();
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index beb952bfe6..7da71281cf 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -591,15 +591,6 @@ if($ssl_available) {
 				'default' => '',
 				'value'  => array('' => 'none_txt', 'save' => 'save_certificate_txt', 'create' => 'create_certificate_txt', 'del' => 'delete_certificate_txt')
 			),
-			'enable_spdy' => array (
-				'datatype' => 'VARCHAR',
-				'formtype' => 'CHECKBOX',
-				'default'  => 'n',
-				'value' => array (
-					0 => 'n',
-					1 => 'y'
-				)
-			),
 			//#################################
 			// END Datatable fields
 			//#################################
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index f9c396616b..136829a7b2 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index 1ab6c244cc..8c48f035fe 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index a074b160a3..a3a14e335b 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -143,7 +143,6 @@ $wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracter
 $wb['subdomain_error_empty'] = 'O subdomínio está em branco ou possui caracteres inválidos.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['enable_spdy_txt'] = 'Habilitar SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Carregar detalhes do cliente';
 $wb['load_my_data_txt'] = 'Carregar detalhes do contato';
 $wb['reset_client_data_txt'] = 'Limpar dados';
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index d0a5a58bd3..cf25d81260 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index 250f98c890..ea814b0cb9 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -138,7 +138,6 @@ $wb['server_chosen_not_ok'] = 'Vybraný server není pro tento účet povolen.';
 $wb['subdomain_error_empty'] = 'Pole subdomény je prázdné nebo obsahuje neplatné znaky.';
 $wb['btn_save_txt'] = 'Uložit';
 $wb['btn_cancel_txt'] = 'Zrušit';
-$wb['enable_spdy_txt'] = 'Povolit SPDY / HTTP2';
 $wb['load_client_data_txt'] = 'Nahrát údaje z podrobností registrovaného klienta';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Obnovit údaje (resetovat)';
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index e4424799a6..449bcb588a 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -138,7 +138,6 @@ $wb['host_txt'] = 'Host';
 $wb['domain_error_wildcard'] = 'Wildcard-Subdomains sind nicht erlaubt.';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
-$wb['enable_spdy_txt'] = 'Aktiviere SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Kundendaten übernehmen';
 $wb['load_my_data_txt'] = 'Meine Kontaktdaten laden';
 $wb['reset_client_data_txt'] = 'Daten verwerfen';
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index d0a5a58bd3..cf25d81260 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index d4cb988a17..f39ce19a9b 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index 66bfd1ca19..497fcd1993 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -143,7 +143,6 @@ $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid c
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = "Save";
 $wb['btn_cancel_txt'] = "Cancel";
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index 504bea2aa6..3f60826008 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -138,7 +138,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index 460fbadff7..82fd44a56a 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 306a48aedc..5d817c611b 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid c
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index d883532397..4d70565928 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index 4d54b0a4c7..d8bb15537b 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 3aa65982cd..39df360c89 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index cc890d855e..807039ca6c 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index bfb5e8b137..288b9fab11 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index d67cde421a..27371eee35 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Opslaan';
 $wb['btn_cancel_txt'] = 'Annuleren';
-$wb['enable_spdy_txt'] = 'SPDY/HTTP2 inschakelen';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index c24c319fe5..f1e945df6f 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index dc6895c3e1..9eb927f000 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index 8e27105a6a..0127c4ee80 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index c9a2a0a4ba..827f149dd8 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'Выбранный сервер запрещён
 $wb['subdomain_error_empty'] = 'Поле поддомена пуст или содержит недопустимые символы.';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
-$wb['enable_spdy_txt'] = 'Включить SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Загрузить информацию о клиенте';
 $wb['load_my_data_txt'] = 'Загрузить мои контактные данные';
 $wb['reset_client_data_txt'] = 'Сброс данных';
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index ec509b333a..1bac2468c1 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -140,7 +140,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index 0509b1a3bb..c3b680b2b4 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -139,7 +139,6 @@ $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this accou
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
 $wb['load_client_data_txt'] = 'Load client details';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Reset data';
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 071df396e4..2e004d87ef 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -142,7 +142,6 @@ $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karak
 $wb['subdomain_error_empty'] = 'Alt etki alanı boş ya da geçersiz karakterler içeriyor.';
 $wb['btn_save_txt'] = 'Kaydet';
 $wb['btn_cancel_txt'] = 'Ä°ptal';
-$wb['enable_spdy_txt'] = 'SPDY kullanılsın';
 $wb['load_client_data_txt'] = 'Müşteri Bilgilerini Yükle';
 $wb['load_my_data_txt'] = 'Profil Bilgilerimi Yükle';
 $wb['reset_client_data_txt'] = 'Verileri Sıfırla';
diff --git a/interface/web/sites/templates/web_vhost_domain_ssl.htm b/interface/web/sites/templates/web_vhost_domain_ssl.htm
index 8b3d986a02..d4ec6749e2 100644
--- a/interface/web/sites/templates/web_vhost_domain_ssl.htm
+++ b/interface/web/sites/templates/web_vhost_domain_ssl.htm
@@ -62,15 +62,7 @@
                     {tmpl_var name='ssl_action'}
                 </select></div>
             </div>
-			{tmpl_if name="is_spdy_enabled"}
-			<div class="form-group">
-				<label class="col-sm-3 control-label">{tmpl_var name='enable_spdy_txt'}</label>
-				<div class="col-sm-9">
-					{tmpl_var name="enable_spdy"}
-				</div>
-			</div>
-			{/tmpl_if}
-        
+
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
@@ -91,11 +83,11 @@
 	$('#load_data').click(function(){
 		loadClientData();
 	});
-	
-	
+
+
 	function loadClientData() {
         var web_id = $("input[name=id]").val();
-        
+
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {'web_id': web_id, 'type': "getclientssldata"}, function(data) {
 			$('#ssl_organisation').val(data['company_name']);
 			$('#ssl_locality').val(data['city']);
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 82da18ae1e..0d770476d1 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -840,7 +840,6 @@ class page_action extends tform_actions {
 
 		$app->tpl->setVar('vhostdomain_type', $this->_vhostdomain_type, true);
 
-		$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
 		$app->tpl->setVar('is_pagespeed_enabled', ($web_config['nginx_enable_pagespeed'] === 'y'));
 		$app->tpl->setVar("is_admin", $is_admin);
 
@@ -950,10 +949,8 @@ class page_action extends tform_actions {
 		}
 		$app->tpl->setLoop('folder_directive_snippets', $folder_directive_snippets);
 		if(is_array($web_config[$server_id])) {
-			$app->tpl->setVar('is_spdy_enabled', ($web_config[$server_id]['enable_spdy'] === 'y'));
 			$app->tpl->setVar('is_pagespeed_enabled', ($web_config[$server_id]['nginx_enable_pagespeed']));
 		} else {
-			$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
 			$app->tpl->setVar('is_pagespeed_enabled', ($web_config['nginx_enable_pagespeed']));
 		}
 
@@ -1325,10 +1322,6 @@ class page_action extends tform_actions {
 				$app->tform->errorMessage .= $app->tform->lng("invalid_custom_php_ini_settings_txt").'<br>';
 			}
 		}
-
-		if($web_config['enable_spdy'] === 'n') {
-			unset($app->tform->formDef["tabs"]['ssl']['fields']['enable_spdy']);
-		}
 	//	if($this->dataRecord["directive_snippets_id"] < 1) $this->dataRecord["enable_pagespeed"] = 'n';
 
 		//print_r($_POST['folder_directive_snippets']);
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index 94982a6dc1..fe73487fa0 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -14,17 +14,11 @@
   <FilesMatch "\.ph(p3?|tml)$">
     SetHandler None
   </FilesMatch>
-  
+
   <IfModule mod_headers.c>
 	RequestHeader unset Proxy early
   </IfModule>
 
-  {tmpl_if name="enable_spdy" op="==" value="y"}
-  <IfModule spdy_module>
-	SpdyEnabled on
-  </IfModule>
-  {/tmpl_if}
-
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -39,7 +33,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-  
+
   <IfModule mod_php7.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -54,7 +48,7 @@
 		</tmpl_if>
     </Directory>
   </IfModule>
-  
+
   <IfModule mod_fcgid.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     SuexecUserGroup ispapps ispapps
@@ -85,5 +79,3 @@
 {/tmpl_if}
 
 </VirtualHost>
-
-
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 978139174f..ce245787a5 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -12,7 +12,7 @@ server {
         listen [::]:<tmpl_var name='http_port'>;
 </tmpl_if>
 <tmpl_if name='ssl_enabled'>
-        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl http2;
 <tmpl_if name='use_proxy_protocol' op='==' value='y'>
 <tmpl_if name='proxy_protocol_https' op='>' value='0'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_https'> ssl proxy_protocol;
@@ -22,19 +22,19 @@ server {
 		# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
 		# ssl_prefer_server_ciphers on;
 <tmpl_if name='ipv6_enabled'>
-        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl http2;
 </tmpl_if>
 <tmpl_if name='ipv6_wildcard'>
-        listen [::]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+        listen [::]:<tmpl_var name='https_port'> ssl http2;
 </tmpl_if>
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
 </tmpl_if>
-        
+
         server_name <tmpl_var name='domain'> <tmpl_var name='alias'>;
 
         root   <tmpl_var name='web_document_root_www'>;
-		
+
 <tmpl_if name='ssl_enabled'>
 <tmpl_if name='rewrite_to_https' op='==' value='y'>
         if ($scheme != "https") {
@@ -72,16 +72,16 @@ server {
         }
 </tmpl_if>
 </tmpl_loop>
-<tmpl_if name='use_proxy' op='!=' value='y'>		
+<tmpl_if name='use_proxy' op='!=' value='y'>
         index index.html index.htm index.php index.cgi index.pl index.xhtml;
-		
-<tmpl_if name='ssi' op='==' value='y'>		
+
+<tmpl_if name='ssi' op='==' value='y'>
         location ~ \.shtml$ {
             ssi on;
         }
 </tmpl_if>
 
-<tmpl_if name='errordocs'>		
+<tmpl_if name='errordocs'>
         error_page 400 /error/400.html;
         error_page 401 /error/401.html;
         error_page 403 /error/403.html;
@@ -124,7 +124,7 @@ server {
             internal;
         }
 </tmpl_if>
-		
+
 <tmpl_if name='logging' op='==' value='yes'>
         error_log /var/log/ispconfig/httpd/<tmpl_var name='domain'>/error.log;
         access_log /var/log/ispconfig/httpd/<tmpl_var name='domain'>/access.log combined;
@@ -149,7 +149,7 @@ server {
 			index index.html;
 			try_files $uri $uri/ =404;
         }
-		
+
         location = /favicon.ico {
             log_not_found off;
             access_log off;
@@ -162,7 +162,7 @@ server {
             log_not_found off;
             access_log off;
         }
-		
+
         location /stats/ {
             <tmpl_var name='web_document_root_www_proxy'>
             index index.html index.php;
@@ -325,13 +325,13 @@ server {
         location <tmpl_var name='htpasswd_location'> { ##merge##
                 auth_basic "Members Only";
                 auth_basic_user_file <tmpl_var name='htpasswd_path'>.htpasswd;
-				
+
                 location ~ \.php$ {
                     try_files <tmpl_var name='rnd_php_dummy_file'> @php;
                 }
         }
 </tmpl_loop>
-</tmpl_if>	
+</tmpl_if>
 }
 
 <tmpl_loop name="redirects">
@@ -340,7 +340,7 @@ server {
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:80;
 </tmpl_if>
-		
+
 <tmpl_if name='ssl_enabled'>
         listen <tmpl_var name='ip_address'>:443 ssl;
 <tmpl_if name='ipv6_enabled'>
@@ -349,7 +349,7 @@ server {
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
 </tmpl_if>
-        
+
         server_name <tmpl_var name='rewrite_domain'>;
 
 <tmpl_if name='alias_seo_redirects2'>
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 0612c13f7f..1857499299 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -50,12 +50,10 @@
 		ServerAdmin webmaster@<tmpl_var name='domain'>
 
 <tmpl_if name='ssl_enabled'>
-<tmpl_if name='enable_http2' op='==' value='y'>
 		Protocols h2 http/1.1
 		SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 		SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
 </tmpl_if>
-</tmpl_if>
 
 <tmpl_if name='logging' op='==' value='anon'>
 		ErrorLog "|/usr/local/ispconfig/server/scripts/vlogger -e -n -P -t \"error.log\" /var/log/ispconfig/httpd/<tmpl_var name='domain'>"
@@ -387,7 +385,7 @@
                 Action php-fcgi /php-fcgi virtual
 				Alias /php-fcgi {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'}
 <tmpl_if name='use_tcp'>
-                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization  -pass-header Content-Type    
+                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization  -pass-header Content-Type
 </tmpl_if>
 <tmpl_if name='use_socket'>
                 FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -socket <tmpl_var name='fpm_socket'> -pass-header Authorization  -pass-header Content-Type
@@ -513,9 +511,9 @@
 		RewriteCond %{REQUEST_URI} !^/php-fcgi/
 		RewriteCond %{REQUEST_URI} !^<tmpl_var name='rewrite_target'>
 </tmpl_if>
-		
+
 		RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'><tmpl_if name="rewrite_add_path" op="==" value="y">$1</tmpl_if>  <tmpl_var name='rewrite_type'>
-	
+
 </tmpl_loop>
 <tmpl_if name='ssl_enabled'>
 <tmpl_else>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 5f697d060e..b969882f2b 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1235,17 +1235,6 @@ class apache2_plugin {
 		// Use separate bundle file only for apache versions < 2.4.8
 		if(@is_file($bundle_file) && version_compare($app->system->getapacheversion(true), '2.4.8', '<')) $vhost_data['has_bundle_cert'] = 1;
 
-		// HTTP/2.0 ?
-		$vhost_data['enable_http2']  = 'n';
-		if($vhost_data['enable_spdy'] == 'y'){
-			// check if apache supports http_v2
-			exec("2>&1 apachectl -M | grep http2_module", $tmp_output, $tmp_retval);
-			if($tmp_retval == 0){
-				$vhost_data['enable_http2']  = 'y';
-			}
-			unset($tmp_output, $tmp_retval);
-		}
-
 		// Set SEO Redirect
 		if($data['new']['seo_redirect'] != ''){
 			$vhost_data['seo_redirect_enabled'] = 1;
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 89ac35734d..b57d38516e 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1517,18 +1517,6 @@ class nginx_plugin {
 			}
 		}
 
-		// http2 or spdy?
-		$vhost_data['enable_http2']  = 'n';
-		if($vhost_data['enable_spdy'] == 'y'){
-			// check if nginx support http_v2; if so, use that instead of spdy
-			exec("2>&1 nginx -V | tr -- - '\n' | grep http_v2_module", $tmp_output, $tmp_retval);
-			if($tmp_retval == 0){
-				$vhost_data['enable_http2']  = 'y';
-				$vhost_data['enable_spdy'] = 'n';
-			}
-			unset($tmp_output, $tmp_retval);
-		}
-
 		//proxy protocol settings
 		if($web_config['vhost_proxy_protocol_enabled'] == "y"){
 		    if((int)$web_config['vhost_proxy_protocol_https_port'] > 0) {
-- 
GitLab


From f09c9af5009e0716b98cd42dedf1b1875de741f5 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 23 Jul 2020 12:00:07 +0200
Subject: [PATCH 498/571] Do not use Protocols directive on systems without
 http2 module

---
 server/conf/vhost.conf.master | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 1857499299..8cc87515b1 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -50,7 +50,9 @@
 		ServerAdmin webmaster@<tmpl_var name='domain'>
 
 <tmpl_if name='ssl_enabled'>
-		Protocols h2 http/1.1
+		<IfModule mod_http2.c>
+			Protocols h2 http/1.1
+		</IfModule>
 		SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 		SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
 </tmpl_if>
-- 
GitLab


From 5f15485ec1bbfcffd51613fcbe425d905b482e5f Mon Sep 17 00:00:00 2001
From: Dominik <info@profi-webdesign.net>
Date: Thu, 23 Jul 2020 13:32:53 +0200
Subject: [PATCH 499/571] allow longer cc-Fields

---
 interface/web/mail/form/mail_user.tform.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 3d1a8fde7f..8fb6c4a692 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -187,7 +187,7 @@ $form["tabs"]['mailuser'] = array(
 			'default' => '',
 			'value'  => '',
 			'width'  => '30',
-			'maxlength' => '255'
+			'maxlength' => '65535'
 		),
 		'sender_cc' => array (
 			'datatype' => 'VARCHAR',
-- 
GitLab


From 1076198f1126b9edb87715bb8e5de0c1f1729b87 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 23 Jul 2020 14:40:53 +0200
Subject: [PATCH 500/571] Update system_config.tform.php to trigger MR pipeline

---
 interface/web/admin/form/system_config.tform.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 84c586da89..562c3a5226 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -776,4 +776,3 @@ $form['tabs']['dns_ca'] = array (
 	)
 );
 
-?>
\ No newline at end of file
-- 
GitLab


From 2532502e085772ef10317b3859c7d3a37c7c3bc0 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 23 Jul 2020 15:31:42 +0200
Subject: [PATCH 501/571] - fixed issue with file names in rspamd user filter
 config

---
 .git-scripts/syntax.sh                        |  4 +-
 interface/lib/classes/remote.d/sites.inc.php  | 70 +++++++++----------
 .../plugins-available/rspamd_plugin.inc.php   | 11 +++
 3 files changed, 48 insertions(+), 37 deletions(-)

diff --git a/.git-scripts/syntax.sh b/.git-scripts/syntax.sh
index e584e2ef10..d66022c7c3 100644
--- a/.git-scripts/syntax.sh
+++ b/.git-scripts/syntax.sh
@@ -20,7 +20,7 @@ fi
 FILECNT=$(eval "${CMD} | wc -l") ;
 
 for F in $(eval "$CMD") ; do
-	if [[ ! -e "${F}" && -f "${F}" ]] ; then
+	if [[ ! -e "${F}" || ! -f "${F}" ]] ; then
 		continue ;
 	fi
 	R=$(php -d error_reporting=E_ALL -d display_errors=On -l "$F" 2>/dev/null) ;
@@ -64,4 +64,4 @@ if [ $WARNCNT -gt 0 ] ; then
 	echo ""
 fi
 
-exit $EX
\ No newline at end of file
+exit $EX
diff --git a/interface/lib/classes/remote.d/sites.inc.php b/interface/lib/classes/remote.d/sites.inc.php
index 9efbecc091..10fc028e64 100644
--- a/interface/lib/classes/remote.d/sites.inc.php
+++ b/interface/lib/classes/remote.d/sites.inc.php
@@ -102,7 +102,7 @@ class remoting_sites extends remoting {
 		$app->remoting_lib->loadFormDef('../sites/form/database.tform.php');
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
-	
+
 	/* TODO: secure queries! */
 	//* Add a record
 	public function sites_database_add($session_id, $client_id, $params)
@@ -130,7 +130,7 @@ class remoting_sites extends remoting {
 
 			$retval = $this->insertQueryExecute($sql, $params);
 			$app->sites_database_plugin->processDatabaseInsert($this);
-			
+
 			// set correct values for backup_interval and backup_copies
 			if(isset($params['backup_interval']) || isset($params['backup_copies']) || isset($params['backup_format_web']) || isset($params['backup_format_db'])){
 				$sql_set = array();
@@ -140,7 +140,7 @@ class remoting_sites extends remoting {
 				if(isset($params['backup_format_db'])) $sql_set[] = "backup_format_db = ".$app->functions->intval($params['backup_format_db']);
 				$this->updateQueryExecute("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$retval, $retval, $params);
 			}
-			
+
 			return $retval;
 		}
 
@@ -165,7 +165,7 @@ class remoting_sites extends remoting {
 			$this->dataRecord = $params;
 			$app->sites_database_plugin->processDatabaseUpdate($this);
 			$retval = $this->updateQueryExecute($sql, $primary_id, $params);
-			
+
 			// set correct values for backup_interval and backup_copies
 			if(isset($params['backup_interval']) || isset($params['backup_copies']) || isset($params['backup_format_web']) || isset($params['backup_format_db'])){
 				$sql_set = array();
@@ -175,7 +175,7 @@ class remoting_sites extends remoting {
 				if(isset($params['backup_format_db'])) $sql_set[] = "backup_format_db = ".$app->functions->intval($params['backup_format_db']);
 				$this->updateQueryExecute("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$primary_id, $primary_id, $params);
 			}
-			
+
 			return $retval;
 		}
 
@@ -452,7 +452,7 @@ class remoting_sites extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		
+
 		if($params['log_retention'] == '') $params['log_retention'] = 30;
 
 		//* Set a few defaults for nginx servers
@@ -524,7 +524,7 @@ class remoting_sites extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		
+
 		if($params['log_retention'] == '') $params['log_retention'] = 30;
 
 		//* Set a few defaults for nginx servers
@@ -596,7 +596,7 @@ class remoting_sites extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		
+
 		if($params['log_retention'] == '') $params['log_retention'] = 30;
 
 		//* Set a few defaults for nginx servers
@@ -880,7 +880,7 @@ class remoting_sites extends remoting {
 			$app->remoting_lib->loadFormDef('../sites/form/web_vhost_domain.tform.php');
 			$params = $app->remoting_lib->getDataRecord($primary_id);
 			$params['active'] = $status;
-			
+
 			$affected_rows = $this->updateQuery('../sites/form/web_vhost_domain.tform.php', 0, $primary_id, $params);
 			return $affected_rows;
 		} else {
@@ -905,57 +905,57 @@ class remoting_sites extends remoting {
 		$all = $app->db->queryAllRecords($sql, $client_id);
 		return $all;
 	}
-	
+
 	//** backup functions -----------------------------------------------------------------------------------
 	public function sites_web_domain_backup_list($session_id, $site_id = null)
 	{
 		global $app;
-	
+
 		if(!$this->checkPerm($session_id, 'sites_web_domain_backup')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		
+
 		$result = $app->db->queryAllRecords("SELECT * FROM web_backup".(($site_id != null)?' WHERE parent_domain_id = ?':''), $site_id);
 		return $result;
 	}
-	
+
 	//* Backup download and restoration by Abdi Joseph
 	public function sites_web_domain_backup($session_id, $primary_id, $action_type)
 	{
 		global $app;
-	
+
 		if(!$this->checkPerm($session_id, 'sites_web_domain_backup')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-	
+
 		//*Set variables
 		$backup_record = $app->db->queryOneRecord("SELECT * FROM `web_backup` WHERE `backup_id`= ?", $primary_id);
 		$server_id = $backup_record['server_id'];
-	
+
 		//*Set default action state
 		$action_state = "pending";
 		$tstamp = time();
-	
+
 		//* Basic validation of variables
 		if ($server_id <= 0) {
 			throw new SoapFault('invalid_backup_id', "Invalid or non existant backup_id $primary_id");
 			return false;
 		}
-	
+
 		if ($action_type != 'backup_download' and $action_type != 'backup_restore' and $action_type != 'backup_delete') {
 			throw new SoapFault('invalid_action', "Invalid action_type $action_type");
 			return false;
 		}
-	
+
 		//* Validate instance
 		$instance_record = $app->db->queryOneRecord("SELECT * FROM `sys_remoteaction` WHERE `action_param`= ? and `action_type`= ? and `action_state`= ?", $primary_id, $action_type, 'pending');
 		if ($instance_record['action_id'] >= 1) {
 			throw new SoapFault('duplicate_action', "There is already a pending $action_type action");
 			return false;
 		}
-	
+
 		//* Save the record
 		if ($app->db->query("INSERT INTO `sys_remoteaction` SET `server_id` = ?, `tstamp` = ?, `action_type` = ?, `action_param` = ?, `action_state` = ?", $server_id, $tstamp, $action_type, $primary_id, $action_state)) {
 			return true;
@@ -963,64 +963,64 @@ class remoting_sites extends remoting {
 			return false;
 		}
 	}
-	
+
 	//** quota functions -----------------------------------------------------------------------------------
 	public function quota_get_by_user($session_id, $client_id)
 	{
 		global $app;
 		$app->uses('quota_lib');
-	
+
 		if(!$this->checkPerm($session_id, 'quota_get_by_user')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-	
+
 		return $app->quota_lib->get_quota_data($client_id, false);
 	}
-	
+
 	public function trafficquota_get_by_user($session_id, $client_id, $lastdays = 0)
 	{
 		global $app;
 		$app->uses('quota_lib');
-		
+
 		if(!$this->checkPerm($session_id, 'trafficquota_get_by_user')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
 		if ($client_id != null)
 			$client_id = $app->functions->intval($client_id);
-		
+
 		return $app->quota_lib->get_trafficquota_data($client_id, $lastdays);
 	}
-	
+
 	public function ftptrafficquota_data($session_id, $client_id, $lastdays = 0)
 	{
 		global $app;
 		$app->uses('quota_lib');
-		
+
 		if(!$this->checkPerm($session_id, 'trafficquota_get_by_user')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
 		if ($client_id != null)
 			$client_id = $app->functions->intval($client_id);
-		
+
 		return $app->quota_lib->get_ftptrafficquota_data($client_id, $lastdays);
 	}
-	
+
 	public function databasequota_get_by_user($session_id, $client_id)
 	{
 		global $app;
 		$app->uses('quota_lib');
-	
+
 		if(!$this->checkPerm($session_id, 'databasequota_get_by_user')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-	
+
 		return $app->quota_lib->get_databasequota_data($client_id, false);
 	}
-	
+
 	// ----------------------------------------------------------------------------------------------------------
 
 	//* Get record details
@@ -1070,8 +1070,8 @@ class remoting_sites extends remoting {
 		$affected_rows = $this->deleteQuery('../sites/form/webdav_user.tform.php', $primary_id);
 		return $affected_rows;
 	}
-	
-	
+
+
 }
 
 ?>
diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 4812deb683..e9a6cdd633 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -206,6 +206,17 @@ class rspamd_plugin {
 			return;
 		}
 
+		$old_settings_name = $settings_name;
+		$settings_name = $app->functions->idn_encode($settings_name);
+
+		if($old_settings_name !== $settings_name) {
+			// we changed naming to idn-encoded form due to path check issues. Delete old file if existing.
+			$old_settings_file = $this->users_config_dir . str_replace('@', '_', $old_settings_name) . '.conf';
+			if(is_file($old_settings_file)) {
+				unlink($old_settings_file);
+			}
+		}
+
 		$settings_file = $this->users_config_dir . str_replace('@', '_', $settings_name) . '.conf';
 		//$app->log('Settings file for rspamd is ' . $settings_file, LOGLEVEL_WARN);
 		if($mode === 'delete') {
-- 
GitLab


From 38fdcf89eb3b7f592f38792446c4c20335d518f6 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 23 Jul 2020 15:41:28 +0200
Subject: [PATCH 502/571] - add logging to acme.sh commands and add that log
 file to internal log rotation

---
 server/lib/classes/cron.d/200-logfiles.inc.php | 16 ++++++++--------
 server/lib/classes/letsencrypt.inc.php         |  4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index 203d3c0bda..b0470b2ec7 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -49,10 +49,10 @@ class cronjob_logfiles extends cronjob {
 
 	public function onRunJob() {
 		global $app, $conf;
-		
+
 		$app->uses('getconf');
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-		
+
 		if($server_config['log_retention'] > 0) {
 			$max_syslog = $app->functions->intval($server_config['log_retention']);
 		} else {
@@ -121,18 +121,18 @@ class cronjob_logfiles extends cronjob {
 				$app->system->exec_safe("gzip -c ? > ?", $logfile, $logfile . '.gz');
 				unlink($logfile);
 			}
-			
+
 			$cron_logfiles = array('cron.log', 'cron_error.log', 'cron_wget.log');
 			foreach($cron_logfiles as $cron_logfile) {
 				$cron_logfile = $rec['document_root'].'/' . $log_folder . '/' . $cron_logfile;
-				
+
 				// rename older files (move up by one)
 				$num = $log_retention;
 				while($num >= 1) {
 					if(is_file($cron_logfile . '.' . $num . '.gz')) rename($cron_logfile . '.' . $num . '.gz', $cron_logfile . '.' . ($num + 1) . '.gz');
 					$num--;
 				}
-				
+
 				// compress current logfile
 				if(is_file($cron_logfile)) {
 					$app->system->exec_safe("gzip -c ? > ?", $cron_logfile, $cron_logfile . '.1.gz');
@@ -146,7 +146,7 @@ class cronjob_logfiles extends cronjob {
 				}
 			}
 
-			// rotate and compress the error.log 
+			// rotate and compress the error.log
 			$error_logfile = $rec['document_root'].'/' . $log_folder . '/error.log';
 			// rename older files (move up by one)
 			$num = $log_retention;
@@ -184,7 +184,7 @@ class cronjob_logfiles extends cronjob {
 		//######################################################################################################
 
 
-		$ispconfig_logfiles = array('ispconfig.log', 'cron.log', 'auth.log');
+		$ispconfig_logfiles = array('ispconfig.log', 'cron.log', 'auth.log', 'acme.log');
 		foreach($ispconfig_logfiles as $ispconfig_logfile) {
 			$num = $max_syslog;
 			$ispconfig_logfile = $conf['ispconfig_log_dir'].'/'.$ispconfig_logfile;
@@ -240,7 +240,7 @@ class cronjob_logfiles extends cronjob {
              */
 			$sql = "DELETE FROM sys_log WHERE tstamp < ? AND server_id != 0";
 			$app->dbmaster->query($sql, $tstamp);
-			
+
 			/*
 			 * now delete those entries without a linked datalog entry (datalog_id = 0)
 			 */
diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 4e9bb74e13..7346638119 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -54,7 +54,7 @@ class letsencrypt {
 	}
 
 	public function get_acme_command($domains, $key_file, $bundle_file, $cert_file, $server_type = 'apache') {
-		global $app;
+		global $app, $conf;
 
 		$letsencrypt = $this->get_acme_script();
 
@@ -74,7 +74,7 @@ class letsencrypt {
 			$cert_arg = '--fullchain-file ' . escapeshellarg($bundle_file) . ' --cert-file ' . escapeshellarg($cert_file);
 		}
 
-		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme ; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' ' . $cert_arg . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
+		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme ; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' ' . $cert_arg . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . ' --log ' . escapeshellarg($conf['ispconfig_log_dir'].'/acme.log') . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
 
 		return $cmd;
 	}
-- 
GitLab


From 6855f505300b95013ee77a42f454b66def84db6e Mon Sep 17 00:00:00 2001
From: Dominik <info@profi-webdesign.net>
Date: Thu, 23 Jul 2020 15:58:53 +0200
Subject: [PATCH 503/571] Rollback sender_cc type change

---
 install/sql/ispconfig3.sql | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 3957e327e9..be39910961 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1039,7 +1039,7 @@ CREATE TABLE `mail_user` (
   `maildir_format` varchar(255) NOT NULL default 'maildir',
   `quota` bigint(20) NOT NULL default '-1',
   `cc` text,
-  `sender_cc` text,
+  `sender_cc` varchar(255) NOT NULL default '',
   `homedir` varchar(255) NOT NULL default '',
   `autoresponder` enum('n','y') NOT NULL default 'n',
   `autoresponder_start_date` datetime NULL default NULL,
-- 
GitLab


From b1cedcdf386ae613b2b027fcb84a7ac8b7430c61 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 23 Jul 2020 16:36:07 +0200
Subject: [PATCH 504/571] - set immutable bit for php cgi and fcgi starter
 files

---
 install/dist/lib/fedora.lib.php               |  80 +++++-----
 install/dist/lib/gentoo.lib.php               |  49 +++---
 install/dist/lib/opensuse.lib.php             |  58 +++----
 install/lib/installer_base.lib.php            | 147 ++++++++++--------
 install/uninstall.php                         |  13 +-
 server/lib/classes/system.inc.php             | 136 +++++++++-------
 .../plugins-available/apache2_plugin.inc.php  |   9 ++
 server/plugins-available/nginx_plugin.inc.php |   4 +
 8 files changed, 271 insertions(+), 225 deletions(-)

diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 6a1c5048e8..4a7c9cfbfe 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -30,7 +30,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 class installer_dist extends installer_base {
 	protected $mailman_group = 'mailman';
-	
+
 	public function __construct() {
 		//** check apache modules */
 		$mods = getapachemodules();
@@ -42,7 +42,7 @@ class installer_dist extends installer_base {
 			swriteln($inst->lng('    AllowOverride None'));
 			swriteln($inst->lng('    Require all denied'));
 			swriteln($inst->lng('    </Directory>'."\n"));
-			
+
 			swriteln($inst->lng('    If it uses the old syntax (deny from all) ISPConfig would fail to work.'));
 		}
 	}
@@ -80,7 +80,7 @@ class installer_dist extends installer_base {
 
 		//* mysql-virtual_sender_login_maps.cf
 		$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
-		
+
 		//* mysql-virtual_client.cf
 		$this->process_postfix_config('mysql-virtual_client.cf');
 
@@ -89,7 +89,7 @@ class installer_dist extends installer_base {
 
 		//* mysql-virtual_relayrecipientmaps.cf
 		$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
-		
+
 		//* mysql-virtual_outgoing_bcc.cf
 		$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
 
@@ -142,19 +142,19 @@ class installer_dist extends installer_base {
 			}
 		}
 		unset($rbl_hosts);
-		
+
 		//* If Postgrey is installed, configure it
 		$greylisting = '';
 		if($conf['postgrey']['installed'] == true) {
 			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
 		}
-		
+
 		$reject_sender_login_mismatch = '';
 		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
 			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
 		}
 		unset($server_ini_array);
-		
+
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
 			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
 			'{vmail_userid}' => $cf['vmail_userid'],
@@ -163,7 +163,7 @@ class installer_dist extends installer_base {
 			'{greylisting}' => $greylisting,
 			'{reject_slm}' => $reject_sender_login_mismatch,
 		);
-		
+
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_postfix.conf.master', 'tpl/fedora_postfix.conf.master');
 		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
 		$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
@@ -368,13 +368,13 @@ class installer_dist extends installer_base {
 		$virtual_transport = 'dovecot';
 
 		$configure_lmtp = false;
-		
+
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
 			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
-			
+
 			if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
 				$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
 				$configure_lmtp = true;
@@ -452,7 +452,7 @@ class installer_dist extends installer_base {
 			if(version_compare($dovecot_version,2.3) >= 0) {
 				// Remove deprecated setting(s)
 				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
-				
+
 				// Check if we have a dhparams file and if not, create it
 				if(!file_exists('/etc/dovecot/dh.pem')) {
 					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
@@ -475,7 +475,7 @@ class installer_dist extends installer_base {
 				$content = str_replace('#2.3+','',$content);
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
-				
+
 			} else {
 				// remove settings which are not supported in Dovecot < 2.3
 				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
@@ -502,7 +502,7 @@ class installer_dist extends installer_base {
 			copy("$config_dir/$configfile", "$config_dir/$configfile~");
 			exec("chmod 400 $config_dir/$configfile~");
 		}
-		
+
 		if(!@file_exists('/etc/dovecot-sql.conf')) exec('ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf');
 
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot-sql.conf.master', "tpl/fedora_dovecot-sql.conf.master");
@@ -520,7 +520,7 @@ class installer_dist extends installer_base {
 
 		exec("chmod 600 $config_dir/$configfile");
 		exec("chown root:root $config_dir/$configfile");
-		
+
 		// Dovecot shall ignore mounts in website directory
 		if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null");
 
@@ -543,12 +543,12 @@ class installer_dist extends installer_base {
 		$content = str_replace('{amavis_config_dir}', $conf['amavis']['config_dir'], $content);
 		wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
 		chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
-		
+
 		if(!is_file($conf['amavis']['config_dir'].'/60-dkim')) {
 			touch($conf['amavis']['config_dir'].'/60-dkim');
 			chmod($conf['amavis']['config_dir'].'/60-dkim', 0640);
 		}
-		
+
 		// for CentOS 7.2 only
 		if($dist['confid'] == 'centos72') {
 			chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0750);
@@ -752,16 +752,16 @@ class installer_dist extends installer_base {
 
 		$tpl = new tpl('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version',getapacheversion());
-		
+
 		if($this->is_update == true) {
 			$tpl->setVar('logging',get_logging_state());
 		} else {
 			$tpl->setVar('logging','yes');
 		}
-		
+
 		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
 		$ip_addresses = array();
-		
+
 		if(is_array($records) && count($records) > 0) {
 			foreach($records as $rec) {
 				if($rec['ip_type'] == 'IPv6') {
@@ -780,7 +780,7 @@ class installer_dist extends installer_base {
 				}
 			}
 		}
-		
+
 		if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses);
 
 		wf($vhost_conf_dir.'/ispconfig.conf', $tpl->grab());
@@ -843,7 +843,7 @@ class installer_dist extends installer_base {
 		//* add a sshusers group
 		$command = 'groupadd sshusers';
 		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-	
+
 		// add anonymized log option to nginxx.conf file
 		$nginx_conf_file = $conf['nginx']['config_dir'].'/nginx.conf';
 		if(is_file($nginx_conf_file)) {
@@ -853,7 +853,7 @@ class installer_dist extends installer_base {
 				replaceLine($nginx_conf_file, 'http {', "http {\n\n".file_get_contents('tpl/nginx_anonlog.master'), 0, 0);
 			}
 		}
-	
+
 	}
 
 	public function configure_bastille_firewall()
@@ -946,14 +946,14 @@ class installer_dist extends installer_base {
 		//* copy the ISPConfig server part
 		$command = "cp -rf ../server $install_dir";
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Make a backup of the security settings
 		if(is_file('/usr/local/ispconfig/security/security_settings.ini')) copy('/usr/local/ispconfig/security/security_settings.ini','/usr/local/ispconfig/security/security_settings.ini~');
-		
+
 		//* copy the ISPConfig security part
 		$command = 'cp -rf ../security '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-	
+
 		$configfile = 'security_settings.ini';
 		if(is_file($install_dir.'/security/'.$configfile)) {
 			copy($install_dir.'/security/'.$configfile, $install_dir.'/security/'.$configfile.'~');
@@ -1100,15 +1100,15 @@ class installer_dist extends installer_base {
 		//* chown the interface files to the ispconfig user and group
 		$command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the server files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/server';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the security files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/security';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the security directory and security_settings.ini to root:ispconfig
 		$command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -1163,12 +1163,12 @@ class installer_dist extends installer_base {
 			exec("chmod 600 $install_dir/server/lib/mysql_clientdb.conf");
 			exec("chown root:root $install_dir/server/lib/mysql_clientdb.conf");
 		}
-		
+
 		if(is_dir($install_dir.'/interface/invoices')) {
 			exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
 			exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
 		}
-		
+
 		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
 
 		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
@@ -1199,7 +1199,7 @@ class installer_dist extends installer_base {
 			$sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';";
 			$this->db->query($sql, $conf['interface_password']);
 		}
-		
+
 		if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
 			//* Copy the ISPConfig vhost for the controlpanel
 			// TODO: These are missing! should they be "vhost_dist_*_dir" ?
@@ -1228,7 +1228,7 @@ class installer_dist extends installer_base {
 			} else {
 				$tpl->setVar('ssl_bundle_comment','#');
 			}
-			
+
 			$tpl->setVar('apache_version',getapacheversion());
 
 			wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
@@ -1241,24 +1241,16 @@ class installer_dist extends installer_base {
 				exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
 			}
 
-			/*
-				exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
-				exec('cp tpl/apache_ispconfig_fcgi_starter.master /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
-				exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
-				exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
-				exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
-
-				replaceLine('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter','PHPRC=','PHPRC=/etc/',0,0);
-				*/
-			//if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
 			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
 			$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
 			$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
 			if(!is_dir('/var/www/php-fcgi-scripts/ispconfig')) exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
+			$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', false);
 			wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
 			exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
 			if(!is_link('/var/www/ispconfig')) exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
 			exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
+			$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', true);
 			//}
 			//}
 		}
@@ -1373,10 +1365,10 @@ class installer_dist extends installer_base {
 
 		//* Remove Domain module as its functions are available in the client module now
 		if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
-		
+
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
-		
+
 		// Change mode of a few files from amavisd
 		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
 		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index 5bb0d9df19..a39c346376 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -100,13 +100,13 @@ class installer extends installer_base
 		if($conf['postgrey']['installed'] == true) {
 			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
 		}
-		
+
 		$reject_sender_login_mismatch = '';
 		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
 			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
 		}
 		unset($server_ini_array);
-		
+
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
 			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
 			'{vmail_userid}' => $cf['vmail_userid'],
@@ -277,13 +277,13 @@ class installer extends installer_base
 		$virtual_transport = 'dovecot';
 
 		$configure_lmtp = false;
-		
+
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
 			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"].".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
-			
+
 			if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
 				$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
 				$configure_lmtp = true;
@@ -602,16 +602,16 @@ class installer extends installer_base
 		//* Copy the ISPConfig configuration include
 		$tpl = new tpl('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version',getapacheversion());
-		
+
 		if($this->is_update == true) {
 			$tpl->setVar('logging',get_logging_state());
 		} else {
 			$tpl->setVar('logging','yes');
 		}
-		
+
 		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
 		$ip_addresses = array();
-		
+
 		if(is_array($records) && count($records) > 0) {
 			foreach($records as $rec) {
 				if($rec['ip_type'] == 'IPv6') {
@@ -630,7 +630,7 @@ class installer extends installer_base
 				}
 			}
 		}
-		
+
 		if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses);
 
 		wf($conf['apache']['vhost_conf_dir'].'/000-ispconfig.conf', $tpl->grab());
@@ -727,10 +727,11 @@ class installer extends installer_base
 			$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
 			mkdir($conf['web']['website_basedir'].'/php-fcgi-scripts/apps', 0755, true);
 			//copy('tpl/apache_apps_fcgi_starter.master',$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
+			$this->set_immutable($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter', false);
 			wf($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter', $content);
 			exec('chmod +x '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
 			exec('chown -R ispapps:ispapps '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps');
-
+			$this->set_immutable($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter', true);
 			//}
 		}
 		if($conf['nginx']['installed'] == true){
@@ -783,11 +784,11 @@ class installer extends installer_base
 			//$content = str_replace('{fpm_port}', ($conf['nginx']['php_fpm_start_port']+1), $content);
 			$content = str_replace('{fpm_socket}', $fpm_socket, $content);
 			$content = str_replace('{cgi_socket}', $cgi_socket, $content);
-			
+
 			// SSL in apps vhost is off by default. Might change later.
 			$content = str_replace('{ssl_on}', 'ssl', $content);
 			$content = str_replace('{ssl_comment}', '#', $content);
-			
+
 			wf($vhost_conf_dir.'/apps.vhost', $content);
 
 			// PHP-FPM
@@ -843,14 +844,14 @@ class installer extends installer_base
 		//* copy the ISPConfig server part
 		$command = "cp -rf ../server $install_dir";
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Make a backup of the security settings
 		if(is_file('/usr/local/ispconfig/security/security_settings.ini')) copy('/usr/local/ispconfig/security/security_settings.ini','/usr/local/ispconfig/security/security_settings.ini~');
-		
+
 		//* copy the ISPConfig security part
 		$command = 'cp -rf ../security '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Apply changed security_settings.ini values to new security_settings.ini file
 		if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) {
 			$security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~'));
@@ -983,15 +984,15 @@ class installer extends installer_base
 		//* chown the interface files to the ispconfig user and group
 		$command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the server files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/server';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the security files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/security';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the security directory and security_settings.ini to root:ispconfig
 		$command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -1005,7 +1006,7 @@ class installer extends installer_base
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		$command = 'chown root:ispconfig '.$install_dir.'/security/nginx_directives.blacklist';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Make the global language file directory group writable
 		exec("chmod -R 770 $install_dir/interface/lib/lang");
 
@@ -1058,7 +1059,7 @@ class installer extends installer_base
 			exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
 			exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
 		}
-		
+
 		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
 
 		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
@@ -1089,7 +1090,7 @@ class installer extends installer_base
 			$sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';";
 			$this->db->query($sql, $conf['interface_password']);
 		}
-		
+
 		if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
 			//* Copy the ISPConfig vhost for the controlpanel
 			$content = $this->get_template_file("apache_ispconfig.vhost", true);
@@ -1121,11 +1122,13 @@ class installer extends installer_base
 				$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
 				$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
 				@mkdir('/var/www/php-fcgi-scripts/ispconfig', 0755, true);
+				$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', false);
 				wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
 				exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
 				chmod('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', 0755);
 				@symlink($install_dir.'/interface/web', '/var/www/ispconfig');
 				exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
+				$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', true);
 			}
 		}
 
@@ -1238,16 +1241,16 @@ class installer extends installer_base
 
 		//* Remove Domain module as its functions are available in the client module now
 		if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
-		
+
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
-		
+
 		// Change mode of a few files from amavisd
 		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
 		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
 		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
 		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
-		
+
 	}
 
 }
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 21cfd9f2ba..60fb0511fd 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -30,7 +30,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 class installer_dist extends installer_base {
 	protected $mailman_group = 'mailman';
-	
+
 	public function __construct() {
 		//** check apache modules */
 		$mods = getapachemodules();
@@ -42,7 +42,7 @@ class installer_dist extends installer_base {
 			swriteln($inst->lng('    AllowOverride None'));
 			swriteln($inst->lng('    Require all denied'));
 			swriteln($inst->lng('    </Directory>'."\n"));
-			
+
 			swriteln($inst->lng('    If it uses the old syntax (deny from all) ISPConfig would fail to work.'));
 		}
 	}
@@ -80,7 +80,7 @@ class installer_dist extends installer_base {
 
 		//* mysql-virtual_sender_login_maps.cf
 		$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
-		
+
 		//* mysql-virtual_client.cf
 		$this->process_postfix_config('mysql-virtual_client.cf');
 
@@ -159,13 +159,13 @@ class installer_dist extends installer_base {
 		if($conf['postgrey']['installed'] == true) {
 			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
 		}
-		
+
 		$reject_sender_login_mismatch = '';
 		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
 			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
 		}
 		unset($server_ini_array);
-		
+
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
 			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
 			'{vmail_userid}' => $cf['vmail_userid'],
@@ -174,7 +174,7 @@ class installer_dist extends installer_base {
 			'{greylisting}' => $greylisting,
 			'{reject_slm}' => $reject_sender_login_mismatch,
 		);
-		
+
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/opensuse_postfix.conf.master', 'tpl/opensuse_postfix.conf.master');
 		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
 		$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
@@ -378,13 +378,13 @@ class installer_dist extends installer_base {
 		$virtual_transport = 'dovecot';
 
 		$configure_lmtp = false;
-		
+
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
 			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
-			
+
 			if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
 				$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
 				$configure_lmtp = true;
@@ -487,7 +487,7 @@ class installer_dist extends installer_base {
 
 		exec("chmod 600 $config_dir/$configfile");
 		exec("chown root:root $config_dir/$configfile");
-		
+
 		// Dovecot shall ignore mounts in website directory
 		if(is_installed('doveadm')) exec("doveadm mount add '/srv/www/*' ignore > /dev/null 2> /dev/null");
 
@@ -659,7 +659,7 @@ class installer_dist extends installer_base {
 		if($conf['apache']['installed'] == false) return;
 		//* Create the logging directory for the vhost logfiles
 		exec('mkdir -p /var/log/ispconfig/httpd');
-		
+
 		//* enable apache logio module
 		exec('a2enmod logio');
 
@@ -690,16 +690,16 @@ class installer_dist extends installer_base {
 
 		$tpl = new tpl('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version',getapacheversion());
-		
+
 		if($this->is_update == true) {
 			$tpl->setVar('logging',get_logging_state());
 		} else {
 			$tpl->setVar('logging','yes');
 		}
-		
+
 		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
 		$ip_addresses = array();
-		
+
 		if(is_array($records) && count($records) > 0) {
 			foreach($records as $rec) {
 				if($rec['ip_type'] == 'IPv6') {
@@ -718,7 +718,7 @@ class installer_dist extends installer_base {
 				}
 			}
 		}
-		
+
 		if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses);
 
 		wf($vhost_conf_dir.'/ispconfig.conf', $tpl->grab());
@@ -823,7 +823,7 @@ class installer_dist extends installer_base {
 		//* add a sshusers group
 		$command = 'groupadd sshusers';
 		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-	
+
 		// add anonymized log option to nginxx.conf file
 		$nginx_conf_file = $conf['nginx']['config_dir'].'/nginx.conf';
 		if(is_file($nginx_conf_file)) {
@@ -925,14 +925,14 @@ class installer_dist extends installer_base {
 		//* copy the ISPConfig server part
 		$command = "cp -rf ../server $install_dir";
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Make a backup of the security settings
 		if(is_file('/usr/local/ispconfig/security/security_settings.ini')) copy('/usr/local/ispconfig/security/security_settings.ini','/usr/local/ispconfig/security/security_settings.ini~');
-		
+
 		//* copy the ISPConfig security part
 		$command = 'cp -rf ../security '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Apply changed security_settings.ini values to new security_settings.ini file
 		if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) {
 			$security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~'));
@@ -1090,15 +1090,15 @@ class installer_dist extends installer_base {
 		//* chown the interface files to the ispconfig user and group
 		$command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the server files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/server';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the security files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/security';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the security directory and security_settings.ini to root:ispconfig
 		$command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -1112,7 +1112,7 @@ class installer_dist extends installer_base {
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		$command = 'chown root:ispconfig '.$install_dir.'/security/nginx_directives.blacklist';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Make the global language file directory group writable
 		exec("chmod -R 770 $install_dir/interface/lib/lang");
 
@@ -1153,12 +1153,12 @@ class installer_dist extends installer_base {
 			exec("chmod 600 $install_dir/server/lib/mysql_clientdb.conf");
 			exec("chown root:root $install_dir/server/lib/mysql_clientdb.conf");
 		}
-		
+
 		if(is_dir($install_dir.'/interface/invoices')) {
 			exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
 			exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
 		}
-		
+
 		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
 
 		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
@@ -1192,7 +1192,7 @@ class installer_dist extends installer_base {
 			$sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';";
 			$this->db->query($sql, $conf['interface_password']);
 		}
-		
+
 		if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
 			//* Copy the ISPConfig vhost for the controlpanel
 			// TODO: These are missing! should they be "vhost_dist_*_dir" ?
@@ -1221,7 +1221,7 @@ class installer_dist extends installer_base {
 			} else {
 				$tpl->setVar('ssl_bundle_comment','#');
 			}
-			
+
 			$tpl->setVar('apache_version',getapacheversion());
 
 			$content = $tpl->grab();
@@ -1233,10 +1233,12 @@ class installer_dist extends installer_base {
 			$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
 			$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
 			exec('mkdir -p /srv/www/php-fcgi-scripts/ispconfig');
+			$this->set_immutable('/srv/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', false);
 			wf('/srv/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
 			exec('chmod +x /srv/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
 			exec('ln -s /usr/local/ispconfig/interface/web /srv/www/ispconfig');
 			exec('chown -R ispconfig:ispconfig /srv/www/php-fcgi-scripts/ispconfig');
+			$this->set_immutable('/srv/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', true);
 
 			//}
 
@@ -1362,10 +1364,10 @@ class installer_dist extends installer_base {
 
 		//* Remove Domain module as its functions are available in the client module now
 		if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
-		
+
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
-		
+
 		// Change mode of a few files from amavisd
 		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
 		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index bc9ed26e18..81b1257db0 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -143,6 +143,16 @@ class installer_base {
 	}
 	*/
 
+	public function set_immutable($path, $enable = true) {
+		if($path != '' && $path != '/' && strlen($path) > 6 && strpos($path, '..') === false && (is_file($path) || is_dir($path))) {
+			if($enable) {
+				exec('chattr +i ' . escapeshellarg($path));
+			} else {
+				exec('chattr -i ' . escapeshellarg($path));
+			}
+		}
+	}
+
 	//** Detect PHP-Version
 	public function get_php_version() {
 		if(version_compare(PHP_VERSION, $this->min_php, '<')) return false;
@@ -235,7 +245,7 @@ class installer_base {
 			die();
 		}*/
 
-		$unwanted_sql_plugins = array('validate_password');		
+		$unwanted_sql_plugins = array('validate_password');
 		$sql_plugins = $this->db->queryAllRecords("SELECT plugin_name FROM information_schema.plugins WHERE plugin_status='ACTIVE' AND plugin_name IN ?", $unwanted_sql_plugins);
 		if(is_array($sql_plugins) && !empty($sql_plugins)) {
 			foreach ($sql_plugins as $plugin) echo "Login in to MySQL and disable $plugin[plugin_name] with:\n\n    UNINSTALL PLUGIN $plugin[plugin_name];";
@@ -357,7 +367,7 @@ class installer_base {
 		}
 
 		$server_ini_content = array_to_ini($tpl_ini_array);
-		
+
 		$mail_server_enabled = ($conf['services']['mail'])?1:0;
 		$web_server_enabled = ($conf['services']['web'])?1:0;
 		$dns_server_enabled = ($conf['services']['dns'])?1:0;
@@ -427,7 +437,7 @@ class installer_base {
 
 	public function detect_ips(){
 		global $conf;
-			
+
 		$output = $this->get_host_ips();
 
 		if(is_array($output) && !empty($output)){
@@ -675,7 +685,7 @@ class installer_base {
 				if(!$this->dbmaster->query($query, $value['db'] . '.aps_instances', $value['user'], $host)) {
 					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
 				}
-				
+
 				$query = "GRANT SELECT, DELETE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
@@ -699,7 +709,7 @@ class installer_base {
 				if(!$this->dbmaster->query($query, $value['db'] . '.mail_backup', $value['user'], $host)) {
 					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
 				}
-				
+
 				$query = "GRANT SELECT, UPDATE(`dnssec_initialized`, `dnssec_info`, `dnssec_last_signed`) ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
@@ -707,7 +717,7 @@ class installer_base {
 				if(!$this->dbmaster->query($query, $value['db'] . '.dns_soa', $value['user'], $host)) {
 					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
 				}
-				
+
 				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
@@ -866,7 +876,7 @@ class installer_base {
 			$postfix_service = @($out[0]=='')?false:true;
 		} else { //* fallback - Postfix < 2.9
 			$content = rf($conf['postfix']['config_dir'].'/master.cf');
-			$regex = "/^((?!#)".$service.".*".$type.".*)$/m"; 
+			$regex = "/^((?!#)".$service.".*".$type.".*)$/m";
 			$postfix_service = @(preg_match($regex, $content))?true:false;
 		}
 
@@ -976,7 +986,7 @@ class installer_base {
 
 		//* mysql-virtual_relayrecipientmaps.cf
 		$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
-		
+
 		//* mysql-virtual_outgoing_bcc.cf
 		$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
 
@@ -1044,13 +1054,13 @@ class installer_base {
 		if($conf['postgrey']['installed'] == true) {
 			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
 		}
-		
+
 		$reject_sender_login_mismatch = '';
 		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
 			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
 		}
 		unset($server_ini_array);
-		
+
 		$tmp = str_replace('.','\.',$conf['hostname']);
 
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
@@ -1188,7 +1198,7 @@ class installer_base {
 		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 	}
-	
+
 	public function configure_saslauthd() {
 		global $conf;
 
@@ -1304,7 +1314,7 @@ class installer_base {
 
 	public function configure_dovecot() {
 		global $conf;
-	
+
 		$virtual_transport = 'dovecot';
 
 		$configure_lmtp = false;
@@ -1319,7 +1329,7 @@ class installer_base {
 			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
-			
+
 			if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
 				$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
 				$configure_lmtp = true;
@@ -1403,7 +1413,7 @@ class installer_base {
 			if(version_compare($dovecot_version,2.3) >= 0) {
 				// Remove deprecated setting(s)
 				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
-				
+
 				// Check if we have a dhparams file and if not, create it
 				if(!file_exists('/etc/dovecot/dh.pem')) {
 					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
@@ -1426,7 +1436,7 @@ class installer_base {
 				$content = str_replace('#2.3+ ','',$content);
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
-				
+
 			} else {
 				// remove settings which are not supported in Dovecot < 2.3
 				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
@@ -1470,7 +1480,7 @@ class installer_base {
 		chmod($config_dir.'/'.$configfile, 0600);
 		chown($config_dir.'/'.$configfile, 'root');
 		chgrp($config_dir.'/'.$configfile, 'root');
-		
+
 		// Dovecot shall ignore mounts in website directory
 		if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null");
 
@@ -1576,12 +1586,12 @@ class installer_base {
 
 	public function configure_rspamd() {
 		global $conf;
-		
+
 		//* These postconf commands will be executed on installation and update
 		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
 		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
 		unset($server_ini_rec);
-		
+
 		$mail_config = $server_ini_array['mail'];
 		if($mail_config['content_filter'] === 'rspamd') {
 			exec("postconf -X 'receive_override_options'");
@@ -1603,7 +1613,7 @@ class installer_base {
 				}
 			}
 			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
-			
+
 		}
 
 		if(is_user('_rspamd') && is_group('amavis')) {
@@ -1611,7 +1621,7 @@ class installer_base {
 		} elseif(is_user('rspamd') && is_group('amavis')) {
 			exec("usermod -G amavis rspamd");
 		}
-				
+
 		if(!is_dir('/etc/rspamd/local.d/')){
 			mkdir('/etc/rspamd/local.d/', 0755, true);
 		}
@@ -1619,7 +1629,7 @@ class installer_base {
 		if(!is_dir('/etc/rspamd/override.d/')){
 			mkdir('/etc/rspamd/override.d/', 0755, true);
 		}
-		
+
 		if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
 			$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
 		}
@@ -1731,17 +1741,17 @@ class installer_base {
 		wf('/etc/rspamd/local.d/dkim_signing.conf', $tpl->grab());
 
 		exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/override.d/*');
-		
+
 		$command = 'usermod -a -G amavis _rspamd';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-			
+
 		if(strpos(rf('/etc/rspamd/rspamd.conf'), '.include "$LOCAL_CONFDIR/local.d/users.conf"') === false){
 			af('/etc/rspamd/rspamd.conf', '.include "$LOCAL_CONFDIR/local.d/users.conf"');
 		}
-		
+
 		if(!isset($mail_config['rspamd_password']) || !$mail_config['rspamd_password']) {
 			$mail_config['rspamd_password'] = str_shuffle(bin2hex(openssl_random_pseudo_bytes(12)));
-			
+
 			$server_ini_array['mail']['rspamd_password'] = $mail_config['rspamd_password'];
 		}
 
@@ -1753,7 +1763,7 @@ class installer_base {
 		$this->db->query('UPDATE `server` SET `config` = ? WHERE `server_id` = ?', $server_ini_string, $conf['server_id']);
 		unset($server_ini_array);
 		unset($server_ini_string);
-		
+
 		$tpl = new tpl();
 		$tpl->newTemplate('rspamd_worker-controller.inc.master');
 		$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
@@ -1896,14 +1906,14 @@ class installer_base {
 
 
 	}
-	
+
 	//** writes bind configuration files
 	public function process_bind_file($configfile, $target='/', $absolute=false) {
 		global $conf;
 
 		if ($absolute) $full_file_name = $target.$configfile;
 		else $full_file_name = $conf['ispconfig_install_dir'].$target.$configfile;
-		
+
 		//* Backup exiting file
 		if(is_file($full_file_name)) {
 			copy($full_file_name, $config_dir.$configfile.'~');
@@ -1935,7 +1945,7 @@ class installer_base {
 		chown($content, $conf['bind']['bind_user']);
 		chgrp($content, $conf['bind']['bind_group']);
 		chmod($content, 02770);
-		
+
 		//* Install scripts for dnssec implementation
 		$this->process_bind_file('named.conf.options', '/etc/bind/', true); //TODO replace hardcoded path
 	}
@@ -2055,12 +2065,12 @@ class installer_base {
 		if(is_file('/etc/apache2/ports.conf')) {
 			// add a line "Listen 443" to ports conf if line does not exist
 			replaceLine('/etc/apache2/ports.conf', 'Listen 443', 'Listen 443', 1);
-			
+
 			// Comment out the namevirtualhost lines, as they were added by ispconfig in ispconfig.conf file again
 			replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:80', '# NameVirtualHost *:80', 1);
 			replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:443', '# NameVirtualHost *:443', 1);
 		}
-		
+
 		if(is_file('/etc/apache2/mods-available/fcgid.conf')) {
 			// add or modify the parameters for fcgid.conf
 			replaceLine('/etc/apache2/mods-available/fcgid.conf','MaxRequestLen','MaxRequestLen 15728640',1);
@@ -2075,7 +2085,7 @@ class installer_base {
 				}
 			}
 		}
-		
+
 		if(is_file('/etc/apache2/apache2.conf')) {
 			if(hasLine('/etc/apache2/apache2.conf', 'Include sites-enabled/', 1) == false && hasLine('/etc/apache2/apache2.conf', 'IncludeOptional sites-enabled/', 1) == false) {
 				if(hasLine('/etc/apache2/apache2.conf', 'Include sites-enabled/*.conf', 1) == true) {
@@ -2092,16 +2102,16 @@ class installer_base {
 
 		$tpl = new tpl('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version',getapacheversion());
-		
+
 		if($this->is_update == true) {
 			$tpl->setVar('logging',get_logging_state());
 		} else {
 			$tpl->setVar('logging','yes');
 		}
-		
+
 		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
 		$ip_addresses = array();
-		
+
 		if(is_array($records) && count($records) > 0) {
 			foreach($records as $rec) {
 				if($rec['ip_type'] == 'IPv6') {
@@ -2120,9 +2130,9 @@ class installer_base {
 				}
 			}
 		}
-		
+
 		if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses);
-		
+
 		wf($vhost_conf_dir.'/ispconfig.conf', $tpl->grab());
 		unset($tpl);
 
@@ -2182,7 +2192,7 @@ class installer_base {
 		//* add a sshusers group
 		$command = 'groupadd sshusers';
 		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		// add anonymized log option to nginxx.conf file
 		$nginx_conf_file = $conf['nginx']['config_dir'].'/nginx.conf';
 		if(is_file($nginx_conf_file)) {
@@ -2192,7 +2202,7 @@ class installer_base {
 				replaceLine($nginx_conf_file, 'http {', "http {\n\n".file_get_contents('tpl/nginx_anonlog.master'), 0, 0);
 			}
 		}
-		
+
 	}
 
 	public function configure_fail2ban() {
@@ -2352,7 +2362,7 @@ class installer_base {
 			$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
 			$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
 			$apps_vhost_servername = ($conf['web']['apps_vhost_servername'] == '')?'':'ServerName '.$conf['web']['apps_vhost_servername'];
-			
+
 			//* Get the apps vhost port
 			if($this->is_update == true) {
 				$conf['web']['apps_vhost_port'] = get_apps_vhost_port_number();
@@ -2375,7 +2385,7 @@ class installer_base {
 			if($conf['rspamd']['installed'] == true) {
 				$tpl->setVar('use_rspamd', 'yes');
 			}
-			
+
 			// comment out the listen directive if port is 80 or 443
 			if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) {
 				$tpl->setVar('vhost_port_listen','#');
@@ -2398,11 +2408,12 @@ class installer_base {
 				$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
 				$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
 				mkdir($conf['web']['website_basedir'].'/php-fcgi-scripts/apps', 0755, true);
+				$this->set_immutable($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter', false);
 				//copy('tpl/apache_apps_fcgi_starter.master',$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
 				wf($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter', $content);
 				exec('chmod +x '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
 				exec('chown -R ispapps:ispapps '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps');
-
+				$this->set_immutable($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter', true);
 			}
 		}
 		if($conf['nginx']['installed'] == true){
@@ -2448,7 +2459,7 @@ class installer_base {
 			} else {
 				$content = str_replace('{use_rspamd}', '# ', $content);
 			}
-			
+
 			$socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
 			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
 			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
@@ -2478,11 +2489,11 @@ class installer_base {
 			}
 			$content = str_replace('{use_tcp}', $use_tcp, $content);
 			$content = str_replace('{use_socket}', $use_socket, $content);
-			
+
 			// SSL in apps vhost is off by default. Might change later.
 			$content = str_replace('{ssl_on}', '', $content);
 			$content = str_replace('{ssl_comment}', '#', $content);
-			
+
 			// Fix socket path on PHP 7 systems
 			if(file_exists('/var/run/php/php7.0-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.1-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content);
@@ -2534,7 +2545,7 @@ class installer_base {
 		exec("openssl rsa -passin pass:$ssl_pw -in $ssl_key_file -out $ssl_key_file.insecure");
 		rename($ssl_key_file, $ssl_key_file.'.secure');
 		rename($ssl_key_file.'.insecure', $ssl_key_file);
-		
+
 		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
 
 	}
@@ -2564,20 +2575,20 @@ class installer_base {
 		//* copy the ISPConfig server part
 		$command = 'cp -rf ../server '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Make a backup of the security settings
 		if(is_file('/usr/local/ispconfig/security/security_settings.ini')) copy('/usr/local/ispconfig/security/security_settings.ini','/usr/local/ispconfig/security/security_settings.ini~');
-		
+
 		//* copy the ISPConfig security part
 		$command = 'cp -rf ../security '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-	
+
 		$configfile = 'security_settings.ini';
 		if(is_file($install_dir.'/security/'.$configfile)) {
 			copy($install_dir.'/security/'.$configfile, $install_dir.'/security/'.$configfile.'~');
 		}
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-		wf($install_dir.'/security/'.$configfile, $content);	
+		wf($install_dir.'/security/'.$configfile, $content);
 
 		//* Create a symlink, so ISPConfig is accessible via web
 		// Replaced by a separate vhost definition for port 8080
@@ -2739,15 +2750,15 @@ class installer_base {
 		//* Chmod the files and directories in the acme dir
 		$command = 'chmod -R 755 '.$install_dir.'/interface/acme';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the server files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/server';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the security files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/security';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* chown the security directory and security_settings.ini to root:ispconfig
 		$command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -2761,7 +2772,7 @@ class installer_base {
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		$command = 'chown root:ispconfig '.$install_dir.'/security/nginx_directives.blacklist';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		
+
 		//* Make the global language file directory group writable
 		exec("chmod -R 770 $install_dir/interface/lib/lang");
 
@@ -2812,7 +2823,7 @@ class installer_base {
 			exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
 			exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
 		}
-		
+
 		exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
 
 		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
@@ -2870,7 +2881,7 @@ class installer_base {
 			} else {
 				$tpl->setVar('ssl_bundle_comment','#');
 			}
-			
+
 			$tpl->setVar('apache_version',getapacheversion());
 
 			wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
@@ -2887,10 +2898,12 @@ class installer_base {
 			$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
 			$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
 			@mkdir('/var/www/php-fcgi-scripts/ispconfig', 0755, true);
+			$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', false);
 			wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
 			exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
 			@symlink($install_dir.'/interface/web', '/var/www/ispconfig');
 			exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
+			$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', true);
 			//}
 		}
 
@@ -3009,16 +3022,16 @@ class installer_base {
 
 		//* Remove Domain module as its functions are available in the client module now
 		if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
-		
+
 		//* Disable rkhunter run and update in debian cronjob as ispconfig is running and updating rkhunter
 		if(is_file('/etc/default/rkhunter')) {
 			replaceLine('/etc/default/rkhunter', 'CRON_DAILY_RUN="yes"', 'CRON_DAILY_RUN="no"', 1, 0);
 			replaceLine('/etc/default/rkhunter', 'CRON_DB_UPDATE="yes"', 'CRON_DB_UPDATE="no"', 1, 0);
 		}
-		
+
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
-		
+
 		// Change mode of a few files from amavisd
 		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
 		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
@@ -3112,12 +3125,12 @@ class installer_base {
 		chmod($conf['ispconfig_log_dir'].'/cron.log', 0660);
 
 	}
-	
+
 	public function create_mount_script(){
 		global $app, $conf;
 		$mount_script = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh';
 		$mount_command = '';
-		
+
 		if(is_file($mount_script)) return;
 		if(is_file('/etc/rc.local')){
 			$rc_local = file('/etc/rc.local');
@@ -3138,25 +3151,25 @@ class installer_base {
 			}
 		}
 	}
-	
+
 	// This function is called at the end of the update process and contains code to clean up parts of old ISPCONfig releases
 	public function cleanup_ispconfig() {
 		global $app,$conf;
-		
+
 		// Remove directories recursively
 		if(is_dir('/usr/local/ispconfig/interface/web/designer')) exec('rm -rf /usr/local/ispconfig/interface/web/designer');
 		if(is_dir('/usr/local/ispconfig/interface/web/themes/default-304')) exec('rm -rf /usr/local/ispconfig/interface/web/themes/default-304');
-		
+
 		// Remove files
 		if(is_file('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php');
 		if(is_file('/usr/local/ispconfig/interface/lib/classes/form.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/form.inc.php');
-		
+
 		// Change mode of a few files from amavisd
 		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
 		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
 		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
 		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
-		
+
 	}
 
 	public function getinitcommand($servicename, $action, $init_script_directory = ''){
@@ -3246,7 +3259,7 @@ class installer_base {
 		wf($tConf, $tContents); // write file
 		if (func_num_args() >= 4) // override rights and/or ownership
 			{
-			
+
 			$output = array_slice($args, 2);
 
 			switch (sizeof($output)) {
diff --git a/install/uninstall.php b/install/uninstall.php
index c565d4653d..fdac79d61e 100644
--- a/install/uninstall.php
+++ b/install/uninstall.php
@@ -70,31 +70,32 @@ if($do_uninstall == 'yes') {
 	        if (!$result) echo "Unable to remove the ispconfig-database-user ".$conf['db_user']." ".mysqli_error($link)."\n";
 	}
 	mysqli_close($link);
-	
+
 	// Deleting the symlink in /var/www
 	// Apache
 	@unlink("/etc/apache2/sites-enabled/000-ispconfig.vhost");
 	@unlink("/etc/apache2/sites-available/ispconfig.vhost");
 	@unlink("/etc/apache2/sites-enabled/000-apps.vhost");
 	@unlink("/etc/apache2/sites-available/apps.vhost");
-	
+
 	// nginx
 	@unlink("/etc/nginx/sites-enabled/000-ispconfig.vhost");
 	@unlink("/etc/nginx/sites-available/ispconfig.vhost");
 	@unlink("/etc/nginx/sites-enabled/000-apps.vhost");
 	@unlink("/etc/nginx/sites-available/apps.vhost");
-	
+
 	// Delete the ispconfig files
 	exec('rm -rf /usr/local/ispconfig');
-	
+
 	// Delete various other files
 	@unlink("/usr/local/bin/ispconfig_update.sh");
 	@unlink("/usr/local/bin/ispconfig_update_from_svn.sh");
 	@unlink("/var/spool/mail/ispconfig");
 	@unlink("/var/www/ispconfig");
-	@unlink("/var/www/php-fcgi-scripts/ispconfig");
+	@exec('chattr -i /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
 	@unlink("/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter");
-	
+	@unlink("/var/www/php-fcgi-scripts/ispconfig");
+
 	echo "Backups in /var/backup/ and log files in /var/log/ispconfig are not deleted.";
 	echo "Finished uninstalling.\n";
 
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 078c225c10..0556578a96 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -36,10 +36,10 @@ class system{
 	var $data;
 	var $min_uid = 500;
 	var $min_gid = 500;
-	
+
 	private $_last_exec_out = null;
 	private $_last_exec_retcode = null;
-	
+
 	/**
 	 * Construct for this class
 	 *
@@ -872,7 +872,7 @@ class system{
 			$app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		if($run_as_user !== null && $run_as_user !== 'root') {
 			if(!$this->check_run_as_user($run_as_user)) {
 				$app->log("Action aborted, invalid run-as-user: $run_as_user", LOGLEVEL_WARN);
@@ -1657,7 +1657,7 @@ class system{
 	function maildirmake($maildir_path, $user = '', $subfolder = '', $group = '') {
 
 		global $app, $conf;
-		
+
 		// load the server configuration options
 		$app->uses("getconf");
 		$mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail');
@@ -1678,7 +1678,7 @@ class system{
 
 		if($group != '' && $group != 'root' && $this->is_group($group)) {
 			if(is_dir($dir)) $this->chgrp($dir, $group);
-		
+
 			$chgrp_mdsub = true;
 		}
 
@@ -1694,7 +1694,7 @@ class system{
 
 		//* Add the subfolder to the subscriptions and courierimapsubscribed files
 		if($subfolder != '') {
-			
+
 			// Courier
 			if($mail_config['pop3_imap_daemon'] == 'courier') {
 				if(!is_file($maildir_path.'/courierimapsubscribed')) {
@@ -1741,7 +1741,7 @@ class system{
 		}
 
 	}
-	
+
 	function _exec($command, $allow_return_codes = null) {
 		global $app;
 		$out = array();
@@ -1765,6 +1765,28 @@ class system{
 		}
 	}
 
+	function set_immutable($path, $enable = true, $recursive = false) {
+		global $app;
+
+		if($this->checkpath($path) == false) {
+			$app->log("Action aborted, target is a symlink: $path", LOGLEVEL_DEBUG);
+			return false;
+		}
+
+		if($path != '' && $path != '/' && strlen($path) > 6 && strpos($path, '..') === false && (is_file($path) || is_dir($path))) {
+			if($enable) {
+				$this->exec_safe('chattr +i ?', $path);
+			} else {
+				$this->exec_safe('chattr -i ?', $path);
+			}
+
+			if($enable === false && $recursive === true && is_dir($path)) {
+				// only allow when removing immutable
+				$this->exec_safe('chattr -R -i ?', $path);
+			}
+		}
+	}
+
 	function web_folder_protection($document_root, $protect) {
 		global $app, $conf;
 
@@ -1902,9 +1924,9 @@ class system{
 
 	function mount_backup_dir($backup_dir, $mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh'){
 		global $app, $conf;
-		
+
 		if($this->is_mounted($backup_dir)) return true;
-		
+
 		$mounted = true;
 		if ( 	is_file($mount_cmd) &&
 				is_executable($mount_cmd) &&
@@ -2000,7 +2022,7 @@ class system{
 
 	function getapacheversion($get_minor = false) {
 		global $app;
-		
+
 		$cmd = '';
 		if($this->is_installed('apache2ctl')) $cmd = 'apache2ctl -v';
 		elseif($this->is_installed('apachectl')) $cmd = 'apachectl -v';
@@ -2008,13 +2030,13 @@ class system{
 			$app->log("Could not check apache version, apachectl not found.", LOGLEVEL_DEBUG);
 			return '2.2';
 		}
-		
+
 		exec($cmd, $output, $return_var);
 		if($return_var != 0 || !$output[0]) {
 			$app->log("Could not check apache version, apachectl did not return any data.", LOGLEVEL_WARN);
 			return '2.2';
 		}
-		
+
 		if(preg_match('/version:\s*Apache\/(\d+)(\.(\d+)(\.(\d+))*)?(\D|$)/i', $output[0], $matches)) {
 			return $matches[1] . (isset($matches[3]) ? '.' . $matches[3] : '') . (isset($matches[5]) && $get_minor == true ? '.' . $matches[5] : '');
 		} else {
@@ -2025,7 +2047,7 @@ class system{
 
 	function getapachemodules() {
 		global $app;
-		
+
 		$cmd = '';
 		if($this->is_installed('apache2ctl')) $cmd = 'apache2ctl -t -D DUMP_MODULES';
 		elseif($this->is_installed('apachectl')) $cmd = 'apachectl -t -D DUMP_MODULES';
@@ -2033,23 +2055,23 @@ class system{
 			$app->log("Could not check apache modules, apachectl not found.", LOGLEVEL_WARN);
 			return array();
 		}
-		
+
 		exec($cmd . ' 2>/dev/null', $output, $return_var);
 		if($return_var != 0 || !$output[0]) {
 			$app->log("Could not check apache modules, apachectl did not return any data.", LOGLEVEL_WARN);
 			return array();
 		}
-		
+
 		$modules = array();
 		for($i = 0; $i < count($output); $i++) {
 			if(preg_match('/^\s*(\w+)\s+\((shared|static)\)\s*$/', $output[$i], $matches)) {
 				$modules[] = $matches[1];
 			}
 		}
-		
+
 		return $modules;
 	}
-	
+
 	//* ISPConfig mail function
 	public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '', $cc = '', $bcc = '', $from_name = '') {
 		global $app, $conf;
@@ -2076,51 +2098,51 @@ class system{
 
 		$app->ispcmail->send($to);
 		$app->ispcmail->finish();
-		
+
 		return true;
 	}
-	
+
 	public function is_allowed_user($username, $check_id = true, $restrict_names = false) {
 		global $app;
-		
+
 		$name_blacklist = array('root','ispconfig','vmail','getmail');
 		if(in_array($username,$name_blacklist)) return false;
-		
+
 		if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $username) == false) return false;
-		
+
 		if($check_id && intval($this->getuid($username)) < $this->min_uid) return false;
-		
+
 		if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false;
-		
+
 		return true;
 	}
-	
+
 	public function is_allowed_group($groupname, $check_id = true, $restrict_names = false) {
 		global $app;
-		
+
 		$name_blacklist = array('root','ispconfig','vmail','getmail');
 		if(in_array($groupname,$name_blacklist)) return false;
-		
+
 		if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $groupname) == false) return false;
-		
+
 		if($check_id && intval($this->getgid($groupname)) < $this->min_gid) return false;
-		
+
 		if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false;
-		
+
 		return true;
 	}
-	
+
 	public function last_exec_out() {
 		return $this->_last_exec_out;
 	}
-	
+
 	public function last_exec_retcode() {
 		return $this->_last_exec_retcode;
 	}
-	
+
 	public function exec_safe($cmd) {
 		global $app;
-		
+
 		$args = func_get_args();
 		$arg_count = func_num_args();
 		if($arg_count != substr_count($cmd, '?') + 1) {
@@ -2134,7 +2156,7 @@ class system{
 			$a = 0;
 			foreach($args as $value) {
 				$a++;
-				
+
 				$pos = strpos($cmd, '?', $pos);
 				if($pos === false) {
 					break;
@@ -2144,21 +2166,21 @@ class system{
 				$pos += strlen($value);
 			}
 		}
-		
+
 		$this->_last_exec_out = null;
 		$this->_last_exec_retcode = null;
 		$ret = exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
-		
+
 		$app->log("safe_exec cmd: " . $cmd . " - return code: " . $this->_last_exec_retcode, LOGLEVEL_DEBUG);
-		
+
 		return $ret;
 	}
-	
+
 	public function system_safe($cmd) {
 		call_user_func_array(array($this, 'exec_safe'), func_get_args());
 		return implode("\n", $this->_last_exec_out);
 	}
-	
+
 	public function create_jailkit_user($username, $home_dir, $user_home_dir, $shell = '/bin/bash', $p_user = null, $p_user_home_dir = null) {
 		// Check if USERHOMEDIR already exists
 		if(!is_dir($home_dir . '/.' . $user_home_dir)) {
@@ -2178,10 +2200,10 @@ class system{
 			$cmd = 'usermod --home=? ? 2>/dev/null';
 			$this->exec_safe($cmd, $home_dir . '/.' . $p_user_home_dir, $p_user);
 		}
-		
+
 		return true;
 	}
-	
+
 	public function create_jailkit_programs($home_dir, $programs = array()) {
 		if(empty($programs)) {
 			return true;
@@ -2192,20 +2214,20 @@ class system{
 		foreach($programs as $prog) {
 			$program_args .= ' ' . escapeshellarg($prog);
 		}
-		
+
 		$cmd = 'jk_cp -k ?' . $program_args;
 		$this->exec_safe($cmd, $home_dir);
-		
+
 		return true;
 	}
-	
+
 	public function create_jailkit_chroot($home_dir, $app_sections = array()) {
 		if(empty($app_sections)) {
 			return true;
 		} elseif(is_string($app_sections)) {
 			$app_sections = preg_split('/[\s,]+/', $app_sections);
 		}
-		
+
 		// Change ownership of the chroot directory to root
 		$this->chown($home_dir, 'root');
 		$this->chgrp($home_dir, 'root');
@@ -2214,7 +2236,7 @@ class system{
 		foreach($app_sections as $app_section) {
 			$app_args .= ' ' . escapeshellarg($app_section);
 		}
-		
+
 		// Initialize the chroot into the specified directory with the specified applications
 		$cmd = 'jk_init -f -k -c /etc/jailkit/jk_init.ini -j ?' . $app_args;
 		$this->exec_safe($cmd, $home_dir);
@@ -2231,47 +2253,47 @@ class system{
 
 		// mysql needs the socket in the chrooted environment
 		$this->mkdirpath($home_dir . '/var/run/mysqld');
-		
+
 		// ln /var/run/mysqld/mysqld.sock $CHROOT_HOMEDIR/var/run/mysqld/mysqld.sock
 		if(!file_exists("/var/run/mysqld/mysqld.sock")) {
 			$this->exec_safe('ln ? ?', '/var/run/mysqld/mysqld.sock', $home_dir . '/var/run/mysqld/mysqld.sock');
 		}
-		
+
 		return true;
 	}
-	
-	
+
+
 	public function pipe_exec($cmd, $stdin, &$retval = null, &$stderr = null) {
 		$descriptors = array(
 			0 => array('pipe', 'r'),
 			1 => array('pipe', 'w'),
 			2 => array('pipe', 'w')
 		);
-		
+
 		$result = '';
 		$pipes = null;
 		$proc = proc_open($cmd, $descriptors, $pipes);
 		if(is_resource($proc)) {
 			fwrite($pipes[0], $stdin);
 			fclose($pipes[0]);
-			
+
 			$result = stream_get_contents($pipes[1]);
 			$stderr = stream_get_contents($pipes[2]);
 			fclose($pipes[1]);
 			fclose($pipes[2]);
-			
+
 			$retval = proc_close($proc);
-			
+
 			return $result;
 		} else {
 			return false;
 		}
 	}
-	
+
 	private function get_sudo_command($cmd, $run_as_user) {
 		return 'sudo -u ' . escapeshellarg($run_as_user) . ' sh -c ' . escapeshellarg($cmd);
 	}
-	
+
 	private function check_run_as_user($username) {
 		if(preg_match('/^[a-zA-Z0-9_\-]+$/', $username)) {
 			return true;
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index b969882f2b..61116d0041 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1497,6 +1497,7 @@ class apache2_plugin {
 			$fcgi_tpl->setVar('open_basedir', $php_open_basedir);
 
 			$fcgi_starter_script = $fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '');
+			$app->system->set_immutable($fcgi_starter_script, false);
 			$app->system->file_put_contents($fcgi_starter_script, $fcgi_tpl->grab());
 			unset($fcgi_tpl);
 
@@ -1509,6 +1510,7 @@ class apache2_plugin {
 			}
 			$app->system->chown($fcgi_starter_script, $data['new']['system_user']);
 			$app->system->chgrp($fcgi_starter_script, $data['new']['system_group']);
+			$app->system->set_immutable($fcgi_starter_script, true);
 
 			$tpl->setVar('fastcgi_alias', $fastcgi_config['fastcgi_alias']);
 			$tpl->setVar('fastcgi_starter_path', $fastcgi_starter_path);
@@ -1522,6 +1524,7 @@ class apache2_plugin {
 			if ($data['old']['php'] == 'fast-cgi') {
 				$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $fastcgi_config['fastcgi_starter_path']);
 				$fastcgi_starter_path = str_replace('[client_id]', $client_id, $fastcgi_starter_path);
+				$app->system->set_immutable($fastcgi_starter_path, false, true);
 				if($data['old']['type'] == 'vhost') {
 					if(is_file($fastcgi_starter_script)) @unlink($fastcgi_starter_script);
 					if (is_dir($fastcgi_starter_path)) @rmdir($fastcgi_starter_path);
@@ -1633,6 +1636,7 @@ class apache2_plugin {
 			}
 
 			$cgi_starter_script = $cgi_starter_path.$cgi_config['cgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '');
+			$app->system->set_immutable($cgi_starter_script, false);
 			$app->system->file_put_contents($cgi_starter_script, $cgi_tpl->grab());
 			unset($cgi_tpl);
 
@@ -1646,6 +1650,7 @@ class apache2_plugin {
 			}
 			$app->system->chown($cgi_starter_script, $data['new']['system_user']);
 			$app->system->chgrp($cgi_starter_script, $data['new']['system_group']);
+			$app->system->set_immutable($cgi_starter_script, true);
 
 			$tpl->setVar('cgi_starter_path', $cgi_starter_path);
 			$tpl->setVar('cgi_starter_script', $cgi_config['cgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : ''));
@@ -2175,11 +2180,13 @@ class apache2_plugin {
 					$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $fastcgi_config['fastcgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($fastcgi_starter_path)) {
+							$app->system->set_immutable($fastcgi_starter_path, false, true);
 							$app->system->exec_safe('rm -rf ?', $fastcgi_starter_path);
 						}
 					} else {
 						$fcgi_starter_script = $fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].'_web'.$data['old']['domain_id'];
 						if (file_exists($fcgi_starter_script)) {
+							$app->system->set_immutable($fcgi_starter_script, false);
 							$app->system->exec_safe('rm -f ?', $fcgi_starter_script);
 						}
 					}
@@ -2200,11 +2207,13 @@ class apache2_plugin {
 					$cgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['cgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($cgi_starter_path)) {
+							$app->system->set_immutable($cgi_starter_path, false, true);
 							$app->system->exec_safe('rm -rf ?', $cgi_starter_path);
 						}
 					} else {
 						$cgi_starter_script = $cgi_starter_path.'php-cgi-starter_web'.$data['old']['domain_id'];
 						if (file_exists($cgi_starter_script)) {
+							$app->system->set_immutable($cgi_starter_script, false);
 							$app->system->exec_safe('rm -f ?', $cgi_starter_script);
 						}
 					}
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index b57d38516e..51f566a00c 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2196,11 +2196,13 @@ class nginx_plugin {
 					$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['fastcgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($fastcgi_starter_path)) {
+							$app->system->set_immutable($fastcgi_starter_path, false, true);
 							$app->system->exec_safe('rm -rf ?', $fastcgi_starter_path);
 						}
 					} else {
 						$fcgi_starter_script = $fastcgi_starter_path.$web_config['fastcgi_starter_script'].'_web'.$data['old']['domain_id'];
 						if (file_exists($fcgi_starter_script)) {
+							$app->system->set_immutable($fcgi_starter_script, false);
 							$app->system->exec_safe('rm -f ?', $fcgi_starter_script);
 						}
 					}
@@ -2222,11 +2224,13 @@ class nginx_plugin {
 					$cgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['cgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($cgi_starter_path)) {
+							$app->system->set_immutable($cgi_starter_path, false, true);
 							$app->system->exec_safe('rm -rf ?', $cgi_starter_path);
 						}
 					} else {
 						$cgi_starter_script = $cgi_starter_path.'php-cgi-starter_web'.$data['old']['domain_id'];
 						if (file_exists($cgi_starter_script)) {
+							$app->system->set_immutable($cgi_starter_script, false);
 							$app->system->exec_safe('rm -f ?', $cgi_starter_script);
 						}
 					}
-- 
GitLab


From 8c144068d992e29d541d0aababd1153b9e05beb8 Mon Sep 17 00:00:00 2001
From: Dominik <info@profi-webdesign.net>
Date: Thu, 23 Jul 2020 21:03:23 +0200
Subject: [PATCH 505/571] added defaul value to cc field

---
 install/sql/ispconfig3.sql | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index be39910961..cdf85d7443 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1038,7 +1038,7 @@ CREATE TABLE `mail_user` (
   `maildir` varchar(255) NOT NULL default '',
   `maildir_format` varchar(255) NOT NULL default 'maildir',
   `quota` bigint(20) NOT NULL default '-1',
-  `cc` text,
+  `cc` text NOT NULL default '',
   `sender_cc` varchar(255) NOT NULL default '',
   `homedir` varchar(255) NOT NULL default '',
   `autoresponder` enum('n','y') NOT NULL default 'n',
-- 
GitLab


From e5a00f9d24f2621611abae7f46638328c9c1bc88 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 23 Jul 2020 13:30:57 -0600
Subject: [PATCH 506/571] update mysql-virtual_forwardings.cf.master

---
 install/tpl/mysql-virtual_forwardings.cf.master | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/install/tpl/mysql-virtual_forwardings.cf.master b/install/tpl/mysql-virtual_forwardings.cf.master
index 818cac07bc..04a94ee634 100644
--- a/install/tpl/mysql-virtual_forwardings.cf.master
+++ b/install/tpl/mysql-virtual_forwardings.cf.master
@@ -14,7 +14,9 @@ query = SELECT u.email as target FROM mail_forwarding as s
             WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND f.active = 'y' AND s.server_id = {server_id}
         UNION
         SELECT s.destination as target FROM mail_forwarding as s
-            WHERE s.source = '@%d' AND s.type IN ('catchall') and s.active = 'y' AND s.server_id = {server_id}
+            LEFT JOIN mail_user as uu ON (uu.email = '%s' AND uu.disabledeliver = 'n')
+            LEFT JOIN mail_forwarding as uf ON (uf.source = '%s' AND uf.type IN ('alias', 'forward') AND uf.active = 'y')
+            WHERE s.source = '@%d' AND s.type IN ('catchall') and s.active = 'y' AND uu.mailuser_id IS NULL AND uf.forwarding_id IS NULL AND s.server_id = {server_id}
         UNION
         SELECT s.destination as target FROM mail_forwarding as s
             INNER JOIN mail_forwarding as t ON (t.source = s.destination AND t.type = 'catchall')
-- 
GitLab


From 57b06a88407b37c099a2353f708c74d849b1ecb7 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 24 Jul 2020 09:27:00 +0200
Subject: [PATCH 507/571] - fix mailman images not showing on nginx

---
 install/tpl/nginx_apps.vhost.master | 2 +-
 server/conf/nginx_apps.vhost.master | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master
index 871dff8c57..a22b1aab46 100644
--- a/install/tpl/nginx_apps.vhost.master
+++ b/install/tpl/nginx_apps.vhost.master
@@ -200,7 +200,7 @@ server {
                fastcgi_pass unix:{cgi_socket};
         }
 
-        location /images/mailman {
+        location ^~ /images/mailman {
                alias /usr/share/images/mailman;
         }
 
diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master
index 8a97f82a43..0c82c4631e 100644
--- a/server/conf/nginx_apps.vhost.master
+++ b/server/conf/nginx_apps.vhost.master
@@ -191,7 +191,7 @@ server {
                fastcgi_pass unix:{cgi_socket};
         }
 
-        location /images/mailman {
+        location ^~ /images/mailman {
                alias /usr/share/images/mailman;
         }
 
-- 
GitLab


From b8157bbf725e2c7311913d64814a27ae396743d6 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 24 Jul 2020 09:38:59 +0200
Subject: [PATCH 508/571] - fixed wrong permissions for web folder of vhost
 alias and subdomain

---
 server/plugins-available/nginx_plugin.inc.php | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 51f566a00c..f7f93b4be5 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -573,7 +573,13 @@ class nginx_plugin {
 		// Check if the directories are there and create them if necessary.
 		$app->system->web_folder_protection($data['new']['document_root'], false);
 
-		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
+		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) {
+			if($web_folder !== 'web') { //vhost sub/alias
+				$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder, 0755, $username, $groupname);
+			} else {
+				$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
+			}
+		}
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/error') and $data['new']['errordocs']) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/error');
 		if($data['new']['stats_type'] != '' && !is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/stats');
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
-- 
GitLab


From c59bbda3323d8d9e0de44c80b2a5cd4365a3938e Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 24 Jul 2020 09:43:39 +0200
Subject: [PATCH 509/571] - missed file from previous commit

---
 server/plugins-available/apache2_plugin.inc.php | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 61116d0041..cf58ed8a20 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -731,7 +731,13 @@ class apache2_plugin {
 		// Check if the directories are there and create them if necessary.
 		$app->system->web_folder_protection($data['new']['document_root'], false);
 
-		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
+		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) {
+			if($web_folder !== 'web') { //vhost sub/alias
+				$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder, 0755, $username, $groupname);
+			} else {
+				$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
+			}
+		}
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/error') and $data['new']['errordocs']) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/error');
 		if($data['new']['stats_type'] != '' && !is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/stats');
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
-- 
GitLab


From d60ccc1f16fdc5dd8a24bc1eb1b6d0cf17730d08 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 24 Jul 2020 10:02:22 +0200
Subject: [PATCH 510/571] - disallow several folders for vhost subdomains and
 aliasdomains

---
 interface/lib/classes/system.inc.php          | 30 +++++++++++++------
 interface/web/sites/web_vhost_domain_edit.php |  6 +---
 server/lib/classes/system.inc.php             | 12 ++++++++
 .../plugins-available/apache2_plugin.inc.php  |  5 ++++
 server/plugins-available/nginx_plugin.inc.php |  5 ++++
 5 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index 484ef2b665..8c3decfd5c 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -67,30 +67,42 @@ class system {
 		}
 	}
 
+	public function is_blacklisted_web_path($path) {
+		$blacklist = array('bin', 'cgi-bin', 'dev', 'etc', 'home', 'lib', 'lib64', 'log', 'ssl', 'usr', 'var');
+
+		$path = ltrim($path, '/');
+		$parts = explode('/', $path);
+		if(in_array(strtolower($parts[0]), $blacklist, true)) {
+			return true;
+		}
+
+		return false;
+	}
+
 	public function last_exec_out() {
 		return $this->_last_exec_out;
 	}
-	
+
 	public function last_exec_retcode() {
 		return $this->_last_exec_retcode;
 	}
-	
+
 	public function exec_safe($cmd) {
 		$arg_count = func_num_args();
 		$args = func_get_args();
-		
+
 		if($arg_count != substr_count($cmd, '?') + 1) {
 			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
 			return false;
 		}
 		if($arg_count > 1) {
 			array_shift($args);
-			
+
 			$pos = 0;
 			$a = 0;
 			foreach($args as $value) {
 				$a++;
-				
+
 				$pos = strpos($cmd, '?', $pos);
 				if($pos === false) {
 					break;
@@ -100,16 +112,16 @@ class system {
 				$pos += strlen($value);
 			}
 		}
-		
+
 		$this->_last_exec_out = null;
 		$this->_last_exec_retcode = null;
 		return exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
 	}
-	
+
 	public function system_safe($cmd) {
 		call_user_func_array(array($this, 'exec_safe'), func_get_args());
 		return implode("\n", $this->_last_exec_out);
-	}	
+	}
 
     //* Check if a application is installed
     public function is_installed($appname) {
@@ -122,5 +134,5 @@ class system {
             return false;
         }
     }
-	
+
 } //* End Class
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 0d770476d1..41b40784c0 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -1030,11 +1030,7 @@ class page_action extends tform_actions {
 				$this->dataRecord['web_folder'] = strtolower($this->dataRecord['web_folder']);
 				if(substr($this->dataRecord['web_folder'], 0, 1) === '/') $this->dataRecord['web_folder'] = substr($this->dataRecord['web_folder'], 1);
 				if(substr($this->dataRecord['web_folder'], -1) === '/') $this->dataRecord['web_folder'] = substr($this->dataRecord['web_folder'], 0, -1);
-				$forbidden_folders = array('', 'cgi-bin', 'log', 'private', 'ssl', 'tmp', 'webdav');
-				$check_folder = strtolower($this->dataRecord['web_folder']);
-				if(substr($check_folder, 0, 1) === '/') $check_folder = substr($check_folder, 1); // strip / at beginning to check against forbidden entries
-				if(strpos($check_folder, '/') !== false) $check_folder = substr($check_folder, 0, strpos($check_folder, '/')); // get the first part of the path to check it
-				if(in_array($check_folder, $forbidden_folders)) {
+				if($app->system->is_blacklisted_web_path($this->dataRecord['web_folder'])) {
 					$app->tform->errorMessage .= $app->tform->lng("web_folder_invalid_txt")."<br>";
 				}
 
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 0556578a96..71b901d920 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1787,6 +1787,18 @@ class system{
 		}
 	}
 
+	public function is_blacklisted_web_path($path) {
+		$blacklist = array('bin', 'cgi-bin', 'dev', 'etc', 'home', 'lib', 'lib64', 'log', 'ssl', 'usr', 'var');
+
+		$path = ltrim($path, '/');
+		$parts = explode('/', $path);
+		if(in_array(strtolower($parts[0]), $blacklist, true)) {
+			return true;
+		}
+
+		return false;
+	}
+
 	function web_folder_protection($document_root, $protect) {
 		global $app, $conf;
 
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 61116d0041..0a07177135 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -580,6 +580,11 @@ class apache2_plugin {
 			$log_folder .= '/' . $subdomain_host;
 			unset($tmp);
 
+			if($app->system->is_blacklisted_web_path($web_folder)) {
+				$app->log('Vhost is using a blacklisted web folder: ' . $web_folder, LOGLEVEL_ERROR);
+				return 0;
+			}
+
 			if(isset($data['old']['parent_domain_id'])) {
 				// old one
 				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 51f566a00c..711e54ab9a 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -425,6 +425,11 @@ class nginx_plugin {
 			$log_folder .= '/' . $subdomain_host;
 			unset($tmp);
 
+			if($app->system->is_blacklisted_web_path($web_folder)) {
+				$app->log('Vhost is using a blacklisted web folder: ' . $web_folder, LOGLEVEL_ERROR);
+				return 0;
+			}
+
 			if(isset($data['old']['parent_domain_id'])) {
 				// old one
 				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
-- 
GitLab


From fc981223a76fe0d268ba42b2728865d8dd91ece8 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 24 Jul 2020 11:32:07 +0200
Subject: [PATCH 511/571] - replace php selector by id selector instead of
 string with paths

---
 .../sql/incremental/upd_dev_collection.sql    |   9 ++
 interface/web/admin/server_php_del.php        |  27 +----
 interface/web/admin/server_php_edit.php       |  30 +----
 interface/web/admin/server_php_list.php       |   4 +-
 .../web/sites/form/web_vhost_domain.tform.php |   6 +-
 .../web/sites/lib/lang/ar_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/ar_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/ar_web_domain.lng      |   2 +-
 .../sites/lib/lang/ar_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/ar_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/bg_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/bg_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/bg_web_domain.lng      |   2 +-
 .../sites/lib/lang/bg_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/bg_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/br_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/br_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/br_web_domain.lng      |   2 +-
 .../sites/lib/lang/br_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/br_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/ca_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/ca_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/ca_web_domain.lng      |   2 +-
 .../sites/lib/lang/ca_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/ca_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/cz_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/cz_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/cz_web_domain.lng      |   2 +-
 .../sites/lib/lang/cz_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/cz_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/de_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/de_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/de_web_domain.lng      |   2 +-
 .../sites/lib/lang/de_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/de_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/dk_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/dk_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/dk_web_domain.lng      |   2 +-
 .../sites/lib/lang/dk_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/dk_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/el_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/el_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/el_web_domain.lng      |   2 +-
 .../sites/lib/lang/el_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/el_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/en_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/en_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/en_web_domain.lng      |   2 +-
 .../sites/lib/lang/en_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/en_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/es_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/es_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/es_web_domain.lng      |   2 +-
 .../sites/lib/lang/es_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/es_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/fi_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/fi_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/fi_web_domain.lng      |   2 +-
 .../sites/lib/lang/fi_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/fi_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/fr_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/fr_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/fr_web_domain.lng      |   2 +-
 .../sites/lib/lang/fr_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/fr_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/hr_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/hr_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/hr_web_domain.lng      |   2 +-
 .../sites/lib/lang/hr_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/hr_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/hu_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/hu_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/hu_web_domain.lng      |   2 +-
 .../sites/lib/lang/hu_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/hu_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/id_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/id_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/id_web_domain.lng      |   2 +-
 .../sites/lib/lang/id_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/id_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/it_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/it_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/it_web_domain.lng      |   2 +-
 .../sites/lib/lang/it_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/it_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/ja_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/ja_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/ja_web_domain.lng      |   2 +-
 .../sites/lib/lang/ja_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/ja_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/nl_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/nl_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/nl_web_domain.lng      |   2 +-
 .../sites/lib/lang/nl_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/nl_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/pl_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/pl_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/pl_web_domain.lng      |   2 +-
 .../sites/lib/lang/pl_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/pl_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/pt_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/pt_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/pt_web_domain.lng      |   2 +-
 .../sites/lib/lang/pt_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/pt_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/ro_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/ro_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/ro_web_domain.lng      |   2 +-
 .../sites/lib/lang/ro_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/ro_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/ru_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/ru_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/ru_web_domain.lng      |   2 +-
 .../sites/lib/lang/ru_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/ru_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/se_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/se_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/se_web_domain.lng      |   2 +-
 .../sites/lib/lang/se_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/se_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/sk_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/sk_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/sk_web_domain.lng      |   2 +-
 .../sites/lib/lang/sk_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/sk_web_vhost_subdomain.lng |   2 +-
 .../web/sites/lib/lang/tr_web_aliasdomain.lng |   2 +-
 .../web/sites/lib/lang/tr_web_childdomain.lng |   2 +-
 .../web/sites/lib/lang/tr_web_domain.lng      |   2 +-
 .../sites/lib/lang/tr_web_vhost_domain.lng    |   6 +-
 .../sites/lib/lang/tr_web_vhost_subdomain.lng |   2 +-
 .../sites/templates/web_vhost_domain_edit.htm |  36 +++---
 interface/web/sites/web_vhost_domain_edit.php |  79 +++++--------
 .../plugins-available/apache2_plugin.inc.php  | 107 ++++++++++++------
 server/plugins-available/nginx_plugin.inc.php |  66 ++++++-----
 .../shelluser_base_plugin.inc.php             |  65 ++++++-----
 .../webserver_plugin.inc.php                  |  12 +-
 .../z_php_fpm_incron_reload_plugin.inc.php    |  10 +-
 137 files changed, 403 insertions(+), 398 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 1c4bd539d9..9d34258f36 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -44,3 +44,12 @@ ALTER TABLE `web_domain` DROP COLUMN `enable_spdy`;
 
 -- was missing in incremental, inserted for fixing older installations
 ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
+
+ALTER TABLE `web_domain` ADD `server_php_id` INT(11) UNSIGNED NOT NULL DEFAULT 0;
+
+UPDATE `web_domain` as w LEFT JOIN sys_group as g ON (g.groupid = w.sys_groupid) INNER JOIN `server_php` as p ON (w.fastcgi_php_version = CONCAT(p.name, ':', p.php_fastcgi_binary, ':', p.php_fastcgi_ini_dir) AND p.server_id IN (0, w.server_id) AND p.client_id IN (0, g.client_id)) SET w.server_php_id = p.server_php_id, w.fastcgi_php_version = '' WHERE 1;
+
+UPDATE `web_domain` as w LEFT JOIN sys_group as g ON (g.groupid = w.sys_groupid) INNER JOIN `server_php` as p ON (w.fastcgi_php_version = CONCAT(p.name, ':', p.php_fpm_init_script, ':', p.php_fpm_ini_dir, ':', p.php_fpm_pool_dir) AND p.server_id IN (0, w.server_id) AND p.client_id IN (0, g.client_id)) SET w.server_php_id = p.server_php_id, w.fastcgi_php_version = '' WHERE 1;
+
+-- we have to decide whether to delete the column or leave it there for investigating not-converted entries
+-- ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`;
diff --git a/interface/web/admin/server_php_del.php b/interface/web/admin/server_php_del.php
index f160c1b2d9..82b4c8a17d 100644
--- a/interface/web/admin/server_php_del.php
+++ b/interface/web/admin/server_php_del.php
@@ -52,28 +52,14 @@ $app->load('tform_actions');
 class page_action extends tform_actions {
 
 	function onBeforeDelete() {
-		global $app; $conf;
+		global $app;
 
-		$check = array();
-
-		// fastcgi
-		if(!empty(trim($this->dataRecord['php_fastcgi_binary']))) $check[] = trim($this->dataRecord['php_fastcgi_binary']);
-		if(!empty(trim($this->dataRecord['php_fastcgi_ini_dir']))) $check[] = trim($this->dataRecord['php_fastcgi_ini_dir']);
-		if(!empty($check)) $fastcgi_check = implode(':', $check);
-		unset($check);
-
-		// fpm
-		if(!empty(trim($this->dataRecord['php_fpm_init_script']))) $check[] = trim($this->dataRecord['php_fpm_init_script']);
-		if(!empty(trim($this->dataRecord['php_fpm_ini_dir']))) $check[] = trim($this->dataRecord['php_fpm_ini_dir']);
-		if(!empty(trim($this->dataRecord['php_fpm_pool_dir']))) $check[] = trim($this->dataRecord['php_fpm_pool_dir']);
-		if(!empty($check)) $fpm_check = implode(':', $check);
-
- 		$sql = 'SELECT domain_id FROM web_domain WHERE server_id = ? AND fastcgi_php_version LIKE ?';
- 		if(isset($fastcgi_check)) $web_domains_fastcgi = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fastcgi_check);
-		if(isset($fpm_check)) $web_domains_fpm = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fpm_check);
-
-		if(!empty($webdomains_fastcgi) || !empty($web_domains_fpm))	$app->error($app->tform->lng('php_in_use_error'));
+ 		$sql = 'SELECT domain_id FROM web_domain WHERE server_id = ? AND server_php_id = ?';
+ 		$web_domains = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], $this->id);
 
+		 if(!empty($web_domains)) {
+			$app->error($app->tform->lng('php_in_use_error'));
+		}
 	}
 
 }
@@ -81,4 +67,3 @@ class page_action extends tform_actions {
 $page = new page_action;
 $page->onDelete();
 
-?>
diff --git a/interface/web/admin/server_php_edit.php b/interface/web/admin/server_php_edit.php
index c200b25bae..a9e7b38bbb 100644
--- a/interface/web/admin/server_php_edit.php
+++ b/interface/web/admin/server_php_edit.php
@@ -51,36 +51,10 @@ $app->load('tform_actions');
 
 class page_action extends tform_actions {
 	function onSubmit() {
-		global $app;
-
-		if(isset($this->id) && $this->id > 0 && $app->tform->getCurrentTab() == 'php_name') {
-			$rec = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $this->id);
-			if($rec['name'] != $this->dataRecord['name']) {
-				$check = array();
-				// fastcgi
-				if($rec['php_fastcgi_binary'] != '') $check[] = $rec['php_fastcgi_binary'];
-				if($rec['php_fastcgi_ini_dir'] != '') $check[] = $rec['php_fastcgi_ini_dir'];
-				if(!empty($check)) $fastcgi_check = implode(':', $check);
-				unset($check);
-				// fpm
-				if($rec['php_fpm_init_script'] != '') $check[] = $rec['php_fpm_init_script'];
-				if($rec['php_fpm_ini_dir'] != '') $check[] = $rec['php_fpm_ini_dir'];
-				if($rec['php_fpm_pool_dir'] != '') $check[] = $rec['php_fpm_pool_dir'];
-				if(!empty($check)) $fpm_check = implode(':', $check);
-
- 				$sql = 'SELECT domain_id FROM web_domain WHERE server_id = ? AND fastcgi_php_version LIKE ?';
-		 		if(isset($fastcgi_check)) $web_domains_fastcgi = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fastcgi_check);
-				if(isset($fpm_check)) $web_domains_fpm = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fpm_check);
-
-				if(!empty($webdomains_fastcgi) || !empty($web_domains_fpm))	$app->error($app->tform->lng('php_in_use_error').' '.$app->tform->lng('php_name_in_use_error'));
-			}
-		}
-
 		parent::onSubmit();
-
 	}
 	function onBeforeUpdate() {
-		global $app, $conf;
+		global $app;
 
 		//* Check if the server has been changed
 		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
@@ -99,5 +73,3 @@ class page_action extends tform_actions {
 
 $page = new page_action;
 $page->onLoad();
-
-?>
diff --git a/interface/web/admin/server_php_list.php b/interface/web/admin/server_php_list.php
index a3c4d6354f..11ef881792 100644
--- a/interface/web/admin/server_php_list.php
+++ b/interface/web/admin/server_php_list.php
@@ -51,7 +51,7 @@ $app->listform_actions->SQLOrderBy = "ORDER BY server_php.server_id, server_php.
 $app->listform_actions->SQLExtSelect = "(SELECT
     COUNT(w.server_id)
     FROM
-    server_php s LEFT JOIN web_domain w ON (w.fastcgi_php_version LIKE CONCAT(s.name, '%') AND s.server_id=w.server_id)
+    server_php s LEFT JOIN web_domain w ON (w.server_php_id = s.server_php_id AND s.server_id=w.server_id)
     WHERE
     server_php.server_php_id=s.server_php_id
     GROUP BY
@@ -60,5 +60,3 @@ $app->listform_actions->SQLExtSelect = "(SELECT
 
 $app->listform_actions->onLoad();
 
-
-?>
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 7da71281cf..6031b7ea94 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -254,10 +254,10 @@ $form["tabs"]['domain'] = array (
 			'value'  => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
 			'searchable' => 2
 		),
-		'fastcgi_php_version' => array (
-			'datatype' => 'VARCHAR',
+		'server_php_id' => array (
+			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
-			'default' => '',
+			'default' => '0',
 			/*'datasource'	=> array ( 	'type'	=> 'SQL',
 										'querystring' => "SELECT ip_address,ip_address FROM server_ip WHERE ip_type = 'IPv4' AND {AUTHSQL} ORDER BY ip_address",
 										'keyfield'=> 'ip_address',
diff --git a/interface/web/sites/lib/lang/ar_web_aliasdomain.lng b/interface/web/sites/lib/lang/ar_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/ar_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ar_web_childdomain.lng b/interface/web/sites/lib/lang/ar_web_childdomain.lng
index 636505f248..95c9944f12 100644
--- a/interface/web/sites/lib/lang/ar_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ar_web_domain.lng b/interface/web/sites/lib/lang/ar_web_domain.lng
index 1ab9c55d3d..11247be982 100644
--- a/interface/web/sites/lib/lang/ar_web_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index 136829a7b2..3ce40d9b0c 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_aliasdomain.lng b/interface/web/sites/lib/lang/bg_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/bg_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_childdomain.lng b/interface/web/sites/lib/lang/bg_web_childdomain.lng
index c7549b76f7..e62b0af4d5 100644
--- a/interface/web/sites/lib/lang/bg_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_domain.lng b/interface/web/sites/lib/lang/bg_web_domain.lng
index 901c34a6ec..2146229cd0 100644
--- a/interface/web/sites/lib/lang/bg_web_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_domain.lng
@@ -91,7 +91,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'квотата за дисковото пространство е грешна.';
 $wb['traffic_quota_error_regex'] = 'Трафик квота е грешна.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index 8c48f035fe..828b79931f 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -93,9 +93,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'квотата за дисковото пространство е грешна.';
 $wb['traffic_quota_error_regex'] = 'Трафик квота е грешна.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain.lng b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
index d6142fd374..779d2c2383 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['server_php_id_txt'] = 'Versão do php';
 $wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_childdomain.lng b/interface/web/sites/lib/lang/br_web_childdomain.lng
index fbbb40635e..fc5f31a2ec 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['server_php_id_txt'] = 'Versão do php';
 $wb['pm_txt'] = 'Gerenciador de processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_domain.lng b/interface/web/sites/lib/lang/br_web_domain.lng
index 1a2a2b301b..31b39974f1 100644
--- a/interface/web/sites/lib/lang/br_web_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_domain.lng
@@ -94,7 +94,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['server_php_id_txt'] = 'Versão do php';
 $wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index a3a14e335b..706125676a 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'Versão do php';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
index 390b7402e7..03526d049b 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['server_php_id_txt'] = 'Versão do php';
 $wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_aliasdomain.lng b/interface/web/sites/lib/lang/ca_web_aliasdomain.lng
index 92c9c35538..990a5342cc 100644
--- a/interface/web/sites/lib/lang/ca_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'La valeur de PHP-FPM pm.min_spare_ser
 $wb['pm_max_spare_servers_error_regex'] = 'La valeur de PHP-FPM pm.max_spare_servers doit être un entier positif.';
 $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['server_php_id_txt'] = 'Version de PHP';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_childdomain.lng b/interface/web/sites/lib/lang/ca_web_childdomain.lng
index 762acfe244..c766bae881 100644
--- a/interface/web/sites/lib/lang/ca_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_domain.lng b/interface/web/sites/lib/lang/ca_web_domain.lng
index a3475c43c2..c240d5c349 100644
--- a/interface/web/sites/lib/lang/ca_web_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
 $wb['ssl_key_txt'] = 'Clé SSL';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['server_php_id_txt'] = 'Version de PHP';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index cf25d81260..8d0e660492 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng
index c9a4686608..faae8ba2b0 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_aliasdomain.lng b/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
index 0f8d3e5dec..9861b62046 100644
--- a/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Verze';
+$wb['server_php_id_txt'] = 'PHP Verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_childdomain.lng b/interface/web/sites/lib/lang/cz_web_childdomain.lng
index b159976b29..6838d351ee 100644
--- a/interface/web/sites/lib/lang/cz_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Verze';
+$wb['server_php_id_txt'] = 'PHP Verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_domain.lng b/interface/web/sites/lib/lang/cz_web_domain.lng
index 0998cb1264..b61ca0741a 100644
--- a/interface/web/sites/lib/lang/cz_web_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Kvóta pevného disku je neplatná.';
 $wb['traffic_quota_error_regex'] = 'Traffik kvóta je neplatná.';
 $wb['ssl_key_txt'] = 'SSL klíč';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Výběr PHP verze';
+$wb['server_php_id_txt'] = 'Výběr PHP verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index ea814b0cb9..cd7d06c8aa 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -99,9 +99,9 @@ $wb['hd_quota_error_regex'] = 'Kvóta pevného disku je neplatná.';
 $wb['traffic_quota_error_regex'] = 'Traffik kvóta je neplatná.';
 $wb['ssl_key_txt'] = 'SSL klíč';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Výběr PHP verze';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'Výběr PHP verze';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
index 268368c139..e15b9c5863 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Kvóta pevného disku je neplatná.';
 $wb['traffic_quota_error_regex'] = 'Traffik kvóta je neplatná.';
-$wb['fastcgi_php_version_txt'] = 'Výběr PHP verze';
+$wb['server_php_id_txt'] = 'Výběr PHP verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_aliasdomain.lng b/interface/web/sites/lib/lang/de_web_aliasdomain.lng
index 5889b17d57..14e4c79d25 100644
--- a/interface/web/sites/lib/lang/de_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muss ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muss ein positiver integer Wert sein.';
 $wb['hd_quota_error_regex'] = 'Speicherplatz-Beschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Datentransfer-Beschränkung ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP-Version';
+$wb['server_php_id_txt'] = 'PHP-Version';
 $wb['pm_txt'] = 'PHP-FPM Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_childdomain.lng b/interface/web/sites/lib/lang/de_web_childdomain.lng
index 05b1f1d51d..2f1248740d 100644
--- a/interface/web/sites/lib/lang/de_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muss ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muss ein positiver integer Wert sein.';
 $wb['hd_quota_error_regex'] = 'Speicherplatz-Beschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Datentransfer-Beschränkung ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP-Version';
+$wb['server_php_id_txt'] = 'PHP-Version';
 $wb['pm_txt'] = 'PHP-FPM Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng
index 7232d8fa5f..b9c77a8b7b 100644
--- a/interface/web/sites/lib/lang/de_web_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_domain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muß ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muß eine positive ganze Zahl sein.';
 $wb['hd_quota_error_regex'] = 'Speicherplatzbeschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Transfervolumenbeschränkung ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM FastCGI Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index 449bcb588a..2607017139 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -98,9 +98,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muß ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muß eine positive ganze Zahl sein.';
 $wb['hd_quota_error_regex'] = 'Speicherplatzbeschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Transfervolumenbeschränkung ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM FastCGI Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
index 89e50f2df4..b2211e314b 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muß ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muß eine positive ganze Zahl sein.';
 $wb['hd_quota_error_regex'] = 'Harddisk-Quota ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Traffic-Quota ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP-Version';
+$wb['server_php_id_txt'] = 'PHP-Version';
 $wb['pm_txt'] = 'PHP-FPM Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_aliasdomain.lng b/interface/web/sites/lib/lang/dk_web_aliasdomain.lng
index 98b7e4d898..6a324cca90 100644
--- a/interface/web/sites/lib/lang/dk_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk kvote is ugyldigt.';
 $wb['traffic_quota_error_regex'] = 'Trafik kvote is ugyldigt.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_childdomain.lng b/interface/web/sites/lib/lang/dk_web_childdomain.lng
index 762acfe244..c766bae881 100644
--- a/interface/web/sites/lib/lang/dk_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_domain.lng b/interface/web/sites/lib/lang/dk_web_domain.lng
index 7b61835543..05920d39d2 100644
--- a/interface/web/sites/lib/lang/dk_web_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_domain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk kvote is ugyldigt.';
 $wb['traffic_quota_error_regex'] = 'Trafik kvote is ugyldigt.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index cf25d81260..8d0e660492 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng
index ba7aad0403..18eebc2665 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk kvote is ugyldigt.';
 $wb['traffic_quota_error_regex'] = 'Trafik kvote is ugyldigt.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_aliasdomain.lng b/interface/web/sites/lib/lang/el_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/el_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_childdomain.lng b/interface/web/sites/lib/lang/el_web_childdomain.lng
index 3c5cb7a936..f6c2c743bf 100644
--- a/interface/web/sites/lib/lang/el_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_domain.lng b/interface/web/sites/lib/lang/el_web_domain.lng
index 1787aa0e33..1d067f9f8c 100644
--- a/interface/web/sites/lib/lang/el_web_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index f39ce19a9b..47115c8098 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_aliasdomain.lng b/interface/web/sites/lib/lang/en_web_aliasdomain.lng
index eeae6770c6..5499768e06 100644
--- a/interface/web/sites/lib/lang/en_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/en_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers must be
 $wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb["hd_quota_error_regex"] = 'Harddisk quota is invalid.';
 $wb["traffic_quota_error_regex"] = 'Traffic quota is invalid.';
-$wb["fastcgi_php_version_txt"] = 'PHP Version';
+$wb["server_php_id_txt"] = 'PHP Version';
 $wb["pm_txt"] = 'PHP-FPM Process Manager';
 $wb["pm_process_idle_timeout_txt"] = 'PHP-FPM pm.process_idle_timeout';
 $wb["pm_max_requests_txt"] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_childdomain.lng b/interface/web/sites/lib/lang/en_web_childdomain.lng
index 54def69214..b4dd9e9326 100644
--- a/interface/web/sites/lib/lang/en_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/en_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng
index 28c7c3e4e1..1785358209 100644
--- a/interface/web/sites/lib/lang/en_web_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_domain.lng
@@ -95,7 +95,7 @@ $wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers must be
 $wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb["hd_quota_error_regex"] = 'Harddisk quota is invalid.';
 $wb["traffic_quota_error_regex"] = 'Traffic quota is invalid.';
-$wb["fastcgi_php_version_txt"] = 'PHP Version';
+$wb["server_php_id_txt"] = 'PHP Version';
 $wb["pm_txt"] = 'PHP-FPM Process Manager';
 $wb["pm_process_idle_timeout_txt"] = 'PHP-FPM pm.process_idle_timeout';
 $wb["pm_max_requests_txt"] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index 497fcd1993..19b12ea2c4 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
index 0c7ac92c61..f8acd2d26b 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
@@ -100,7 +100,7 @@ $wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers must be
 $wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb["hd_quota_error_regex"] = 'Harddisk quota is invalid.';
 $wb["traffic_quota_error_regex"] = 'Traffic quota is invalid.';
-$wb["fastcgi_php_version_txt"] = 'PHP Version';
+$wb["server_php_id_txt"] = 'PHP Version';
 $wb["pm_txt"] = 'PHP-FPM Process Manager';
 $wb["pm_process_idle_timeout_txt"] = 'PHP-FPM pm.process_idle_timeout';
 $wb["pm_max_requests_txt"] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_aliasdomain.lng b/interface/web/sites/lib/lang/es_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/es_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_childdomain.lng b/interface/web/sites/lib/lang/es_web_childdomain.lng
index 25843a0e21..6cf662c2ff 100644
--- a/interface/web/sites/lib/lang/es_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_childdomain.lng
@@ -98,7 +98,7 @@ $wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children debe ser un valor
 $wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers debe ser un valor entero positivo.';
 $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers debe ser un valor entero positivo.';
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers debe ser un valor entero positivo.';
-$wb['fastcgi_php_version_txt'] = 'Versión de PHP';
+$wb['server_php_id_txt'] = 'Versión de PHP';
 $wb['pm_txt'] = 'PHP-FPM Gestor de Procesos';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_domain.lng b/interface/web/sites/lib/lang/es_web_domain.lng
index 889d29bd95..2dfe3d6cac 100644
--- a/interface/web/sites/lib/lang/es_web_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_domain.lng
@@ -95,7 +95,7 @@ $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.
 $wb['perl_txt'] = 'Perl';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index 3f60826008..c1960ae38b 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['domain_error_autosub'] = 'Ya hay un subdominio con estas configuraciones.';
 $wb['perl_txt'] = 'Perl';
 $wb['hd_quota_error_regex'] = 'Cuota de disco no es válida.';
 $wb['traffic_quota_error_regex'] = 'Cuota de tráfico no es válida.';
-$wb['fastcgi_php_version_txt'] = 'Versión de PHP';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'Versión de PHP';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Gestor de Procesos';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_aliasdomain.lng b/interface/web/sites/lib/lang/fi_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/fi_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_childdomain.lng b/interface/web/sites/lib/lang/fi_web_childdomain.lng
index 5105ba3f2e..bbc12a35fd 100644
--- a/interface/web/sites/lib/lang/fi_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_domain.lng b/interface/web/sites/lib/lang/fi_web_domain.lng
index 1cc2a2024d..38434653ef 100644
--- a/interface/web/sites/lib/lang/fi_web_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index 82fd44a56a..7ba9a95d35 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_aliasdomain.lng b/interface/web/sites/lib/lang/fr_web_aliasdomain.lng
index 59a69d4f23..5ce638002b 100644
--- a/interface/web/sites/lib/lang/fr_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'La valeur de PHP-FPM pm.min_spare_ser
 $wb['pm_max_spare_servers_error_regex'] = 'La valeur de PHP-FPM pm.max_spare_servers doit être un entier positif.';
 $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['server_php_id_txt'] = 'Version de PHP';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_childdomain.lng b/interface/web/sites/lib/lang/fr_web_childdomain.lng
index 1be206e122..d636dc2d48 100644
--- a/interface/web/sites/lib/lang/fr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_domain.lng b/interface/web/sites/lib/lang/fr_web_domain.lng
index 421693a0e6..a0e6ff9847 100644
--- a/interface/web/sites/lib/lang/fr_web_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
 $wb['ssl_key_txt'] = 'Clé SSL';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['server_php_id_txt'] = 'Version de PHP';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 5d817c611b..b3f1602e63 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
 $wb['ssl_key_txt'] = 'Clé SSL';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'Version de PHP';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng
index a97883fe46..bdd704f93b 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_aliasdomain.lng b/interface/web/sites/lib/lang/hr_web_aliasdomain.lng
index 67eb8363f5..7a2df148e1 100644
--- a/interface/web/sites/lib/lang/hr_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP verzija';
+$wb['server_php_id_txt'] = 'PHP verzija';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_childdomain.lng b/interface/web/sites/lib/lang/hr_web_childdomain.lng
index 99df0d2fdf..b0f7a1f2db 100644
--- a/interface/web/sites/lib/lang/hr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_domain.lng b/interface/web/sites/lib/lang/hr_web_domain.lng
index 8a089e6ba5..0b27cc5e65 100644
--- a/interface/web/sites/lib/lang/hr_web_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index 4d70565928..14bb2c6687 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng
index 82fa901c1f..5f5f74062f 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP verzija';
+$wb['server_php_id_txt'] = 'PHP verzija';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_aliasdomain.lng b/interface/web/sites/lib/lang/hu_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/hu_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_childdomain.lng b/interface/web/sites/lib/lang/hu_web_childdomain.lng
index 5ac19c3bbc..a05534c4f7 100644
--- a/interface/web/sites/lib/lang/hu_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_domain.lng b/interface/web/sites/lib/lang/hu_web_domain.lng
index 5ddf06593d..711f0abee2 100644
--- a/interface/web/sites/lib/lang/hu_web_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index d8bb15537b..86e5492408 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_aliasdomain.lng b/interface/web/sites/lib/lang/id_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/id_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_childdomain.lng b/interface/web/sites/lib/lang/id_web_childdomain.lng
index d5fd9711a4..d839094ff9 100644
--- a/interface/web/sites/lib/lang/id_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_domain.lng b/interface/web/sites/lib/lang/id_web_domain.lng
index 785d7fc0da..1dbdae9059 100644
--- a/interface/web/sites/lib/lang/id_web_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 39df360c89..7de6c2c6fa 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_aliasdomain.lng b/interface/web/sites/lib/lang/it_web_aliasdomain.lng
index 4723783201..0dc91e1371 100644
--- a/interface/web/sites/lib/lang/it_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_aliasdomain.lng
@@ -94,7 +94,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ess
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve essere un valore intero postivo.';
 $wb['hd_quota_error_regex'] = 'Quota Spazio Disco non valido.';
 $wb['traffic_quota_error_regex'] = 'Quota Traffico non valido.';
-$wb['fastcgi_php_version_txt'] = 'Versione PHP';
+$wb['server_php_id_txt'] = 'Versione PHP';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_childdomain.lng b/interface/web/sites/lib/lang/it_web_childdomain.lng
index 3a214e298e..e10211cdf7 100644
--- a/interface/web/sites/lib/lang/it_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_domain.lng b/interface/web/sites/lib/lang/it_web_domain.lng
index 68eae554fc..497f41d74c 100644
--- a/interface/web/sites/lib/lang/it_web_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Quota spazio disco non valida.';
 $wb['traffic_quota_error_regex'] = 'Quota Traffico non valida.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Versione';
+$wb['server_php_id_txt'] = 'PHP Versione';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index 807039ca6c..3951e5d19d 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng
index 259d1c820c..d1bb71c625 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers  deve es
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers  deve essere un valore intero positivo.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_aliasdomain.lng b/interface/web/sites/lib/lang/ja_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/ja_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_childdomain.lng b/interface/web/sites/lib/lang/ja_web_childdomain.lng
index d59d7bbda5..fb705f1af5 100644
--- a/interface/web/sites/lib/lang/ja_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_domain.lng b/interface/web/sites/lib/lang/ja_web_domain.lng
index 2dbf65d2e5..5582ad82a5 100644
--- a/interface/web/sites/lib/lang/ja_web_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index 288b9fab11..a9d284b46c 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_aliasdomain.lng b/interface/web/sites/lib/lang/nl_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/nl_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_childdomain.lng b/interface/web/sites/lib/lang/nl_web_childdomain.lng
index e99616ce11..9b73b148a2 100644
--- a/interface/web/sites/lib/lang/nl_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_domain.lng b/interface/web/sites/lib/lang/nl_web_domain.lng
index aa57c6e012..f50539ae7c 100644
--- a/interface/web/sites/lib/lang/nl_web_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is ongeldig.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is ongeldig.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Versie';
+$wb['server_php_id_txt'] = 'PHP Versie';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index 27371eee35..50932cc9e1 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is niet correct.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is niet correct.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Versie';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Versie';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pl_web_aliasdomain.lng b/interface/web/sites/lib/lang/pl_web_aliasdomain.lng
index 19cd691beb..618ae50e84 100644
--- a/interface/web/sites/lib/lang/pl_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/pl_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers musi by
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers musi być dodatnią wartością całkowitą.';
 $wb['hd_quota_error_regex'] = 'Limit dysku jest nieprawidłowy';
 $wb['traffic_quota_error_regex'] = 'Limit transferu jest nieprawidłowy';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['server_php_id_txt'] = 'Wersja PHP';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pl_web_childdomain.lng b/interface/web/sites/lib/lang/pl_web_childdomain.lng
index 9b8a2b56ba..ab3a61582a 100644
--- a/interface/web/sites/lib/lang/pl_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/pl_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers musi by
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers musi być dodatnią wartością całkowitą.';
 $wb['hd_quota_error_regex'] = 'Limit dysku jest nieprawidłowy';
 $wb['traffic_quota_error_regex'] = 'Limit transferu jest nieprawidłowy';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['server_php_id_txt'] = 'Wersja PHP';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pl_web_domain.lng b/interface/web/sites/lib/lang/pl_web_domain.lng
index 2521f17406..e615f70303 100644
--- a/interface/web/sites/lib/lang/pl_web_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_domain.lng
@@ -95,7 +95,7 @@ $wb['ssl_key_txt'] = 'Klucz SSL';
 $wb['web_folder_error_regex'] = 'Wprowadzono nieprawidłowy katalog. Proszę nie wpisywać znaku slash [ / ]';
 $wb['domain_error_autosub'] = 'Istnieje już subdomena z tymi ustawieniami.';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['server_php_id_txt'] = 'Wersja PHP';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index f1e945df6f..93752a063c 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['ssl_key_txt'] = 'Klucz SSL';
 $wb['web_folder_error_regex'] = 'Wprowadzono nieprawidłowy katalog. Proszę nie wpisywać znaku slash [ / ]';
 $wb['domain_error_autosub'] = 'Istnieje już subdomena z tymi ustawieniami.';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'Wersja PHP';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng
index cc2431dbec..884210be39 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers musi by
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers musi być dodatnią wartością całkowitą.';
 $wb['hd_quota_error_regex'] = 'Limit dyski jest nieprawidłowy';
 $wb['traffic_quota_error_regex'] = 'Limit transferu jest nieprawidłowy';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['server_php_id_txt'] = 'Wersja PHP';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_aliasdomain.lng b/interface/web/sites/lib/lang/pt_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/pt_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_childdomain.lng b/interface/web/sites/lib/lang/pt_web_childdomain.lng
index 4cbc032c19..48ee53c856 100644
--- a/interface/web/sites/lib/lang/pt_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_domain.lng b/interface/web/sites/lib/lang/pt_web_domain.lng
index fc7add5d89..5ed2112e1e 100644
--- a/interface/web/sites/lib/lang/pt_web_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index 9eb927f000..2b07795507 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_aliasdomain.lng b/interface/web/sites/lib/lang/ro_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/ro_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_childdomain.lng b/interface/web/sites/lib/lang/ro_web_childdomain.lng
index 30f83e7283..c172b3d70f 100644
--- a/interface/web/sites/lib/lang/ro_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_domain.lng b/interface/web/sites/lib/lang/ro_web_domain.lng
index 7e98b45d02..3b3e8b339a 100644
--- a/interface/web/sites/lib/lang/ro_web_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index 0127c4ee80..e52310bf08 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_aliasdomain.lng b/interface/web/sites/lib/lang/ru_web_aliasdomain.lng
index 7555b823b0..e63d9b039f 100644
--- a/interface/web/sites/lib/lang/ru_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers долж
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers должен быть положительным целым числом.';
 $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['server_php_id_txt'] = 'Версия PHP';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_childdomain.lng b/interface/web/sites/lib/lang/ru_web_childdomain.lng
index af71669a47..ffe19805ab 100644
--- a/interface/web/sites/lib/lang/ru_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers долж
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers должен быть положительным целым числом.';
 $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['server_php_id_txt'] = 'Версия PHP';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_domain.lng b/interface/web/sites/lib/lang/ru_web_domain.lng
index 6cba45f1b7..bc47bfff7e 100644
--- a/interface/web/sites/lib/lang/ru_web_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
 $wb['ssl_key_txt'] = 'SSL-ключ';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['server_php_id_txt'] = 'Версия PHP';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index 827f149dd8..07c345f0da 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
 $wb['ssl_key_txt'] = 'SSL-ключ';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'Версия PHP';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng
index d548c2abe2..e504af3dad 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers долж
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers должен быть положительным целым числом.';
 $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['server_php_id_txt'] = 'Версия PHP';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_aliasdomain.lng b/interface/web/sites/lib/lang/se_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/se_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_childdomain.lng b/interface/web/sites/lib/lang/se_web_childdomain.lng
index eff6791c65..42e4591835 100644
--- a/interface/web/sites/lib/lang/se_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_domain.lng b/interface/web/sites/lib/lang/se_web_domain.lng
index 91fa8c4db5..a293af77ea 100644
--- a/interface/web/sites/lib/lang/se_web_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index 1bac2468c1..f398991442 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_aliasdomain.lng b/interface/web/sites/lib/lang/sk_web_aliasdomain.lng
index 4149c71149..74697bdb33 100644
--- a/interface/web/sites/lib/lang/sk_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_childdomain.lng b/interface/web/sites/lib/lang/sk_web_childdomain.lng
index e0d26667bc..d14f9815f6 100644
--- a/interface/web/sites/lib/lang/sk_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_domain.lng b/interface/web/sites/lib/lang/sk_web_domain.lng
index f8f2f79b96..2b18602008 100644
--- a/interface/web/sites/lib/lang/sk_web_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index c3b680b2b4..3d4a76186f 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng
index 35c9298e71..4ded131f4a 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_aliasdomain.lng b/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
index d7ded7849a..108f1d9a67 100644
--- a/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_childdomain.lng b/interface/web/sites/lib/lang/tr_web_childdomain.lng
index 235e870117..55a82167d6 100644
--- a/interface/web/sites/lib/lang/tr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Sabit disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yönetimi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_domain.lng b/interface/web/sites/lib/lang/tr_web_domain.lng
index 65db621f56..4d20d3efad 100644
--- a/interface/web/sites/lib/lang/tr_web_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_domain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 2e004d87ef..8aa1684478 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
index a24883881f..7cdf15947a 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index e39b889d4c..0b17e38022 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -221,14 +221,14 @@
                     {tmpl_var name='php'}
                 </select></div>
             </div>
-            {tmpl_hook name="field_fastcgi_php_version"}
-            <div class="form-group fastcgi_php_version">
-                <label for="fastcgi_php_version" class="col-sm-3 control-label">{tmpl_var name='fastcgi_php_version_txt'}</label>
-                <div class="col-sm-9"><select name="fastcgi_php_version" id="fastcgi_php_version" class="form-control">
-                    {tmpl_var name='fastcgi_php_version'}
+            {tmpl_hook name="field_server_php_id"}
+            <div class="form-group server_php_id">
+                <label for="server_php_id" class="col-sm-3 control-label">{tmpl_var name='server_php_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_php_id" id="server_php_id" class="form-control">
+                    {tmpl_var name='server_php_id'}
                 </select></div>
-                <tmpl_if name="fastcgi_php_version_default_hidden_warning_confirmed">
-                    <input type="hidden" id="fastcgi_php_version_default_hidden_warning_confirmed" name="fastcgi_php_version_default_hidden_warning_confirmed" value="{tmpl_var name='fastcgi_php_version_default_hidden_warning_confirmed'}" />
+                <tmpl_if name="server_php_id_default_hidden_warning_confirmed">
+                    <input type="hidden" id="server_php_id_default_hidden_warning_confirmed" name="server_php_id_default_hidden_warning_confirmed" value="{tmpl_var name='server_php_id_default_hidden_warning_confirmed'}" />
                 </tmpl_if>
             </div>
             <tmpl_if name="limit_directive_snippets" op="==" value="y"><div class="form-group">
@@ -294,32 +294,32 @@
     });
 
     if(jQuery('#php').val() == 'fast-cgi' || jQuery('#php').val() == 'php-fpm' || (jQuery('#php').val() == 'hhvm' && serverType == 'nginx')){
-        jQuery('.fastcgi_php_version:hidden').show();
+        jQuery('.server_php_id:hidden').show();
 		if(jQuery('#php').val() == 'hhvm'){
-			jQuery('#fastcgi_php_version_txt').hide();
+			jQuery('#server_php_id_txt').hide();
 			jQuery('#fastcgi_php_fallback_version_txt').show();
 		} else {
-			jQuery('#fastcgi_php_version_txt').show();
+			jQuery('#server_php_id_txt').show();
 			jQuery('#fastcgi_php_fallback_version_txt').hide();
 		}
     } else {
-        jQuery('.fastcgi_php_version:visible').hide();
+        jQuery('.server_php_id:visible').hide();
     }
     //ISPConfig.resetFormChanged();
 
     jQuery('#php').change(function(){
         reloadFastcgiPHPVersions();
         if(jQuery(this).val() == 'fast-cgi' || jQuery(this).val() == 'php-fpm' || (jQuery(this).val() == 'hhvm' && serverType == 'nginx')){
-            jQuery('.fastcgi_php_version:hidden').show();
+            jQuery('.server_php_id:hidden').show();
 			if(jQuery(this).val() == 'hhvm'){
-				jQuery('#fastcgi_php_version_txt').hide();
+				jQuery('#server_php_id_txt').hide();
 				jQuery('#fastcgi_php_fallback_version_txt').show();
 			} else {
-				jQuery('#fastcgi_php_version_txt').show();
+				jQuery('#server_php_id_txt').show();
 				jQuery('#fastcgi_php_fallback_version_txt').hide();
 			}
         } else {
-            jQuery('.fastcgi_php_version:visible').hide();
+            jQuery('.server_php_id:visible').hide();
         }
     });
     jQuery('#parent_domain_id').change(function() {
@@ -445,7 +445,7 @@
             var phpfastcgiselected = '';
             $.each(data, function(key, val) {
 				<tmpl_if name="id">
-                if($('#fastcgi_php_version').val() == key){
+                if($('#server_php_id').val() == key){
                     phpfastcgiselected = ' selected="selected"';
                 } else {
                     phpfastcgiselected = '';
@@ -456,7 +456,7 @@
                 options += '<option value="'+key+'"'+phpfastcgiselected+'>'+val+'</option>';
             });
 			<tmpl_if name="id">
-			if($('#fastcgi_php_version').val() == ''){
+			if($('#server_php_id').val() == ''){
                 phpfastcgiselected = ' selected="selected"';
             } else {
                 phpfastcgiselected = '';
@@ -465,7 +465,7 @@
 				phpfastcgiselected = '';
 			</tmpl_if>
 			//options += '<option value=""'+phpfastcgiselected+'>{tmpl_var name="default_php_txt"}</option>';
-            $('#fastcgi_php_version').html(options).change();
+            $('#server_php_id').html(options).change();
             if(noFormChange) ISPConfig.resetFormChanged();
         });
     }
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 0d770476d1..277fde2703 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -258,20 +258,15 @@ class page_action extends tform_actions {
 				}
 			}
 			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
-				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+				$php_select = "<option value='0'>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
 			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
-						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
-					} else {
-						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
-					}
-					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
-					$php_select .= "<option value='" . $app->functions->htmlentities($php_version) . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
+					$selected = ($php_record['server_php_id'] == $this->dataRecord["server_php_id"])?'SELECTED':'';
+					$php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
 				}
 			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
+			$app->tpl->setVar("server_php_id", $php_select);
 			unset($php_records);
 
 			// add limits to template to be able to hide settings
@@ -406,20 +401,15 @@ class page_action extends tform_actions {
 				}
 			}
 			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
-				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+				$php_select = "<option value='0'>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
 			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
-						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
-					} else {
-						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
-					}
-					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
-					$php_select .= "<option value='" . $app->functions->htmlentities($php_version) . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
+					$selected = ($php_record['server_php_id'] == $this->dataRecord["server_php_id"])?'SELECTED':'';
+					$php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
 				}
 			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
+			$app->tpl->setVar("server_php_id", $php_select);
 			unset($php_records);
 
 			// add limits to template to be able to hide settings
@@ -628,20 +618,15 @@ class page_action extends tform_actions {
 				}
 			}
 			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
-				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+				$php_select = "<option value='0'>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
 			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
-						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
-					} else {
-						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
-					}
-					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
-					$php_select .= "<option value='" . $app->functions->htmlentities($php_version) . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
+					$selected = ($php_record['server_php_id'] == $this->dataRecord["server_php_id"])?'SELECTED':'';
+					$php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
 				}
 			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
+			$app->tpl->setVar("server_php_id", $php_select);
 			unset($php_records);
 
 			foreach($read_limits as $limit) $app->tpl->setVar($limit, ($limit == 'force_suexec' ? 'n' : 'y'));
@@ -1349,28 +1334,24 @@ class page_action extends tform_actions {
 		}
 
 		// Check custom PHP version
-		if(isset($this->dataRecord['fastcgi_php_version']) && $this->dataRecord['fastcgi_php_version'] != '') {
+		if(isset($this->dataRecord['server_php_id']) && $this->dataRecord['server_php_id'] != 0) {
 			// Check php-fpm mode
 			if($this->dataRecord['php'] == 'php-fpm'){
-				$tmp = $app->db->queryOneRecord("SELECT * FROM server_php WHERE active = 'y' AND CONCAT(name,':',php_fpm_init_script,':',php_fpm_ini_dir,':',php_fpm_pool_dir) = '".$app->db->quote($this->dataRecord['fastcgi_php_version'])."'");
-				if(is_array($tmp)) {
-					$this->dataRecord['fastcgi_php_version'] = $tmp['name'].':'.$tmp['php_fpm_init_script'].':'.$tmp['php_fpm_ini_dir'].':'.$tmp['php_fpm_pool_dir'];
-				} else {
-					$this->dataRecord['fastcgi_php_version'] = '';
+				$tmp = $app->db->queryOneRecord("SELECT * FROM server_php WHERE active = 'y' AND server_php_id = ?", $this->dataRecord['server_php_id']);
+				if(!is_array($tmp) || !$tmp['php_fpm_init_script']) {
+					$this->dataRecord['server_php_id'] = 0;
 				}
 				unset($tmp);
 			// Check fast-cgi mode
 			} elseif($this->dataRecord['php'] == 'fast-cgi') {
-				$tmp = $app->db->queryOneRecord("SELECT * FROM server_php WHERE active = 'y' AND CONCAT(name,':',php_fastcgi_binary,':',php_fastcgi_ini_dir) = '".$app->db->quote($this->dataRecord['fastcgi_php_version'])."'");
-				if(is_array($tmp)) {
-					$this->dataRecord['fastcgi_php_version'] = $tmp['name'].':'.$tmp['php_fastcgi_binary'].':'.$tmp['php_fastcgi_ini_dir'];
-				} else {
-					$this->dataRecord['fastcgi_php_version'] = '';
+				$tmp = $app->db->queryOneRecord("SELECT * FROM server_php WHERE active = 'y' AND server_php_id = ?", $this->dataRecord['server_php_id']);
+				if(!is_array($tmp) || !$tmp['php_fastcgi_binary']) {
+					$this->dataRecord['server_php_id'] = 0;
 				}
 				unset($tmp);
 			} else {
-				// Other PHP modes do not have custom versions, so we force the value to be empty
-				$this->dataRecord['fastcgi_php_version'] = '';
+				// Other PHP modes do not have custom versions, so we force the value to be zero
+				$this->dataRecord['server_php_id'] = 0;
 			}
 		}
 
@@ -1564,27 +1545,27 @@ class page_action extends tform_actions {
 
 		// The default PHP version is indicated by an empty string, so if the default PHP version is hidden
 		// then an empty string is not a valid PHP version.
-		if (empty($this->dataRecord['fastcgi_php_version'])) {
-			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('fastcgi_php_version_invalid_txt'));
+		if (empty($this->dataRecord['server_php_id'])) {
+			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('server_php_id_invalid_txt'));
 			return;
 		}
 
 		// If the default PHP version is now hidden but this vhost was using it, we don't want to implicitly
 		// switch the user to some random Additional PHP version. So we show a warning instead.
-		$old_fastcgi_php_version = null;
+		$old_server_php_id = null;
 		if ($this->id > 0) {
-			$existing = $app->db->queryOneRecord('SELECT fastcgi_php_version FROM web_domain WHERE domain_id = ?', $this->id);
-			$old_fastcgi_php_version = $existing['fastcgi_php_version'];
+			$existing = $app->db->queryOneRecord('SELECT server_php_id FROM web_domain WHERE domain_id = ?', $this->id);
+			$old_server_php_id = $existing['server_php_id'];
 		}
 
-		if ('' === $old_fastcgi_php_version) {
+		if ('' === $old_server_php_id) {
 			// Warning was already shown, user confirmed the new PHP version
-			if (!empty($_POST['fastcgi_php_version_default_hidden_warning_confirmed'])) {
+			if (!empty($_POST['server_php_id_default_hidden_warning_confirmed'])) {
 				return;
 			}
 
-			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('fastcgi_php_version_default_hidden_warning_txt'));
-			$app->tpl->setVar('fastcgi_php_version_default_hidden_warning_confirmed', 1);
+			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('server_php_id_default_hidden_warning_txt'));
+			$app->tpl->setVar('server_php_id_default_hidden_warning_confirmed', 1);
 		}
 	}
 }
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 61116d0041..bb8c60fb5a 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -109,10 +109,14 @@ class apache2_plugin {
 			$master_php_ini_path = $web_config['php_ini_path_apache'];
 		} else {
 			// check for custom php
-			if($web_data['fastcgi_php_version'] != '') {
-				$tmp = explode(':', $web_data['fastcgi_php_version']);
-				if(isset($tmp[2])) {
-					$tmppath = $tmp[2];
+			if($web_data['server_php_id'] != 0) {
+				$tmp = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $web_data['server_php_id']);
+				$ini_key = 'php_fastcgi_ini_dir';
+				if($web_data['php'] === 'php-fpm') {
+					$ini_key = 'php_fpm_ini_dir';
+				}
+				if($tmp && $tmp[$ini_key]) {
+					$tmppath = $tmp[$ini_key];
 					if(substr($tmppath, -7) != 'php.ini') {
 						if(substr($tmppath, -1) != '/') $tmppath .= '/';
 						$tmppath .= 'php.ini';
@@ -169,21 +173,21 @@ class apache2_plugin {
 			$qrystr .= " AND php = 'mod'";
 		} elseif($data['mode'] == 'fast-cgi') {
 			$qrystr .= " AND php = 'fast-cgi'";
-			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE ?";
-				$param = '%:' . $data['php_version'];
+			if(isset($data['php_version'])) {
+				$qrystr .= " AND server_php_id = ?";
+				$param = $data['php_version'];
 			}
 		} elseif($data['mode'] == 'php-fpm') {
 			$qrystr .= " AND php = 'php-fpm'";
-			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE ?";
-				$param = '%:' . $data['php_version'] . ':%';
+			if(isset($data['php_version'])) {
+				$qrystr .= " AND server_php_id = ?";
+				$param = $data['php_version'];
 			}
 		} elseif($data['mode'] == 'hhvm') {
 			$qrystr .= " AND php = 'hhvm'";
-			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE ?";
-				$param = '%:' . $data['php_version'] . ':%';
+			if(isset($data['php_version'])) {
+				$qrystr .= " AND server_php_id = ?";
+				$param = $data['php_version'];
 			}
 		} else {
 			$qrystr .= " AND php != 'mod' AND php != 'fast-cgi'";
@@ -1113,11 +1117,21 @@ class apache2_plugin {
 		}
 
 		$fastcgi_config = $app->getconf->get_server_config($conf['server_id'], 'fastcgi');
-
-		if(trim($data['new']['fastcgi_php_version']) != ''){
-			list($custom_fastcgi_php_name, $custom_fastcgi_php_executable, $custom_fastcgi_php_ini_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-			if(is_file($custom_fastcgi_php_ini_dir)) $custom_fastcgi_php_ini_dir = dirname($custom_fastcgi_php_ini_dir);
-			if(substr($custom_fastcgi_php_ini_dir, -1) == '/') $custom_fastcgi_php_ini_dir = substr($custom_fastcgi_php_ini_dir, 0, -1);
+		$custom_fastcgi_php_executable = '';
+
+		if($data['new']['server_php_id'] != 0){
+			$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+			if($tmp_php) {
+				if($data['new']['php'] === 'php-fpm') {
+					$custom_fastcgi_php_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_fastcgi_php_executable = $tmp_php['php_fpm_init_script'];
+				} else {
+					$custom_fastcgi_php_ini_dir = $tmp_php['php_fastcgi_ini_dir'];
+					$custom_fastcgi_php_executable = $tmp_php['php_fastcgi_binary'];
+				}
+				if(is_file($custom_fastcgi_php_ini_dir)) $custom_fastcgi_php_ini_dir = dirname($custom_fastcgi_php_ini_dir);
+				if(substr($custom_fastcgi_php_ini_dir, -1) == '/') $custom_fastcgi_php_ini_dir = substr($custom_fastcgi_php_ini_dir, 0, -1);
+			}
 		}
 
 		//* Create custom php.ini
@@ -1466,7 +1480,7 @@ class apache2_plugin {
 			$fcgi_tpl->setVar('apache_version', $app->system->getapacheversion());
 
 			// Support for multiple PHP versions (FastCGI)
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_fastcgi_php = false;
 				if(substr($custom_fastcgi_php_ini_dir, -1) != '/') $custom_fastcgi_php_ini_dir .= '/';
 			} else {
@@ -1541,18 +1555,28 @@ class apache2_plugin {
 		 */
 		// Support for multiple PHP versions
 		if($data['new']['php'] == 'php-fpm'){
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
 		} else {
-			if(trim($data['old']['fastcgi_php_version']) != '' && ($data['old']['php'] == 'php-fpm' || $data['old']['php'] == 'hhvm')){
+			if($data['old']['server_php_id'] != 0 && ($data['old']['php'] == 'php-fpm' || $data['old']['php'] == 'hhvm')){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
@@ -3054,18 +3078,28 @@ class apache2_plugin {
 		//$reload = false;
 
 		if($data['new']['php'] == 'php-fpm'){
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
 		} else {
-			if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){
+			if($data['old']['server_php_id'] != 0 && $data['old']['php'] == 'php-fpm'){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
@@ -3262,10 +3296,15 @@ class apache2_plugin {
 
 		$php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart';
 
-		if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){
+		if($data['old']['server_php_id'] != 0 && $data['old']['php'] == 'php-fpm'){
 			$default_php_fpm = false;
-			list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-			if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+			$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+			if($tmp_php) {
+				$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+				$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+				$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+			}
 		} else {
 			$default_php_fpm = true;
 		}
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 51f566a00c..12961ef1d1 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -994,30 +994,29 @@ class nginx_plugin {
 		}
 		if($data['new']['ip_address'] == '*' && $data['new']['ipv6_address'] == '') $tpl->setVar('ipv6_wildcard', 1);
 
-		// PHP-FPM
-		// Support for multiple PHP versions
-		/*
-		if(trim($data['new']['fastcgi_php_version']) != ''){
-			$default_php_fpm = false;
-			list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-			if(substr($custom_php_fpm_ini_dir,-1) != '/') $custom_php_fpm_ini_dir .= '/';
-		} else {
-			$default_php_fpm = true;
-		}
-		*/
 		if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
 		} else {
-			if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] != 'no'){
+			if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
@@ -2657,18 +2656,28 @@ class nginx_plugin {
 
 		// HHVM => PHP-FPM-Fallback
 		if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
 		} else {
-			if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] != 'no'){
+			if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
@@ -2869,10 +2878,15 @@ class nginx_plugin {
 	private function php_fpm_pool_delete ($data, $web_config) {
 		global $app, $conf;
 
-		if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] != 'no'){
+		if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){
 			$default_php_fpm = false;
-			list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-			if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+			$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+			if($tmp_php) {
+				$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+				$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+				$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+			}
 		} else {
 			$default_php_fpm = true;
 		}
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 9f19c2be58..69d96a961e 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -58,20 +58,20 @@ class shelluser_base_plugin {
 		/*
 		Register for the events
 		*/
-		
+
 		$app->plugins->registerEvent('shell_user_insert', $this->plugin_name, 'insert');
 		$app->plugins->registerEvent('shell_user_update', $this->plugin_name, 'update');
 		$app->plugins->registerEvent('shell_user_delete', $this->plugin_name, 'delete');
-		
+
 
 	}
 
 
 	function insert($event_name, $data) {
 		global $app, $conf;
-		
+
 		$app->uses('system,getconf');
-		
+
 		$security_config = $app->getconf->get_security_config('permissions');
 		if($security_config['allow_shell_user'] != 'yes') {
 			$app->log('Shell user plugin disabled by security settings.',LOGLEVEL_WARN);
@@ -88,7 +88,7 @@ class shelluser_base_plugin {
 			$app->log('Directory of the shell user is not valid.',LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		if(!$app->system->is_allowed_user($data['new']['username'], false, false)
 			|| !$app->system->is_allowed_user($data['new']['puser'], true, true)
 			|| !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
@@ -97,7 +97,7 @@ class shelluser_base_plugin {
 		}
 
 		if($data['new']['active'] != 'y') $data['new']['shell'] = '/bin/false';
-		
+
 		if($app->system->is_user($data['new']['puser'])) {
 
 			// Get the UID of the parent user
@@ -105,24 +105,24 @@ class shelluser_base_plugin {
 			if($uid > $this->min_uid) {
 				//* Remove webfolder protection
 				$app->system->web_folder_protection($web['document_root'], false);
-				
+
 				//* Home directory of the new shell user
 				if($data['new']['chroot'] == 'jailkit') {
 					$homedir = $data['new']['dir'];
 				} else {
 					$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
 				}
-				
+
 				// Create home base directory if it does not exist
 				if(!is_dir($data['new']['dir'].'/home')){
 					$app->file->mkdirs($data['new']['dir'].'/home', '0755');
 				}
-				
+
 				// Change ownership of home base dir to root user
 				$app->system->chown($data['new']['dir'].'/home','root');
 				$app->system->chgrp($data['new']['dir'].'/home','root');
 				$app->system->chmod($data['new']['dir'].'/home',0755);
-				
+
 				if(!is_dir($homedir)){
 					$app->file->mkdirs($homedir, '0750');
 					$app->system->chown($homedir,$data['new']['puser'],false);
@@ -142,10 +142,10 @@ class shelluser_base_plugin {
 						$app->log("Command chpasswd failed for user ".$data['new']['username'] . ' with code ' . $retval . ': ' . $stderr, LOGLEVEL_WARN);
 					}
 				}
-			
+
 				$app->system->chown($data['new']['dir'],$data['new']['username'],false);
 				$app->system->chgrp($data['new']['dir'],$data['new']['pgroup'],false);
-				
+
 
 				// call the ssh-rsa update function
 				$app->uses("getconf");
@@ -186,7 +186,7 @@ class shelluser_base_plugin {
 		global $app, $conf;
 
 		$app->uses('system,getconf');
-		
+
 		$security_config = $app->getconf->get_security_config('permissions');
 		if($security_config['allow_shell_user'] != 'yes') {
 			$app->log('Shell user plugin disabled by security settings.',LOGLEVEL_WARN);
@@ -199,7 +199,7 @@ class shelluser_base_plugin {
 			$app->log('Directory of the shell user is outside of website docroot.',LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		if(strpos($data['new']['dir'], '/../') !== false || substr($data['new']['dir'],-3) == '/..') {
 			$app->log('Directory of the shell user is not valid.',LOGLEVEL_WARN);
 			return false;
@@ -211,14 +211,14 @@ class shelluser_base_plugin {
 			$app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		if($data['new']['active'] != 'y') $data['new']['shell'] = '/bin/false';
-		
+
 		if($app->system->is_user($data['new']['puser'])) {
 			// Get the UID of the parent user
 			$uid = intval($app->system->getuid($data['new']['puser']));
 			if($uid > $this->min_uid) {
-				
+
 				//* Home directory of the shell user
 				if($data['new']['chroot'] == 'jailkit') {
 					$homedir = $data['new']['dir'];
@@ -227,10 +227,10 @@ class shelluser_base_plugin {
 					$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
 					$homedir_old = $data['old']['dir'].'/home/'.$data['old']['username'];
 				}
-				
+
 				$app->log("Homedir New: ".$homedir, LOGLEVEL_DEBUG);
 				$app->log("Homedir Old: ".$homedir_old, LOGLEVEL_DEBUG);
-				
+
 				// Check if the user that we want to update exists, if not, we insert it
 				if($app->system->is_user($data['old']['username'])) {
 					//* Remove webfolder protection
@@ -243,7 +243,7 @@ class shelluser_base_plugin {
 							$app->log("New Homedir exists, renaming it to ".$homedir.'_bak', LOGLEVEL_DEBUG);
 							$app->system->rename($homedir,$homedir.'_bak');
 						}
-						
+
 						// Move old directory to new path
 						$app->system->rename($homedir_old,$homedir);
 						$app->file->mkdirs($homedir, '0750');
@@ -280,7 +280,7 @@ class shelluser_base_plugin {
 						$app->system->chown($homedir.'/.bash_history', $data['new']['username']);
 						$app->system->chgrp($homedir.'/.bash_history', $data['new']['pgroup']);
 					}
-					
+
 					//* Create .profile file
 					if(!is_file($data['new']['dir']).'/.profile') {
 						$app->system->touch($homedir.'/.profile');
@@ -307,7 +307,7 @@ class shelluser_base_plugin {
 		global $app, $conf;
 
 		$app->uses('system,getconf,services');
-		
+
 		$security_config = $app->getconf->get_security_config('permissions');
 		if($security_config['allow_shell_user'] != 'yes') {
 			$app->log('Shell user plugin disabled by security settings.',LOGLEVEL_WARN);
@@ -319,21 +319,21 @@ class shelluser_base_plugin {
 			$userid = intval($app->system->getuid($data['old']['username']));
 			if($userid > $this->min_uid) {
 				$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['old']['parent_domain_id']));
-					
+
 				// check if we have to delete the dir
 				$check = $app->db->queryOneRecord('SELECT shell_user_id FROM `shell_user` WHERE `dir` = ?', $data['old']['dir']);
 				if(!$check && is_dir($data['old']['dir'])) {
-					
+
 					$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['old']['parent_domain_id']);
 					$app->system->web_folder_protection($web['document_root'], false);
-					
+
 					// delete dir
 					if($data['new']['chroot'] == 'jailkit') {
 						$homedir = $data['old']['dir'];
 					} else {
 						$homedir = $data['old']['dir'].'/home/'.$data['old']['username'];
 					}
-				
+
 					if(substr($homedir, -1) !== '/') $homedir .= '/';
 					$files = array('.bash_logout', '.bash_history', '.bashrc', '.profile');
 					$dirs = array('.ssh', '.cache');
@@ -359,17 +359,22 @@ class shelluser_base_plugin {
 					}
 					unset($files);
 					unset($dirs);
-					
+
 					$app->system->web_folder_protection($web['document_root'], true);
 				}
-				
+
 				// We delete only non jailkit users, jailkit users will be deleted by the jailkit plugin.
 				if ($data['old']['chroot'] != "jailkit") {
 					// if this web uses PHP-FPM, that PPH-FPM service must be stopped before we can delete this user
 					if($web['php'] == 'php-fpm'){
-						if(trim($web['fastcgi_php_version']) != ''){
+						if($web['server_php_id'] != 0){
 							$default_php_fpm = false;
-							list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($web['fastcgi_php_version']));
+							$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $web['server_php_id']);
+							if($tmp_php) {
+								$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+								$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+								if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+							}
 						} else {
 							$default_php_fpm = true;
 						}
diff --git a/server/plugins-available/webserver_plugin.inc.php b/server/plugins-available/webserver_plugin.inc.php
index cca339ace0..3dae9216fa 100644
--- a/server/plugins-available/webserver_plugin.inc.php
+++ b/server/plugins-available/webserver_plugin.inc.php
@@ -89,20 +89,20 @@ class webserver_plugin {
 		//** add default php.ini files to check
 		$check_files[] = array('file' => $web_config['php_ini_path_apache'],
 			'mode' => 'mod',
-			'php_version' => ''); // default;
+			'php_version' => 0); // default;
 
 		$check_files[] = array('file' => $web_config['php_ini_path_cgi'],
 			'mode' => '', // all but 'mod' and 'fast-cgi'
-			'php_version' => ''); // default;
+			'php_version' => 0); // default;
 
 		if($fastcgi_config["fastcgi_phpini_path"] && $fastcgi_config["fastcgi_phpini_path"] != $web_config['php_ini_path_cgi']) {
 			$check_files[] = array('file' => $fastcgi_config["fastcgi_phpini_path"],
 				'mode' => 'fast-cgi',
-				'php_version' => ''); // default;
+				'php_version' => 0); // default;
 		} else {
 			$check_files[] = array('file' => $web_config['php_ini_path_cgi'],
 				'mode' => 'fast-cgi', // all but 'mod'
-				'php_version' => ''); // default;
+				'php_version' => 0); // default;
 		}
 
 
@@ -112,11 +112,11 @@ class webserver_plugin {
 			if($php['php_fastcgi_ini_dir'] && $php['php_fastcgi_ini_dir'] . '/php.ini' != $web_config['php_ini_path_cgi']) {
 				$check_files[] = array('file' => $php['php_fastcgi_ini_dir'] . '/php.ini',
 					'mode' => 'fast-cgi',
-					'php_version' => $php['php_fastcgi_ini_dir']);
+					'php_version' => $php['server_php_id']);
 			} elseif($php['php_fpm_ini_dir'] && $php['php_fpm_ini_dir'] . '/php.ini' != $web_config['php_ini_path_cgi']) {
 				$check_files[] = array('file' => $php['php_fpm_ini_dir'] . '/php.ini',
 					'mode' => 'php-fpm',
-					'php_version' => $php['php_fpm_ini_dir']);
+					'php_version' => $php['server_php_id']);
 			}
 		}
 		unset($php_versions);
diff --git a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
index 5a643a660a..b2dd92265e 100644
--- a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
+++ b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
@@ -66,7 +66,7 @@ class z_php_fpm_incron_reload_plugin {
 
 	private function phpVersionUnchanged($data)
 	{
-		return $data['new']['fastcgi_php_version'] === $data['old']['fastcgi_php_version'];
+		return $data['new']['server_php_id'] === $data['old']['server_php_id'];
 	}
 
 	private function setup($data)
@@ -77,7 +77,7 @@ class z_php_fpm_incron_reload_plugin {
 		$this->createIncronConfiguration(
 			$triggerFile,
 			$data['system_user'],
-			$data['fastcgi_php_version']
+			$data['server_php_id']
 		);
 
 		$this->restartIncronService();
@@ -173,12 +173,14 @@ class z_php_fpm_incron_reload_plugin {
 	}
 
 	private function getPhpService($fastcgiPhpVersion) {
-		$phpInfo = explode(':', $fastcgiPhpVersion);
+		global $app;
+
+		$phpInfo = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $fastcgiPhpVersion);
 		if (empty($phpInfo)) {
 			return null;
 		}
 
-		$phpService = $phpInfo[1];
+		$phpService = $phpInfo['php_fpm_init_script'];
 		if (empty($phpService)) {
 			return null;
 		}
-- 
GitLab


From 760efc16bd272ea24ab99002dd9be03fc9a0d4d1 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 24 Jul 2020 11:52:54 +0200
Subject: [PATCH 512/571] - fixed deleting cronjobs on deleted website

---
 server/plugins-available/cron_plugin.inc.php | 40 ++++++++++----------
 1 file changed, 21 insertions(+), 19 deletions(-)

diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index ad122807ba..1d44a849aa 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -103,7 +103,7 @@ class cron_plugin {
 			$app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		// Get the client ID
 		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $data["new"]["sys_groupid"]);
 		$client_id = intval($client["client_id"]);
@@ -123,7 +123,7 @@ class cron_plugin {
 			$app->system->exec_safe("useradd -d ? -g ? ? -s /bin/false", $parent_domain["document_root"], $groupname, $username);
 			$app->log("Adding the user: $username", LOGLEVEL_DEBUG);
 		}
-        
+
         // Set the quota for the user
         if($username != '' && $app->system->is_user($username)) {
            if($parent_domain['hd_quota'] > 0) {
@@ -144,7 +144,7 @@ class cron_plugin {
               $app->system->exec_safe('setquota -u ? ? ? 0 0 -a &> /dev/null', $username, $blocks_soft, $blocks_hard);
               $app->system->exec_safe('setquota -T -u ? 604800 604800 -a &> /dev/null', $username);
             } elseif ($file_system == 'xfs') {
-                
+
               $app->system->exec_safe("xfs_quota -x -c ? ?", "limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " $username", $primitive_root);
 
               // xfs only supports timers globally, not per user.
@@ -177,21 +177,23 @@ class cron_plugin {
 	}
 
 	function delete($event_name, $data) {
-		global $app, $conf;
+		global $app;
 
 		//* get data from web
 		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `hd_quota` FROM `web_domain` WHERE `domain_id` = ?", $data["old"]["parent_domain_id"]);
-		if(!$parent_domain["domain_id"]) {
-			$app->log("Parent domain not found", LOGLEVEL_WARN);
-			return 0;
-		}
-
-		// Get the client ID
-		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $data["old"]["sys_groupid"]);
-		$client_id = intval($client["client_id"]);
-		unset($client);
 
-		$this->parent_domain = $parent_domain;
+		if(!$parent_domain) {
+			$tmp = $app->db->queryOneRecord('SELECT * FROM sys_datalog WHERE dbtable = ? AND dbidx = ? AND `action` = ? ORDER BY `datalog_id` DESC', 'web_domain', 'domain_id:' . $data['old']['parent_domain_id'], 'd');
+			$tmp = unserialize($tmp);
+			if($tmp && isset($tmp['old'])) {
+				$this->parent_domain = $tmp['old'];
+			} else {
+				$app->log("Parent domain not found", LOGLEVEL_WARN);
+				return 0;
+			}
+		} else {
+			$this->parent_domain = $parent_domain;
+		}
 		$this->_write_crontab();
 	}
 
@@ -223,18 +225,18 @@ class cron_plugin {
 				} else {
 					$cron_line = str_replace(" ", "", $job['run_min']) . "\t" . str_replace(" ", "", $job['run_hour']) . "\t" . str_replace(" ", "", $job['run_mday']) . "\t" . str_replace(" ", "", $job['run_month']) . "\t" . str_replace(" ", "", $job['run_wday']);
 				}
-				
+
 				$log_target = "";
 				$log_wget_target = '/dev/null';
 				$log_root = '';
 				if($job['log'] == 'y') {
 					if($job['type'] != 'chrooted') $log_root = $this->parent_domain['document_root'];
 					$log_root .= '/private';
-					
+
 					$log_target = '>>' . $log_root . '/cron.log 2>>' . $log_root . '/cron_error.log';
 					$log_wget_target = $log_root . '/cron_wget.log';
 				}
-				
+
 				$cron_line .= "\t{$this->parent_domain['system_user']}"; //* running as user
 				if($job['type'] == 'url') {
 					$cron_line .= "\t{$cron_config['wget']} --no-check-certificate --user-agent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' -q -t 1 -T 7200 -O " . $log_wget_target . " " . escapeshellarg($job['command']) . " " . $log_target;
@@ -243,7 +245,7 @@ class cron_plugin {
 						$app->log("Insecure Cron job SKIPPED: " . $job['command'], LOGLEVEL_WARN);
 						continue;
 					}
-					
+
 					$web_root = '';
 					if($job['type'] == 'chrooted') {
 						if(substr($job['command'], 0, strlen($this->parent_domain['document_root'])) == $this->parent_domain['document_root']) {
@@ -253,7 +255,7 @@ class cron_plugin {
 					} else {
 						$web_root = $this->parent_domain['document_root'];
 					}
-					
+
 					$web_root .= '/web';
 					$job['command'] = str_replace('[web_root]', $web_root, $job['command']);
 
-- 
GitLab


From 6891708d85596e2f568c81327d67f261d923053e Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 24 Jul 2020 12:16:04 +0200
Subject: [PATCH 513/571] - nginx/apache directives are missing default value

---
 install/sql/incremental/upd_dev_collection.sql             | 3 +++
 install/sql/ispconfig3.sql                                 | 4 ++--
 server/plugins-available/apache2_plugin.inc.php            | 5 +++++
 server/plugins-available/nginx_plugin.inc.php              | 3 +++
 server/plugins-available/nginx_reverseproxy_plugin.inc.php | 4 +++-
 5 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 1c4bd539d9..1aaf51cd2a 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -44,3 +44,6 @@ ALTER TABLE `web_domain` DROP COLUMN `enable_spdy`;
 
 -- was missing in incremental, inserted for fixing older installations
 ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
+
+ALTER TABLE `web_domain` CHANGE `apache_directives` `apache_directives` mediumtext NULL DEFAULT NULL;
+ALTER TABLE `web_domain` CHANGE `nginx_directives` `nginx_directives` mediumtext NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index cdf85d7443..3f6f04ace7 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2046,8 +2046,8 @@ CREATE TABLE `web_domain` (
   `stats_password` varchar(255) default NULL,
   `stats_type` varchar(255) default 'awstats',
   `allow_override` varchar(255) NOT NULL default 'All',
-  `apache_directives` mediumtext,
-  `nginx_directives` mediumtext,
+  `apache_directives` mediumtext NULL DEFAULT NULL,
+  `nginx_directives` mediumtext NULL DEFAULT NULL,
   `php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'y',
   `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n',
   `pm` enum('static','dynamic','ondemand') NOT NULL DEFAULT 'ondemand',
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index cf58ed8a20..aab3986376 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1186,6 +1186,11 @@ class apache2_plugin {
 				$vhost_data['apache_directives'] = $snippet['snippet'];
 			}
 		}
+
+		if(!$vhost_data['apache_directives']) {
+			$vhost_data['apache_directives'] = ''; // ensure it is not null
+		}
+
 		// Make sure we only have Unix linebreaks
 		$vhost_data['apache_directives'] = str_replace("\r\n", "\n", $vhost_data['apache_directives']);
 		$vhost_data['apache_directives'] = str_replace("\r", "\n", $vhost_data['apache_directives']);
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index f7f93b4be5..dd9316c926 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1200,6 +1200,9 @@ class nginx_plugin {
 			$nginx_directives = $data['new']['nginx_directives'];
 //			$vhost_data['enable_pagespeed'] = false;
 		}
+		if(!$nginx_directives) {
+			$nginx_directives = ''; // ensure it is not null
+		}
 
 		// folder_directive_snippets
 		if(trim($data['new']['folder_directive_snippets']) != ''){
diff --git a/server/plugins-available/nginx_reverseproxy_plugin.inc.php b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
index 1013042254..f35f40d34a 100644
--- a/server/plugins-available/nginx_reverseproxy_plugin.inc.php
+++ b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
@@ -111,7 +111,9 @@ class nginx_reverseproxy_plugin {
 		$crt_file = $ssl_dir.'/'.$domain.'.crt';
 		$bundle_file = $ssl_dir.'/'.$domain.'.bundle';
 
-		$vhost_data['nginx_directives'] = preg_replace("/\[IP\]/", $vhost_data['ip_address'], $vhost_data['nginx_directives']);
+		if($vhost_data['nginx_directives']) {
+			$vhost_data['nginx_directives'] = preg_replace("/\[IP\]/", $vhost_data['ip_address'], $vhost_data['nginx_directives']);
+		}
 
 
 		if($data['new']['ssl'] == 'y' && @is_file($crt_file) && @is_file($key_file)) {
-- 
GitLab


From cb4ddc318c00e4576b07f8245e40b9b2879c1d4b Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 24 Jul 2020 12:47:43 +0200
Subject: [PATCH 514/571] - added blacklisted paths

---
 interface/lib/classes/system.inc.php | 2 +-
 server/lib/classes/system.inc.php    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index 8c3decfd5c..d6b0ef149e 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -68,7 +68,7 @@ class system {
 	}
 
 	public function is_blacklisted_web_path($path) {
-		$blacklist = array('bin', 'cgi-bin', 'dev', 'etc', 'home', 'lib', 'lib64', 'log', 'ssl', 'usr', 'var');
+		$blacklist = array('bin', 'cgi-bin', 'dev', 'etc', 'home', 'lib', 'lib64', 'log', 'ssl', 'usr', 'var', 'proc', 'net', 'sys', 'srv', 'sbin', 'run');
 
 		$path = ltrim($path, '/');
 		$parts = explode('/', $path);
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 71b901d920..e0699a7f82 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1788,7 +1788,7 @@ class system{
 	}
 
 	public function is_blacklisted_web_path($path) {
-		$blacklist = array('bin', 'cgi-bin', 'dev', 'etc', 'home', 'lib', 'lib64', 'log', 'ssl', 'usr', 'var');
+		$blacklist = array('bin', 'cgi-bin', 'dev', 'etc', 'home', 'lib', 'lib64', 'log', 'ssl', 'usr', 'var', 'proc', 'net', 'sys', 'srv', 'sbin', 'run');
 
 		$path = ltrim($path, '/');
 		$parts = explode('/', $path);
-- 
GitLab


From cefa5f09e45d64b8206aa93391ecb1d6b971e482 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 24 Jul 2020 11:12:09 -0600
Subject: [PATCH 515/571] simplify query, escape regex special chars

---
 install/tpl/mysql-virtual_outgoing_bcc.cf.master | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
index bea39f8451..eafd098a3f 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -3,14 +3,14 @@ password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
 query = SELECT sender_cc FROM (
-            SELECT @num_sender_cc := 1 + LENGTH(sender_cc) - LENGTH(REPLACE(sender_cc, ',', '')) AS num_sender_cc,
-                   SUBSTRING_INDEX(sender_cc, ',', 1) AS sender_cc
+            SELECT SUBSTRING_INDEX(sender_cc, ',', 1) AS sender_cc
               FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
             UNION
-            SELECT @num_sender_cc := 1 + LENGTH(u.sender_cc) - LENGTH(REPLACE(u.sender_cc, ',', '')) AS num_sender_cc,
-                   SUBSTRING_INDEX(u.sender_cc, ',', 1) AS sender_cc
+            SELECT SUBSTRING_INDEX(u.sender_cc, ',', 1) AS sender_cc
               FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*', u.email, '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*',
+                                                REPLACE( REPLACE(u.email, '+', '\\+'), '.', '\\.' ),
+                                                '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
                AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
                AND f.source = '%s' AND f.allow_send_as = 'y' AND f.active = 'y' AND f.server_id = {server_id}
         ) table1 WHERE sender_cc != '' LIMIT 1
-- 
GitLab


From acdbd68bfffc965a64b8a82d23e40ff1fde56d49 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 21 Jul 2020 16:54:02 -0600
Subject: [PATCH 516/571] select Move to Junk before/after custom filters

---
 .../sql/incremental/upd_dev_collection.sql    |  5 +-
 install/sql/ispconfig3.sql                    |  2 +-
 install/tpl/debian6_dovecot.conf.master       |  3 +-
 install/tpl/debian6_dovecot2.conf.master      |  3 +-
 install/tpl/debian_dovecot.conf.master        |  3 +-
 install/tpl/debian_dovecot2.conf.master       |  3 +-
 install/tpl/fedora_dovecot.conf.master        |  3 +-
 install/tpl/fedora_dovecot2.conf.master       |  3 +-
 install/tpl/opensuse_dovecot.conf.master      |  3 +-
 install/tpl/opensuse_dovecot2.conf.master     |  3 +-
 interface/web/admin/server_config_edit.php    |  5 +-
 interface/web/mail/form/mail_user.tform.php   |  6 +--
 interface/web/mail/lib/lang/ar_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/bg_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/br_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/ca_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/cz_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/de_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/dk_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/el_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/en_mail_user.lng  |  5 +-
 interface/web/mail/lib/lang/es_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/fi_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/fr_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/hr_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/hu_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/id_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/it_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/ja_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/nl_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/pl_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/pt_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/ro_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/ru_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/se_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/sk_mail_user.lng  |  3 ++
 interface/web/mail/lib/lang/tr_mail_user.lng  |  3 ++
 .../templates/mail_user_mailfilter_edit.htm   |  5 +-
 remoting_client/API-docs/mail_user_add.html   |  2 +-
 .../API-docs/mail_user_update.html            |  2 +-
 server/conf/sieve_filter.master               |  9 ++++
 server/conf/sieve_filter_1.2.master           |  9 ++++
 .../maildeliver_plugin.inc.php                | 51 ++++++++++++-------
 .../plugins-available/maildrop_plugin.inc.php |  2 +-
 44 files changed, 162 insertions(+), 37 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 1aaf51cd2a..abe2a8a1a1 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -46,4 +46,7 @@ ALTER TABLE `web_domain` DROP COLUMN `enable_spdy`;
 ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
 
 ALTER TABLE `web_domain` CHANGE `apache_directives` `apache_directives` mediumtext NULL DEFAULT NULL;
-ALTER TABLE `web_domain` CHANGE `nginx_directives` `nginx_directives` mediumtext NULL DEFAULT NULL;
\ No newline at end of file
+ALTER TABLE `web_domain` CHANGE `nginx_directives` `nginx_directives` mediumtext NULL DEFAULT NULL;
+
+-- add move to junk before/after option, default to after
+ALTER TABLE `mail_user` MODIFY `move_junk` enum('y','a','n') NOT NULL DEFAULT 'a';
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 3f6f04ace7..bacf075baa 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1046,7 +1046,7 @@ CREATE TABLE `mail_user` (
   `autoresponder_end_date` datetime NULL default NULL,
   `autoresponder_subject` varchar(255) NOT NULL default 'Out of office reply',
   `autoresponder_text` mediumtext NULL,
-  `move_junk` enum('n','y') NOT NULL default 'n',
+  `move_junk` enum('y','a','n') NOT NULL default 'a',
   `purge_trash_days` INT NOT NULL DEFAULT '0',
   `purge_junk_days` INT NOT NULL DEFAULT '0',
   `custom_mailfilter` mediumtext,
diff --git a/install/tpl/debian6_dovecot.conf.master b/install/tpl/debian6_dovecot.conf.master
index a112712690..cf9e85f3b3 100644
--- a/install/tpl/debian6_dovecot.conf.master
+++ b/install/tpl/debian6_dovecot.conf.master
@@ -60,7 +60,8 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
-  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index a1810ab509..ead02a68c7 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -29,7 +29,8 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
-  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/debian_dovecot.conf.master b/install/tpl/debian_dovecot.conf.master
index f91959a1f5..2bba3fa985 100644
--- a/install/tpl/debian_dovecot.conf.master
+++ b/install/tpl/debian_dovecot.conf.master
@@ -1145,7 +1145,8 @@ plugin {
   # and they're not deleted automatically (use a cronjob or something).
   #lazy_expunge = .EXPUNGED/ .DELETED/ .DELETED/.EXPUNGED/
 
-  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index 88d6a1b924..c71f683e96 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -28,7 +28,8 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
-  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/fedora_dovecot.conf.master b/install/tpl/fedora_dovecot.conf.master
index e687954986..405a723a55 100644
--- a/install/tpl/fedora_dovecot.conf.master
+++ b/install/tpl/fedora_dovecot.conf.master
@@ -1306,7 +1306,8 @@ plugin {
   # ManageSieve this is where the uploaded scripts are stored.
   sieve_dir=~/sieve
 
-  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 9ec150ce49..312654732c 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -26,7 +26,8 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
-  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/opensuse_dovecot.conf.master b/install/tpl/opensuse_dovecot.conf.master
index 1eacf4c3a3..a6ed0ab71f 100644
--- a/install/tpl/opensuse_dovecot.conf.master
+++ b/install/tpl/opensuse_dovecot.conf.master
@@ -1280,7 +1280,8 @@ plugin {
   # ManageSieve this is where the uploaded scripts are stored.
   sieve_dir=~/sieve
 
-  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 070590181b..da716c6dfc 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -25,7 +25,8 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
-  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index cca5d702d3..5214d14037 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -192,10 +192,11 @@ class page_action extends tform_actions {
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
 							$mail_user['autoresponder'] = 'y';
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
-						} elseif($mail_user['move_junk'] == 'y') {
+						} elseif($mail_user['move_junk'] != 'n') {
+							$save = $mail_user['move_junk'];
 							$mail_user['move_junk'] = 'n';
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
-							$mail_user['move_junk'] = 'y';
+							$mail_user['move_junk'] = $save;
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
 						} else {
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 8fb6c4a692..0bef9d979f 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -402,9 +402,9 @@ if ($global_config['mail']['mailbox_show_mail_filter_tab'] === 'y') {
 			//#################################
 			'move_junk' => array (
 				'datatype' => 'VARCHAR',
-				'formtype' => 'CHECKBOX',
-				'default' => 'n',
-				'value'  => array(0 => 'n', 1 => 'y')
+				'formtype' => 'SELECT',
+				'default' => 'a',
+				'value' => array('y' => 'move_junk_y_txt', 'a' => 'move_junk_a_txt', 'n' => 'move_junk_n_txt'),
 			),
 			'purge_trash_days' => array (
 				'datatype' => 'VARCHAR',
diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index 9d4828b557..702725959d 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -31,6 +31,9 @@ $wb['disablepop3_txt'] = 'Disable POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
 $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 1b9595da42..49be467e91 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -31,6 +31,9 @@ $wb['autoresponder_start_date_ispast'] = 'Датата на старта нем
 $wb['autoresponder_end_date_txt'] = 'Край на';
 $wb['autoresponder_end_date_isgreater'] = 'датата на края неможе да бъде преди датата за старт.';
 $wb['move_junk_txt'] = 'Премести СПАМ пощата в Директорията Боклуци';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Реално име ';
 $wb['name_optional_txt'] = '(По желание)';
 $wb['autoresponder_active'] = 'Разреши автоматичен отговор';
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index 2abe1931f6..8f02122ade 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -36,6 +36,9 @@ $wb['disablepop3_txt'] = 'Desabilitar POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Já existe um alias ou encaminhamento para este endereço de e-mail.';
 $wb['quota_error_value'] = 'Valor da cota é inválido. Valores permitidos são: 0 para ilimitado ou números > 1.';
 $wb['move_junk_txt'] = 'Mover e-mails marcados como spam para o diretório junk.';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Nome';
 $wb['name_optional_txt'] = '(Opcional)';
 $wb['autoresponder_active'] = 'Habilitar auto-resposta';
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index 08c9bc78ec..259c357671 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -30,6 +30,9 @@ $wb['autoresponder_end_date_txt'] = 'Terminer le';
 $wb['autoresponder_end_date_isgreater'] = 'La date de fin doit être saisie et doit être ultérieure à la date de début.';
 $wb['quota_error_value'] = 'Valeur de quota invalide. Les valeurs de quota autorisées sont : 0 pour illimité ou nombres > 1';
 $wb['move_junk_txt'] = 'Déplacer le spam vers le dossier Junk';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Nom véritable';
 $wb['name_optional_txt'] = '(Optionnel)';
 $wb['autoresponder_active'] = 'Activer le répondeur automatique';
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index fb09f0c0a0..72ebc26a4b 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -30,6 +30,9 @@ $wb['disablepop3_txt'] = 'Zakázat POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Alias nebo přesměrování s touto adresou již existuje.';
 $wb['quota_error_value'] = 'Chybná hodnota kvóty. Povolené hodnoty jsou: 0 pro neomezeno nebo čísla > 1';
 $wb['move_junk_txt'] = 'Přesunout e-maily detekované jako spam do adresáře Junk';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Skutečné jméno';
 $wb['name_optional_txt'] = '(volitelné)';
 $wb['autoresponder_active'] = 'Povolit automatický odpovídač';
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index e653fbe288..79834d9a5c 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -34,6 +34,9 @@ $wb['autoresponder_start_date_ispast'] = 'Startdatum kann nicht in der Vergangen
 $wb['autoresponder_end_date_txt'] = 'Endet am';
 $wb['autoresponder_end_date_isgreater'] = 'Enddatum muss angegeben werden und muss später als das Startdatum sein.';
 $wb['move_junk_txt'] = 'Spam E-Mails in das Junk Verzeichnis verschieben';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Name';
 $wb['name_optional_txt'] = '(optional)';
 $wb['autoresponder_active'] = 'Autoresponder aktivieren';
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index 34bf076359..cf29a97137 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -33,6 +33,9 @@ $wb['disablepop3_txt'] = 'Deaktiver POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Der er allerede et alias eller forward for denne e-mail adresse.';
 $wb['quota_error_value'] = 'Ugyldig kvote værdi. Tilladte værdier er: 0 for ubegrænset eller tal > 1';
 $wb['move_junk_txt'] = 'Flyt Spam E-mails til Junk mappe.';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Navn';
 $wb['name_optional_txt'] = '(Valgfri)';
 $wb['autoresponder_active'] = 'Aktiver autosvarer';
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index 76c266d591..0f424c0099 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -31,6 +31,9 @@ $wb['disablepop3_txt'] = 'Απενεργοποίηση POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Υπάρχει ήδη ένα ψευδωνύμο ή μία προώθηση με αυτή τη διεύθυνση email.';
 $wb['quota_error_value'] = 'Μη έγκυρη τιμή ορίου χώρου. Επιτρεπόμενες τιμές είναι: 0 για απεριόριστο ή αριθμοί > 1';
 $wb['move_junk_txt'] = 'Μετακίνηση των Spam Emails στο φάκελο Junk';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Πραγματικό Όνομα';
 $wb['name_optional_txt'] = '(Προαιρετικό)';
 $wb['autoresponder_active'] = 'Ενεργοποίηση αυτόματης απάντησης';
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 69ac0a00a9..7b98e593c8 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -35,7 +35,10 @@ $wb["disableimap_txt"] = 'Disable IMAP';
 $wb["disablepop3_txt"] = 'Disable POP3';
 $wb["duplicate_alias_or_forward_txt"] = 'There is already an alias or forward with this email address.';
 $wb["quota_error_value"] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
-$wb["move_junk_txt"] = 'Move Spam Emails to Junk directory.';
+$wb["move_junk_txt"] = 'Move Spam Emails to Junk folder.';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb["name_txt"] = 'Name';
 $wb["name_optional_txt"] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index be329c304a..676dd45c22 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -40,6 +40,9 @@ $wb['login_txt'] = 'Iniciar Sesión';
 $wb['maildir_txt'] = 'Dirección de correo';
 $wb['monthly_backup_txt'] = 'Mensualmente';
 $wb['move_junk_txt'] = 'Mover correo basura (spam) a la carpeta Basura (Junk).';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_optional_txt'] = '(Opcional)';
 $wb['name_txt'] = 'Nombre';
 $wb['no_backup_txt'] = 'Sin copia de seguridad';
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index 45ea1d9b8b..97bddeddc7 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -31,6 +31,9 @@ $wb['autoresponder_start_date_ispast'] = 'Aloituspäivä ei voi olla menneisyyde
 $wb['autoresponder_end_date_txt'] = 'Lopetuspäivä';
 $wb['autoresponder_end_date_isgreater'] = 'Lopetuspäivän pitää olla myöhempi kuin aloituspäivä.';
 $wb['move_junk_txt'] = 'Siirrä roskapostit Junk-kansioon';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Oikea nimi';
 $wb['name_optional_txt'] = '(Valinnainen)';
 $wb['autoresponder_active'] = 'Ota lomavastaaja käyttöön';
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 8df58233a3..4871865ae8 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -30,6 +30,9 @@ $wb['autoresponder_end_date_txt'] = 'Terminer le';
 $wb['autoresponder_end_date_isgreater'] = 'La date de fin doit être saisie et doit être ultérieure à la date de début.';
 $wb['quota_error_value'] = 'Valeur de quota invalide. Les valeurs de quota autorisées sont : 0 pour illimité ou nombres > 1';
 $wb['move_junk_txt'] = 'Déplacer le spam vers le dossier Junk';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Nom véritable';
 $wb['name_optional_txt'] = '(Optionnel)';
 $wb['autoresponder_active'] = 'Activer le répondeur automatique';
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 170aaa6b61..34c41a827e 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -31,6 +31,9 @@ $wb['disablepop3_txt'] = 'Disable POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forward with this email address.';
 $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index 65962cd21c..58a4416cb2 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -32,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
 $wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Név';
 $wb['name_optional_txt'] = '(Opcionális)';
 $wb['autoresponder_active'] = 'Automatikus válasz engedélyezése';
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index 3bedbd9b93..87be369635 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -32,6 +32,9 @@ $wb['disablepop3_txt'] = 'Nonaktifkan POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Sudah ada alias atau forward untuk alamat email ini.';
 $wb['quota_error_value'] = 'Nilai kuota tidak valid. Nilai yang diperbolehkan adalah: 0 untuk tak terbatas atau angka > 1';
 $wb['move_junk_txt'] = 'Pindahkan Email Spam ke direktori Junk';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Nama Lengkap';
 $wb['name_optional_txt'] = '(Opsional)';
 $wb['autoresponder_active'] = 'Aktifkan Penjawab Otomatis';
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index a1a0f8cfd5..6dffeddb91 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -31,6 +31,9 @@ $wb['autoresponder_start_date_ispast'] = 'La data di avvio no può essere anterg
 $wb['autoresponder_end_date_txt'] = 'Termina il';
 $wb['autoresponder_end_date_isgreater'] = 'La data termine deve essere impostata e successiva al giorno di inizio.';
 $wb['move_junk_txt'] = 'Sposta Email di Spam nella cartella di spam Junk';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Nome vero';
 $wb['name_optional_txt'] = '(Opzionale)';
 $wb['autoresponder_active'] = 'Abilita autorisponditore';
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index b58b9d13dd..1b36502b74 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -32,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
 $wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 9a644a129b..37e8c8638b 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -31,6 +31,9 @@ $wb['disablepop3_txt'] = 'Uitschakelen POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Er is al een alias of forward met dir e-mailadres.';
 $wb['quota_error_value'] = 'Ongeldige quota waarde. Toegestane waarden zijn: 0 = ongelimiteerd of nummerieke waarde > 1';
 $wb['move_junk_txt'] = 'Verplaats SPAM e-mails naar junk folder';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Echte naam';
 $wb['name_optional_txt'] = '(Optioneel)';
 $wb['autoresponder_active'] = 'Inschakelen autobeantwoorden';
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index 593f83531e..889700cddd 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -32,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'Data uruchomienia nie może być w prz
 $wb['autoresponder_end_date_txt'] = 'Zakończ do';
 $wb['autoresponder_end_date_isgreater'] = 'Data zakończenia musi być późniejsza od daty rozpoczęcia';
 $wb['move_junk_txt'] = 'PrzenoÅ› SPAM do folderu Junk';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Nazwa rzeczywista';
 $wb['name_optional_txt'] = '(Opcjonalnie)';
 $wb['autoresponder_active'] = 'Uruchom autorespondera';
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index 0b7ffe3d37..6c715d52e2 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -32,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'A data de ínicio não pode estar no p
 $wb['autoresponder_end_date_txt'] = 'Termino:';
 $wb['autoresponder_end_date_isgreater'] = 'A data de início deve ser menor que a data de termino.';
 $wb['move_junk_txt'] = 'Mover Spam para a pasta JUNK';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index 97dfdafd88..ee1b6b980c 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -32,6 +32,9 @@ $wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later tha
 $wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
 $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index 07bab6fd4f..6935ecd8e2 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -32,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'Дата запуска не може
 $wb['autoresponder_end_date_txt'] = 'Останавливать';
 $wb['autoresponder_end_date_isgreater'] = 'Дата окончания должна быть позже даты запуска.';
 $wb['move_junk_txt'] = 'Перемещать спам в каталог Junk';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Реальное имя';
 $wb['name_optional_txt'] = '(Опционально)';
 $wb['autoresponder_active'] = 'Включить автоответчик';
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index da0282e118..22c5b0fe45 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -32,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'Startdatum kan inte vara i det förflu
 $wb['autoresponder_end_date_txt'] = 'Sluta den';
 $wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
 $wb['move_junk_txt'] = 'FLytta spamepost till spammappen';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Riktigt namn';
 $wb['name_optional_txt'] = '(Frivilligt)';
 $wb['autoresponder_active'] = 'Aktivera autosvaret';
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index d9a68404ae..258e8f6128 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -32,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
 $wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 9e964e5e8a..a1ed0128f3 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -36,6 +36,9 @@ $wb['disablepop3_txt'] = 'POP3 Kullanılmasın';
 $wb['duplicate_alias_or_forward_txt'] = 'Bu e-posta adresi zaten takma ya da yönlendirilmiş.';
 $wb['quota_error_value'] = 'Kota değeri geçersiz. Değer sınırsız için 0 ya da 1 değerinden büyük olmalı';
 $wb['move_junk_txt'] = 'Önemsiz İletiler Junk Klasörüne Taşınsın';
+$wb["move_junk_y_txt"] = 'Move first, before custom filters.';
+$wb["move_junk_a_txt"] = 'Move last, after custom filters.';
+$wb["move_junk_n_txt"] = 'Do not move Spam Emails to Junk folder.';
 $wb['name_txt'] = 'Ad';
 $wb['name_optional_txt'] = '(İsteğe bağlı)';
 $wb['autoresponder_active'] = 'Otoyanıtlayıcı kullanılsın';
diff --git a/interface/web/mail/templates/mail_user_mailfilter_edit.htm b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
index 4c7058292e..8d14eb4ee6 100644
--- a/interface/web/mail/templates/mail_user_mailfilter_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
@@ -1,6 +1,9 @@
 <div class="form-group">
 	<label class="col-sm-3 control-label">{tmpl_var name='move_junk_txt'}</label>
-	<div class="col-sm-9">{tmpl_var name='move_junk'}</div>
+	<div class="col-sm-9"><select name="move_junk" id="move_junk" class="form-control">
+	    {tmpl_var name='move_junk'}
+	</select></div>
+
 </div>
 
 <div class="form-group">
diff --git a/remoting_client/API-docs/mail_user_add.html b/remoting_client/API-docs/mail_user_add.html
index a893e24e3f..dab2835057 100644
--- a/remoting_client/API-docs/mail_user_add.html
+++ b/remoting_client/API-docs/mail_user_add.html
@@ -38,7 +38,7 @@
 <p class="margin"> autoresponder_end_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_text&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> autoresponder_subject&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
-<p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('y','a','n')</span>)</p>
 <p class="margin"> custom_mailfilter&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> postfix&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> access&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
diff --git a/remoting_client/API-docs/mail_user_update.html b/remoting_client/API-docs/mail_user_update.html
index 8cb900fb40..d30b932393 100644
--- a/remoting_client/API-docs/mail_user_update.html
+++ b/remoting_client/API-docs/mail_user_update.html
@@ -36,7 +36,7 @@
 <p class="margin"> autoresponder_start_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_end_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_text&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
-<p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('y','a','n')</span>)</p>
 <p class="margin"> custom_mailfilter&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> postfix&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> access&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master
index f72cd11d1f..6b83c26394 100644
--- a/server/conf/sieve_filter.master
+++ b/server/conf/sieve_filter.master
@@ -23,6 +23,15 @@ if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes",
 
 keep;
 
+<tmpl_if name="move_junk" op="==" value="a">
+# Move spam to spam folder
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
+  fileinto "Junk";
+  # Stop here so that we do not reply on spams
+  stop;
+}
+</tmpl_if>
+
 <tmpl_if name="autoresponder" op="==" value="y">
 #################################################################
 # Autoreply
diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master
index edd4060b9f..3a8695b1a6 100644
--- a/server/conf/sieve_filter_1.2.master
+++ b/server/conf/sieve_filter_1.2.master
@@ -23,6 +23,15 @@ redirect "<tmpl_var name='address'>";
 
 keep;
 
+<tmpl_if name="move_junk" op="==" value="a">
+# Move spam to spam folder
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
+  fileinto "Junk";
+  # Stop here so that we do not reply on spams
+  stop;
+}
+</tmpl_if>
+
 <tmpl_if name="autoresponder" op="==" value="y">
 #################################################################
 # Autoreply
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index 9c9939655c..05ee88e777 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -100,14 +100,18 @@ class maildeliver_plugin {
 			$sieve_file = $data["new"]["maildir"].'/.sieve';
 			$sieve_file_svbin = $data["new"]["maildir"].'/.sieve.svbin';
 			$old_sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
-			$sieve_file_isp = $data["new"]["maildir"].'/.ispconfig.sieve';
-			$sieve_file_isp_svbin = $data["new"]["maildir"].'/.ispconfig.svbin';
+			$sieve_file_isp_before = $data["new"]["maildir"].'/.ispconfig-before.sieve';
+			$sieve_file_isp_before_svbin = $data["new"]["maildir"].'/.ispconfig-before.svbin';
+			$sieve_file_isp_after = $data["new"]["maildir"].'/.ispconfig-after.sieve';
+			$sieve_file_isp_after_svbin = $data["new"]["maildir"].'/.ispconfig-after.svbin';
 			if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp)  or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
 			// cleanup .sieve file if it is now a broken link
 			if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
 			if(is_file($sieve_file_svbin)) unlink($sieve_file_svbin)  or $app->log("Unable to delete file: $sieve_file_svbin", LOGLEVEL_WARN);
-			if(is_file($sieve_file_isp)) unlink($sieve_file_isp)  or $app->log("Unable to delete file: $sieve_file_isp", LOGLEVEL_WARN);
-			if(is_file($sieve_file_isp_svbin)) unlink($sieve_file_isp_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_svbin", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_before)) unlink($sieve_file_isp_before)  or $app->log("Unable to delete file: $sieve_file_isp_before", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_before_svbin)) unlink($sieve_file_isp_before_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_before_svbin", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_after)) unlink($sieve_file_isp_after)  or $app->log("Unable to delete file: $sieve_file_isp_after", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_after_svbin)) unlink($sieve_file_isp_after_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_after_svbin", LOGLEVEL_WARN);
 			$app->load('tpl');
 
 			//* Select sieve filter file for dovecot version
@@ -224,15 +228,24 @@ class maildeliver_plugin {
 				$app->system->mkdirpath($data["new"]["maildir"].'/sieve/', 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
 			}
 
-			file_put_contents($sieve_file_isp, $tpl->grab()) or $app->log("Unable to write sieve filter file", LOGLEVEL_WARN);
-			if ( is_file($sieve_file_isp) ) {
-				$app->system->chown($sieve_file_isp,$mail_config['mailuser_name'],false);
-				$app->system->chgrp($sieve_file_isp,$mail_config['mailuser_group'],false);
-
-				$app->system->exec_safe("sievec ?", "$sieve_file_isp");
-				if ( is_file($sieve_file_isp_svbin) ) {
-					$app->system->chown($sieve_file_isp_svbin,$mail_config['mailuser_name'],false);
-					$app->system->chgrp($sieve_file_isp_svbin,$mail_config['mailuser_group'],false);
+			if ($data["new"]["move_junk"] == "y") {
+				$sieve_file_isp = $sieve_file_isp_before;
+				$sieve_file_isp_svbin = $sieve_file_isp_before_svbin;
+			} elseif ($data["new"]["move_junk"] == "a") {
+				$sieve_file_isp = $sieve_file_isp_after;
+				$sieve_file_isp_svbin = $sieve_file_isp_after_svbin;
+			}
+			if (isset($sieve_file_isp)) {
+				file_put_contents($sieve_file_isp, $tpl->grab()) or $app->log("Unable to write sieve filter file", LOGLEVEL_WARN);
+				if ( is_file($sieve_file_isp) ) {
+					$app->system->chown($sieve_file_isp,$mail_config['mailuser_name'],false);
+					$app->system->chgrp($sieve_file_isp,$mail_config['mailuser_group'],false);
+
+					$app->system->exec_safe("sievec ?", "$sieve_file_isp");
+					if ( is_file($sieve_file_isp_svbin) ) {
+						$app->system->chown($sieve_file_isp_svbin,$mail_config['mailuser_name'],false);
+						$app->system->chgrp($sieve_file_isp_svbin,$mail_config['mailuser_group'],false);
+					}
 				}
 			}
 
@@ -247,14 +260,18 @@ class maildeliver_plugin {
 		$sieve_file = $data["old"]["maildir"].'/.sieve';
 		$sieve_file_svbin = $data["old"]["maildir"].'/.sieve.svbin';
 		$old_sieve_file_isp = $data["old"]["maildir"].'/sieve/ispconfig.sieve';
-		$sieve_file_isp = $data["old"]["maildir"].'/.ispconfig.sieve';
-		$sieve_file_isp_svbin = $data["old"]["maildir"].'/.ispconfig.svbin';
+		$sieve_file_isp_before = $data["old"]["maildir"].'/.ispconfig-before.sieve';
+		$sieve_file_isp_before_svbin = $data["old"]["maildir"].'/.ispconfig-before.svbin';
+		$sieve_file_isp_after = $data["old"]["maildir"].'/.ispconfig-after.sieve';
+		$sieve_file_isp_after_svbin = $data["old"]["maildir"].'/.ispconfig-after.svbin';
 		if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp)  or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
 		// cleanup .sieve file if it is now a broken link
 		if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
 		if(is_file($sieve_file_svbin)) unlink($sieve_file_svbin)  or $app->log("Unable to delete file: $sieve_file_svbin", LOGLEVEL_WARN);
-		if(is_file($sieve_file_isp)) unlink($sieve_file_isp)  or $app->log("Unable to delete file: $sieve_file_isp", LOGLEVEL_WARN);
-		if(is_file($sieve_file_isp_svbin)) unlink($sieve_file_isp_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_svbin", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_before)) unlink($sieve_file_isp_before)  or $app->log("Unable to delete file: $sieve_file_isp_before", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_before_svbin)) unlink($sieve_file_isp_before_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_before_svbin", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_after)) unlink($sieve_file_isp_after)  or $app->log("Unable to delete file: $sieve_file_isp_after", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_after_svbin)) unlink($sieve_file_isp_after_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_after_svbin", LOGLEVEL_WARN);
 	}
 
 
diff --git a/server/plugins-available/maildrop_plugin.inc.php b/server/plugins-available/maildrop_plugin.inc.php
index 2fefa26cfc..93bd29f338 100644
--- a/server/plugins-available/maildrop_plugin.inc.php
+++ b/server/plugins-available/maildrop_plugin.inc.php
@@ -204,7 +204,7 @@ class maildrop_plugin {
 					$app->log("Added CC address ".$data["new"]["cc"].' to mailfilter file.', LOGLEVEL_DEBUG);
 				}
 
-				if($data["new"]["move_junk"] == 'y') {
+				if($data["new"]["move_junk"] != 'n') {
 					if(file_exists($conf["rootpath"].'/conf-custom/mailfilter_move_junk.master')) {
 						$mailfilter_content .= file_get_contents($conf["rootpath"].'/conf-custom/mailfilter_move_junk.master')."\n";
 					} else {
-- 
GitLab


From 74196ba1859f955242b8d2fd120744a8ccdcc251 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 22 Jul 2020 12:52:42 -0600
Subject: [PATCH 517/571] always write before/after sieve scripts, and
 autoresponder dates optional

---
 .../sql/incremental/upd_dev_collection.sql    |   2 +-
 install/sql/ispconfig3.sql                    |   2 +-
 .../classes/validate_autoresponder.inc.php    |  20 +-
 interface/web/mail/form/mail_user.tform.php   |   6 +-
 interface/web/mail/lib/lang/ar_mail_user.lng  |   3 +-
 interface/web/mail/lib/lang/bg_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/br_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/ca_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/cz_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/de_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/dk_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/el_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/en_mail_user.lng  |   3 +-
 interface/web/mail/lib/lang/es_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/fi_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/fr_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/hr_mail_user.lng  |   3 +-
 interface/web/mail/lib/lang/hu_mail_user.lng  |   3 +-
 interface/web/mail/lib/lang/id_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/it_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/ja_mail_user.lng  |   3 +-
 interface/web/mail/lib/lang/nl_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/pl_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/pt_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/ro_mail_user.lng  |   3 +-
 interface/web/mail/lib/lang/ru_mail_user.lng  |   1 -
 interface/web/mail/lib/lang/se_mail_user.lng  |   3 +-
 interface/web/mail/lib/lang/sk_mail_user.lng  |   3 +-
 interface/web/mail/lib/lang/tr_mail_user.lng  |   1 -
 server/conf/sieve_filter.master               |  43 +++-
 server/conf/sieve_filter_1.2.master           |  23 ++-
 .../maildeliver_plugin.inc.php                | 193 +++++++++---------
 .../plugins-available/maildrop_plugin.inc.php |   5 +-
 33 files changed, 162 insertions(+), 173 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index abe2a8a1a1..2eb2594e88 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -49,4 +49,4 @@ ALTER TABLE `web_domain` CHANGE `apache_directives` `apache_directives` mediumte
 ALTER TABLE `web_domain` CHANGE `nginx_directives` `nginx_directives` mediumtext NULL DEFAULT NULL;
 
 -- add move to junk before/after option, default to after
-ALTER TABLE `mail_user` MODIFY `move_junk` enum('y','a','n') NOT NULL DEFAULT 'a';
+ALTER TABLE `mail_user` MODIFY `move_junk` enum('y','a','n') NOT NULL DEFAULT 'y';
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index bacf075baa..9c11a68914 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1046,7 +1046,7 @@ CREATE TABLE `mail_user` (
   `autoresponder_end_date` datetime NULL default NULL,
   `autoresponder_subject` varchar(255) NOT NULL default 'Out of office reply',
   `autoresponder_text` mediumtext NULL,
-  `move_junk` enum('y','a','n') NOT NULL default 'a',
+  `move_junk` enum('y','a','n') NOT NULL default 'y',
   `purge_trash_days` INT NOT NULL DEFAULT '0',
   `purge_junk_days` INT NOT NULL DEFAULT '0',
   `custom_mailfilter` mediumtext,
diff --git a/interface/lib/classes/validate_autoresponder.inc.php b/interface/lib/classes/validate_autoresponder.inc.php
index 25db68bdd9..48ee377883 100755
--- a/interface/lib/classes/validate_autoresponder.inc.php
+++ b/interface/lib/classes/validate_autoresponder.inc.php
@@ -31,25 +31,11 @@ include_once 'validate_datetime.inc.php';
 
 class validate_autoresponder extends validate_datetime
 {
-	function start_date($field_name, $field_value, $validator)
-	{
-		global $app;
-		
-		// save field value for later use in end_date()
-		$this->start_date = $field_value;
-
-		if($_POST['autoresponder'] == 'y' && $field_value == '') {
-			// we need a start date when autoresponder is on
-			return $app->tform->lng($validator['errmsg']).'<br />';
-		}
-	}
-
 	function end_date($field_name, $field_value, $validator)
 	{
 		global $app;
 
-		$start_date = $this->start_date;
-		//$start_date = $app->tform_actions->dataRecord['autoresponder_start_date'];
+		$start_date = $app->tform_actions->dataRecord['autoresponder_start_date'];
 		
 		// Parse date
 		$datetimeformat = (isset($app->remoting_lib) ? $app->remoting_lib->datetimeformat : $app->tform->datetimeformat);
@@ -60,8 +46,8 @@ class validate_autoresponder extends validate_datetime
 		$start_date_tstamp = mktime($start_date_array['hour'], $start_date_array['minute'], $start_date_array['second'], $start_date_array['month'], $start_date_array['day'], $start_date_array['year']);
 		$end_date_tstamp = mktime($end_date_array['hour'], $end_date_array['minute'], $end_date_array['second'], $end_date_array['month'], $end_date_array['day'], $end_date_array['year']);
 		
-		// End date has to be > start date
-		if($end_date_tstamp <= $start_date_tstamp && ($start_date || $field_value)) {
+		// If both are set, end date has to be > start date
+		if($start_date && $field_value && $end_date_tstamp <= $start_date_tstamp) {
 			return $app->tform->lng($validator['errmsg']).'<br />';
 		}
 	}
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 0bef9d979f..48c1e7dd96 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -364,10 +364,6 @@ if ($global_config['mail']['mailbox_show_autoresponder_tab'] === 'y') {
 					0 => array ( 'type' => 'ISDATETIME',
 						'allowempty' => 'y',
 						'errmsg'=> 'autoresponder_start_date_is_no_date'),
-					1 => array ( 'type' => 'CUSTOM',
-						'class' => 'validate_autoresponder',
-						'function' => 'start_date',
-						'errmsg'=> 'autoresponder_start_date_is_required'),
 				)
 			),
 			'autoresponder_end_date' => array (
@@ -403,7 +399,7 @@ if ($global_config['mail']['mailbox_show_mail_filter_tab'] === 'y') {
 			'move_junk' => array (
 				'datatype' => 'VARCHAR',
 				'formtype' => 'SELECT',
-				'default' => 'a',
+				'default' => 'y',
 				'value' => array('y' => 'move_junk_y_txt', 'a' => 'move_junk_a_txt', 'n' => 'move_junk_n_txt'),
 			),
 			'purge_trash_days' => array (
diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index 702725959d..04f5946cee 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -11,7 +11,7 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['no_domain_perm'] = 'You have no permission for this domain.';
 $wb['error_no_pwd'] = 'Password is empty.';
 $wb['quota_error_isint'] = 'Mailbox size must be a number.';
@@ -60,7 +60,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 49be467e91..af427fa5e3 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -54,7 +54,6 @@ $wb['password_match_txt'] = 'The passwords do match.';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['backup_interval_txt'] = 'Backup interval';
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index 8f02122ade..e0ef4a373e 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -14,7 +14,6 @@ $wb['autoresponder_start_date_txt'] = 'Iniciar em';
 $wb['autoresponder_start_date_ispast'] = 'O campo "Iniciar em" não pode ser menor que a data atual.';
 $wb['autoresponder_end_date_txt'] = 'Terminar em';
 $wb['autoresponder_end_date_isgreater'] = 'O campo "Terminar em" deve ser configurado e não pode ser menor ou igual a data atual.';
-$wb['autoresponder_start_date_is_required'] = 'Data iniciar deve ser configurado quando a opção de auto-resposta estiver habilitada.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
 $wb['error_no_pwd'] = 'A senha está em branco.';
 $wb['quota_error_isint'] = 'O tamanho da conta de e-mail deve ser um número.';
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index 259c357671..9e8fae6fb6 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -53,7 +53,6 @@ $wb['password_match_txt'] = 'Les mots de passe correspondent.';
 $wb['disablesmtp_txt'] = 'Désactiver SMTP (envoi)';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Séparer chaque adresses par une virgule)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index 72ebc26a4b..73149f757b 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -53,7 +53,6 @@ $wb['password_match_txt'] = 'Hesla se shodují.';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Při posílání kopií na více e-mailových adres, oddělte čárkami.)';
 $wb['disablesmtp_txt'] = 'Zakázat SMTP (pouze odesílání)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['greylisting_txt'] = 'Povolit greylisting';
 $wb['sender_cc_txt'] = 'Odeslat odchozí kopii na';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index 79834d9a5c..43b907d5b0 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -60,7 +60,6 @@ $wb['daily_backup_txt'] = 'taeglich';
 $wb['weekly_backup_txt'] = 'woechentlich';
 $wb['monthly_backup_txt'] = 'monatlich';
 $wb['cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
-$wb['autoresponder_start_date_is_required'] = 'Startdatum muss angegeben werden.';
 $wb['sender_cc_txt'] = 'Kopie ausgehender Emails senden an (BCC)';
 $wb['sender_cc_error_isemail'] = '-Kopie ausgehender Emails senden an- Feld enthält keine gültige Emailadresse';
 $wb['sender_cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index cf29a97137..68272beaaa 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -53,7 +53,6 @@ $wb['password_mismatch_txt'] = 'Adgangskoderne stemmer ikke overens.';
 $wb['password_match_txt'] = 'Adgangskoderne stemmer overens.';
 $wb['email_error_isascii'] = 'Undlad venligst at bruge specielle Unicode-tegn for din adgangskode Dette kan føre til problemer med din mail-klient.';
 $wb['cc_note_txt'] = '(Adskil flere e-mail adresser med kommaer)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index 0f424c0099..84aa6fce6c 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -54,7 +54,6 @@ $wb['password_match_txt'] = 'The passwords do match.';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['backup_interval_txt'] = 'Backup interval';
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 7b98e593c8..3b5ee34397 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -13,8 +13,7 @@ $wb["autoresponder_txt"] = 'Active';
 $wb["autoresponder_start_date_txt"] = 'Start on';
 $wb["autoresponder_start_date_ispast"] = 'Start date cannot be in the past.';
 $wb["autoresponder_end_date_txt"] = 'End by';
-$wb["autoresponder_end_date_isgreater"] = 'End date must be set and be later than start date.';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
+$wb["autoresponder_end_date_isgreater"] = 'End date must be later than start date.';
 $wb["no_domain_perm"] = 'You have no permission for this domain.';
 $wb["error_no_pwd"] = 'Password is empty.';
 $wb["quota_error_isint"] = 'Mailbox size must be a number.';
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index 676dd45c22..c8ea29d72c 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -4,7 +4,6 @@ $wb['active_txt'] = 'Habilitado';
 $wb['autoresponder_active'] = 'Activar auto respuesta';
 $wb['autoresponder_end_date_isgreater'] = 'Debe indicar la fecha de finalización y esta debe ser mayor a la de inicio.';
 $wb['autoresponder_end_date_txt'] = 'Finaliza el';
-$wb['autoresponder_start_date_is_required'] = 'Cuando se activa la auto respuesta se debe definir una fecha de inicio.';
 $wb['autoresponder_start_date_ispast'] = 'La fecha de inicio no puede estar en el pasado.';
 $wb['autoresponder_start_date_txt'] = 'Comienza el';
 $wb['autoresponder_subject'] = 'Estoy fuera de la oficina';
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index 97bddeddc7..2416e3dfe9 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -60,7 +60,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 4871865ae8..e3b130fe4a 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -53,7 +53,6 @@ $wb['password_match_txt'] = 'Les mots de passe correspondent.';
 $wb['disablesmtp_txt'] = 'Désactiver SMTP (envoi)';
 $wb['email_error_isascii'] = 'Merci de ne pas utiliser de caractères spéciaux Unicode dans votre mot de passe. Ceci pourrait engendrer des problèmes avec votre client mail.';
 $wb['cc_note_txt'] = '(Séparer les adresses e-mail multiples par des virgules)';
-$wb['autoresponder_start_date_is_required'] = 'Une date de démarrage doit être renseignée quand le répondeur automatique est activé.';
 $wb['greylisting_txt'] = 'Activer le greylisting';
 $wb['sender_cc_txt'] = 'Envoyer une copie des mails sortants à';
 $wb['sender_cc_error_isemail'] = 'Le champ -Envoyer une copie des mails sortants à- no contiens pas une adresse e-mail valide';
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 34c41a827e..c75fc8c771 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -10,7 +10,7 @@ $wb['autoresponder_text_txt'] = 'Text';
 $wb['autoresponder_txt'] = 'Aktivno';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['no_domain_perm'] = 'You have no permission for this domain.';
 $wb['error_no_pwd'] = 'Password is empty.';
 $wb['quota_error_isint'] = 'Mailbox size must be a number.';
@@ -57,7 +57,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['generate_password_txt'] = 'Generate Password';
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index 58a4416cb2..00361fc79c 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -30,7 +30,7 @@ $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlim
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
 $wb["move_junk_y_txt"] = 'Move first, before custom filters.';
 $wb["move_junk_a_txt"] = 'Move last, after custom filters.';
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index 87be369635..123eb7fd21 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index 6dffeddb91..49b5a43f0c 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -54,7 +54,6 @@ $wb['password_match_txt'] = 'Le passwords coincidono.';
 $wb['email_error_isascii'] = 'Non utilizzare caratteri speciali unicode per la password. Potresti avere problemi con il tuo client di psota.';
 $wb['cc_note_txt'] = '(Separa indirizzi email multipli con la virgola)';
 $wb['disablesmtp_txt'] = 'Disabilita SMTP (trasmissione)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index 1b36502b74..1b6195e5fe 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -30,7 +30,7 @@ $wb['quota_error_value'] = '容量の値が不正です。 無制限にする場
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
 $wb["move_junk_y_txt"] = 'Move first, before custom filters.';
 $wb["move_junk_a_txt"] = 'Move last, after custom filters.';
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 37e8c8638b..5b39e2ad75 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -60,7 +60,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 $wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)';
-$wb['autoresponder_start_date_is_required'] = 'Een startdatun is vereist voor het inschakelen van Autobeantwoorden.';
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
 $wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
 $wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index 889700cddd..4a410a6b5c 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index 6c715d52e2..05e8cfce89 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index ee1b6b980c..d03849c760 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -28,7 +28,7 @@ $wb['disablepop3_txt'] = 'Blocheaza POP3';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
 $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index 6935ecd8e2..3944d3304b 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Ежемесячно';
 $wb['email_error_isascii'] = 'Пожалуйста, не используйте специальные символы Юникода для вашего пароля. Это может привести к проблемам с вашим почтовым клиентом.';
 $wb['cc_note_txt'] = '(Разделите несколько адресов электронной почты запятыми)';
 $wb['disablesmtp_txt'] = 'Отключить SMTP (отправка)';
-$wb['autoresponder_start_date_is_required'] = 'Дата начала должна быть установлена когда автоответчик включен.';
 $wb['sender_cc_txt'] = 'Отправка исходящей копии на';
 $wb['sender_cc_error_isemail'] = 'Поле -Отправка исходящей копии на- не содержит действительный адрес электронной почты';
 $wb['sender_cc_note_txt'] = '(Разделите несколько адресов электронной почты запятыми)';
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index 22c5b0fe45..2b856c094a 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -30,7 +30,7 @@ $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlim
 $wb['autoresponder_start_date_txt'] = 'Starta den';
 $wb['autoresponder_start_date_ispast'] = 'Startdatum kan inte vara i det förflutna.';
 $wb['autoresponder_end_date_txt'] = 'Sluta den';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['move_junk_txt'] = 'FLytta spamepost till spammappen';
 $wb["move_junk_y_txt"] = 'Move first, before custom filters.';
 $wb["move_junk_a_txt"] = 'Move last, after custom filters.';
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index 258e8f6128..c44ea9ab6e 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -30,7 +30,7 @@ $wb['quota_error_value'] = 'Neplatná hodnota kvóty. Povolené hodnoty sú: 0 p
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
 $wb["move_junk_y_txt"] = 'Move first, before custom filters.';
 $wb["move_junk_a_txt"] = 'Move last, after custom filters.';
@@ -61,7 +61,6 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
 $wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
 $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index a1ed0128f3..790e44c014 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -14,7 +14,6 @@ $wb['autoresponder_start_date_txt'] = 'Başlangıç';
 $wb['autoresponder_start_date_ispast'] = 'Başlangıç zamanı geçmişte olamaz.';
 $wb['autoresponder_end_date_txt'] = 'BitiÅŸ';
 $wb['autoresponder_end_date_isgreater'] = 'Bitiş zamanı başlangıç zamanından sonra olmalıdır.';
-$wb['autoresponder_start_date_is_required'] = 'Otoyanıtlayıcı kullanıldığında başlangıç tarihi belirtilmelidir.';
 $wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
 $wb['error_no_pwd'] = 'Parola boÅŸ olamaz.';
 $wb['quota_error_isint'] = 'E-posta kutusunun boyutu bir sayı olmalıdır.';
diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master
index 6b83c26394..c5b33e4ba3 100644
--- a/server/conf/sieve_filter.master
+++ b/server/conf/sieve_filter.master
@@ -1,14 +1,9 @@
+<tmpl_if name="sieve_script" op="==" value="before">
 # This sieve script is generated by ISPConfig, any changes made will be overwritten.
 # You can create and activate a per-user sieve script (manually or via managesieve),
-# which will execute before this.
-require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
+# which will execute after this.
 
-<tmpl_if name="cc">
-# Send a copy of email to
-<tmpl_loop name="ccloop">
-redirect "<tmpl_var name='address'>";
-</tmpl_loop>
-</tmpl_if>
+require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
 
 <tmpl_if name="move_junk" op="==" value="y">
 # Move spam to spam folder
@@ -19,9 +14,20 @@ if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes",
 }
 </tmpl_if>
 
+<tmpl_if name="cc">
+# Send a copy of email to
+<tmpl_loop name="ccloop">
+redirect "<tmpl_var name='address'>";
+</tmpl_loop>
+</tmpl_if>
+
 <tmpl_var name='custom_mailfilter'>
 
-keep;
+</tmpl_if>
+<tmpl_if name="sieve_script" op="==" value="after">
+# This sieve script is generated by ISPConfig, any changes made will be overwritten.
+# You can create and activate a per-user sieve script (manually or via managesieve),
+# which will execute before this.
 
 <tmpl_if name="move_junk" op="==" value="a">
 # Move spam to spam folder
@@ -39,13 +45,28 @@ if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes",
 
 # Move spam to spam folder
 if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
-  fileinto "Junk";
   # Stop here so that we do not reply on spams
   stop;
 }
+
+<tmpl_if name="start_date">
+if currentdate :value "ge" "iso8601" "<tmpl_var name='start_date'>" {
+</tmpl_if>
+<tmpl_if name="end_date">
+if currentdate :value "le" "iso8601" "<tmpl_var name='end_date'>" {
+</tmpl_if>
+
 vacation  :days 1
   :subject "<tmpl_var name='autoresponder_subject'>"
-  # :addresses ["test@test.int", "till@test.int"]
   <tmpl_var name='addresses'>
   "<tmpl_var name='autoresponder_text'>";
+
+<tmpl_if name="end_date">
+}
+</tmpl_if>
+<tmpl_if name="start_date">
+}
+</tmpl_if>
+</tmpl_if>
+
 </tmpl_if>
diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master
index 3a8695b1a6..c5b33e4ba3 100644
--- a/server/conf/sieve_filter_1.2.master
+++ b/server/conf/sieve_filter_1.2.master
@@ -1,6 +1,8 @@
+<tmpl_if name="sieve_script" op="==" value="before">
 # This sieve script is generated by ISPConfig, any changes made will be overwritten.
 # You can create and activate a per-user sieve script (manually or via managesieve),
-# which will execute before this.
+# which will execute after this.
+
 require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
 
 <tmpl_if name="move_junk" op="==" value="y">
@@ -21,7 +23,11 @@ redirect "<tmpl_var name='address'>";
 
 <tmpl_var name='custom_mailfilter'>
 
-keep;
+</tmpl_if>
+<tmpl_if name="sieve_script" op="==" value="after">
+# This sieve script is generated by ISPConfig, any changes made will be overwritten.
+# You can create and activate a per-user sieve script (manually or via managesieve),
+# which will execute before this.
 
 <tmpl_if name="move_junk" op="==" value="a">
 # Move spam to spam folder
@@ -43,8 +49,11 @@ if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes",
   stop;
 }
 
-<tmpl_if name="autoresponder_date_limit">
-if allof(currentdate :value "ge" "iso8601" "<tmpl_var name='start_date'>", currentdate :value "le" "iso8601" "<tmpl_var name='end_date'>") {
+<tmpl_if name="start_date">
+if currentdate :value "ge" "iso8601" "<tmpl_var name='start_date'>" {
+</tmpl_if>
+<tmpl_if name="end_date">
+if currentdate :value "le" "iso8601" "<tmpl_var name='end_date'>" {
 </tmpl_if>
 
 vacation  :days 1
@@ -52,8 +61,12 @@ vacation  :days 1
   <tmpl_var name='addresses'>
   "<tmpl_var name='autoresponder_text'>";
 
-<tmpl_if name="autoresponder_date_limit">
+<tmpl_if name="end_date">
+}
+</tmpl_if>
+<tmpl_if name="start_date">
 }
 </tmpl_if>
 </tmpl_if>
 
+</tmpl_if>
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index 05ee88e777..5b4c5671e4 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -127,116 +127,111 @@ class maildeliver_plugin {
 			}
 			unset($tmp);
 
-			//* Create new filter file based on template
-			$tpl = new tpl();
-			$tpl->newTemplate($filter_file_template);
-
-			// cc Field
-			$tmp_mails_arr = explode(',',$data["new"]["cc"]);
-			$tmp_addresses_arr = array();
-			foreach($tmp_mails_arr as $address) {
-				if(trim($address) != '') $tmp_addresses_arr[] = array('address' => trim($address));
-			}
+			foreach ( array('before', 'after') as $sieve_script ) {
+				//* Create new filter file based on template
+				$tpl = new tpl();
+				$tpl->newTemplate($filter_file_template);
+
+				// cc Field
+				$tmp_mails_arr = explode(',',$data["new"]["cc"]);
+				$tmp_addresses_arr = array();
+				foreach($tmp_mails_arr as $address) {
+					if(trim($address) != '') $tmp_addresses_arr[] = array('address' => trim($address));
+				}
 			
-			$tpl->setVar('cc', $data["new"]["cc"]);
-			$tpl->setLoop('ccloop', $tmp_addresses_arr);
-
-			// Custom filters
-			if($data["new"]["custom_mailfilter"] == 'NULL') $data["new"]["custom_mailfilter"] = '';
-			$tpl->setVar('custom_mailfilter', str_replace("\r\n","\n",$data["new"]["custom_mailfilter"]));
-
-			// Move junk
-			$tpl->setVar('move_junk', $data["new"]["move_junk"]);
-
-			// Check autoresponder dates
-			if((!$data['new']['autoresponder_start_date'] || $data["new"]["autoresponder_start_date"] == '0000-00-00 00:00:00') && (!$data['new']['autoresponder_end_date'] || $data["new"]["autoresponder_end_date"] == '0000-00-00 00:00:00')) {
-				$tpl->setVar('autoresponder_date_limit', 0);
-			} else {
-				$tpl->setVar('autoresponder_date_limit', 1);
-			}
-
-
-			// Set autoresponder start date
-			$data["new"]["autoresponder_start_date"] = str_replace(" ", "T", $data["new"]["autoresponder_start_date"]);
-			$tpl->setVar('start_date', $data["new"]["autoresponder_start_date"]);
-
-			// Set autoresponder end date
-			$data["new"]["autoresponder_end_date"] = str_replace(" ", "T", $data["new"]["autoresponder_end_date"]);
-			$tpl->setVar('end_date', $data["new"]["autoresponder_end_date"]);
-
-			// Autoresponder
-			$tpl->setVar('autoresponder', $data["new"]["autoresponder"]);
-
-			// Autoresponder Subject
-			$data["new"]["autoresponder_subject"] = str_replace("\"", "'", $data["new"]["autoresponder_subject"]);
-			$tpl->setVar('autoresponder_subject', $data["new"]["autoresponder_subject"]);
-
-			// Autoresponder Text
-			$data["new"]["autoresponder_text"] = str_replace("\"", "'", $data["new"]["autoresponder_text"]);
-			$tpl->setVar('autoresponder_text', $data["new"]["autoresponder_text"]);
+				$tpl->setVar('cc', $data["new"]["cc"]);
+				$tpl->setLoop('ccloop', $tmp_addresses_arr);
+
+				// Custom filters
+				if($data["new"]["custom_mailfilter"] == 'NULL') $data["new"]["custom_mailfilter"] = '';
+				$tpl->setVar('custom_mailfilter', str_replace("\r\n","\n",$data["new"]["custom_mailfilter"]));
+
+				// Move junk
+				$tpl->setVar('move_junk', $data["new"]["move_junk"]);
+
+				// Set autoresponder start date
+				$data["new"]["autoresponder_start_date"] = str_replace(" ", "T", $data["new"]["autoresponder_start_date"]);
+				$tpl->setVar('start_date', $data["new"]["autoresponder_start_date"]);
+
+				// Set autoresponder end date
+				$data["new"]["autoresponder_end_date"] = str_replace(" ", "T", $data["new"]["autoresponder_end_date"]);
+				$tpl->setVar('end_date', $data["new"]["autoresponder_end_date"]);
+
+				// Autoresponder
+				$tpl->setVar('autoresponder', $data["new"]["autoresponder"]);
+
+				// Autoresponder Subject
+				$data["new"]["autoresponder_subject"] = str_replace("\"", "'", $data["new"]["autoresponder_subject"]);
+				$tpl->setVar('autoresponder_subject', $data["new"]["autoresponder_subject"]);
+
+				// Autoresponder Text
+				$data["new"]["autoresponder_text"] = str_replace("\"", "'", $data["new"]["autoresponder_text"]);
+				$tpl->setVar('autoresponder_text', $data["new"]["autoresponder_text"]);
+
+				if (! defined($address_str)) {
+					//* Set alias addresses for autoresponder
+					$sql = "SELECT * FROM mail_forwarding WHERE type = 'alias' AND destination = ?";
+					$records = $app->db->queryAllRecords($sql, $data["new"]["email"]);
+
+					$addresses = array();
+					$addresses[] = $data["new"]["email"];
+					if(is_array($records) && count($records) > 0) {
+						foreach($records as $rec) {
+							$addresses[] = $rec['source'];
+						}
+					}
 
-			//* Set alias addresses for autoresponder
-			$sql = "SELECT * FROM mail_forwarding WHERE type = 'alias' AND destination = ?";
-			$records = $app->db->queryAllRecords($sql, $data["new"]["email"]);
+					$app->log("Found " . count($addresses) . " addresses.", LOGLEVEL_DEBUG);
+
+					$alias_addresses = array();
+
+					$email_parts = explode('@', $data["new"]["email"]);
+					$sql = "SELECT * FROM mail_forwarding WHERE type = 'aliasdomain' AND destination = ?";
+					$records = $app->db->queryAllRecords($sql, '@'.$email_parts[1]);
+					if(is_array($records) && count($records) > 0) {
+						$app->log("Found " . count($records) . " records (aliasdomains).", LOGLEVEL_DEBUG);
+						foreach($records as $rec) {
+							$aliasdomain = substr($rec['source'], 1);
+							foreach($addresses as $email) {
+								$email_parts = explode('@', $email);
+								$alias_addresses[] = $email_parts[0].'@'.$aliasdomain;
+							}
+						}
+					}
 
-			$addresses = array();
-			$addresses[] = $data["new"]["email"];
-			if(is_array($records) && count($records) > 0) {
-				foreach($records as $rec) {
-					$addresses[] = $rec['source'];
-				}
-			}
+					$app->log("Found " . count($addresses) . " addresses at all.", LOGLEVEL_DEBUG);
 
-			$app->log("Found " . count($addresses) . " addresses.", LOGLEVEL_DEBUG);
+					$addresses = array_unique(array_merge($addresses, $alias_addresses));
 
-			$alias_addresses = array();
+					$app->log("Found " . count($addresses) . " unique addresses at all.", LOGLEVEL_DEBUG);
 
-			$email_parts = explode('@', $data["new"]["email"]);
-			$sql = "SELECT * FROM mail_forwarding WHERE type = 'aliasdomain' AND destination = ?";
-			$records = $app->db->queryAllRecords($sql, '@'.$email_parts[1]);
-			if(is_array($records) && count($records) > 0) {
-				$app->log("Found " . count($records) . " records (aliasdomains).", LOGLEVEL_DEBUG);
-				foreach($records as $rec) {
-					$aliasdomain = substr($rec['source'], 1);
-					foreach($addresses as $email) {
-						$email_parts = explode('@', $email);
-						$alias_addresses[] = $email_parts[0].'@'.$aliasdomain;
+					$address_str = '';
+					if(is_array($addresses) && count($addresses) > 0) {
+						$address_str .= ':addresses [';
+						foreach($addresses as $rec) {
+							$address_str .= '"'.$rec.'",';
+						}
+						$address_str = substr($address_str, 0, -1);
+						$address_str .= ']';
 					}
 				}
-			}
 
-			$app->log("Found " . count($addresses) . " addresses at all.", LOGLEVEL_DEBUG);
+				$tpl->setVar('addresses', $address_str);
 
-			$addresses = array_unique(array_merge($addresses, $alias_addresses));
-
-			$app->log("Found " . count($addresses) . " unique addresses at all.", LOGLEVEL_DEBUG);
-
-			$address_str = '';
-			if(is_array($addresses) && count($addresses) > 0) {
-				$address_str .= ':addresses [';
-				foreach($addresses as $rec) {
-					$address_str .= '"'.$rec.'",';
+				if ( ! is_dir($data["new"]["maildir"].'/sieve/') ) {
+					$app->system->mkdirpath($data["new"]["maildir"].'/sieve/', 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
 				}
-				$address_str = substr($address_str, 0, -1);
-				$address_str .= ']';
-			}
 
+				$tpl->setVar('sieve_script', $sieve_script);
+				if ($sieve_script == 'before') {
+					$sieve_file_isp = $sieve_file_isp_before;
+					$sieve_file_isp_svbin = $sieve_file_isp_before_svbin;
+				} elseif ($sieve_script == 'after') {
+					$sieve_file_isp = $sieve_file_isp_after;
+					$sieve_file_isp_svbin = $sieve_file_isp_after_svbin;
+				}
 
-			$tpl->setVar('addresses', $address_str);
-
-			if ( ! is_dir($data["new"]["maildir"].'/sieve/') ) {
-				$app->system->mkdirpath($data["new"]["maildir"].'/sieve/', 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
-			}
-
-			if ($data["new"]["move_junk"] == "y") {
-				$sieve_file_isp = $sieve_file_isp_before;
-				$sieve_file_isp_svbin = $sieve_file_isp_before_svbin;
-			} elseif ($data["new"]["move_junk"] == "a") {
-				$sieve_file_isp = $sieve_file_isp_after;
-				$sieve_file_isp_svbin = $sieve_file_isp_after_svbin;
-			}
-			if (isset($sieve_file_isp)) {
-				file_put_contents($sieve_file_isp, $tpl->grab()) or $app->log("Unable to write sieve filter file", LOGLEVEL_WARN);
+				file_put_contents($sieve_file_isp, $tpl->grab()) or $app->log("Unable to write sieve filter file " . $sieve_file_isp, LOGLEVEL_WARN);
 				if ( is_file($sieve_file_isp) ) {
 					$app->system->chown($sieve_file_isp,$mail_config['mailuser_name'],false);
 					$app->system->chgrp($sieve_file_isp,$mail_config['mailuser_group'],false);
@@ -247,10 +242,10 @@ class maildeliver_plugin {
 						$app->system->chgrp($sieve_file_isp_svbin,$mail_config['mailuser_group'],false);
 					}
 				}
-			}
 
-			unset($tpl);
+				unset($tpl);
 
+			}
 		}
 	}
 
diff --git a/server/plugins-available/maildrop_plugin.inc.php b/server/plugins-available/maildrop_plugin.inc.php
index 93bd29f338..00777a1662 100644
--- a/server/plugins-available/maildrop_plugin.inc.php
+++ b/server/plugins-available/maildrop_plugin.inc.php
@@ -146,9 +146,12 @@ class maildrop_plugin {
 
 				if ($data['new']['autoresponder_start_date'] && $data["new"]["autoresponder_start_date"] != '0000-00-00 00:00:00') { // Dates have been set
 					$tpl = str_replace('{start_date}', strtotime($data["new"]["autoresponder_start_date"]), $tpl);
-					$tpl = str_replace('{end_date}', strtotime($data["new"]["autoresponder_end_date"]), $tpl);
 				} else {
 					$tpl = str_replace('{start_date}', -7200, $tpl);
+				}
+				if ($data['new']['autoresponder_end_date'] && $data["new"]["autoresponder_end_date"] != '0000-00-00 00:00:00') { // Dates have been set
+					$tpl = str_replace('{end_date}', strtotime($data["new"]["autoresponder_end_date"]), $tpl);
+				} else {
 					$tpl = str_replace('{end_date}', 2147464800, $tpl);
 				}
 
-- 
GitLab


From 62af6f1446d6576a1dc0ea6cfedfc18a66937a6a Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 22 Jul 2020 16:17:44 -0600
Subject: [PATCH 518/571] no need for multiple, identical sieve filter
 templates

---
 server/conf/sieve_filter_1.2.master           | 72 -------------------
 .../maildeliver_plugin.inc.php                | 15 +---
 2 files changed, 1 insertion(+), 86 deletions(-)
 delete mode 100644 server/conf/sieve_filter_1.2.master

diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master
deleted file mode 100644
index c5b33e4ba3..0000000000
--- a/server/conf/sieve_filter_1.2.master
+++ /dev/null
@@ -1,72 +0,0 @@
-<tmpl_if name="sieve_script" op="==" value="before">
-# This sieve script is generated by ISPConfig, any changes made will be overwritten.
-# You can create and activate a per-user sieve script (manually or via managesieve),
-# which will execute after this.
-
-require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
-
-<tmpl_if name="move_junk" op="==" value="y">
-# Move spam to spam folder
-if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
-  fileinto "Junk";
-  # Stop here so that we do not reply on spams
-  stop;
-}
-</tmpl_if>
-
-<tmpl_if name="cc">
-# Send a copy of email to
-<tmpl_loop name="ccloop">
-redirect "<tmpl_var name='address'>";
-</tmpl_loop>
-</tmpl_if>
-
-<tmpl_var name='custom_mailfilter'>
-
-</tmpl_if>
-<tmpl_if name="sieve_script" op="==" value="after">
-# This sieve script is generated by ISPConfig, any changes made will be overwritten.
-# You can create and activate a per-user sieve script (manually or via managesieve),
-# which will execute before this.
-
-<tmpl_if name="move_junk" op="==" value="a">
-# Move spam to spam folder
-if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
-  fileinto "Junk";
-  # Stop here so that we do not reply on spams
-  stop;
-}
-</tmpl_if>
-
-<tmpl_if name="autoresponder" op="==" value="y">
-#################################################################
-# Autoreply
-#################################################################
-
-# Move spam to spam folder
-if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
-  # Stop here so that we do not reply on spams
-  stop;
-}
-
-<tmpl_if name="start_date">
-if currentdate :value "ge" "iso8601" "<tmpl_var name='start_date'>" {
-</tmpl_if>
-<tmpl_if name="end_date">
-if currentdate :value "le" "iso8601" "<tmpl_var name='end_date'>" {
-</tmpl_if>
-
-vacation  :days 1
-  :subject "<tmpl_var name='autoresponder_subject'>"
-  <tmpl_var name='addresses'>
-  "<tmpl_var name='autoresponder_text'>";
-
-<tmpl_if name="end_date">
-}
-</tmpl_if>
-<tmpl_if name="start_date">
-}
-</tmpl_if>
-</tmpl_if>
-
-</tmpl_if>
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index 5b4c5671e4..99220d5ffa 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -114,23 +114,10 @@ class maildeliver_plugin {
 			if(is_file($sieve_file_isp_after_svbin)) unlink($sieve_file_isp_after_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_after_svbin", LOGLEVEL_WARN);
 			$app->load('tpl');
 
-			//* Select sieve filter file for dovecot version
-			exec('dovecot --version', $tmp);
-			if(substr($tmp[0], 0, 3) == '1.0') {
-				$filter_file_template = "sieve_filter.master";
-			} elseif(substr($tmp[0], 0, 3) == '1.2') {
-				$filter_file_template = "sieve_filter_1.2.master";
-			} elseif(substr($tmp[0], 0, 1) == '2') {
-				$filter_file_template = "sieve_filter_1.2.master";
-			} else {
-				$filter_file_template = "sieve_filter.master";
-			}
-			unset($tmp);
-
 			foreach ( array('before', 'after') as $sieve_script ) {
 				//* Create new filter file based on template
 				$tpl = new tpl();
-				$tpl->newTemplate($filter_file_template);
+				$tpl->newTemplate("sieve_filter.master");
 
 				// cc Field
 				$tmp_mails_arr = explode(',',$data["new"]["cc"]);
-- 
GitLab


From e55e8dc2d6fc1b9937bc1703de8d1da47e9ccf97 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 24 Jul 2020 12:25:51 -0600
Subject: [PATCH 519/571] rename .ispconfig-after.sieve to .ispconfig.sieve

---
 install/tpl/debian6_dovecot.conf.master             |  2 +-
 install/tpl/debian6_dovecot2.conf.master            |  2 +-
 install/tpl/debian_dovecot.conf.master              |  2 +-
 install/tpl/debian_dovecot2.conf.master             |  2 +-
 install/tpl/fedora_dovecot.conf.master              |  2 +-
 install/tpl/fedora_dovecot2.conf.master             |  2 +-
 install/tpl/opensuse_dovecot.conf.master            |  2 +-
 install/tpl/opensuse_dovecot2.conf.master           |  2 +-
 server/plugins-available/maildeliver_plugin.inc.php | 12 +++++++-----
 9 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/install/tpl/debian6_dovecot.conf.master b/install/tpl/debian6_dovecot.conf.master
index cf9e85f3b3..f1df2e241e 100644
--- a/install/tpl/debian6_dovecot.conf.master
+++ b/install/tpl/debian6_dovecot.conf.master
@@ -61,7 +61,7 @@ plugin {
   sieve=/var/vmail/%d/%n/.sieve
 
   sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
-  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index ead02a68c7..80709cfe36 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -30,7 +30,7 @@ plugin {
   sieve=/var/vmail/%d/%n/.sieve
 
   sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
-  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/debian_dovecot.conf.master b/install/tpl/debian_dovecot.conf.master
index 2bba3fa985..4109498cea 100644
--- a/install/tpl/debian_dovecot.conf.master
+++ b/install/tpl/debian_dovecot.conf.master
@@ -1146,7 +1146,7 @@ plugin {
   #lazy_expunge = .EXPUNGED/ .DELETED/ .DELETED/.EXPUNGED/
 
   sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
-  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index c71f683e96..a292591372 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -29,7 +29,7 @@ plugin {
   sieve=/var/vmail/%d/%n/.sieve
 
   sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
-  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/fedora_dovecot.conf.master b/install/tpl/fedora_dovecot.conf.master
index 405a723a55..0bd4f7ca6d 100644
--- a/install/tpl/fedora_dovecot.conf.master
+++ b/install/tpl/fedora_dovecot.conf.master
@@ -1307,7 +1307,7 @@ plugin {
   sieve_dir=~/sieve
 
   sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
-  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 312654732c..2acd757fbd 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -27,7 +27,7 @@ plugin {
   sieve=/var/vmail/%d/%n/.sieve
 
   sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
-  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/opensuse_dovecot.conf.master b/install/tpl/opensuse_dovecot.conf.master
index a6ed0ab71f..4a4d5e319c 100644
--- a/install/tpl/opensuse_dovecot.conf.master
+++ b/install/tpl/opensuse_dovecot.conf.master
@@ -1281,7 +1281,7 @@ plugin {
   sieve_dir=~/sieve
 
   sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
-  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index da716c6dfc..62c9939819 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -26,7 +26,7 @@ plugin {
   sieve=/var/vmail/%d/%n/.sieve
 
   sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
-  sieve_after=/var/vmail/%d/%n/.ispconfig-after.sieve
+  sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
   sieve_max_redirects = 25
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index 99220d5ffa..130d0a7f18 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -102,8 +102,9 @@ class maildeliver_plugin {
 			$old_sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
 			$sieve_file_isp_before = $data["new"]["maildir"].'/.ispconfig-before.sieve';
 			$sieve_file_isp_before_svbin = $data["new"]["maildir"].'/.ispconfig-before.svbin';
-			$sieve_file_isp_after = $data["new"]["maildir"].'/.ispconfig-after.sieve';
-			$sieve_file_isp_after_svbin = $data["new"]["maildir"].'/.ispconfig-after.svbin';
+			$sieve_file_isp_after = $data["new"]["maildir"].'/.ispconfig.sieve';
+			$sieve_file_isp_after_svbin = $data["new"]["maildir"].'/.ispconfig.svbin';
+
 			if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp)  or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
 			// cleanup .sieve file if it is now a broken link
 			if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
@@ -241,11 +242,12 @@ class maildeliver_plugin {
 
 		$sieve_file = $data["old"]["maildir"].'/.sieve';
 		$sieve_file_svbin = $data["old"]["maildir"].'/.sieve.svbin';
-		$old_sieve_file_isp = $data["old"]["maildir"].'/sieve/ispconfig.sieve';
+		$old_sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
 		$sieve_file_isp_before = $data["old"]["maildir"].'/.ispconfig-before.sieve';
 		$sieve_file_isp_before_svbin = $data["old"]["maildir"].'/.ispconfig-before.svbin';
-		$sieve_file_isp_after = $data["old"]["maildir"].'/.ispconfig-after.sieve';
-		$sieve_file_isp_after_svbin = $data["old"]["maildir"].'/.ispconfig-after.svbin';
+		$sieve_file_isp_after = $data["old"]["maildir"].'/.ispconfig.sieve';
+		$sieve_file_isp_after_svbin = $data["old"]["maildir"].'/.ispconfig.svbin';
+
 		if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp)  or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
 		// cleanup .sieve file if it is now a broken link
 		if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
-- 
GitLab


From bd155b39fec86c2115f5555a023fce807e6d15f4 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Fri, 24 Jul 2020 23:30:15 +0200
Subject: [PATCH 520/571] Set DirectoryIndex and unset CSP for /stats

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 26f2948256..174228eb48 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1841,7 +1841,7 @@ class apache2_plugin {
 
 		if($data['new']['stats_type'] != '') {
 			if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats');
-			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user";
+			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user\nDirectoryIndex index.php\nHeader unset Content-Security-Policy";
 			$app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', $ht_file);
 			$app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', 0755);
 			unset($ht_file);
-- 
GitLab


From ca9fab3dc848d58cbada6a0ce84a3268cb9c34cd Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 24 Jul 2020 15:47:44 -0600
Subject: [PATCH 521/571] outgoing_bcc regex matches more
 mail_forwarding.destination addrs

---
 install/tpl/mysql-virtual_outgoing_bcc.cf.master | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
index eafd098a3f..19b235fcf5 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -8,9 +8,9 @@ query = SELECT sender_cc FROM (
             UNION
             SELECT SUBSTRING_INDEX(u.sender_cc, ',', 1) AS sender_cc
               FROM mail_user u, mail_forwarding f
-             WHERE f.destination REGEXP CONCAT( '(^|\\n)[[:blank:]]*,?[[:blank:]]*',
+             WHERE f.destination REGEXP CONCAT( '((^|\\n)[[:blank:]]*,?|[[:alnum:]][[:blank:]]*,)[[:blank:]]*',
                                                 REPLACE( REPLACE(u.email, '+', '\\+'), '.', '\\.' ),
-                                                '[[:blank:]]*,?[[:blank:]]*(\\r?\\n|$)' )
+                                                '[[:blank:]]*(,[[:blank:]]*[[:alnum:]]|,?[[:blank:]]*(\\r?\\n|$))' )
                AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
                AND f.source = '%s' AND f.allow_send_as = 'y' AND f.active = 'y' AND f.server_id = {server_id}
         ) table1 WHERE sender_cc != '' LIMIT 1
-- 
GitLab


From b63fa47694fe3a0f4b002b7d426c12862c82bf50 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 25 Jul 2020 19:28:06 +0200
Subject: [PATCH 522/571] Set DirectoryIndex

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 174228eb48..0153b2597d 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1841,7 +1841,7 @@ class apache2_plugin {
 
 		if($data['new']['stats_type'] != '') {
 			if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats');
-			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user\nDirectoryIndex index.php\nHeader unset Content-Security-Policy";
+			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user\nDirectoryIndex index.html index.htm index.php\nHeader unset Content-Security-Policy";
 			$app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', $ht_file);
 			$app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', 0755);
 			unset($ht_file);
-- 
GitLab


From 5bbacaa1367637fe86716432c29d48facb76084d Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 25 Jul 2020 19:35:26 +0200
Subject: [PATCH 523/571] Set DirectoryIndex - index.html and index.php

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 0153b2597d..ea85c51a2b 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1841,7 +1841,7 @@ class apache2_plugin {
 
 		if($data['new']['stats_type'] != '') {
 			if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats');
-			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user\nDirectoryIndex index.html index.htm index.php\nHeader unset Content-Security-Policy";
+			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user\nDirectoryIndex index.html index.php\nHeader unset Content-Security-Policy";
 			$app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', $ht_file);
 			$app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', 0755);
 			unset($ht_file);
-- 
GitLab


From 61eac82c2b579b94eb1152ce52285dc681a99214 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 25 Jul 2020 19:42:28 +0200
Subject: [PATCH 524/571] Add CSP for /stats

---
 server/conf/nginx_vhost.conf.master | 1 +
 1 file changed, 1 insertion(+)

diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index ce245787a5..3fc50cc108 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -168,6 +168,7 @@ server {
             index index.html index.php;
             auth_basic "Members Only";
             auth_basic_user_file <tmpl_var name='stats_auth_passwd_file'>;
+            add_header Content-Security-Policy "default-src * 'self' 'unsafe-inline';";
         }
 
         location ^~ /awstats-icon {
-- 
GitLab


From d3c8533b94592bb36c6b2fa2e7375c2e612caaaf Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Mon, 27 Jul 2020 12:24:52 +0200
Subject: [PATCH 525/571] backported GoAccess code

---
 .../web/sites/form/web_vhost_domain.tform.php |   2 +-
 server/conf/goaccess_index.php.master         |  73 ++++++
 .../lib/classes/cron.d/150-goaccess.inc.php   | 212 ++++++++++++++++++
 .../plugins-available/apache2_plugin.inc.php  |  67 ++++++
 4 files changed, 353 insertions(+), 1 deletion(-)
 create mode 100644 server/conf/goaccess_index.php.master
 create mode 100644 server/lib/classes/cron.d/150-goaccess.inc.php

diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 7da71281cf..aa02dfe96c 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -629,7 +629,7 @@ $form["tabs"]['stats'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => 'awstats',
-			'value'  => array('webalizer' => 'Webalizer', 'awstats' => 'AWStats', '' => 'None')
+			'value'  => array('awstats' => 'AWStats', 'goaccess' => 'GoAccess', 'webalizer' => 'Webalizer','' => 'None')
 		),
 		//#################################
 		// END Datatable fields
diff --git a/server/conf/goaccess_index.php.master b/server/conf/goaccess_index.php.master
new file mode 100644
index 0000000000..d0a8bf3c84
--- /dev/null
+++ b/server/conf/goaccess_index.php.master
@@ -0,0 +1,73 @@
+<?php
+$yearmonth_text = "Jump to previous stats: ";
+$script = "<script>function load_content(url){var iframe = document.getElementById(\"content\");iframe.src = url;}</script>\n";
+
+if ($handle = opendir('.'))
+{
+        while(false !== ($file = readdir($handle)))
+        {
+                if (substr($file,0,1) != "." && is_dir($file))
+                {
+                        $orderkey = substr($file,0,4).substr($file,5,2);
+                        if (substr($file,5,2) < 10 )
+                        {
+                                $orderkey = substr($file,0,4)."0".substr($file,5,2);
+                        }
+                        $goaprev[$orderkey] = $file;
+                }
+        }
+
+        $month = date("n");
+        $year = date("Y");
+		
+        if (date("d") == 1)
+        {
+                $month = date("m")-1;
+                if (date("m") == 1)
+                {
+                        $year = date("Y")-1;
+                        $month = "12";
+                }
+        }
+
+        $current = $year.$month;
+		if ( $month < 10 ) {
+			$current = $year."0".$month;
+		}
+		$goaprev[$current] = $year."-".$month;
+
+		closedir($handle);
+}
+
+arsort($goaprev);
+
+$options = "";
+foreach ($goaprev as $key => $value)
+{
+
+	if(file_exists($value.'/awsindex.html') && file_exists($value.'/goaindex.html')) {
+		$goaccessindex = 'goaindex.html';
+	} elseif(file_exists($value.'/awsindex.html') && !file_exists($value.'/goaindex.html')) {
+                $goaccessindex = 'awsindex.html';
+	} else {
+		$goaccessindex = 'goaindex.html';
+	}
+	
+	if($key == $current) $options .= "<option selected=\"selected\" value=\"{$goaccessindex}\">{$value}</option>\n";
+	else $options .= "<option value=\"{$value}/{$goaccessindex}\">{$value}</option>\n";
+
+}
+$goaccessindex = 'goaindex.html';
+
+$html = "<!DOCTYPE html>\n<html>\n<head>\n<title>Stats</title>\n";
+$html .= "<style>\nhtml,body {margin:0px;padding:0px;width:100%;height:100%;background-color: #ccc;}\n";
+$html .= "#header\n{\nwidth:100%;margin:0px auto;\nheight:20px;\nposition:fixed;\npadding:4px;\ntext-align:center;\n}\n";
+$html .= "iframe {width:100%;height:95%;margin:0px;margin-top:40px;border:0px;padding:0px;}\n</style>\n</head>\n<body>\n";
+$html .= $script;
+$html .= "<div id=\"header\">{$yearmonth_text}\n";
+$html .= "<select name=\"goadate\" onchange=\"load_content(this.value)\">\n";
+$html .= $options;
+$html .= "</select>\n</div>\n<iframe src=\"{$goaccessindex}\" id=\"content\"></iframe>\n";
+$html .= "</body></html>";
+echo $html;
+?>
diff --git a/server/lib/classes/cron.d/150-goaccess.inc.php b/server/lib/classes/cron.d/150-goaccess.inc.php
new file mode 100644
index 0000000000..fe9e565f5f
--- /dev/null
+++ b/server/lib/classes/cron.d/150-goaccess.inc.php
@@ -0,0 +1,212 @@
+<?php
+
+/*
+Copyright (c) 2013, Marius Cramer, pixcept KG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class cronjob_goaccess extends cronjob {
+
+	// job schedule
+	protected $_schedule = '0 0 * * *';
+
+	/* this function is optional if it contains no custom code */
+	public function onPrepare() {
+		global $app;
+
+		parent::onPrepare();
+	}
+
+	/* this function is optional if it contains no custom code */
+	public function onBeforeRun() {
+		global $app;
+
+		return parent::onBeforeRun();
+	}
+
+	public function onRunJob() {
+		global $app, $conf;
+
+		//######################################################################################################
+		// Create goaccess statistics
+		//######################################################################################################
+
+		$sql = "SELECT domain_id, domain, document_root, web_folder, type, system_user, system_group, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') and stats_type = 'goaccess' AND server_id = ?";
+		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
+
+		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
+
+		$goaccess_conf_dir = '/etc/';
+		$goaccess_conf_main = $goaccess_conf_dir . 'goaccess.conf';
+
+		if(!file_exists($goaccess_conf_main) || !isset($goaccess_conf_main))
+		{
+			$app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in ".$goaccess_conf_dir.".", LOGLEVEL_WARN);
+		}
+
+                /* Check wether the goaccess binary is in path */
+		system('type goaccess', $retval);
+                if ($retval === 0) {
+
+		foreach($records as $rec) {
+			$yesterday = date('Ymd', strtotime("-1 day", time()));
+
+			$log_folder = 'log';
+
+			if($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') {
+				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $rec['parent_domain_id']);
+				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $rec['domain']);
+				if($subdomain_host == '') $subdomain_host = 'web'.$rec['domain_id'];
+				$log_folder .= '/' . $subdomain_host;
+				unset($tmp);
+			}
+
+			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log');
+
+			if(!@is_file($logfile)) {
+				$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz');
+				if(!@is_file($logfile)) {
+					continue;
+				}
+			}
+
+			$web_folder = (($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web');
+			$domain = escapeshellcmd($rec['domain']);
+			$statsdir = escapeshellcmd($rec['document_root'].'/'.$web_folder.'/stats');
+			$goaccess_conf = escapeshellcmd($rec['document_root'].'/log/goaccess.conf');
+
+			/*
+			 In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
+			 By default the originally, with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
+			 */
+
+			if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
+				copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
+			} elseif(!file_exists($goaccess_conf)) {
+				/*
+				 By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
+				 Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
+				*/
+                        	copy($goaccess_conf_main, $goaccess_conf);
+	                        file_put_contents($goaccess_conf, preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", file_get_contents($goaccess_conf)));
+			}
+
+			/* Update the primary domain name in the title, it could occasionally change */
+			if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
+				$goaccess_content = file_get_contents($goaccess_conf);
+				file_put_contents($goaccess_conf, preg_replace('/^(#)?html-report-title(.*)?/m', "html-report-title $domain", file_get_contents($goaccess_conf)));
+			}
+
+
+
+			if(!@is_dir($statsdir)) mkdir($statsdir);
+			$username = escapeshellcmd($rec['system_user']);
+			$groupname = escapeshellcmd($rec['system_group']);
+			$docroot = $rec['document_root'];
+
+			$goa_db_dir = $docroot.'/'.$web_folder.'/stats/.db/';
+			$output_html = $docroot.'/'.$web_folder.'/stats/goaindex.html';
+                        if(!@is_dir($goa_db_dir)) mkdir($goa_db_dir);
+
+                        if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
+                        symlink($logfile, '/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
+
+
+			chown($statsdir, $username);
+			chgrp($statsdir, $groupname);
+
+			$goamonth = date("n");
+			$goayear = date("Y");
+
+			if (date("d") == 1) {
+				$goamonth = date("m")-1;
+				if (date("m") == 1) {
+					$goayear = date("Y")-1;
+					$goamonth = "12";
+				}
+			}
+
+	
+			if (date("d") == 2) {
+				$goamonth = date("m")-1;
+				if (date("m") == 1) {
+					$goayear = date("Y")-1;
+					$goamonth = "12";
+				}
+
+				$statsdirold = $statsdir."/".$goayear."-".$goamonth."/";
+
+				if(!is_dir($statsdirold)) {
+					mkdir($statsdirold);
+				}
+
+				rename($goa_db_dir, $statsdirold.'db');
+                                mkdir($goa_db_dir);
+
+				$files = scandir($statsdir);
+				foreach ($files as $file) {
+					if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") copy("$statsdir"."/"."$file", "$statsdirold"."$file");
+				}
+			}
+			
+                        $app->system->exec_safe("goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $logfile, $goaccess_conf, $goa_db_dir, $output_html);
+
+			if(!is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+				if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+					copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+				} else {
+					copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+				}
+			}
+
+			$app->log('Created GoAccess statistics for ' . $domain, LOGLEVEL_DEBUG);
+		
+
+			if(is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+				chown($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_user']);
+				chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
+			}
+
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
+
+		}
+	} else {
+		$app->log("Stats not generated. The GoAccess binary couldn't be found. Make sure that GoAccess is installed and that it is in \$PATH", LOGLEVEL_WARN);
+	}
+
+		parent::onRunJob();
+	}
+
+	/* this function is optional if it contains no custom code */
+	public function onAfterRun() {
+		global $app;
+
+		parent::onAfterRun();
+	}
+
+}
+
+?>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 26f2948256..1bebab55f4 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1863,6 +1863,12 @@ class apache2_plugin {
 			$this->awstats_update($data, $web_config);
 		}
 
+                //* Create GoAccess configuration
+                if($data['new']['stats_type'] == 'goaccess' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
+                        $this->goaccess_update($data, $web_config);
+                }
+
+
 		//* Remove Stats-Folder when Statistics set to none
 		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
 			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
@@ -2973,6 +2979,67 @@ class apache2_plugin {
 		}
 	}
 
+	//* Update the GoAccess configuration file
+        private function goaccess_update ($data, $web_config) {
+                global $app;
+
+                $web_folder = $data['new']['web_folder'];
+                if($data['new']['type'] == 'vhost') $web_folder = 'web';
+
+                $goaccess_conf_dir = '/etc/';
+                $goaccess_conf_main = $goaccess_conf_dir.'goaccess.conf';
+
+                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) mkdir($data['new']['document_root']."/" . $web_folder . "/stats/.db");
+                $goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
+
+
+                /*
+                In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
+                By default the originaly with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
+                */
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
+                        copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
+                } elseif(!file_exists($goaccess_conf)) {
+                        /*
+                         By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
+                         Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
+                        */
+                        copy($goaccess_conf_main, $goaccess_conf);
+                        file_put_contents($goaccess_conf, preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", file_get_contents($goaccess_conf)));
+                }
+
+                if(file_exists($goaccess_conf)) {
+                        $domain = escapeshellcmd($data['new']['domain']);
+                        file_put_contents($goaccess_conf, preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", file_get_contents($goaccess_conf)));
+                }
+
+                if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
+                        $app->log('Created GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
+                } else {
+                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in ".$goaccess_conf_dir.".", LOGLEVEL_WARN);
+                }
+
+                if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html");
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+                        $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+                } else {
+                        $app->system->copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+                }
+        }
+
+        //* Delete the GoAccess configuration file
+        private function goaccess_delete ($data, $web_config) {
+                global $app;
+
+                $goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
+
+                if ( @is_file($goaccess_conf) ) {
+                        $app->system->unlink($goaccess_conf);
+                        $app->log('Removed GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
+                }
+        }
+
+
 	//* Delete the awstats configuration file
 	private function awstats_delete ($data, $web_config) {
 		global $app;
-- 
GitLab


From fa064a7cab3f1c02a8e0bb4805c97f742ae7d8bb Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Mon, 27 Jul 2020 12:27:13 +0200
Subject: [PATCH 526/571] missed nginx_plugin code in previous commit

---
 server/plugins-available/nginx_plugin.inc.php | 65 +++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index ad6fc5f07b..d02811ad93 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2532,6 +2532,71 @@ class nginx_plugin {
 		//$app->services->restartServiceDelayed('httpd','reload');
 	}
 
+
+
+        //* Update the GoAccess configuration file
+        private function goaccess_update ($data, $web_config) {
+                global $app;
+
+                $web_folder = $data['new']['web_folder'];
+                if($data['new']['type'] == 'vhost') $web_folder = 'web';
+
+		$goaccess_conf_dir = '/etc/';
+                $goaccess_conf_main = $goaccess_conf_dir.'goaccess.conf';
+
+                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) mkdir($data['new']['document_root']."/" . $web_folder . "/stats/.db");
+		$goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
+
+
+		/*
+		In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
+		By default the originaly with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
+		*/
+		if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
+			copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
+		} elseif(!file_exists($goaccess_conf)) {
+			/*
+			 By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
+			 Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
+			*/
+			copy($goaccess_conf_main, $goaccess_conf);
+			file_put_contents($goaccess_conf, preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", file_get_contents($goaccess_conf)));
+		}
+
+                if(file_exists($goaccess_conf)) {
+                        $domain = escapeshellcmd($data['new']['domain']);
+			file_put_contents($goaccess_conf, preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", file_get_contents($goaccess_conf)));
+		}
+
+		if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
+			$app->log('Created GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
+		} else {
+			$app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in ".$goaccess_conf_dir.".", LOGLEVEL_WARN);
+		}
+
+                if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html");
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+                        $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+                } else {
+                        $app->system->copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+                }
+        }
+
+        //* Delete the GoAccess configuration file
+        private function goaccess_delete ($data, $web_config) {
+                global $app;
+
+                $goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
+
+                if ( @is_file($goaccess_conf) ) {
+                        $app->system->unlink($goaccess_conf);
+                        $app->log('Removed GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
+                }
+        }
+
+
+
+
 	//* Update the awstats configuration file
 	private function awstats_update ($data, $web_config) {
 		global $app;
-- 
GitLab


From 49779a62a20fb5a2293de771040b041431f9f82f Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 27 Jul 2020 12:48:43 +0200
Subject: [PATCH 527/571] Combine user and interface settings (#5626)

---
 .../web/tools/form/user_settings.tform.php    | 78 +++++++++++++++
 .../web/tools/lib/lang/ar_usersettings.lng    |  3 +
 .../web/tools/lib/lang/bg_usersettings.lng    |  3 +
 .../web/tools/lib/lang/br_usersettings.lng    |  3 +
 .../web/tools/lib/lang/ca_usersettings.lng    |  3 +
 .../web/tools/lib/lang/cz_usersettings.lng    |  3 +
 .../web/tools/lib/lang/de_usersettings.lng    |  3 +
 .../web/tools/lib/lang/dk_usersettings.lng    |  3 +
 .../web/tools/lib/lang/el_usersettings.lng    |  2 +
 .../web/tools/lib/lang/en_usersettings.lng    |  7 ++
 .../web/tools/lib/lang/es_usersettings.lng    |  3 +
 .../web/tools/lib/lang/fi_usersettings.lng    |  3 +
 .../web/tools/lib/lang/fr_usersettings.lng    |  3 +
 .../web/tools/lib/lang/hr_usersettings.lng    |  3 +
 .../web/tools/lib/lang/hu_usersettings.lng    |  3 +
 .../web/tools/lib/lang/id_usersettings.lng    |  3 +
 .../web/tools/lib/lang/it_usersettings.lng    |  3 +
 .../web/tools/lib/lang/ja_usersettings.lng    |  3 +
 .../web/tools/lib/lang/nl_usersettings.lng    |  3 +
 .../web/tools/lib/lang/pl_usersettings.lng    |  3 +
 .../web/tools/lib/lang/pt_usersettings.lng    |  3 +
 .../web/tools/lib/lang/ro_usersettings.lng    |  3 +
 .../web/tools/lib/lang/ru_usersettings.lng    |  5 +
 .../web/tools/lib/lang/se_usersettings.lng    |  3 +
 .../web/tools/lib/lang/sk_usersettings.lng    |  3 +
 .../web/tools/lib/lang/tr_usersettings.lng    |  3 +
 interface/web/tools/lib/module.conf.php       | 23 +----
 .../web/tools/templates/user_settings.htm     | 99 +++++++++++--------
 interface/web/tools/user_settings.php         | 34 ++++++-
 29 files changed, 249 insertions(+), 65 deletions(-)

diff --git a/interface/web/tools/form/user_settings.tform.php b/interface/web/tools/form/user_settings.tform.php
index 7daa1a7b84..a696d75339 100644
--- a/interface/web/tools/form/user_settings.tform.php
+++ b/interface/web/tools/form/user_settings.tform.php
@@ -92,6 +92,46 @@ while ($file = @readdir($handle)) {
 		}
 	}
 }
+//* Pick out modules
+//* TODO: limit to activated modules of the user
+$modules_list = array();
+if($_SESSION["s"]["user"]["typ"] == 'admin') {
+	$handle = @opendir(ISPC_WEB_PATH);
+	while ($file = @readdir($handle)) {
+		if ($file != '.' && $file != '..') {
+			if(@is_dir(ISPC_WEB_PATH."/$file")) {
+				if(is_file(ISPC_WEB_PATH."/$file/lib/module.conf.php") and $file != 'login' && $file != 'designer' && $file != 'mailuser') {
+					$modules_list[$file] = $file;
+				}
+			}
+		}
+	}
+} else {
+	$tmp = $app->db->queryOneRecord("SELECT * FROM sys_user where username = ?", $_SESSION["s"]["user"]['username']);
+	$modules = $tmp['modules'];
+	//$modules = $conf['interface_modules_enabled'];
+	if($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+		$modules .= ',client';
+	}
+	$tmp = explode(',', $modules);
+	foreach($tmp as $m) {
+		$modules_list[$m] = $m;
+	}
+}
+
+//* Load themes
+$themes_list = array();
+$handle = @opendir(ISPC_THEMES_PATH);
+while ($file = @readdir($handle)) {
+	if (substr($file, 0, 1) != '.') {
+		if(@is_dir(ISPC_THEMES_PATH."/$file")) {
+			if(!file_exists(ISPC_THEMES_PATH."/$file/ispconfig_version") || (@file_exists(ISPC_THEMES_PATH."/$file/ispconfig_version") && trim(@file_get_contents(ISPC_THEMES_PATH."/$file/ispconfig_version")) == ISPC_APP_VERSION)) {
+				$themes_list[$file] = $file;
+			}
+		}
+	}
+}
+
 
 $form['tabs']['users'] = array (
 	'title'  => 'Settings',
@@ -141,6 +181,44 @@ $form['tabs']['users'] = array (
 			'maxlength' => '2',
 			'rows'  => '',
 			'cols'  => ''
+		),
+		'startmodule' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'startmodule_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'startmodule_regex'),
+			),
+			'regex'  => '',
+			'errmsg' => '',
+			'default' => '',
+			'value'  => $modules_list,
+			'separator' => '',
+			'width'  => '30',
+			'maxlength' => '255',
+			'rows'  => '',
+			'cols'  => ''
+		),
+		'app_theme' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'app_theme_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'app_theme_regex'),
+			),
+			'regex' => '',
+			'errmsg' => '',
+			'default' => 'default',
+			'value' => $themes_list,
+			'separator' => '',
+			'width' => '30',
+			'maxlength' => '255',
+			'rows' => '',
+			'cols' => ''
 		)
 		//#################################
 		// ENDE Datenbankfelder
diff --git a/interface/web/tools/lib/lang/ar_usersettings.lng b/interface/web/tools/lib/lang/ar_usersettings.lng
index 4ac506ab77..c05b94e76e 100644
--- a/interface/web/tools/lib/lang/ar_usersettings.lng
+++ b/interface/web/tools/lib/lang/ar_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/bg_usersettings.lng b/interface/web/tools/lib/lang/bg_usersettings.lng
index 838053f563..c30dcf3701 100644
--- a/interface/web/tools/lib/lang/bg_usersettings.lng
+++ b/interface/web/tools/lib/lang/bg_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/br_usersettings.lng b/interface/web/tools/lib/lang/br_usersettings.lng
index cb3ae2dc4f..e254e81a4f 100644
--- a/interface/web/tools/lib/lang/br_usersettings.lng
+++ b/interface/web/tools/lib/lang/br_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Gerar Senha';
 $wb['repeat_password_txt'] = 'Repetir Senha';
 $wb['password_mismatch_txt'] = 'As senhas não coincidem.';
 $wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['language_txt'] = 'Idioma';
+$wb['startmodule_txt'] = 'Módulo Inicial';
+$wb['app_theme_txt'] = 'Tema';
 ?>
diff --git a/interface/web/tools/lib/lang/ca_usersettings.lng b/interface/web/tools/lib/lang/ca_usersettings.lng
index fa40272aa0..4705660b9e 100644
--- a/interface/web/tools/lib/lang/ca_usersettings.lng
+++ b/interface/web/tools/lib/lang/ca_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Générer mot de passe';
 $wb['repeat_password_txt'] = 'Retaper le mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Page d\'accueil';
+$wb['app_theme_txt'] = 'Interface';
 ?>
diff --git a/interface/web/tools/lib/lang/cz_usersettings.lng b/interface/web/tools/lib/lang/cz_usersettings.lng
index ab76b2261d..f447299e08 100644
--- a/interface/web/tools/lib/lang/cz_usersettings.lng
+++ b/interface/web/tools/lib/lang/cz_usersettings.lng
@@ -9,4 +9,7 @@ $wb['repeat_password_txt'] = 'Opakujte heslo';
 $wb['password_mismatch_txt'] = 'Hesla se neshodují.';
 $wb['password_match_txt'] = 'Hesla se shodují.';
 $wb['password_txt'] = 'Heslo';
+$wb['language_txt'] = 'Jazyk';
+$wb['startmodule_txt'] = 'Výchozí modul po přihlášení';
+$wb['app_theme_txt'] = 'Výchozí grafické téma';
 ?>
diff --git a/interface/web/tools/lib/lang/de_usersettings.lng b/interface/web/tools/lib/lang/de_usersettings.lng
index c643d38ff4..dd5fefffae 100644
--- a/interface/web/tools/lib/lang/de_usersettings.lng
+++ b/interface/web/tools/lib/lang/de_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Passwort erzeugen';
 $wb['repeat_password_txt'] = 'Passwort wiederholen';
 $wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
 $wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
+$wb['language_txt'] = 'Sprache';
+$wb['startmodule_txt'] = 'Startmodul';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/dk_usersettings.lng b/interface/web/tools/lib/lang/dk_usersettings.lng
index 9398f2626a..341d9db757 100644
--- a/interface/web/tools/lib/lang/dk_usersettings.lng
+++ b/interface/web/tools/lib/lang/dk_usersettings.lng
@@ -9,4 +9,7 @@ $wb['repeat_password_txt'] = 'Gentage Adgangskode';
 $wb['password_mismatch_txt'] = 'Adgangskoderne stemmer ikke overens.';
 $wb['password_match_txt'] = 'Adgangskoderne stemmer overens.';
 $wb['password_txt'] = 'Password';
+$wb['language_txt'] = 'Sprog';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/el_usersettings.lng b/interface/web/tools/lib/lang/el_usersettings.lng
index 57e8bcb17a..68ddcd657c 100644
--- a/interface/web/tools/lib/lang/el_usersettings.lng
+++ b/interface/web/tools/lib/lang/el_usersettings.lng
@@ -9,4 +9,6 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/en_usersettings.lng b/interface/web/tools/lib/lang/en_usersettings.lng
index 79c7437cb1..601ae420ff 100644
--- a/interface/web/tools/lib/lang/en_usersettings.lng
+++ b/interface/web/tools/lib/lang/en_usersettings.lng
@@ -9,4 +9,11 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb["language_txt"] = 'Language';
+$wb["startmodule_txt"] = 'Startmodule';
+$wb["app_theme_txt"] = 'Design';
+$wb['startmodule_empty'] = 'Startmodule empty.';
+$wb['startmodule_regex'] = 'Invalid chars in Startmodule.';
+$wb['app_theme_empty'] = 'App theme empty.';
+$wb['app_theme_regex'] = 'Invalid chars in App theme.';
 ?>
diff --git a/interface/web/tools/lib/lang/es_usersettings.lng b/interface/web/tools/lib/lang/es_usersettings.lng
index 9b2de57bfb..43a181a11c 100644
--- a/interface/web/tools/lib/lang/es_usersettings.lng
+++ b/interface/web/tools/lib/lang/es_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generar contraseña';
 $wb['repeat_password_txt'] = 'Repetir contraseña';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
 $wb['password_match_txt'] = 'Las contraseñas coinciden.';
+$wb['language_txt'] = 'Idioma';
+$wb['startmodule_txt'] = 'Módulo de inicio';
+$wb['app_theme_txt'] = 'Diseño';
 ?>
diff --git a/interface/web/tools/lib/lang/fi_usersettings.lng b/interface/web/tools/lib/lang/fi_usersettings.lng
index 8267c8117a..91d7173953 100644
--- a/interface/web/tools/lib/lang/fi_usersettings.lng
+++ b/interface/web/tools/lib/lang/fi_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/fr_usersettings.lng b/interface/web/tools/lib/lang/fr_usersettings.lng
index bafccd3b97..b398e76e35 100644
--- a/interface/web/tools/lib/lang/fr_usersettings.lng
+++ b/interface/web/tools/lib/lang/fr_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Générer un mot de passe';
 $wb['repeat_password_txt'] = 'Répéter le mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/hr_usersettings.lng b/interface/web/tools/lib/lang/hr_usersettings.lng
index 50759d4883..b707cce4da 100644
--- a/interface/web/tools/lib/lang/hr_usersettings.lng
+++ b/interface/web/tools/lib/lang/hr_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generiraj Å¡ifru';
 $wb['repeat_password_txt'] = 'Ponovi Å¡ifru';
 $wb['password_mismatch_txt'] = 'Šifre nisu identične.';
 $wb['password_match_txt'] = 'Šifre su identične.';
+$wb['language_txt'] = 'Jezik';
+$wb['startmodule_txt'] = 'Početna stranica';
+$wb['app_theme_txt'] = 'Tema';
 ?>
diff --git a/interface/web/tools/lib/lang/hu_usersettings.lng b/interface/web/tools/lib/lang/hu_usersettings.lng
index 49aa75537f..2a89acf5b5 100644
--- a/interface/web/tools/lib/lang/hu_usersettings.lng
+++ b/interface/web/tools/lib/lang/hu_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/id_usersettings.lng b/interface/web/tools/lib/lang/id_usersettings.lng
index 7b1bc225ca..760cfe75f2 100644
--- a/interface/web/tools/lib/lang/id_usersettings.lng
+++ b/interface/web/tools/lib/lang/id_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/it_usersettings.lng b/interface/web/tools/lib/lang/it_usersettings.lng
index e75e8d28d2..a1ad8eba87 100644
--- a/interface/web/tools/lib/lang/it_usersettings.lng
+++ b/interface/web/tools/lib/lang/it_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/ja_usersettings.lng b/interface/web/tools/lib/lang/ja_usersettings.lng
index 443a451054..291aa94537 100644
--- a/interface/web/tools/lib/lang/ja_usersettings.lng
+++ b/interface/web/tools/lib/lang/ja_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/nl_usersettings.lng b/interface/web/tools/lib/lang/nl_usersettings.lng
index 0a95f7ffa9..909df9dbec 100644
--- a/interface/web/tools/lib/lang/nl_usersettings.lng
+++ b/interface/web/tools/lib/lang/nl_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Taal';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/pl_usersettings.lng b/interface/web/tools/lib/lang/pl_usersettings.lng
index 45081f681b..64396df240 100644
--- a/interface/web/tools/lib/lang/pl_usersettings.lng
+++ b/interface/web/tools/lib/lang/pl_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Wygeneruj hasło';
 $wb['repeat_password_txt'] = 'Powtórz hasło';
 $wb['password_mismatch_txt'] = 'Hasła się nie zgadzają';
 $wb['password_match_txt'] = 'Hasła się zgadzają';
+$wb['language_txt'] = 'Język';
+$wb['startmodule_txt'] = 'Moduł startowy';
+$wb['app_theme_txt'] = 'Temat';
 ?>
diff --git a/interface/web/tools/lib/lang/pt_usersettings.lng b/interface/web/tools/lib/lang/pt_usersettings.lng
index 81fd824d30..4925a3f728 100644
--- a/interface/web/tools/lib/lang/pt_usersettings.lng
+++ b/interface/web/tools/lib/lang/pt_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/ro_usersettings.lng b/interface/web/tools/lib/lang/ro_usersettings.lng
index fae890fab6..8c43550f33 100644
--- a/interface/web/tools/lib/lang/ro_usersettings.lng
+++ b/interface/web/tools/lib/lang/ro_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/ru_usersettings.lng b/interface/web/tools/lib/lang/ru_usersettings.lng
index 609b69fdb0..ffa3f3bf03 100644
--- a/interface/web/tools/lib/lang/ru_usersettings.lng
+++ b/interface/web/tools/lib/lang/ru_usersettings.lng
@@ -9,4 +9,9 @@ $wb['generate_password_txt'] = 'Создать пароль';
 $wb['repeat_password_txt'] = 'Повторить пароль';
 $wb['password_mismatch_txt'] = 'Пароли не совпадают.';
 $wb['password_match_txt'] = 'Эти пароли совпадают.';
+$wb['interface_head_txt'] = 'Настройки интерфейса';
+$wb['interface_desc_txt'] = 'Измените свой интерфейс';
+$wb['language_txt'] = 'Язык';
+$wb['startmodule_txt'] = 'Стартовый модуль';
+$wb['app_theme_txt'] = 'Тема';
 ?>
diff --git a/interface/web/tools/lib/lang/se_usersettings.lng b/interface/web/tools/lib/lang/se_usersettings.lng
index 4461fff496..f6de2dc4ee 100644
--- a/interface/web/tools/lib/lang/se_usersettings.lng
+++ b/interface/web/tools/lib/lang/se_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generera lösenord';
 $wb['repeat_password_txt'] = 'Upprepa lösenord';
 $wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
 $wb['password_match_txt'] = 'Lösenorden matchar';
+$wb['language_txt'] = 'Språk';
+$wb['startmodule_txt'] = 'Startmodul';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/sk_usersettings.lng b/interface/web/tools/lib/lang/sk_usersettings.lng
index 4c8bcb900e..e00f5e664b 100644
--- a/interface/web/tools/lib/lang/sk_usersettings.lng
+++ b/interface/web/tools/lib/lang/sk_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generate Password';
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_usersettings.lng b/interface/web/tools/lib/lang/tr_usersettings.lng
index fa2eff63d7..a1fd7c56d4 100644
--- a/interface/web/tools/lib/lang/tr_usersettings.lng
+++ b/interface/web/tools/lib/lang/tr_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
+$wb['language_txt'] = 'Dil';
+$wb['startmodule_txt'] = 'Başlangıç modülü';
+$wb['app_theme_txt'] = 'Tasarım';
 ?>
diff --git a/interface/web/tools/lib/module.conf.php b/interface/web/tools/lib/module.conf.php
index 617ab0b6cd..5911cdbebf 100644
--- a/interface/web/tools/lib/module.conf.php
+++ b/interface/web/tools/lib/module.conf.php
@@ -5,7 +5,7 @@ global $conf;
 $module['name']  = 'tools';
 $module['title']  = 'top_menu_tools';
 $module['template']  = 'module.tpl.htm';
-$module['startpage']  = 'tools/index.php';
+$module['startpage']  = 'tools/user_settings.php';
 $module['tab_width']    = '60';
 $module['order']    = '80';
 
@@ -13,7 +13,7 @@ $module['order']    = '80';
 //**** Change User password
 $items = array();
 
-$items[] = array(   'title'  => 'Password and Language',
+$items[] = array(   'title'  => 'User Settings',
 	'target'  => 'content',
 	'link' => 'tools/user_settings.php',
 	'html_id'   => 'user_settings');
@@ -24,23 +24,4 @@ $module['nav'][] = array(   'title' => 'User Settings',
 	'items' => $items);
 
 unset($items);
-
-//**** Change interface settings + load settings page of the activated theme
-$items = array();
-
-$items[] = array(   'title'     => 'Interface',
-	'target'  => 'content',
-	'link' => 'tools/interface_settings.php',
-	'html_id'   => 'interface_settings');
-
-if(file_exists(ISPC_WEB_PATH.'/tools/lib/interface.d/tpl_' . $_SESSION['s']['user']['app_theme'] . '.menu.php')) include_once ISPC_WEB_PATH.'/tools/lib/interface.d/tpl_' . $_SESSION['s']['user']['app_theme'] . '.menu.php';
-
-$module['nav'][] = array( 'title' => 'Interface',
-	'open'  => 1,
-	'items' => $items);
-
-unset($items);
-
-
-
 ?>
diff --git a/interface/web/tools/templates/user_settings.htm b/interface/web/tools/templates/user_settings.htm
index 4fa1c9de34..a620f419c5 100644
--- a/interface/web/tools/templates/user_settings.htm
+++ b/interface/web/tools/templates/user_settings.htm
@@ -1,41 +1,58 @@
-			<div class="form-group">
-                <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
-                <div class="col-sm-9">
-				<div class="input-group">
-					<input type="password" name="passwort" id="passwort" value="{tmpl_var name='passwort'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');" />
-					<span class="input-group-btn">
-						<button class="btn btn-default" type="button" onclick="generatePassword('passwort','repeat_password');">{tmpl_var name='generate_password_txt'}</button>
-					</span>
-				</div>
-				</div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
-                <div class="col-sm-9 checkbox">
-                <div id="passBar"></div>
-                <span id="passText">&nbsp;</span>
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
-                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off"  onkeyup="checkPassMatch('passwort','repeat_password');" /></div></div>
-            <div class="form-group">
-				<div class="col-sm-offset-3 col-sm-9">
-					<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
-					<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-				</div>
-			</div>
-            <div class="form-group">
-                <label for="language" class="col-sm-3 control-label">{tmpl_var name='language_txt'}</label>
-                <div class="col-sm-9"><select name="language" id="language" class="form-control flags">
-                    {tmpl_var name='language'}
-                </select></div>
-            </div>
-        
-        
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-            
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/user_settings.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
+<div class="form-group">
+  <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+  <div class="col-sm-9">
+    <div class="input-group">
+      <input type="password" name="passwort" id="passwort" value="{tmpl_var name='passwort'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');" />
+      <span class="input-group-btn">
+      <button class="btn btn-default" type="button" onclick="generatePassword('passwort','repeat_password');">{tmpl_var name='generate_password_txt'}</button>
+      </span>
+    </div>
+  </div>
+</div>
+<div class="form-group">
+  <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
+  <div class="col-sm-9 checkbox">
+    <div id="passBar"></div>
+    <span id="passText">&nbsp;</span>
+  </div>
+</div>
+<div class="form-group">
+  <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+  <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off"  onkeyup="checkPassMatch('passwort','repeat_password');" /></div>
+</div>
+<div class="form-group">
+  <div class="col-sm-offset-3 col-sm-9">
+    <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+    <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
+  </div>
+</div>
+<div class="form-group">
+  <label for="language" class="col-sm-3 control-label">{tmpl_var name='language_txt'}</label>
+  <div class="col-sm-9"><select name="language" id="language" class="form-control flags">
+    {tmpl_var name='language'}
+    </select>
+  </div>
+</div>
+<!-- TODO: If user theme change is activated -->
+<div class="form-group">
+  <label for="app_theme" class="col-sm-3 control-label">{tmpl_var name='app_theme_txt'}</label>
+  <div class="col-sm-9"><select name="app_theme" id="app_theme" class="form-control">
+    {tmpl_var name='app_theme'}
+    </select>
+  </div>
+</div>
+<!-- TODO: Limit to activated modules -->
+<div class="form-group">
+  <label for="startmodule" class="col-sm-3 control-label">{tmpl_var name='startmodule_txt'}</label>
+  <div class="col-sm-9"><select name="startmodule" id="startmodule" class="form-control">
+    {tmpl_var name='startmodule'}
+    </select>
+  </div>
+</div>
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<div class="clear">
+  <div class="right">
+    <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/user_settings.php">{tmpl_var name='btn_save_txt'}</button>
+    <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+  </div>
+</div>
diff --git a/interface/web/tools/user_settings.php b/interface/web/tools/user_settings.php
index 5c3876fb86..03c0b6a7e2 100644
--- a/interface/web/tools/user_settings.php
+++ b/interface/web/tools/user_settings.php
@@ -86,22 +86,50 @@ class page_action extends tform_actions {
 		if($_POST['passwort'] != $_POST['repeat_password']) {
 			$app->tform->errorMessage = $app->tform->lng('password_mismatch');
 		}
-		
+
 		$language = $app->functions->check_language($_POST['language']);
 		$_SESSION['s']['user']['language'] = $language;
 		$_SESSION['s']['language'] = $language;
 	}
-	
+
 	function onAfterUpdate() {
 		global $app;
-		
+
 		if($_POST['passwort'] != '') {
 			$tmp_user = $app->db->queryOneRecord("SELECT passwort FROM sys_user WHERE userid = ?", $_SESSION['s']['user']['userid']);
 			$_SESSION['s']['user']['passwort'] = $tmp_user['passwort'];
 			unset($tmp_user);
 		}
+		$this->updateSessionTheme();
+
+		if($this->_theme_changed == true) {
+			// not the best way, but it works
+			header('Content-Type: text/html');
+			print '<script type="text/javascript">document.location.reload();</script>';
+			exit;
+		}
 	}
+	var $_theme_changed = false;
 
+	function updateSessionTheme() {
+		global $app, $conf;
+
+		if($this->dataRecord['app_theme'] != 'default') {
+			$tmp_path = ISPC_THEMES_PATH."/".$this->dataRecord['app_theme'];
+			if(!@is_dir($tmp_path) || (@file_exists($tmp_path."/ispconfig_version") && trim(file_get_contents($tmp_path."/ispconfig_version")) != ISPC_APP_VERSION)) {
+				// fall back to default theme if this one is not compatible with current ispc version
+				$this->dataRecord['app_theme'] = 'default';
+			}
+		}
+		if($this->dataRecord['app_theme'] != $_SESSION['s']['user']['theme']) $this->_theme_changed = true;
+		$_SESSION['s']['theme'] = $this->dataRecord['app_theme'];
+		$_SESSION['s']['user']['theme'] = $_SESSION['s']['theme'];
+		$_SESSION['s']['user']['app_theme'] = $_SESSION['s']['theme'];
+	}
+
+	function onAfterInsert() {
+		$this->onAfterUpdate();
+	}
 
 }
 
-- 
GitLab


From 94ba1c2be5a325783be3b432282ab03c1a13c85f Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 27 Jul 2020 12:57:09 +0200
Subject: [PATCH 528/571] Remove old interface settings files (#5626)

---
 .../tools/form/interface_settings.tform.php   | 189 ------------------
 interface/web/tools/interface_settings.php    | 139 -------------
 interface/web/tools/lib/lang/ar_interface.lng |   7 -
 interface/web/tools/lib/lang/bg_interface.lng |   7 -
 interface/web/tools/lib/lang/br_interface.lng |   7 -
 interface/web/tools/lib/lang/ca_interface.lng |   7 -
 interface/web/tools/lib/lang/cz_interface.lng |   7 -
 interface/web/tools/lib/lang/de_interface.lng |   7 -
 interface/web/tools/lib/lang/dk_interface.lng |   7 -
 interface/web/tools/lib/lang/el_interface.lng |   7 -
 interface/web/tools/lib/lang/en_interface.lng |  11 -
 interface/web/tools/lib/lang/es_interface.lng |   7 -
 interface/web/tools/lib/lang/fi_interface.lng |   7 -
 interface/web/tools/lib/lang/fr_interface.lng |   7 -
 interface/web/tools/lib/lang/hr_interface.lng |   7 -
 interface/web/tools/lib/lang/hu_interface.lng |   7 -
 interface/web/tools/lib/lang/id_interface.lng |   7 -
 interface/web/tools/lib/lang/it_interface.lng |   7 -
 interface/web/tools/lib/lang/ja_interface.lng |   7 -
 interface/web/tools/lib/lang/nl_interface.lng |   7 -
 interface/web/tools/lib/lang/pl_interface.lng |   7 -
 interface/web/tools/lib/lang/pt_interface.lng |   7 -
 interface/web/tools/lib/lang/ro_interface.lng |   7 -
 interface/web/tools/lib/lang/ru_interface.lng |   7 -
 interface/web/tools/lib/lang/se_interface.lng |   7 -
 interface/web/tools/lib/lang/sk_interface.lng |   7 -
 interface/web/tools/lib/lang/tr_interface.lng |   7 -
 .../tools/templates/interface_settings.htm    |  22 --
 28 files changed, 529 deletions(-)
 delete mode 100644 interface/web/tools/form/interface_settings.tform.php
 delete mode 100644 interface/web/tools/interface_settings.php
 delete mode 100644 interface/web/tools/lib/lang/ar_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/bg_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/br_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/ca_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/cz_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/de_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/dk_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/el_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/en_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/es_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/fi_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/fr_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/hr_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/hu_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/id_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/it_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/ja_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/nl_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/pl_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/pt_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/ro_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/ru_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/se_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/sk_interface.lng
 delete mode 100644 interface/web/tools/lib/lang/tr_interface.lng
 delete mode 100644 interface/web/tools/templates/interface_settings.htm

diff --git a/interface/web/tools/form/interface_settings.tform.php b/interface/web/tools/form/interface_settings.tform.php
deleted file mode 100644
index 05eaba9416..0000000000
--- a/interface/web/tools/form/interface_settings.tform.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-
-/*
-Copyright (c) 2005, Till Brehm, projektfarm Gmbh
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
-	Form Definition
-
-	Tabellendefinition
-
-	Datentypen:
-	- INTEGER (Wandelt Ausdr�cke in Int um)
-	- DOUBLE
-	- CURRENCY (Formatiert Zahlen nach W�hrungsnotation)
-	- VARCHAR (kein weiterer Format Check)
-	- TEXT (kein weiterer Format Check)
-	- DATE (Datumsformat, Timestamp Umwandlung)
-
-	Formtype:
-	- TEXT (normales Textfeld)
-	- TEXTAREA (normales Textfeld)
-	- PASSWORD (Feldinhalt wird nicht angezeigt)
-	- SELECT (Gibt Werte als option Feld aus)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hinweis:
-	Das ID-Feld ist nicht bei den Table Values einzuf�gen.
-
-
-*/
-
-$form['title']   = 'interface_head_txt';
-//*$form['description']  = 'interface_desc_txt';
-$form['name']   = 'interface';
-$form['action']  = 'interface_settings.php';
-$form['db_table'] = 'sys_user';
-$form['db_table_idx'] = 'userid';
-$form["db_history"] = "no";
-$form['tab_default'] = 'main';
-$form['list_default'] = 'index.php';
-$form['auth']  = 'no'; //??
-
-//* 0 = id of the user, > 0 id must match with id of current user
-$form['auth_preset']['userid']  = 0;
-//* 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form['auth_preset']['groupid'] = 0;
-
-//** Permissions are: r = read, i = insert, u = update, d = delete
-$form['auth_preset']['perm_user']  = 'riud';
-$form['auth_preset']['perm_group'] = 'riud';
-$form['auth_preset']['perm_other'] = '';
-
-//* Pick out modules
-//* TODO: limit to activated modules of the user
-$modules_list = array();
-if($_SESSION["s"]["user"]["typ"] == 'admin') {
-	$handle = @opendir(ISPC_WEB_PATH);
-	while ($file = @readdir($handle)) {
-		if ($file != '.' && $file != '..') {
-			if(@is_dir(ISPC_WEB_PATH."/$file")) {
-				if(is_file(ISPC_WEB_PATH."/$file/lib/module.conf.php") and $file != 'login' && $file != 'designer' && $file != 'mailuser') {
-					$modules_list[$file] = $file;
-				}
-			}
-		}
-	}
-} else {
-	$tmp = $app->db->queryOneRecord("SELECT * FROM sys_user where username = ?", $_SESSION["s"]["user"]['username']);
-	$modules = $tmp['modules'];
-	//$modules = $conf['interface_modules_enabled'];
-	if($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-		$modules .= ',client';
-	}
-	$tmp = explode(',', $modules);
-	foreach($tmp as $m) {
-		$modules_list[$m] = $m;
-	}
-}
-
-//* Languages
-$language_list = array();
-$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
-while ($file = @readdir($handle)) {
-	if ($file != '.' && $file != '..') {
-		if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file, -4, 4) == '.lng') {
-			$tmp = substr($file, 0, 2);
-			$language_list[$tmp] = $tmp;
-		}
-	}
-}
-
-//* Load themes
-$themes_list = array();
-$handle = @opendir(ISPC_THEMES_PATH);
-while ($file = @readdir($handle)) {
-	if (substr($file, 0, 1) != '.') {
-		if(@is_dir(ISPC_THEMES_PATH."/$file")) {
-			if(!file_exists(ISPC_THEMES_PATH."/$file/ispconfig_version") || (@file_exists(ISPC_THEMES_PATH."/$file/ispconfig_version") && trim(@file_get_contents(ISPC_THEMES_PATH."/$file/ispconfig_version")) == ISPC_APP_VERSION)) {
-				$themes_list[$file] = $file;
-			}
-		}
-	}
-}
-
-$form['tabs']['main'] = array (
-	'title'  => 'Settings',
-	'width'  => 80,
-	'template'  => 'templates/interface_settings.htm',
-	'fields'  => array (
-		//#################################
-		// Beginn Datenbankfelder
-		//#################################
-		'startmodule' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
-					'errmsg'=> 'startmodule_empty'),
-				1 => array (    'type' => 'REGEX',
-					'regex' => '/^[a-z0-9\_]{0,64}$/',
-					'errmsg'=> 'startmodule_regex'),
-			),
-			'regex'  => '',
-			'errmsg' => '',
-			'default' => '',
-			'value'  => $modules_list,
-			'separator' => '',
-			'width'  => '30',
-			'maxlength' => '255',
-			'rows'  => '',
-			'cols'  => ''
-		),
-		'app_theme' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
-					'errmsg'=> 'app_theme_empty'),
-				1 => array (    'type' => 'REGEX',
-					'regex' => '/^[a-z0-9\_]{0,64}$/',
-					'errmsg'=> 'app_theme_regex'),
-			),
-			'regex' => '',
-			'errmsg' => '',
-			'default' => 'default',
-			'value' => $themes_list,
-			'separator' => '',
-			'width' => '30',
-			'maxlength' => '255',
-			'rows' => '',
-			'cols' => ''
-		)
-		//#################################
-		// ENDE Datenbankfelder
-		//#################################
-	)
-);
-
-
-?>
diff --git a/interface/web/tools/interface_settings.php b/interface/web/tools/interface_settings.php
deleted file mode 100644
index b14b637375..0000000000
--- a/interface/web/tools/interface_settings.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-/*
-Copyright (c) 2008, Till Brehm, projektfarm Gmbh
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$tform_def_file = "form/interface_settings.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once '../../lib/config.inc.php';
-require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('tools');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-	var $_theme_changed = false;
-
-	function onLoad() {
-		global $app, $conf, $tform_def_file;
-
-		// Loading template classes and initialize template
-		if(!is_object($app->tpl)) $app->uses('tpl');
-		if(!is_object($app->tform)) $app->uses('tform');
-
-		$app->tpl->newTemplate("tabbed_form.tpl.htm");
-
-		// Load table definition from file
-		$app->tform->loadFormDef($tform_def_file);
-
-		// Importing ID
-		$this->id = $_SESSION['s']['user']['userid'];
-		$_POST['id'] = $_SESSION['s']['user']['userid'];
-
-		if(count($_POST) > 1) {
-			$this->dataRecord = $_POST;
-			$this->onSubmit();
-		} else {
-			$this->onShow();
-		}
-	}
-
-	function onBeforeInsert() {
-		global $app, $conf;
-
-		if(!in_array($this->dataRecord['startmodule'], $this->dataRecord['modules'])) {
-			$app->tform->errorMessage .= $app->tform->wordbook['startmodule_err'];
-		}
-	}
-
-	function onInsert() {
-		die('No inserts allowed.');
-	}
-
-	function onBeforeUpdate() {
-		global $app, $conf;
-
-		if($conf['demo_mode'] == true && $this->id <= 3) $app->tform->errorMessage .= 'This function is disabled in demo mode.';
-
-		if(@is_array($this->dataRecord['modules']) && !in_array($this->dataRecord['startmodule'], $this->dataRecord['modules'])) {
-			$app->tform->errorMessage .= $app->tform->wordbook['startmodule_err'];
-		}
-	}
-
-	function updateSessionTheme() {
-		global $app, $conf;
-
-		if($this->dataRecord['app_theme'] != 'default') {
-			$tmp_path = ISPC_THEMES_PATH."/".$this->dataRecord['app_theme'];
-			if(!@is_dir($tmp_path) || (@file_exists($tmp_path."/ispconfig_version") && trim(file_get_contents($tmp_path."/ispconfig_version")) != ISPC_APP_VERSION)) {
-				// fall back to default theme if this one is not compatible with current ispc version
-				$this->dataRecord['app_theme'] = 'default';
-			}
-		}
-		if($this->dataRecord['app_theme'] != $_SESSION['s']['user']['theme']) $this->_theme_changed = true;
-		$_SESSION['s']['theme'] = $this->dataRecord['app_theme'];
-		$_SESSION['s']['user']['theme'] = $_SESSION['s']['theme'];
-		$_SESSION['s']['user']['app_theme'] = $_SESSION['s']['theme'];
-	}
-
-	function onAfterInsert() {
-		$this->onAfterUpdate();
-	}
-
-	function onAfterUpdate() {
-		
-		$this->updateSessionTheme();
-		
-		if($this->_theme_changed == true) {
-			// not the best way, but it works
-			header('Content-Type: text/html');
-			print '<script type="text/javascript">document.location.reload();</script>';
-			exit;
-		}
-		//else parent::onShow();
-	}
-
-
-}
-
-$page = new page_action;
-$page->onLoad();
-
-?>
diff --git a/interface/web/tools/lib/lang/ar_interface.lng b/interface/web/tools/lib/lang/ar_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/ar_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/bg_interface.lng b/interface/web/tools/lib/lang/bg_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/bg_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/br_interface.lng b/interface/web/tools/lib/lang/br_interface.lng
deleted file mode 100644
index 95677c4b59..0000000000
--- a/interface/web/tools/lib/lang/br_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Configurações da Interface';
-$wb['interface_desc_txt'] = 'Alterar a interface';
-$wb['language_txt'] = 'Idioma';
-$wb['startmodule_txt'] = 'Módulo Inicial';
-$wb['app_theme_txt'] = 'Tema';
-?>
diff --git a/interface/web/tools/lib/lang/ca_interface.lng b/interface/web/tools/lib/lang/ca_interface.lng
deleted file mode 100644
index b252103fd9..0000000000
--- a/interface/web/tools/lib/lang/ca_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Paramètres d\'interface';
-$wb['interface_desc_txt'] = 'Modifier votre interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Page d\'accueil';
-$wb['app_theme_txt'] = 'Interface';
-?>
diff --git a/interface/web/tools/lib/lang/cz_interface.lng b/interface/web/tools/lib/lang/cz_interface.lng
deleted file mode 100644
index 507b7c3cbe..0000000000
--- a/interface/web/tools/lib/lang/cz_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Nastavení rozhraní';
-$wb['interface_desc_txt'] = 'Možnost úpravy rozhraní';
-$wb['language_txt'] = 'Jazyk';
-$wb['startmodule_txt'] = 'Výchozí modul po přihlášení';
-$wb['app_theme_txt'] = 'Výchozí grafické téma';
-?>
diff --git a/interface/web/tools/lib/lang/de_interface.lng b/interface/web/tools/lib/lang/de_interface.lng
deleted file mode 100644
index 2af008f763..0000000000
--- a/interface/web/tools/lib/lang/de_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Benutzeroberflächen Einstellungen';
-$wb['interface_desc_txt'] = 'Passen Sie die Benutzeroberfläche für sich an';
-$wb['language_txt'] = 'Sprache';
-$wb['startmodule_txt'] = 'Startmodul';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/dk_interface.lng b/interface/web/tools/lib/lang/dk_interface.lng
deleted file mode 100644
index cc17dd2f5c..0000000000
--- a/interface/web/tools/lib/lang/dk_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Indstillinger';
-$wb['interface_desc_txt'] = 'Ændre din grænseflade';
-$wb['language_txt'] = 'Sprog';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/el_interface.lng b/interface/web/tools/lib/lang/el_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/el_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/en_interface.lng b/interface/web/tools/lib/lang/en_interface.lng
deleted file mode 100644
index 7cb0e2d8bc..0000000000
--- a/interface/web/tools/lib/lang/en_interface.lng
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-$wb["interface_head_txt"] = 'Interface Settings';
-$wb["interface_desc_txt"] = 'Modify your interface';
-$wb["language_txt"] = 'Language';
-$wb["startmodule_txt"] = 'Startmodule';
-$wb["app_theme_txt"] = 'Design';
-$wb['startmodule_empty'] = 'Startmodule empty.';
-$wb['startmodule_regex'] = 'Invalid chars in Startmodule.';
-$wb['app_theme_empty'] = 'App theme empty.';
-$wb['app_theme_regex'] = 'Invalid chars in App theme.';
-?>
\ No newline at end of file
diff --git a/interface/web/tools/lib/lang/es_interface.lng b/interface/web/tools/lib/lang/es_interface.lng
deleted file mode 100644
index 87b94e4c4a..0000000000
--- a/interface/web/tools/lib/lang/es_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Configuración de la interfaz';
-$wb['interface_desc_txt'] = 'Modifique su interfaz';
-$wb['language_txt'] = 'Idioma';
-$wb['startmodule_txt'] = 'Módulo de inicio';
-$wb['app_theme_txt'] = 'Diseño';
-?>
diff --git a/interface/web/tools/lib/lang/fi_interface.lng b/interface/web/tools/lib/lang/fi_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/fi_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/fr_interface.lng b/interface/web/tools/lib/lang/fr_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/fr_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/hr_interface.lng b/interface/web/tools/lib/lang/hr_interface.lng
deleted file mode 100644
index 5cc9815a10..0000000000
--- a/interface/web/tools/lib/lang/hr_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Postavke teme';
-$wb['interface_desc_txt'] = 'Podesi temu';
-$wb['language_txt'] = 'Jezik';
-$wb['startmodule_txt'] = 'Početna stranica';
-$wb['app_theme_txt'] = 'Tema';
-?>
diff --git a/interface/web/tools/lib/lang/hu_interface.lng b/interface/web/tools/lib/lang/hu_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/hu_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/id_interface.lng b/interface/web/tools/lib/lang/id_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/id_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/it_interface.lng b/interface/web/tools/lib/lang/it_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/it_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/ja_interface.lng b/interface/web/tools/lib/lang/ja_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/ja_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/nl_interface.lng b/interface/web/tools/lib/lang/nl_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/nl_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/pl_interface.lng b/interface/web/tools/lib/lang/pl_interface.lng
deleted file mode 100644
index 0256fab376..0000000000
--- a/interface/web/tools/lib/lang/pl_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Ustawienia interfejsu';
-$wb['interface_desc_txt'] = 'Zmień temat interfejsu';
-$wb['language_txt'] = 'Język';
-$wb['startmodule_txt'] = 'Moduł startowy';
-$wb['app_theme_txt'] = 'Temat';
-?>
diff --git a/interface/web/tools/lib/lang/pt_interface.lng b/interface/web/tools/lib/lang/pt_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/pt_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/ro_interface.lng b/interface/web/tools/lib/lang/ro_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/ro_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/ru_interface.lng b/interface/web/tools/lib/lang/ru_interface.lng
deleted file mode 100644
index 91644d5c2b..0000000000
--- a/interface/web/tools/lib/lang/ru_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Настройки интерфейса';
-$wb['interface_desc_txt'] = 'Измените свой интерфейс';
-$wb['language_txt'] = 'Язык';
-$wb['startmodule_txt'] = 'Стартовый модуль';
-$wb['app_theme_txt'] = 'Тема';
-?>
diff --git a/interface/web/tools/lib/lang/se_interface.lng b/interface/web/tools/lib/lang/se_interface.lng
deleted file mode 100644
index 9a66f59e00..0000000000
--- a/interface/web/tools/lib/lang/se_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Gränssnittsinställnignar';
-$wb['interface_desc_txt'] = 'Ändra ditt gränssnitt';
-$wb['language_txt'] = 'Språk';
-$wb['startmodule_txt'] = 'Startmodul';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/sk_interface.lng b/interface/web/tools/lib/lang/sk_interface.lng
deleted file mode 100644
index aab4fc89ff..0000000000
--- a/interface/web/tools/lib/lang/sk_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/tr_interface.lng b/interface/web/tools/lib/lang/tr_interface.lng
deleted file mode 100644
index 2384c71107..0000000000
--- a/interface/web/tools/lib/lang/tr_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Arayüz Ayarları';
-$wb['interface_desc_txt'] = 'Arayüzü Düzenle';
-$wb['language_txt'] = 'Dil';
-$wb['startmodule_txt'] = 'Başlangıç modülü';
-$wb['app_theme_txt'] = 'Tasarım';
-?>
diff --git a/interface/web/tools/templates/interface_settings.htm b/interface/web/tools/templates/interface_settings.htm
deleted file mode 100644
index 6767287206..0000000000
--- a/interface/web/tools/templates/interface_settings.htm
+++ /dev/null
@@ -1,22 +0,0 @@
-            <!-- TODO: If user theme change is activated -->
-            <div class="form-group">
-                <label for="app_theme" class="col-sm-3 control-label">{tmpl_var name='app_theme_txt'}</label>
-                <div class="col-sm-9"><select name="app_theme" id="app_theme" class="form-control">
-                    {tmpl_var name='app_theme'}
-                </select></div>
-            </div>
-            <!-- TODO: Limit to activated modules -->
-            <div class="form-group">
-                <label for="startmodule" class="col-sm-3 control-label">{tmpl_var name='startmodule_txt'}</label>
-                <div class="col-sm-9"><select name="startmodule" id="startmodule" class="form-control">
-                    {tmpl_var name='startmodule'}
-                </select></div>
-            </div>
-        
-        
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-            
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/interface_settings.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
-- 
GitLab


From c094c6020c143a721d8c6e6200fd87622ac7223d Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 27 Jul 2020 13:10:06 +0200
Subject: [PATCH 529/571] Add variables for DB size (#4475)

---
 interface/web/monitor/lib/lang/ar.lng | 2 ++
 interface/web/monitor/lib/lang/bg.lng | 2 ++
 interface/web/monitor/lib/lang/br.lng | 2 ++
 interface/web/monitor/lib/lang/ca.lng | 2 ++
 interface/web/monitor/lib/lang/cz.lng | 2 ++
 interface/web/monitor/lib/lang/de.lng | 2 ++
 interface/web/monitor/lib/lang/dk.lng | 2 ++
 interface/web/monitor/lib/lang/el.lng | 2 ++
 interface/web/monitor/lib/lang/en.lng | 2 ++
 interface/web/monitor/lib/lang/es.lng | 2 ++
 interface/web/monitor/lib/lang/fi.lng | 2 ++
 interface/web/monitor/lib/lang/fr.lng | 2 ++
 interface/web/monitor/lib/lang/hr.lng | 2 ++
 interface/web/monitor/lib/lang/hu.lng | 2 ++
 interface/web/monitor/lib/lang/id.lng | 2 ++
 interface/web/monitor/lib/lang/it.lng | 2 ++
 interface/web/monitor/lib/lang/ja.lng | 2 ++
 interface/web/monitor/lib/lang/nl.lng | 2 ++
 interface/web/monitor/lib/lang/pl.lng | 2 ++
 interface/web/monitor/lib/lang/pt.lng | 2 ++
 interface/web/monitor/lib/lang/ro.lng | 2 ++
 interface/web/monitor/lib/lang/ru.lng | 2 ++
 interface/web/monitor/lib/lang/se.lng | 2 ++
 interface/web/monitor/lib/lang/sk.lng | 2 ++
 interface/web/monitor/lib/lang/tr.lng | 2 ++
 25 files changed, 50 insertions(+)

diff --git a/interface/web/monitor/lib/lang/ar.lng b/interface/web/monitor/lib/lang/ar.lng
index 9d54ea1f5d..6a63ea9ab5 100644
--- a/interface/web/monitor/lib/lang/ar.lng
+++ b/interface/web/monitor/lib/lang/ar.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/bg.lng b/interface/web/monitor/lib/lang/bg.lng
index a8b7f491ac..ec28969581 100644
--- a/interface/web/monitor/lib/lang/bg.lng
+++ b/interface/web/monitor/lib/lang/bg.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/br.lng b/interface/web/monitor/lib/lang/br.lng
index 172891cfd9..781dd1e7e1 100644
--- a/interface/web/monitor/lib/lang/br.lng
+++ b/interface/web/monitor/lib/lang/br.lng
@@ -163,4 +163,6 @@ $wb['no_permissions_to_view_monit_txt'] = 'Você não tem permissão para acessa
 $wb['Show Munin'] = 'Exibir Munin';
 $wb['no_munin_url_defined_txt'] = 'Nenhuma URL do Munin definida.';
 $wb['no_permissions_to_view_munin_txt'] = 'Você não tem permissão para acessar o Munin.';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/ca.lng b/interface/web/monitor/lib/lang/ca.lng
index b57b255a74..ebceac3467 100644
--- a/interface/web/monitor/lib/lang/ca.lng
+++ b/interface/web/monitor/lib/lang/ca.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz.lng b/interface/web/monitor/lib/lang/cz.lng
index be2d9eadbb..604fbd5ceb 100644
--- a/interface/web/monitor/lib/lang/cz.lng
+++ b/interface/web/monitor/lib/lang/cz.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Doména';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Zobrazit historii datového logu';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/de.lng b/interface/web/monitor/lib/lang/de.lng
index f8fabe7990..63cb5b9848 100644
--- a/interface/web/monitor/lib/lang/de.lng
+++ b/interface/web/monitor/lib/lang/de.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_name_txt'] = 'Database';
 $wb['monitor_database_size_txt'] = 'Size';
 $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/dk.lng b/interface/web/monitor/lib/lang/dk.lng
index 4c7bfab1e7..0a7f8bc19e 100644
--- a/interface/web/monitor/lib/lang/dk.lng
+++ b/interface/web/monitor/lib/lang/dk.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/el.lng b/interface/web/monitor/lib/lang/el.lng
index 245c80c666..1d783f3da7 100644
--- a/interface/web/monitor/lib/lang/el.lng
+++ b/interface/web/monitor/lib/lang/el.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/en.lng b/interface/web/monitor/lib/lang/en.lng
index 194bbc5030..f507f54229 100644
--- a/interface/web/monitor/lib/lang/en.lng
+++ b/interface/web/monitor/lib/lang/en.lng
@@ -162,4 +162,6 @@ $wb['no_permissions_to_view_monit_txt'] = 'You are not allowed to access Monit.'
 $wb['Show Munin'] = 'Show Munin';
 $wb['no_munin_url_defined_txt'] = 'No Munin URL defined.';
 $wb['no_permissions_to_view_munin_txt'] = 'You are not allowed to access Munin.';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/es.lng b/interface/web/monitor/lib/lang/es.lng
index f4acb3c45c..56ce9a4222 100644
--- a/interface/web/monitor/lib/lang/es.lng
+++ b/interface/web/monitor/lib/lang/es.lng
@@ -162,4 +162,6 @@ $wb['System load 5 minutes'] = 'Carga del sistema hace 5 minutos';
 $wb['System State (All Servers)'] = 'Estado de los sistemas';
 $wb['Users online'] = 'Usuarios en línea';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/fi.lng b/interface/web/monitor/lib/lang/fi.lng
index 911aae9bd1..f825f6e20b 100644
--- a/interface/web/monitor/lib/lang/fi.lng
+++ b/interface/web/monitor/lib/lang/fi.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/fr.lng b/interface/web/monitor/lib/lang/fr.lng
index c08fe74948..8bf754cb9b 100644
--- a/interface/web/monitor/lib/lang/fr.lng
+++ b/interface/web/monitor/lib/lang/fr.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/hr.lng b/interface/web/monitor/lib/lang/hr.lng
index 17899ff3f0..4c8037604a 100644
--- a/interface/web/monitor/lib/lang/hr.lng
+++ b/interface/web/monitor/lib/lang/hr.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/hu.lng b/interface/web/monitor/lib/lang/hu.lng
index 9a5c41654f..e9ac7009f0 100644
--- a/interface/web/monitor/lib/lang/hu.lng
+++ b/interface/web/monitor/lib/lang/hu.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/id.lng b/interface/web/monitor/lib/lang/id.lng
index 4cdbf5d8ba..8a1bba91d8 100644
--- a/interface/web/monitor/lib/lang/id.lng
+++ b/interface/web/monitor/lib/lang/id.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/it.lng b/interface/web/monitor/lib/lang/it.lng
index e6feadf01f..675f27494b 100644
--- a/interface/web/monitor/lib/lang/it.lng
+++ b/interface/web/monitor/lib/lang/it.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/ja.lng b/interface/web/monitor/lib/lang/ja.lng
index cccd678cb7..3ea8fb1dfd 100644
--- a/interface/web/monitor/lib/lang/ja.lng
+++ b/interface/web/monitor/lib/lang/ja.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/nl.lng b/interface/web/monitor/lib/lang/nl.lng
index a534b9afb3..bef9eb80a2 100644
--- a/interface/web/monitor/lib/lang/nl.lng
+++ b/interface/web/monitor/lib/lang/nl.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/pl.lng b/interface/web/monitor/lib/lang/pl.lng
index a8e1b3e53c..6900d31b92 100644
--- a/interface/web/monitor/lib/lang/pl.lng
+++ b/interface/web/monitor/lib/lang/pl.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/pt.lng b/interface/web/monitor/lib/lang/pt.lng
index 7930febda2..f48c41e9fe 100644
--- a/interface/web/monitor/lib/lang/pt.lng
+++ b/interface/web/monitor/lib/lang/pt.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/ro.lng b/interface/web/monitor/lib/lang/ro.lng
index 96a2ce10e6..2a2423927f 100644
--- a/interface/web/monitor/lib/lang/ro.lng
+++ b/interface/web/monitor/lib/lang/ro.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/ru.lng b/interface/web/monitor/lib/lang/ru.lng
index 823174b716..c256c2faaf 100644
--- a/interface/web/monitor/lib/lang/ru.lng
+++ b/interface/web/monitor/lib/lang/ru.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Показать журнал MongoDB';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-сервер:';
 $wb['monitor_title_mongodb_txt'] = 'Журнал MongoDB';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/se.lng b/interface/web/monitor/lib/lang/se.lng
index 78dd5ed1be..54b504c9bb 100644
--- a/interface/web/monitor/lib/lang/se.lng
+++ b/interface/web/monitor/lib/lang/se.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/sk.lng b/interface/web/monitor/lib/lang/sk.lng
index 36af834eaf..59af606856 100644
--- a/interface/web/monitor/lib/lang/sk.lng
+++ b/interface/web/monitor/lib/lang/sk.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/tr.lng b/interface/web/monitor/lib/lang/tr.lng
index 20a9e8e140..836f38ce97 100644
--- a/interface/web/monitor/lib/lang/tr.lng
+++ b/interface/web/monitor/lib/lang/tr.lng
@@ -161,4 +161,6 @@ $wb['no_permissions_to_view_monit_txt'] = 'Monit eriÅŸimi izniniz yok.';
 $wb['Show Munin'] = 'Munin Durumu';
 $wb['no_munin_url_defined_txt'] = 'Munin adresi belirtilmemiÅŸ.';
 $wb['no_permissions_to_view_munin_txt'] = 'Munin eriÅŸimi izniniz yok.';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
-- 
GitLab


From 6b4966d677338ac4ff6adb7c0a124c09f9878edb Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Mon, 27 Jul 2020 16:19:52 +0200
Subject: [PATCH 530/571] fixed GoAccess config detection

---
 .../lib/classes/cron.d/150-goaccess.inc.php   | 66 ++++++++++++-------
 .../plugins-available/apache2_plugin.inc.php  | 17 ++++-
 server/plugins-available/nginx_plugin.inc.php | 18 ++++-
 3 files changed, 71 insertions(+), 30 deletions(-)

diff --git a/server/lib/classes/cron.d/150-goaccess.inc.php b/server/lib/classes/cron.d/150-goaccess.inc.php
index fe9e565f5f..87c9642b4e 100644
--- a/server/lib/classes/cron.d/150-goaccess.inc.php
+++ b/server/lib/classes/cron.d/150-goaccess.inc.php
@@ -2,6 +2,7 @@
 
 /*
 Copyright (c) 2013, Marius Cramer, pixcept KG
+Copyright (c) 2020, Michael Seevogel
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -59,17 +60,25 @@ class cronjob_goaccess extends cronjob {
 
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 
-		$goaccess_conf_dir = '/etc/';
-		$goaccess_conf_main = $goaccess_conf_dir . 'goaccess.conf';
+                $goaccess_conf_locs = array('/etc/goaccess.conf', '/etc/goaccess/goaccess.conf');
+                $count = 0;
+
+                foreach($goaccess_conf_locs as $goa_loc) {
+                        if(is_file($goa_loc) && (filesize($goa_loc) > 0)) {
+                                $goaccess_conf_main = $goa_loc;
+                                break;
+                        } else {
+                                $count++;
+                                if($count == 2) {
+                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_ERROR);
+                                }
+                        }
+                }
 
-		if(!file_exists($goaccess_conf_main) || !isset($goaccess_conf_main))
-		{
-			$app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in ".$goaccess_conf_dir.".", LOGLEVEL_WARN);
-		}
 
                 /* Check wether the goaccess binary is in path */
-		system('type goaccess', $retval);
-                if ($retval === 0) {
+                system("type goaccess 2>&1>/dev/null", $retval);
+		if ($retval === 0) {
 
 		foreach($records as $rec) {
 			$yesterday = date('Ymd', strtotime("-1 day", time()));
@@ -121,7 +130,6 @@ class cronjob_goaccess extends cronjob {
 			}
 
 
-
 			if(!@is_dir($statsdir)) mkdir($statsdir);
 			$username = escapeshellcmd($rec['system_user']);
 			$groupname = escapeshellcmd($rec['system_group']);
@@ -171,30 +179,38 @@ class cronjob_goaccess extends cronjob {
 					if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") copy("$statsdir"."/"."$file", "$statsdirold"."$file");
 				}
 			}
-			
-                        $app->system->exec_safe("goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $logfile, $goaccess_conf, $goa_db_dir, $output_html);
-
-			if(!is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
-				if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
-					copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
-				} else {
-					copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+
+
+			$output = shell_exec('goaccess --help');
+
+			if(preg_match('/keep-db-files/', $output)) {
+				$app->system->exec_safe("goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $logfile, $goaccess_conf, $goa_db_dir, $output_html);
+
+				if(!is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+					if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+						copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+					} else {
+						copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+					}
 				}
-			}
 
-			$app->log('Created GoAccess statistics for ' . $domain, LOGLEVEL_DEBUG);
-		
+	                        $app->log('Created GoAccess statistics for ' . $domain, LOGLEVEL_DEBUG);
+	                        if(is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+	                                chown($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_user']);
+	                                chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
+	                        }
+
+	                        $app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
 
-			if(is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
-				chown($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_user']);
-				chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
+			} else {
+		                $app->log("Stats not generated. The GoAccess binary was not compiled with btree support. Please recompile/reinstall GoAccess with btree support!", LOGLEVEL_ERROR);
 			}
 
-			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
+			unset($output);
 
 		}
 	} else {
-		$app->log("Stats not generated. The GoAccess binary couldn't be found. Make sure that GoAccess is installed and that it is in \$PATH", LOGLEVEL_WARN);
+		$app->log("Stats not generated. The GoAccess binary couldn't be found. Make sure that GoAccess is installed and that it is in \$PATH", LOGLEVEL_ERROR);
 	}
 
 		parent::onRunJob();
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 1bebab55f4..aecab199cd 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -2986,8 +2986,21 @@ class apache2_plugin {
                 $web_folder = $data['new']['web_folder'];
                 if($data['new']['type'] == 'vhost') $web_folder = 'web';
 
-                $goaccess_conf_dir = '/etc/';
-                $goaccess_conf_main = $goaccess_conf_dir.'goaccess.conf';
+                $goaccess_conf_locs = array('/etc/goaccess.conf', '/etc/goaccess/goaccess.conf');
+                $count = 0;
+
+                foreach($goaccess_conf_locs as $goa_loc) {
+                        if(is_file($goa_loc) && (filesize($goa_loc) > 0)) {
+                                $goaccess_conf_main = $goa_loc;
+                                break;
+                        } else {
+                                $count++;
+                                if($count == 2) {
+                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_ERROR);
+                                }
+                        }
+                }
+
 
                 if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) mkdir($data['new']['document_root']."/" . $web_folder . "/stats/.db");
                 $goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index d02811ad93..3c59011cbb 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2541,13 +2541,25 @@ class nginx_plugin {
                 $web_folder = $data['new']['web_folder'];
                 if($data['new']['type'] == 'vhost') $web_folder = 'web';
 
-		$goaccess_conf_dir = '/etc/';
-                $goaccess_conf_main = $goaccess_conf_dir.'goaccess.conf';
+                $goaccess_conf_locs = array('/etc/goaccess.conf', '/etc/goaccess/goaccess.conf');
+                $count = 0;
+
+                foreach($goaccess_conf_locs as $goa_loc) {
+                        if(is_file($goa_loc) && (filesize($goa_loc) > 0)) {
+                                $goaccess_conf_main = $goa_loc;
+                                break;
+                        } else {
+                                $count++;
+                                if($count == 2) {
+                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_ERROR);
+                                }
+                        }
+                }
+
 
                 if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) mkdir($data['new']['document_root']."/" . $web_folder . "/stats/.db");
 		$goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
 
-
 		/*
 		In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
 		By default the originaly with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
-- 
GitLab


From 2ea8f75e23acaf533364194bc8ea0b06c9518dc8 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 27 Jul 2020 16:40:31 +0200
Subject: [PATCH 531/571] Fixed #5662 installer (gentoo) $dovecot_version empty

---
 install/dist/lib/gentoo.lib.php | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index a39c346376..324fe06e9a 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -338,6 +338,11 @@ class installer extends installer_base
 			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
 		}
 
+		//* Get the dovecot version
+		exec('dovecot --version', $tmp);
+		$dovecot_version = $tmp[0];
+		unset($tmp);
+
 		//* dovecot-sql.conf
 		$configfile = $config_dir.'/dovecot-sql.conf';
 		$content = $this->get_template_file('debian_dovecot-sql.conf', true, true);
-- 
GitLab


From c5c1c9aa9dba54522b560f6c3ea15fa6d496a434 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 27 Jul 2020 16:54:05 +0200
Subject: [PATCH 532/571] Fixed #5614 Fix home initialization for Jailkit

---
 server/plugins-available/shelluser_base_plugin.inc.php | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 69d96a961e..4be97961ff 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -107,11 +107,7 @@ class shelluser_base_plugin {
 				$app->system->web_folder_protection($web['document_root'], false);
 
 				//* Home directory of the new shell user
-				if($data['new']['chroot'] == 'jailkit') {
-					$homedir = $data['new']['dir'];
-				} else {
-					$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
-				}
+				$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
 
 				// Create home base directory if it does not exist
 				if(!is_dir($data['new']['dir'].'/home')){
-- 
GitLab


From 2bbebeb3e5eddcccc784cab29097f9c56452c9ea Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 27 Jul 2020 17:02:48 +0200
Subject: [PATCH 533/571] Fixed #5593 Data too long for column 'id_rsa' at row
 1

---
 install/sql/incremental/upd_dev_collection.sql | 3 +++
 install/sql/ispconfig3.sql                     | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index a48996916a..9eefff3630 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -59,3 +59,6 @@ ALTER TABLE `web_domain` CHANGE `nginx_directives` `nginx_directives` mediumtext
 
 -- add move to junk before/after option, default to after
 ALTER TABLE `mail_user` MODIFY `move_junk` enum('y','a','n') NOT NULL DEFAULT 'y';
+
+-- Change id_rsa column to TEXT format
+ALTER TABLE `client` CHANGE `id_rsa` `id_rsa` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 9c11a68914..fae07c8036 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -253,7 +253,7 @@ CREATE TABLE `client` (
   `canceled` enum('n','y') NOT NULL DEFAULT 'n',
   `can_use_api` enum('n','y') NOT NULL DEFAULT 'n',
   `tmp_data` mediumblob,
-  `id_rsa` varchar(2000) NOT NULL DEFAULT '',
+  `id_rsa` text NOT NULL DEFAULT '',
   `ssh_rsa` varchar(600) NOT NULL DEFAULT '',
   `customer_no_template` varchar(255) DEFAULT 'R[CLIENTID]C[CUSTOMER_NO]',
   `customer_no_start` int(11) NOT NULL DEFAULT '1',
-- 
GitLab


From c868adc12267ae628b04740370c8a6dd25639d64 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 27 Jul 2020 17:08:55 +0200
Subject: [PATCH 534/571] Fixed #5578

---
 server/plugins-available/shelluser_base_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 4be97961ff..e3276755be 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -96,7 +96,7 @@ class shelluser_base_plugin {
 			return false;
 		}
 
-		if($data['new']['active'] != 'y') $data['new']['shell'] = '/bin/false';
+		if($data['new']['active'] != 'y' || $data['new']['chroot'] == "jailkit") $data['new']['shell'] = '/bin/false';
 
 		if($app->system->is_user($data['new']['puser'])) {
 
-- 
GitLab


From 80603de2860c939dde7974df9c3cfd32d2caf4bd Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Mon, 27 Jul 2020 17:36:53 +0200
Subject: [PATCH 535/571] Fixes #3696 Add -Indexes for /var/www directory in
 Apache

---
 install/tpl/apache_ispconfig.conf.master | 4 ++++
 server/conf/apache_ispconfig.conf.master | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/install/tpl/apache_ispconfig.conf.master b/install/tpl/apache_ispconfig.conf.master
index 84eec5c554..ff744741ff 100644
--- a/install/tpl/apache_ispconfig.conf.master
+++ b/install/tpl/apache_ispconfig.conf.master
@@ -35,6 +35,10 @@ CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m
 	</tmpl_if>
 </Directory>
 
+<Directory /var/www>
+  Options -Indexes
+</Directory>
+
 <Directory /var/www/conf>
     AllowOverride None
 	<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
diff --git a/server/conf/apache_ispconfig.conf.master b/server/conf/apache_ispconfig.conf.master
index e30ccd6d3b..040de23625 100644
--- a/server/conf/apache_ispconfig.conf.master
+++ b/server/conf/apache_ispconfig.conf.master
@@ -35,6 +35,10 @@ CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m
   </tmpl_if>
 </Directory>
 
+<Directory /var/www>
+  Options -Indexes
+</Directory>
+
 <Directory /var/www/conf>
     AllowOverride None
   <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
-- 
GitLab


From 1536e8b48f26f87a010d8848fff66e492f989aeb Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 9 Jul 2020 13:59:14 -0600
Subject: [PATCH 536/571] mail_forwardings alias/forward/catchall, aliasdomains
 in virtual_alias_{maps,domains}

---
 install/dist/lib/fedora.lib.php               |  3 +++
 install/dist/lib/opensuse.lib.php             |  3 +++
 install/lib/installer_base.lib.php            |  3 +++
 install/tpl/debian_postfix.conf.master        |  4 ++--
 install/tpl/fedora_postfix.conf.master        |  4 ++--
 install/tpl/gentoo_postfix.conf.master        |  4 ++--
 .../tpl/mysql-virtual_alias_domains.cf.master |  6 +++++
 install/tpl/mysql-virtual_domains.cf.master   |  3 ++-
 .../tpl/mysql-virtual_forwardings.cf.master   | 24 +++++--------------
 install/tpl/opensuse_postfix.conf.master      |  4 ++--
 10 files changed, 31 insertions(+), 27 deletions(-)
 create mode 100644 install/tpl/mysql-virtual_alias_domains.cf.master

diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 4a7c9cfbfe..05fea64519 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -63,6 +63,9 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_forwardings.cf
 		$this->process_postfix_config('mysql-virtual_forwardings.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 60fb0511fd..574b38100d 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -63,6 +63,9 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_forwardings.cf
 		$this->process_postfix_config('mysql-virtual_forwardings.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 81b1257db0..0476c92330 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -960,6 +960,9 @@ class installer_base {
 		//* mysql-virtual_forwardings.cf
 		$this->process_postfix_config('mysql-virtual_forwardings.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 1c739a5c7e..c1a5baa71d 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -1,7 +1,7 @@
 alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
-virtual_alias_domains =
-virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index d504c6ed56..5b53b9a45f 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -1,5 +1,5 @@
-virtual_alias_domains =
-virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index cad2b97c3c..a326051d5e 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -1,5 +1,5 @@
-virtual_alias_domains =
-virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
diff --git a/install/tpl/mysql-virtual_alias_domains.cf.master b/install/tpl/mysql-virtual_alias_domains.cf.master
new file mode 100644
index 0000000000..e55fd8ea8d
--- /dev/null
+++ b/install/tpl/mysql-virtual_alias_domains.cf.master
@@ -0,0 +1,6 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
+query = SELECT destination FROM mail_forwarding
+         WHERE source = '@%d' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_domains.cf.master b/install/tpl/mysql-virtual_domains.cf.master
index 0d1793a95a..11ccb046ef 100644
--- a/install/tpl/mysql-virtual_domains.cf.master
+++ b/install/tpl/mysql-virtual_domains.cf.master
@@ -2,4 +2,5 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = select domain from mail_domain where domain = '%s' and active = 'y' and server_id = {server_id}
+query = SELECT domain FROM mail_domain WHERE domain = '%s' AND active = 'y' AND server_id = {server_id}
+           AND NOT EXISTS (SELECT source FROM mail_forwarding WHERE source = '@%s' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id})
diff --git a/install/tpl/mysql-virtual_forwardings.cf.master b/install/tpl/mysql-virtual_forwardings.cf.master
index 04a94ee634..9ab6f3e860 100644
--- a/install/tpl/mysql-virtual_forwardings.cf.master
+++ b/install/tpl/mysql-virtual_forwardings.cf.master
@@ -2,22 +2,10 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = SELECT u.email as target FROM mail_forwarding as s
-            INNER JOIN mail_user as u ON (u.email = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1)))
-            WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND u.disabledeliver = 'n' AND s.server_id = {server_id}
+query = SELECT s.destination AS target FROM mail_forwarding AS s
+            WHERE s.source = '%s' AND s.type IN ('alias', 'forward') AND s.active = 'y' AND s.server_id = {server_id}
         UNION
-        SELECT s.destination as target FROM mail_forwarding as s
-            WHERE s.source = '%s' AND s.type IN ('alias', 'forward') and s.active = 'y' AND s.server_id = {server_id}
-        UNION
-        SELECT s.destination as target FROM mail_forwarding as s
-            INNER JOIN mail_forwarding as f ON (f.source = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1)))
-            WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND f.active = 'y' AND s.server_id = {server_id}
-        UNION
-        SELECT s.destination as target FROM mail_forwarding as s
-            LEFT JOIN mail_user as uu ON (uu.email = '%s' AND uu.disabledeliver = 'n')
-            LEFT JOIN mail_forwarding as uf ON (uf.source = '%s' AND uf.type IN ('alias', 'forward') AND uf.active = 'y')
-            WHERE s.source = '@%d' AND s.type IN ('catchall') and s.active = 'y' AND uu.mailuser_id IS NULL AND uf.forwarding_id IS NULL AND s.server_id = {server_id}
-        UNION
-        SELECT s.destination as target FROM mail_forwarding as s
-            INNER JOIN mail_forwarding as t ON (t.source = s.destination AND t.type = 'catchall')
-            WHERE s.source = '@%d' AND s.type = 'aliasdomain' and s.active = 'y' AND t.active = 'y' AND s.server_id = {server_id}
+        SELECT s.destination AS target FROM mail_forwarding AS s
+            WHERE s.source = '@%d' AND s.type = 'catchall' AND s.active = 'y' AND s.server_id = {server_id}
+            AND NOT EXISTS (SELECT email FROM mail_user WHERE email = '%s' AND server_id = {server_id})
+            AND NOT EXISTS (SELECT source FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND server_id = {server_id})
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index c59d46fa97..ea4375b6ac 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -1,7 +1,7 @@
 alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
-virtual_alias_domains =
-virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
-- 
GitLab


From 015a175f9fbee0399ec31cfc7e2dae7943495c67 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 14 Jul 2020 13:43:43 -0600
Subject: [PATCH 537/571] use reject_unverified_recipient with lmtp

---
 install/dist/lib/fedora.lib.php               |  3 ++
 install/dist/lib/opensuse.lib.php             |  3 ++
 install/lib/installer_base.lib.php            | 42 +++++++++++++--
 install/tpl/debian_postfix.conf.master        |  6 ++-
 install/tpl/fedora_postfix.conf.master        |  6 ++-
 install/tpl/gentoo_postfix.conf.master        |  6 ++-
 install/tpl/mysql-verify_recipients.cf.master |  5 ++
 install/tpl/opensuse_postfix.conf.master      |  6 ++-
 .../postfix_server_plugin.inc.php             | 53 ++++++++++++++-----
 9 files changed, 105 insertions(+), 25 deletions(-)
 create mode 100644 install/tpl/mysql-verify_recipients.cf.master

diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 05fea64519..9ffc7d0ef4 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -105,6 +105,9 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_uids.cf
 		$this->process_postfix_config('mysql-virtual_uids.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-verify_recipients.cf');
+
 		//* postfix-dkim
 		$filename='tag_as_originating.re';
 		$full_file_name=$config_dir.'/'.$filename;
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 574b38100d..15ab5b6e91 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -102,6 +102,9 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_uids.cf
 		$this->process_postfix_config('mysql-virtual_uids.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-verify_recipients.cf');
+
 		//* postfix-dkim
 		$filename='tag_as_originating.re';
 		$full_file_name=$config_dir.'/'.$filename;
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 0476c92330..c02a33eebb 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1002,6 +1002,9 @@ class installer_base {
 		//* mysql-virtual_uids.cf
 		$this->process_postfix_config('mysql-virtual_uids.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-verify_recipients.cf');
+
 		// test if lmtp if available
 		$configure_lmtp = $this->get_postfix_service('lmtp','unix');
 
@@ -1340,6 +1343,8 @@ class installer_base {
 		}
 
 		$config_dir = $conf['postfix']['config_dir'];
+		$postfix_version = `postconf -d mail_version 2>/dev/null`;
+		$postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version );
 
 		//* Configure master.cf and add a line for deliver
 		if(!$this->get_postfix_service('dovecot', 'unix')) {
@@ -1351,7 +1356,7 @@ class installer_base {
 				chmod($config_dir.'/master.cf~2', 0400);
 			}
 			//* Configure master.cf and add a line for deliver
-			$content = rf($conf["postfix"]["config_dir"].'/master.cf');
+			$content = rf($config_dir.'/master.cf');
 			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
 			af($config_dir.'/master.cf', $deliver_content);
 			unset($content);
@@ -1368,7 +1373,31 @@ class installer_base {
 		);
 
 		// Make a backup copy of the main.cf file
-		copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~3');
+		copy($config_dir.'/main.cf', $config_dir.'/main.cf~3');
+
+		$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
+		$new_options = array();
+		foreach ($options as $value) {
+			if (($value = trim($value)) == '') continue;
+			if (preg_match("|check_recipient_access\s+proxy:mysql:${config_dir}/mysql-verify_recipients.cf|", $value)) {
+				continue;
+			}
+			$new_options[] = $value;
+		}
+		if ($configure_lmtp) {
+			for ($i = 0; isset($new_options[$i]); $i++) {
+				if ($new_options[$i] == 'reject_unlisted_recipient') {
+					array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf"));
+					break;
+				}
+			}
+			# postfix < 3.3 needs this when using reject_unverified_recipient:
+			if(version_compare($postfix_version, 3.3, '<')) {
+				$postconf_commands[] = "enable_original_recipient = yes";
+			}
+		}
+		#exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+		$postconf_commands[] = "smtpd_recipient_restrictions = ".implode(", ", $new_options);
 
 		// Executing the postconf commands
 		foreach($postconf_commands as $cmd) {
@@ -1608,12 +1637,15 @@ class installer_base {
 
 			exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
 
+
+			$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
 			$new_options = array();
-			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 			foreach ($options as $value) {
-				if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
-					$new_options[] = $value;
+				if (($value = trim($value)) == '') continue;
+				if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
+					continue;
 				}
+				$new_options[] = $value;
 			}
 			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
 
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index c1a5baa71d..d3df3ab568 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -15,7 +15,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023 
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -24,7 +24,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
 relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
 relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $smtpd_recipient_restrictions
 smtpd_helo_required = yes
 smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
 smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -44,3 +44,5 @@ smtpd_tls_protocols = !SSLv2,!SSLv3
 smtp_tls_protocols = !SSLv2,!SSLv3
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
+enable_original_recipient = yes
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 5b53b9a45f..e6f43b01e8 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -11,7 +11,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -20,7 +20,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
 relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
 relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $smtpd_recipient_restrictions
 smtpd_helo_required = yes
 smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
 smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -40,3 +40,5 @@ smtpd_tls_protocols = !SSLv2,!SSLv3
 smtp_tls_protocols = !SSLv2,!SSLv3
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
+enable_original_recipient = yes
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index a326051d5e..0f6ee7301b 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -10,7 +10,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -19,7 +19,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
 relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
 relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $smtpd_recipient_restrictions
 smtpd_helo_required = yes
 smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
 smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -39,3 +39,5 @@ smtpd_tls_protocols = !SSLv2,!SSLv3
 smtp_tls_protocols = !SSLv2,!SSLv3
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
+enable_original_recipient = yes
diff --git a/install/tpl/mysql-verify_recipients.cf.master b/install/tpl/mysql-verify_recipients.cf.master
new file mode 100644
index 0000000000..2b433491d8
--- /dev/null
+++ b/install/tpl/mysql-verify_recipients.cf.master
@@ -0,0 +1,5 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
+query = SELECT 'reject_unverified_recipient' FROM mail_domain WHERE domain = '%s' AND active = 'y' AND server_id = {server_id}
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index ea4375b6ac..d29c3d1b05 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -13,7 +13,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -22,7 +22,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
 relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
 relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $smtpd_recipient_restrictions
 smtpd_helo_required = yes
 smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
 smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -42,3 +42,5 @@ smtpd_tls_protocols = !SSLv2,!SSLv3
 smtp_tls_protocols = !SSLv2,!SSLv3
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
+enable_original_recipient = yes
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 80db1c102a..757ee5e72f 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -33,9 +33,6 @@ class postfix_server_plugin {
 	var $plugin_name = 'postfix_server_plugin';
 	var $class_name = 'postfix_server_plugin';
 
-
-	var $postfix_config_dir = '/etc/postfix';
-
 	//* This function is called during ispconfig installation to determine
 	//  if a symlink shall be created for this plugin.
 	function onInstall() {
@@ -79,8 +76,13 @@ class postfix_server_plugin {
 		$old_ini_data = $app->ini_parser->parse_ini_string($data['old']['config']);
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 
+                // Get postfix version
+		exec('postconf -d mail_version 2>&1', $out);
+		$postfix_version = preg_replace('/.*=\s*/', '', $out[0]);
+		unset($out);
+
 		copy('/etc/postfix/main.cf', '/etc/postfix/main.cf~');
-		
+
 		if ($mail_config['relayhost'].$mail_config['relayhost_user'].$mail_config['relayhost_password'] != $old_ini_data['mail']['relayhost'].$old_ini_data['mail']['relayhost_user'].$old_ini_data['mail']['relayhost_password']) {
 			$content = file_exists('/etc/postfix/sasl_passwd') ? file_get_contents('/etc/postfix/sasl_passwd') : '';
 			$content = preg_replace('/^'.preg_quote($old_ini_data['email']['relayhost']).'\s+[^\n]*(:?\n|)/m','',$content);
@@ -112,17 +114,18 @@ class postfix_server_plugin {
 			if($rbl_hosts != ''){
 				$rbl_hosts = explode(",", $rbl_hosts);
 			}
-			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+			$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
 			$new_options = array();
 			foreach ($options as $key => $value) {
+				if (($value = trim($value)) == '') continue;
 				if (!preg_match('/reject_rbl_client/', $value)) {
 					$new_options[] = $value;
 				} else {
 					if(is_array($rbl_hosts) && !empty($rbl_hosts) && !$rbl_updated){
 						$rbl_updated = true;
-						foreach ($rbl_hosts as $key => $value) {
-							$value = trim($value);
-							if($value != '') $new_options[] = "reject_rbl_client ".$value;
+						foreach ($rbl_hosts as $key2 => $value2) {
+							$value2 = trim($value2);
+							if($value2 != '') $new_options[] = "reject_rbl_client ".$value2;
 						}
 					}
 				}
@@ -190,6 +193,30 @@ class postfix_server_plugin {
 			}
 		}
 
+		$postfix_config_dir = $conf['postfix']['config_dir'];
+		$new_options = array();
+		$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
+		foreach ($options as $key => $value) {
+			if (($value = trim($value)) == '') continue;
+			if (preg_match("|check_recipient_access\s+proxy:mysql:${postfix_config_dir}/mysql-verify_recipients.cf|", $value)) {
+				continue;
+			}
+			$new_options[] = $value;
+		}
+		if (defined($configure_lmtp) && $configure_lmtp) {
+			for ($i = 0; isset($new_options[$i]); $i++) {
+				if ($new_options[$i] == 'reject_unlisted_recipient') {
+					array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${postfix_config_dir}/mysql-verify_recipients.cf"));
+					break;
+				}
+			}
+			# postfix < 3.3 needs this when using reject_unverified_recipient:
+			if(version_compare($postfix_version, 3.3, '<')) {
+				exec("postconf -e 'enable_original_recipient = yes'");
+			}
+		}
+		exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+
 		if($mail_config['content_filter'] != $old_ini_data['mail']['content_filter']) {
 			if($mail_config['content_filter'] == 'rspamd'){
 				exec("postconf -X 'receive_override_options'");
@@ -204,11 +231,13 @@ class postfix_server_plugin {
 				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
 				
 				$new_options = array();
-				$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+				$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
 				foreach ($options as $key => $value) {
-					if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
-						$new_options[] = $value;
+					if (($value = trim($value)) == '') continue;
+					if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
+						continue;
 					}
+					$new_options[] = $value;
 				}
 				exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
 				
@@ -235,7 +264,7 @@ class postfix_server_plugin {
 				exec("postconf -e 'receive_override_options = no_address_mappings'");
 				exec("postconf -e 'content_filter = " . ($configure_lmtp ? "lmtp" : "amavis" ) . ":[127.0.0.1]:10024'");
 				
-				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'");
+				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, check_sender_access regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'");
 			}
 		}
 		
-- 
GitLab


From c0651edf42b4cd461fa4b4cc3423d51ca1fcac66 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 15 Jul 2020 10:55:29 -0600
Subject: [PATCH 538/571] fix issues from MR 1053 review

---
 install/lib/installer_base.lib.php            | 28 +++++++++++--------
 .../postfix_server_plugin.inc.php             | 23 ++++++++-------
 2 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index c02a33eebb..265dd8c583 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -876,8 +876,8 @@ class installer_base {
 			$postfix_service = @($out[0]=='')?false:true;
 		} else { //* fallback - Postfix < 2.9
 			$content = rf($conf['postfix']['config_dir'].'/master.cf');
-			$regex = "/^((?!#)".$service.".*".$type.".*)$/m";
-			$postfix_service = @(preg_match($regex, $content))?true:false;
+			$quoted_regex = "^((?!#)".preg_quote($service, '/').".*".preg_quote($type, '/').".*)$";
+			$postfix_service = @(preg_match("/$quoted_regex/m", $content))?true:false;
 		}
 
 		return $postfix_service;
@@ -915,10 +915,11 @@ class installer_base {
 			while ( !feof( $cf ) ) {
 				$line = fgets( $cf );
 
+				$quoted_regex = '^'.preg_quote($service, '/').'\s+'.preg_quote($type, '/');
 				if ( $reading_service ) {
 					# regex matches a new service or "empty" (whitespace) line
 					if ( preg_match( '/^([^\s#]+.*|\s*)$/', $line ) &&
-					   ! preg_match( '/^'.$service.'\s+'.$type.'/', $line ) ) {
+					   ! preg_match( "/$quoted_regex/", $line ) ) {
 						$out .= $line;
 						$reading_service = false;
 					}
@@ -926,7 +927,7 @@ class installer_base {
 					# $skipped_lines .= $line;
 
 				# regex matches definition matching service to be removed
-				} else if ( preg_match( '/^'.$service.'\s+'.$type.'/', $line ) ) {
+				} else if ( preg_match( "/$quoted_regex/", $line ) ) {
 
 					$reading_service = true;
 					# $skipped_lines .= $line;
@@ -1157,13 +1158,13 @@ class installer_base {
 		if(is_file('/var/run/courier/authdaemon/')) caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
 
 		//* Check maildrop service in posfix master.cf
-		$regex = "/^maildrop   unix.*pipe flags=DRhu user=vmail argv=\\/usr\\/bin\\/maildrop -d ".$cf['vmail_username']." \\$\{extension} \\$\{recipient} \\$\{user} \\$\{nexthop} \\$\{sender}/";
+		$quoted_regex = '^maildrop   unix.*pipe flags=DRhu user=vmail '.preg_quote('argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}', '/');
 		$configfile = $config_dir.'/master.cf';
 		if($this->get_postfix_service('maildrop', 'unix')) {
 			exec ("postconf -M maildrop.unix 2> /dev/null", $out, $ret);
-			$change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true;
+			$change_maildrop_flags = @(preg_match("/$quoted_regex/", $out[0]) && $out[0] !='')?false:true;
 		} else {
-			$change_maildrop_flags = @(preg_match($regex, $configfile))?false:true;
+			$change_maildrop_flags = @(preg_match("/$quoted_regex/", $configfile))?false:true;
 		}
 		if ($change_maildrop_flags) {
 			//* Change maildrop service in posfix master.cf
@@ -1343,6 +1344,7 @@ class installer_base {
 		}
 
 		$config_dir = $conf['postfix']['config_dir'];
+		$quoted_config_dir = preg_quote($config_dir, '/');
 		$postfix_version = `postconf -d mail_version 2>/dev/null`;
 		$postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version );
 
@@ -1375,11 +1377,12 @@ class installer_base {
 		// Make a backup copy of the main.cf file
 		copy($config_dir.'/main.cf', $config_dir.'/main.cf~3');
 
-		$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
+		$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 		$new_options = array();
 		foreach ($options as $value) {
-			if (($value = trim($value)) == '') continue;
-			if (preg_match("|check_recipient_access\s+proxy:mysql:${config_dir}/mysql-verify_recipients.cf|", $value)) {
+			$value = trim($value);
+			if ($value == '') continue;
+			if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
 				continue;
 			}
 			$new_options[] = $value;
@@ -1638,10 +1641,11 @@ class installer_base {
 			exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
 
 
-			$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 			$new_options = array();
 			foreach ($options as $value) {
-				if (($value = trim($value)) == '') continue;
+				$value = trim($value);
+				if ($value == '') continue;
 				if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
 					continue;
 				}
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 757ee5e72f..5a0b222a24 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -85,7 +85,7 @@ class postfix_server_plugin {
 
 		if ($mail_config['relayhost'].$mail_config['relayhost_user'].$mail_config['relayhost_password'] != $old_ini_data['mail']['relayhost'].$old_ini_data['mail']['relayhost_user'].$old_ini_data['mail']['relayhost_password']) {
 			$content = file_exists('/etc/postfix/sasl_passwd') ? file_get_contents('/etc/postfix/sasl_passwd') : '';
-			$content = preg_replace('/^'.preg_quote($old_ini_data['email']['relayhost']).'\s+[^\n]*(:?\n|)/m','',$content);
+			$content = preg_replace('/^'.preg_quote($old_ini_data['email']['relayhost'], '/').'\s+[^\n]*(:?\n|)/m','',$content);
 
 			if (!empty($mail_config['relayhost_user']) || !empty($mail_config['relayhost_password'])) {
 				$content .= "\n".$mail_config['relayhost'].'   '.$mail_config['relayhost_user'].':'.$mail_config['relayhost_password'];
@@ -114,10 +114,11 @@ class postfix_server_plugin {
 			if($rbl_hosts != ''){
 				$rbl_hosts = explode(",", $rbl_hosts);
 			}
-			$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 			$new_options = array();
 			foreach ($options as $key => $value) {
-				if (($value = trim($value)) == '') continue;
+				$value = trim($value);
+				if ($value == '') continue;
 				if (!preg_match('/reject_rbl_client/', $value)) {
 					$new_options[] = $value;
 				} else {
@@ -142,7 +143,7 @@ class postfix_server_plugin {
 		}
 		
 		if($mail_config['reject_sender_login_mismatch'] != $old_ini_data['mail']['reject_sender_login_mismatch']) {
-			$options = explode(", ", exec("postconf -h smtpd_sender_restrictions"));
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_sender_restrictions"));
 			$new_options = array();
 			foreach ($options as $key => $value) {
 				if (!preg_match('/reject_authenticated_sender_login_mismatch/', $value)) {
@@ -193,12 +194,13 @@ class postfix_server_plugin {
 			}
 		}
 
-		$postfix_config_dir = $conf['postfix']['config_dir'];
+		$quoted_postfix_config_dir = preg_quote($conf['postfix']['config_dir'], '|');
 		$new_options = array();
-		$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
+		$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 		foreach ($options as $key => $value) {
-			if (($value = trim($value)) == '') continue;
-			if (preg_match("|check_recipient_access\s+proxy:mysql:${postfix_config_dir}/mysql-verify_recipients.cf|", $value)) {
+			$value = trim($value);
+			if ($value == '') continue;
+			if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_postfix_config_dir}/mysql-verify_recipients.cf|", $value)) {
 				continue;
 			}
 			$new_options[] = $value;
@@ -231,9 +233,10 @@ class postfix_server_plugin {
 				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
 				
 				$new_options = array();
-				$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
+				$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 				foreach ($options as $key => $value) {
-					if (($value = trim($value)) == '') continue;
+					$value = trim($value);
+					if ($value == '') continue;
 					if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
 						continue;
 					}
-- 
GitLab


From 67452af5eb9c395f5d403396983d9226a6ef020e Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 23 Jul 2020 12:25:20 -0600
Subject: [PATCH 539/571] remove reject_unlisted_recipient

---
 install/tpl/debian_postfix.conf.master   | 2 +-
 install/tpl/fedora_postfix.conf.master   | 2 +-
 install/tpl/gentoo_postfix.conf.master   | 2 +-
 install/tpl/opensuse_postfix.conf.master | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index d3df3ab568..169826747d 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -15,7 +15,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023 
-smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index e6f43b01e8..1c78e858be 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -11,7 +11,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 0f6ee7301b..84d404d15b 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -10,7 +10,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index d29c3d1b05..f2d2a4403b 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -13,7 +13,7 @@ broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
-- 
GitLab


From 7d9d0c61928d93a91049dbff76f032f3ce864452 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 27 Jul 2020 23:42:10 +0200
Subject: [PATCH 540/571] #1804 Option to disable welcome messages

---
 install/tpl/system.ini.master                 |  1 +
 server/plugins-available/mail_plugin.inc.php  | 41 +++++++++++--------
 .../plugins-available/mailman_plugin.inc.php  | 15 ++++---
 3 files changed, 33 insertions(+), 24 deletions(-)

diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index 873b0e7372..81f6bba553 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -16,6 +16,7 @@ webmail_url=/webmail
 dkim_path=/var/lib/amavis/dkim
 smtp_enabled=y
 smtp_host=localhost
+enable_welcome_mail=y
 
 [monitor]
 
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 4d5ac826d3..6c8737cfe0 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -135,7 +135,7 @@ class mail_plugin {
 			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]);
 			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]);
 			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]);
-			
+
 			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]);
 			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]);
 			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]);
@@ -149,26 +149,26 @@ class mail_plugin {
 				$app->log('Created Directory: '.$maildomain_path, LOGLEVEL_DEBUG);
 				$maildomain_path .= '/Maildir';
 			}
-					
+
 			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
 				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
 				$app->system->exec_safe("su -c ? vmail", "mv -f " . $data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']);
 				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN);
 			}
-	
+
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!empty($maildomain_path) && !is_dir($maildomain_path)) {
-	
+
 				$app->system->maildirmake($maildomain_path, $user, '', $group);
-	
+
 				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
 				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
 					if(is_dir($maildomain_path)) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$maildomain_path, $user); // Avoid maildirmake quota bug, see debian bug #214911
 					$app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$maildomain_path."' ".$user, LOGLEVEL_DEBUG);
 				}
 			}
-	
+
 			if(!is_dir($data['new']['maildir'].'/.Sent')) {
 				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
 			}
@@ -181,11 +181,11 @@ class mail_plugin {
 			if(!is_dir($data['new']['maildir'].'/.Junk')) {
 				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
 			}
-	
+
 			// Set permissions now recursive
 			$app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']);
 			$app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG);
-	
+
 			//* Set the maildir quota
 			if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
 				if($data['new']['quota'] > 0) {
@@ -194,6 +194,11 @@ class mail_plugin {
 				}
 			}
 		}
+		
+		$global_config = $app->getconf->get_global_config('mail');
+		if($global_config['enable_welcome_mail'] == 'n') {
+			return;
+		  }
 
 		//* Send the welcome email message
 		$tmp = explode('@', $data["new"]["email"]);
@@ -261,7 +266,7 @@ class mail_plugin {
 
 		// Maildir-Format must not be changed on this way !!
 		$data['new']['maildir_format'] = $data['old']['maildir_format'];
-		
+
 		$maildomain_path = $data['new']['maildir'];
 		$tmp_basepath = $data['new']['maildir'];
 		$tmp_basepath_parts = explode('/', $tmp_basepath);
@@ -315,7 +320,7 @@ class mail_plugin {
 				$app->system->exec_safe('mv -f ? ?'. $data['old']['maildir'], $data['new']['maildir']);
 				$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 			}
-				
+
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!is_dir($data['new']['maildir'].'/mdbox')) {
 				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? INBOX'", $data["new"]["email"]);
@@ -323,7 +328,7 @@ class mail_plugin {
 				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]);
 				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]);
 				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]);
-					
+
 				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]);
 				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]);
 				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]);
@@ -338,18 +343,18 @@ class mail_plugin {
 				$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
 				$maildomain_path .= '/Maildir';
 			}
-	
+
 			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
 				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
 				$app->system->exec_safe("su -c ? ?", "mv -f ".$data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 'vmail');
 				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN);
 			}
-	
+
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!empty($maildomain_path) && !is_dir($maildomain_path.'/new')) {
 				$app->system->maildirmake($maildomain_path, $user, '', $group);
-	
+
 				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
 				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
 					if($data['new']['quota'] > 0) {
@@ -361,7 +366,7 @@ class mail_plugin {
 					}
 				}
 			}
-	
+
 			if(!is_dir($data['new']['maildir'].'/.Sent')) {
 				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
 			}
@@ -374,11 +379,11 @@ class mail_plugin {
 			if(!is_dir($data['new']['maildir'].'/.Junk')) {
 				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
 			}
-	
+
 			// Set permissions now recursive
 			$app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']);
 			$app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG);
-	
+
 			// Move mailbox, if domain has changed and delete old mailbox
 			if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
 				if(is_dir($data['new']['maildir'])) {
@@ -470,7 +475,7 @@ class mail_plugin {
 		} else {
 			$app->log('Possible security violation when deleting the mail domain mailfilter directory: '.$old_maildomain_path, LOGLEVEL_ERROR);
 		}
-		
+
 		//* Delete the mail-backups
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		$backup_dir = $server_config['backup_dir'];
diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php
index e6251aedf1..da033b80cc 100644
--- a/server/plugins-available/mailman_plugin.inc.php
+++ b/server/plugins-available/mailman_plugin.inc.php
@@ -71,9 +71,12 @@ class mailman_plugin {
 	function insert($event_name, $data) {
 		global $app, $conf;
 
+		$global_config = $app->getconf->get_global_config('mail');
+		$opt_quiet = ($global_config['enable_welcome_mail'] == 'n') ?  "-q" : "";
+
 		$this->update_config();
 
-		$pid = $app->system->exec_safe("nohup /usr/lib/mailman/bin/newlist -u ? -e ? ? ? ? >/dev/null 2>&1 & echo $!;", $data["new"]["domain"], $data["new"]["domain"], $data["new"]["listname"], $data["new"]["email"], $data["new"]["password"]);
+		$pid = $app->system->exec_safe("nohup /usr/lib/mailman/bin/newlist ? -u ? -e ? ? ? ? >/dev/null 2>&1 & echo $!;", $opt_quiet, $data["new"]["domain"], $data["new"]["domain"], $data["new"]["listname"], $data["new"]["email"], $data["new"]["password"]);
 		// wait for /usr/lib/mailman/bin/newlist-call
 		$running = true;
 		do {
@@ -87,9 +90,9 @@ class mailman_plugin {
 		}
 		if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
 		if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman');
-		
+
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
-		
+
 		// Fix list URL
 		$app->system->exec_safe('/usr/sbin/withlist -l -r fix_url ?', $data["new"]["listname"]);
 
@@ -100,7 +103,7 @@ class mailman_plugin {
 	// The purpose of this plugin is to rewrite the main.cf file
 	function update($event_name, $data) {
 		global $app, $conf;
-		
+
 		$this->update_config();
 
 		if($data["new"]["password"] != $data["old"]["password"] && $data["new"]["password"] != '') {
@@ -108,7 +111,7 @@ class mailman_plugin {
 			exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 			$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']);
 		}
-		
+
 		if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
 		if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman');
 	}
@@ -121,7 +124,7 @@ class mailman_plugin {
 		$app->system->exec_safe("nohup /usr/lib/mailman/bin/rmlist -a ? >/dev/null 2>&1 &", $data["old"]["listname"]);
 
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
-		
+
 		if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
 		if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman');
 
-- 
GitLab


From ebcbdbbe1b34aa3375a19d1f806c0139bd35396e Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Tue, 28 Jul 2020 10:18:13 +0200
Subject: [PATCH 541/571] Send welcome email only if it's enabled (#1804)

---
 server/plugins-available/mail_plugin.inc.php | 113 +++++++++----------
 1 file changed, 55 insertions(+), 58 deletions(-)

diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 6c8737cfe0..c584b68215 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -194,67 +194,64 @@ class mail_plugin {
 				}
 			}
 		}
-		
-		$global_config = $app->getconf->get_global_config('mail');
-		if($global_config['enable_welcome_mail'] == 'n') {
-			return;
-		  }
-
-		//* Send the welcome email message
-		$tmp = explode('@', $data["new"]["email"]);
-		$domain = $tmp[1];
-		unset($tmp);
-		$html = false;
-		if(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html');
-			$html = true;
-		} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html');
-			$html = true;
-		} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt');
-		} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt');
-		} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt');
-		} elseif(file_exists($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt')) {
-			$lines = file($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt');
-		} else {
-			$lines = file($conf['rootpath'].'/conf/mail/welcome_email_en.txt');
-		}
 
-		//* Get from address
-		$parts = explode(':', trim($lines[0]));
-		unset($parts[0]);
-		$welcome_mail_from  = implode(':', $parts);
-		unset($lines[0]);
-
-		//* Get subject
-		$parts = explode(':', trim($lines[1]));
-		unset($parts[0]);
-		$welcome_mail_subject  = implode(':', $parts);
-		unset($lines[1]);
-
-		//* Get message
-		$welcome_mail_message = trim(implode($lines));
-		unset($tmp);
-
-		$mailHeaders      = "MIME-Version: 1.0" . "\n";
-		if($html) {
-			$mailHeaders     .= "Content-Type: text/html; charset=utf-8" . "\n";
-			$mailHeaders     .= "Content-Transfer-Encoding: quoted-printable" . "\n";
-		} else {
-			$mailHeaders     .= "Content-Type: text/plain; charset=utf-8" . "\n";
-			$mailHeaders     .= "Content-Transfer-Encoding: 8bit" . "\n";
-		}
-		$mailHeaders     .= "From: $welcome_mail_from" . "\n";
-		$mailHeaders     .= "Reply-To: $welcome_mail_from" . "\n";
-		$mailTarget       = $data["new"]["email"];
-		$mailSubject      = "=?utf-8?B?".base64_encode($welcome_mail_subject)."?=";
+		$global_config = $app->getconf->get_global_config('mail');
+		if($global_config['enable_welcome_mail'] == 'y') {
+			//* Send the welcome email message
+			$tmp = explode('@', $data["new"]["email"]);
+			$domain = $tmp[1];
+			unset($tmp);
+			$html = false;
+			if(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html');
+				$html = true;
+			} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html');
+				$html = true;
+			} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt');
+			} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt');
+			} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt');
+			} elseif(file_exists($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt')) {
+				$lines = file($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt');
+			} else {
+				$lines = file($conf['rootpath'].'/conf/mail/welcome_email_en.txt');
+			}
 
-		//* Send the welcome email only on the "master" mail server to avoid duplicate emails
-		if($conf['mirror_server_id'] == 0) mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders);
+			//* Get from address
+			$parts = explode(':', trim($lines[0]));
+			unset($parts[0]);
+			$welcome_mail_from  = implode(':', $parts);
+			unset($lines[0]);
+
+			//* Get subject
+			$parts = explode(':', trim($lines[1]));
+			unset($parts[0]);
+			$welcome_mail_subject  = implode(':', $parts);
+			unset($lines[1]);
+
+			//* Get message
+			$welcome_mail_message = trim(implode($lines));
+			unset($tmp);
+
+			$mailHeaders      = "MIME-Version: 1.0" . "\n";
+			if($html) {
+				$mailHeaders     .= "Content-Type: text/html; charset=utf-8" . "\n";
+				$mailHeaders     .= "Content-Transfer-Encoding: quoted-printable" . "\n";
+			} else {
+				$mailHeaders     .= "Content-Type: text/plain; charset=utf-8" . "\n";
+				$mailHeaders     .= "Content-Transfer-Encoding: 8bit" . "\n";
+			}
+			$mailHeaders     .= "From: $welcome_mail_from" . "\n";
+			$mailHeaders     .= "Reply-To: $welcome_mail_from" . "\n";
+			$mailTarget       = $data["new"]["email"];
+			$mailSubject      = "=?utf-8?B?".base64_encode($welcome_mail_subject)."?=";
 
+			//* Send the welcome email only on the "master" mail server to avoid duplicate emails
+			if($conf['mirror_server_id'] == 0) mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders);
+		}
 	}
 
 	function user_update($event_name, $data) {
-- 
GitLab


From e39688e4c9a684e90df312d576786077462cdaba Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Tue, 28 Jul 2020 13:28:07 +0200
Subject: [PATCH 542/571] Hide APS by default (First step to #5676)

---
 install/tpl/system.ini.master           |  1 +
 interface/web/sites/lib/module.conf.php | 58 +++++++++++++------------
 2 files changed, 32 insertions(+), 27 deletions(-)

diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index 81f6bba553..d6dfa18f47 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -35,6 +35,7 @@ client_username_web_check_disabled=n
 backups_include_into_web_quota=n
 reseller_can_use_options=n
 web_php_options=no,fast-cgi,mod,php-fpm
+show_aps_menu=n
 
 
 [tools]
diff --git a/interface/web/sites/lib/module.conf.php b/interface/web/sites/lib/module.conf.php
index a9aefad967..775a704873 100644
--- a/interface/web/sites/lib/module.conf.php
+++ b/interface/web/sites/lib/module.conf.php
@@ -157,33 +157,37 @@ if($app->auth->get_client_limit($userid, 'shell_user') != 0 or $app->auth->get_c
 }
 
 // APS menu
-if($app->auth->get_client_limit($userid, 'aps') != 0)
-{
-	$items = array();
-
-	$items[] = array(   'title'   => 'Available packages',
-		'target'  => 'content',
-		'link'    => 'sites/aps_availablepackages_list.php',
-		'html_id' => 'aps_availablepackages_list');
-
-	$items[] = array(   'title'   => 'Installed packages',
-		'target'  => 'content',
-		'link'    => 'sites/aps_installedpackages_list.php',
-		'html_id' => 'aps_installedpackages_list');
-
-
-	// Second menu group, available only for admins
-	if($_SESSION['s']['user']['typ'] == 'admin')
-	{
-		$items[] = array(   'title'   => 'Update Packagelist',
-			'target'  => 'content',
-			'link'    => 'sites/aps_update_packagelist.php',
-			'html_id' => 'aps_packagedetails_show');
-	}
-
-	$module['nav'][] = array(   'title' => 'APS Installer',
-		'open'  => 1,
-		'items' => $items);
+if($app->auth->get_client_limit($userid, 'aps') != 0) {
+	// read web config
+	$app->uses('getconf');
+	$global_config = $app->getconf->get_global_config('sites');
+	if($global_config['show_aps_menu'] == 'y') {
+	  $items = array();
+
+  	$items[] = array(   'title'   => 'Available packages',
+  		'target'  => 'content',
+  		'link'    => 'sites/aps_availablepackages_list.php',
+  		'html_id' => 'aps_availablepackages_list');
+
+  	$items[] = array(   'title'   => 'Installed packages',
+  		'target'  => 'content',
+  		'link'    => 'sites/aps_installedpackages_list.php',
+  		'html_id' => 'aps_installedpackages_list');
+
+
+  	// Second menu group, available only for admins
+  	if($_SESSION['s']['user']['typ'] == 'admin')
+  	{
+  		$items[] = array(   'title'   => 'Update Packagelist',
+  			'target'  => 'content',
+  			'link'    => 'sites/aps_update_packagelist.php',
+  			'html_id' => 'aps_packagedetails_show');
+  	}
+
+  	$module['nav'][] = array(   'title' => 'APS Installer',
+  		'open'  => 1,
+  		'items' => $items);
+  }
 }
 
 // Statistics menu
-- 
GitLab


From 6aa06901f3bd4491333d5fa1ec16e26ac1bc621c Mon Sep 17 00:00:00 2001
From: Florian Schaal <info@schaal-24.de>
Date: Tue, 28 Jul 2020 14:07:05 +0200
Subject: [PATCH 543/571] update affected websites when a directive snippet was
 updated (Implements #5632)

---
 .../sql/incremental/upd_dev_collection.sql    |  3 ++
 install/sql/ispconfig3.sql                    |  1 +
 .../web/admin/directive_snippets_edit.php     | 34 +++++++++++++++++--
 .../admin/form/directive_snippets.tform.php   |  6 ++++
 .../admin/lib/lang/ar_directive_snippets.lng  |  1 +
 .../admin/lib/lang/bg_directive_snippets.lng  |  1 +
 .../admin/lib/lang/br_directive_snippets.lng  |  1 +
 .../admin/lib/lang/ca_directive_snippets.lng  |  1 +
 .../admin/lib/lang/cz_directive_snippets.lng  |  1 +
 .../admin/lib/lang/de_directive_snippets.lng  |  1 +
 .../admin/lib/lang/dk_directive_snippets.lng  |  1 +
 .../admin/lib/lang/el_directive_snippets.lng  |  1 +
 .../admin/lib/lang/en_directive_snippets.lng  |  1 +
 .../admin/lib/lang/es_directive_snippets.lng  |  1 +
 .../admin/lib/lang/fi_directive_snippets.lng  |  1 +
 .../admin/lib/lang/fr_directive_snippets.lng  |  1 +
 .../admin/lib/lang/hr_directive_snippets.lng  |  1 +
 .../admin/lib/lang/hu_directive_snippets.lng  |  1 +
 .../admin/lib/lang/id_directive_snippets.lng  |  1 +
 .../admin/lib/lang/it_directive_snippets.lng  |  1 +
 .../admin/lib/lang/ja_directive_snippets.lng  |  1 +
 .../admin/lib/lang/nl_directive_snippets.lng  |  1 +
 .../admin/lib/lang/pl_directive_snippets.lng  |  1 +
 .../admin/lib/lang/pt_directive_snippets.lng  |  1 +
 .../admin/lib/lang/ro_directive_snippets.lng  |  1 +
 .../admin/lib/lang/ru_directive_snippets.lng  |  1 +
 .../admin/lib/lang/se_directive_snippets.lng  |  1 +
 .../admin/lib/lang/sk_directive_snippets.lng  |  1 +
 .../admin/lib/lang/tr_directive_snippets.lng  |  1 +
 .../templates/directive_snippets_edit.htm     |  5 ++-
 server/mods-available/web_module.inc.php      | 13 +++++--
 .../plugins-available/apache2_plugin.inc.php  | 28 +++++++++++++++
 server/plugins-available/nginx_plugin.inc.php | 29 ++++++++++++++++
 33 files changed, 139 insertions(+), 5 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 9eefff3630..1deb605028 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -62,3 +62,6 @@ ALTER TABLE `mail_user` MODIFY `move_junk` enum('y','a','n') NOT NULL DEFAULT 'y
 
 -- Change id_rsa column to TEXT format
 ALTER TABLE `client` CHANGE `id_rsa` `id_rsa` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
+
+ALTER TABLE `directive_snippets` ADD `update_sites` ENUM('y','n') NOT NULL DEFAULT 'n' ;
+
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index fae07c8036..cac7ad0f08 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -470,6 +470,7 @@ CREATE TABLE IF NOT EXISTS `directive_snippets` (
   `required_php_snippets` varchar(255) NOT NULL DEFAULT '',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   `master_directive_snippets_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `update_sites` ENUM('y','n') NOT NULL DEFAULT 'n',
   PRIMARY KEY (`directive_snippets_id`)
 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
diff --git a/interface/web/admin/directive_snippets_edit.php b/interface/web/admin/directive_snippets_edit.php
index b12da0a79b..af700213a4 100644
--- a/interface/web/admin/directive_snippets_edit.php
+++ b/interface/web/admin/directive_snippets_edit.php
@@ -75,22 +75,52 @@ class page_action extends tform_actions {
 				$app->tpl->setVar("snippet", $this->dataRecord['snippet'], true);
 			}
 		}
+
 		$app->tpl->setVar("is_master", $is_master);
+
+		if($this->dataRecord['managed_snippet_id'] > 0) {
+		}
 		
 		parent::onShowEnd();
 	}
 	
 	function onSubmit() {
 		global $app, $conf;
-		
+
 		if($this->id > 0){
 			$record = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ?", $this->id);
 			if($record['master_directive_snippets_id'] > 0){
 				unset($app->tform->formDef["tabs"]['directive_snippets']['fields']['name'], $app->tform->formDef["tabs"]['directive_snippets']['fields']['type'], $app->tform->formDef["tabs"]['directive_snippets']['fields']['snippet'], $app->tform->formDef["tabs"]['directive_snippets']['fields']['required_php_snippets']);
 			}
+	
+			if(isset($this->dataRecord['update_sites'])) {
+				parent::onSubmit();
+			} else {
+				$app->db->query('UPDATE directive_snippets SET name = ?, type = ?, snippet = ?, customer_viewable = ?, required_php_snippets = ?, active = ? WHERE directive_snippets_id = ?', $this->dataRecord['name'], $this->dataRecord['type'], $this->dataRecord['snippet'], $this->dataRecord['customer_viewable'], implode(',', $this->dataRecord['required_php_snippets']), $this->dataRecord['active'], $this->id);
+
+	            if($_REQUEST["next_tab"] == '') {
+    	            $list_name = $_SESSION["s"]["form"]["return_to"];
+                	if($list_name != '' && $_SESSION["s"]["list"][$list_name]["parent_name"] != $app->tform->formDef["name"]) {
+                    	$redirect = "Location: ".$_SESSION["s"]["list"][$list_name]["parent_script"]."?id=".$_SESSION["s"]["list"][$list_name]["parent_id"]."&next_tab=".$_SESSION["s"]["list"][$list_name]["parent_tab"];
+	                    $_SESSION["s"]["form"]["return_to"] = '';
+    	                session_write_close();
+        	            header($redirect);
+                	} elseif (isset($_SESSION["s"]["form"]["return_to_url"]) && $_SESSION["s"]["form"]["return_to_url"] != '') {
+	                    $redirect = $_SESSION["s"]["form"]["return_to_url"];
+    	                $_SESSION["s"]["form"]["return_to_url"] = '';
+        	            session_write_close();
+            	        header("Location: ".$redirect);
+                	    exit;
+                	} else {
+                    	header("Location: ".$app->tform->formDef['list_default']);
+                	}
+                	exit;
+				}
+			}
+
 			unset($record);
 		}
-		
+
 		parent::onSubmit();
 	}
 	
diff --git a/interface/web/admin/form/directive_snippets.tform.php b/interface/web/admin/form/directive_snippets.tform.php
index bd9466c310..bf7f2b7fe5 100644
--- a/interface/web/admin/form/directive_snippets.tform.php
+++ b/interface/web/admin/form/directive_snippets.tform.php
@@ -110,6 +110,12 @@ $form["tabs"]['directive_snippets'] = array (
 			'default' => 'y',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'update_sites' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
 		'required_php_snippets' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOXARRAY',
diff --git a/interface/web/admin/lib/lang/ar_directive_snippets.lng b/interface/web/admin/lib/lang/ar_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/ar_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ar_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_directive_snippets.lng b/interface/web/admin/lib/lang/bg_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/bg_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/bg_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/br_directive_snippets.lng b/interface/web/admin/lib/lang/br_directive_snippets.lng
index 43c46c69b9..bc94b85b7d 100644
--- a/interface/web/admin/lib/lang/br_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/br_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Já existe uma diretiva com este
 $wb['variables_txt'] = 'Variáveis';
 $wb['customer_viewable_txt'] = 'Visualização personalizada';
 $wb['required_php_snippets_txt'] = 'Trecho de código exige php';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_directive_snippets.lng b/interface/web/admin/lib/lang/ca_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/ca_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ca_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_directive_snippets.lng b/interface/web/admin/lib/lang/cz_directive_snippets.lng
index 1fd316583b..26d17f64b3 100644
--- a/interface/web/admin/lib/lang/cz_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/cz_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Proměnné';
 $wb['customer_viewable_txt'] = 'Dostupná volba pro klienta';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/de_directive_snippets.lng b/interface/web/admin/lib/lang/de_directive_snippets.lng
index 9e369f4b51..dbe3aaf8bd 100644
--- a/interface/web/admin/lib/lang/de_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/de_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Es existiert schon ein Direktiven
 $wb['variables_txt'] = 'Variablen';
 $wb['customer_viewable_txt'] = 'Sichtbar für Kunden';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_directive_snippets.lng b/interface/web/admin/lib/lang/dk_directive_snippets.lng
index 7b43dcd40b..1b158e5c80 100644
--- a/interface/web/admin/lib/lang/dk_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/dk_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Der er allerede et direktiv uddra
 $wb['variables_txt'] = 'Variabler';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/el_directive_snippets.lng b/interface/web/admin/lib/lang/el_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/el_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/el_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/en_directive_snippets.lng b/interface/web/admin/lib/lang/en_directive_snippets.lng
index 8e8a63afe1..da164a5318 100644
--- a/interface/web/admin/lib/lang/en_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/en_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb["directive_snippets_name_error_unique"] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/es_directive_snippets.lng b/interface/web/admin/lib/lang/es_directive_snippets.lng
index 8e2a927079..a5bb21b494 100644
--- a/interface/web/admin/lib/lang/es_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/es_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['snippet_txt'] = 'Fragmento';
 $wb['type_txt'] = 'Tipo';
 $wb['variables_txt'] = 'Variables';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_directive_snippets.lng b/interface/web/admin/lib/lang/fi_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/fi_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/fi_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_directive_snippets.lng b/interface/web/admin/lib/lang/fr_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/fr_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/fr_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_directive_snippets.lng b/interface/web/admin/lib/lang/hr_directive_snippets.lng
index 077896577d..5709d6075d 100644
--- a/interface/web/admin/lib/lang/hr_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/hr_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Već postoji direktiva sa tim ime
 $wb['variables_txt'] = 'Varijable';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_directive_snippets.lng b/interface/web/admin/lib/lang/hu_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/hu_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/hu_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/id_directive_snippets.lng b/interface/web/admin/lib/lang/id_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/id_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/id_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/it_directive_snippets.lng b/interface/web/admin/lib/lang/it_directive_snippets.lng
index 5598aacecc..e9a473f92e 100644
--- a/interface/web/admin/lib/lang/it_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/it_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Esiste già una direttiva snippet
 $wb['variables_txt'] = 'Variabili';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_directive_snippets.lng b/interface/web/admin/lib/lang/ja_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/ja_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ja_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_directive_snippets.lng b/interface/web/admin/lib/lang/nl_directive_snippets.lng
index a4f610634e..d216622c6f 100644
--- a/interface/web/admin/lib/lang/nl_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/nl_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Er is al een Directive Snippet me
 $wb['variables_txt'] = 'Variabelen';
 $wb['customer_viewable_txt'] = 'Zichtbaar voor klanten';
 $wb['required_php_snippets_txt'] = 'Vereiste PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_directive_snippets.lng b/interface/web/admin/lib/lang/pl_directive_snippets.lng
index 4902bf3282..abef1e28fa 100644
--- a/interface/web/admin/lib/lang/pl_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/pl_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Istnieje już zestaw dyrektyw o p
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_directive_snippets.lng b/interface/web/admin/lib/lang/pt_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/pt_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/pt_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_directive_snippets.lng b/interface/web/admin/lib/lang/ro_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/ro_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ro_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_directive_snippets.lng b/interface/web/admin/lib/lang/ru_directive_snippets.lng
index cfa09a02fc..120a962d7f 100644
--- a/interface/web/admin/lib/lang/ru_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ru_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Уже есть заготовк
 $wb['variables_txt'] = 'Переменные:';
 $wb['customer_viewable_txt'] = 'Видимый клиентам';
 $wb['required_php_snippets_txt'] = 'Обязательная PHP-заготовка';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/se_directive_snippets.lng b/interface/web/admin/lib/lang/se_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/se_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/se_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_directive_snippets.lng b/interface/web/admin/lib/lang/sk_directive_snippets.lng
index 0616afad8b..071d6f4fed 100644
--- a/interface/web/admin/lib/lang/sk_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/sk_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_directive_snippets.lng b/interface/web/admin/lib/lang/tr_directive_snippets.lng
index 448d453672..4c1cebea4e 100644
--- a/interface/web/admin/lib/lang/tr_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/tr_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Aynı adlı bir yönerge kod par
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['customer_viewable_txt'] = 'Müşteri görebilir';
 $wb['required_php_snippets_txt'] = 'Gerekli PHP Parçası';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/templates/directive_snippets_edit.htm b/interface/web/admin/templates/directive_snippets_edit.htm
index ee4d2ab3cd..4506cafd63 100644
--- a/interface/web/admin/templates/directive_snippets_edit.htm
+++ b/interface/web/admin/templates/directive_snippets_edit.htm
@@ -36,7 +36,10 @@
                     {tmpl_var name='active'}
                 </div>
             </div>
-        
+			<div class="form-group">
+				<label for="update_sites" class="col-sm-3 control-label">{tmpl_var name='update_sites_txt'}</label>
+				<div class="col-sm-9">{tmpl_var name='update_sites'}</div>        
+			</div> 
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
             
diff --git a/server/mods-available/web_module.inc.php b/server/mods-available/web_module.inc.php
index 02f31510c2..609e9212dc 100644
--- a/server/mods-available/web_module.inc.php
+++ b/server/mods-available/web_module.inc.php
@@ -32,7 +32,8 @@ class web_module {
 
 	var $module_name = 'web_module';
 	var $class_name = 'web_module';
-	var $actions_available = array( 'web_domain_insert',
+	var $actions_available = array(
+		'web_domain_insert',
 		'web_domain_update',
 		'web_domain_delete',
 		'ftp_user_insert',
@@ -64,7 +65,9 @@ class web_module {
 		'aps_package_delete',
 		'aps_setting_insert',
 		'aps_setting_update',
-		'aps_setting_delete');
+		'aps_setting_delete',
+		'directive_snippets_update'
+	);
 
 	//* This function is called during ispconfig installation to determine
 	//  if a symlink shall be created for this plugin.
@@ -114,6 +117,7 @@ class web_module {
 		$app->modules->registerTableHook('aps_instances_settings', 'web_module', 'process');
 		$app->modules->registerTableHook('aps_packages', 'web_module', 'process');
 		$app->modules->registerTableHook('aps_settings', 'web_module', 'process');
+		$app->modules->registerTableHook('directive_snippets', 'web_module', 'process');
 
 		// Register service
 		$app->services->registerService('httpd', 'web_module', 'restartHttpd');
@@ -185,6 +189,11 @@ class web_module {
 			if($action == 'u') $app->plugins->raiseEvent('aps_setting_update', $data);
 			if($action == 'd') $app->plugins->raiseEvent('aps_setting_delete', $data);
 			break;
+		case 'directive_snippets':
+			if($action == 'i') $app->plugins->raiseEvent('directive_snippets_insert', $data);
+			if($action == 'u') $app->plugins->raiseEvent('directive_snippets_update', $data);
+			if($action == 'd') $app->plugins->raiseEvent('directive_snippets_delete', $data);
+			break;
 		} // end switch
 	} // end function
 
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 4553208638..3ef5e21467 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -93,6 +93,34 @@ class apache2_plugin {
 		$app->plugins->registerEvent('ftp_user_delete', $this->plugin_name, 'ftp_user_delete');
 
 		$app->plugins->registerAction('php_ini_changed', $this->plugin_name, 'php_ini_changed');
+
+		$app->plugins->registerEvent('directive_snippets_update', $this->plugin_name, 'directive_snippets');
+	}
+
+	function directive_snippets($event_name, $data) {
+		global $app, $conf;
+
+		$snippet = $data['new'];
+		if($snippet['active'] == 'y' && $snippet['update_sites'] == 'y') {
+			if($snippet['type'] == 'php') {
+				$rlike = $snippet['directive_snippets_id'].'|,'.$snippet['directive_snippets_id'].'|'.$snippet['directive_snippets_id'].',';
+				$affected_snippets = $app->db->queryAllRecords('SELECT directive_snippets_id FROM directive_snippets WHERE required_php_snippets RLIKE(?) AND type = ?', $rlike, 'apache');
+				if(is_array($affected_snippets) && !empty($affected_snippets)) {
+					foreach($affected_snippets as $snippet) $sql_in[] = $snippet['directive_snippets_id'];
+					$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN('.implode(',', $sql_in).')', $conf['server_id']);
+				}
+			}
+			if($snippet['type'] == 'apache') $affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id = ?', $conf['server_id'], $snippet['directive_snippets_id']);
+
+			if(is_array($affected_sites) && !empty($affected_sites)) {
+				foreach($affected_sites as $site) {
+					$website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ?', $site['domain_id']);
+					$new_data['old'] = $website;
+					$new_data['new'] = $website;
+					$this->update('web_domain_update', $new_data);
+				}
+			}
+		}
 	}
 
 	private function get_master_php_ini_content($web_data) {
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 4116c18676..85661b97ce 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -88,6 +88,35 @@ class nginx_plugin {
 
 		$app->plugins->registerEvent('web_folder_update', $this->plugin_name, 'web_folder_update');
 		$app->plugins->registerEvent('web_folder_delete', $this->plugin_name, 'web_folder_delete');
+
+		$app->plugins->registerEvent('directive_snippets_update', $this->plugin_name, 'directive_snippets');
+	}
+
+	function directive_snippets($event_name, $data) {
+		global $app, $conf;
+
+		$snippet = $data['new'];
+
+		if($snippet['active'] == 'y' && $snippet['update_sites'] == 'y') {
+			if($snippet['type'] == 'php') {
+				$rlike = $snippet['directive_snippets_id'].'|,'.$snippet['directive_snippets_id'].'|'.$snippet['directive_snippets_id'].',';
+				$affected_snippets = $app->db->queryAllRecords('SELECT directive_snippets_id FROM directive_snippets WHERE required_php_snippets RLIKE(?) AND type = ?', $rlike, 'nginx');
+				if(is_array($affected_snippets) && !empty($affected_snippets)) {
+					foreach($affected_snippets as $snippet) $sql_in[] = $snippet['directive_snippets_id'];
+					$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN('.implode(',', $sql_in).')', $conf['server_id']);
+				}
+			}
+			if($snippet['type'] == 'nginx') $affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id = ?', $conf['server_id'], $snippet['directive_snippets_id']);
+
+			if(is_array($affected_sites) && !empty($affected_sites)) {
+				foreach($affected_sites as $site) {
+					$website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ?', $site['domain_id']);
+					$new_data['old'] = $website;
+					$new_data['new'] = $website;
+					$this->update('web_domain_update', $new_data);
+				}
+			}
+		}
 	}
 
 	// Handle the creation of SSL certificates
-- 
GitLab


From 2bb522c8c7d281d044084b504668dac24ab5d8ca Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Wed, 29 Jul 2020 07:53:52 +0200
Subject: [PATCH 544/571] Update directive_snippets_edit.php

---
 interface/web/admin/directive_snippets_edit.php | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/interface/web/admin/directive_snippets_edit.php b/interface/web/admin/directive_snippets_edit.php
index af700213a4..e22a7cf42a 100644
--- a/interface/web/admin/directive_snippets_edit.php
+++ b/interface/web/admin/directive_snippets_edit.php
@@ -77,9 +77,6 @@ class page_action extends tform_actions {
 		}
 
 		$app->tpl->setVar("is_master", $is_master);
-
-		if($this->dataRecord['managed_snippet_id'] > 0) {
-		}
 		
 		parent::onShowEnd();
 	}
-- 
GitLab


From 5fb3abafa99f79f0e5052981ab7bb9a49790288c Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Wed, 29 Jul 2020 07:54:48 +0200
Subject: [PATCH 545/571] Apply 1 suggestion(s) to 1 file(s)

---
 server/plugins-available/nginx_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 85661b97ce..f31c378c0f 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -103,7 +103,7 @@ class nginx_plugin {
 				$affected_snippets = $app->db->queryAllRecords('SELECT directive_snippets_id FROM directive_snippets WHERE required_php_snippets RLIKE(?) AND type = ?', $rlike, 'nginx');
 				if(is_array($affected_snippets) && !empty($affected_snippets)) {
 					foreach($affected_snippets as $snippet) $sql_in[] = $snippet['directive_snippets_id'];
-					$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN('.implode(',', $sql_in).')', $conf['server_id']);
+					$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN ?', $conf['server_id'], $sql_in);
 				}
 			}
 			if($snippet['type'] == 'nginx') $affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id = ?', $conf['server_id'], $snippet['directive_snippets_id']);
-- 
GitLab


From 4c2cca6dfbf9810f344206ad0ef7503bc95a450d Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Wed, 29 Jul 2020 07:56:57 +0200
Subject: [PATCH 546/571] Update apache2_plugin.inc.php

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 3ef5e21467..584f313e80 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -107,7 +107,7 @@ class apache2_plugin {
 				$affected_snippets = $app->db->queryAllRecords('SELECT directive_snippets_id FROM directive_snippets WHERE required_php_snippets RLIKE(?) AND type = ?', $rlike, 'apache');
 				if(is_array($affected_snippets) && !empty($affected_snippets)) {
 					foreach($affected_snippets as $snippet) $sql_in[] = $snippet['directive_snippets_id'];
-					$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN('.implode(',', $sql_in).')', $conf['server_id']);
+					$$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN ?', $conf['server_id'], $sql_in);
 				}
 			}
 			if($snippet['type'] == 'apache') $affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id = ?', $conf['server_id'], $snippet['directive_snippets_id']);
-- 
GitLab


From cf865a976be5a079b3269b4e41e34b32ff2fca45 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 29 Jul 2020 08:58:48 +0200
Subject: [PATCH 547/571] - added missing server_php_ini column

---
 install/sql/ispconfig3.sql | 1 +
 1 file changed, 1 insertion(+)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index fae07c8036..c35d55331a 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2081,6 +2081,7 @@ CREATE TABLE `web_domain` (
   `folder_directive_snippets` text,
   `log_retention` int(11) NOT NULL DEFAULT '10',
   `proxy_protocol` enum('n','y') NOT NULL default 'n',
+  `server_php_id` INT(11) UNSIGNED NOT NULL DEFAULT 0,
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- 
GitLab


From 2ece9ca0cee51d82193d9fb5b269434b8168cb79 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Wed, 29 Jul 2020 12:39:07 +0200
Subject: [PATCH 548/571] clean up in 150-goaccess.inc.php

---
 .../lib/classes/cron.d/150-goaccess.inc.php   | 186 +++++++++---------
 1 file changed, 95 insertions(+), 91 deletions(-)

diff --git a/server/lib/classes/cron.d/150-goaccess.inc.php b/server/lib/classes/cron.d/150-goaccess.inc.php
index 87c9642b4e..7c70486317 100644
--- a/server/lib/classes/cron.d/150-goaccess.inc.php
+++ b/server/lib/classes/cron.d/150-goaccess.inc.php
@@ -80,133 +80,137 @@ class cronjob_goaccess extends cronjob {
                 system("type goaccess 2>&1>/dev/null", $retval);
 		if ($retval === 0) {
 
-		foreach($records as $rec) {
-			$yesterday = date('Ymd', strtotime("-1 day", time()));
+			foreach($records as $rec) {
+				$yesterday = date('Ymd', strtotime("-1 day", time()));
 
-			$log_folder = 'log';
+				$log_folder = 'log';
 
-			if($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') {
-				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $rec['parent_domain_id']);
-				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $rec['domain']);
-				if($subdomain_host == '') $subdomain_host = 'web'.$rec['domain_id'];
-				$log_folder .= '/' . $subdomain_host;
-				unset($tmp);
-			}
+				if($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') {
+					$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $rec['parent_domain_id']);
+					$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $rec['domain']);
+					if($subdomain_host == '') $subdomain_host = 'web'.$rec['domain_id'];
+					$log_folder .= '/' . $subdomain_host;
+					unset($tmp);
+				}
 
-			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log');
+				$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log';
 
-			if(!@is_file($logfile)) {
-				$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz');
 				if(!@is_file($logfile)) {
-					continue;
+					$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz';
+					if(!@is_file($logfile)) {
+						continue;
+					}
 				}
-			}
 
-			$web_folder = (($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web');
-			$domain = escapeshellcmd($rec['domain']);
-			$statsdir = escapeshellcmd($rec['document_root'].'/'.$web_folder.'/stats');
-			$goaccess_conf = escapeshellcmd($rec['document_root'].'/log/goaccess.conf');
+				$web_folder = (($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web');
+				$domain = $rec['domain'];
+				$statsdir = $rec['document_root'].'/'.$web_folder.'/stats';
+				$goaccess_conf = $rec['document_root'].'/log/goaccess.conf';
 
-			/*
-			 In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
-			 By default the originally, with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
-			 */
-
-			if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
-				copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
-			} elseif(!file_exists($goaccess_conf)) {
 				/*
-				 By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
-				 Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
+				 In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
+				 By default the originally, with GoAccess shipped goaccess.conf from /etc/ or /etc/goaccess will be used along with the log-format value COMBINED. 
 				*/
-                        	copy($goaccess_conf_main, $goaccess_conf);
-	                        file_put_contents($goaccess_conf, preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", file_get_contents($goaccess_conf)));
-			}
 
-			/* Update the primary domain name in the title, it could occasionally change */
-			if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
-				$goaccess_content = file_get_contents($goaccess_conf);
-				file_put_contents($goaccess_conf, preg_replace('/^(#)?html-report-title(.*)?/m', "html-report-title $domain", file_get_contents($goaccess_conf)));
-			}
+				if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
+					copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
+				} elseif(!file_exists($goaccess_conf)) {
+					/*
+					 By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
+					 Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
+					*/
+	                        	copy($goaccess_conf_main, $goaccess_conf);
+		                        file_put_contents($goaccess_conf, preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", file_get_contents($goaccess_conf)));
+				}
+
+				/* Update the primary domain name in the title, it could occasionally change */
+				if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
+					$goaccess_content = file_get_contents($goaccess_conf);
+					file_put_contents($goaccess_conf, preg_replace('/^(#)?html-report-title(.*)?/m', "html-report-title $domain", file_get_contents($goaccess_conf)));
+					unset($goaccess_content);
+				}
 
 
-			if(!@is_dir($statsdir)) mkdir($statsdir);
-			$username = escapeshellcmd($rec['system_user']);
-			$groupname = escapeshellcmd($rec['system_group']);
-			$docroot = $rec['document_root'];
 
-			$goa_db_dir = $docroot.'/'.$web_folder.'/stats/.db/';
-			$output_html = $docroot.'/'.$web_folder.'/stats/goaindex.html';
-                        if(!@is_dir($goa_db_dir)) mkdir($goa_db_dir);
+				if(!@is_dir($statsdir)) mkdir($statsdir);
+				$username = $rec['system_user'];
+				$groupname = $rec['system_group'];
+				$docroot = $rec['document_root'];
 
-                        if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
-                        symlink($logfile, '/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
+				$goa_db_dir = $docroot.'/'.$web_folder.'/stats/.db/';
+				$output_html = $docroot.'/'.$web_folder.'/stats/goaindex.html';
+	                        if(!@is_dir($goa_db_dir)) mkdir($goa_db_dir);
+	
+	                        if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
+	                        symlink($logfile, '/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
 
 
-			chown($statsdir, $username);
-			chgrp($statsdir, $groupname);
+				chown($statsdir, $username);
+				chgrp($statsdir, $groupname);
 
-			$goamonth = date("n");
-			$goayear = date("Y");
+				$goamonth = date("n");
+				$goayear = date("Y");
 
-			if (date("d") == 1) {
-				$goamonth = date("m")-1;
-				if (date("m") == 1) {
-					$goayear = date("Y")-1;
-					$goamonth = "12";
+				if (date("d") == 1) {
+					$goamonth = date("m")-1;
+					if (date("m") == 1) {
+						$goayear = date("Y")-1;
+						$goamonth = "12";
+					}
 				}
-			}
 
 	
-			if (date("d") == 2) {
-				$goamonth = date("m")-1;
-				if (date("m") == 1) {
-					$goayear = date("Y")-1;
-					$goamonth = "12";
-				}
+				if (date("d") == 2) {
+					$goamonth = date("m")-1;
+					if (date("m") == 1) {
+						$goayear = date("Y")-1;
+						$goamonth = "12";
+					}
 
-				$statsdirold = $statsdir."/".$goayear."-".$goamonth."/";
+					$statsdirold = $statsdir."/".$goayear."-".$goamonth."/";
 
-				if(!is_dir($statsdirold)) {
-					mkdir($statsdirold);
-				}
+					if(!is_dir($statsdirold)) {
+						mkdir($statsdirold);
+					}
 
-				rename($goa_db_dir, $statsdirold.'db');
-                                mkdir($goa_db_dir);
+					// don't rotate db files per month
+					//rename($goa_db_dir, $statsdirold.'db');
+	                                //mkdir($goa_db_dir);
 
-				$files = scandir($statsdir);
-				foreach ($files as $file) {
-					if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") copy("$statsdir"."/"."$file", "$statsdirold"."$file");
+					$files = scandir($statsdir);
+
+					foreach ($files as $file) {
+						if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") copy("$statsdir"."/"."$file", "$statsdirold"."$file");
+					}
 				}
-			}
 
 
-			$output = shell_exec('goaccess --help');
+				$output = shell_exec('goaccess --help');
 
-			if(preg_match('/keep-db-files/', $output)) {
-				$app->system->exec_safe("goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $logfile, $goaccess_conf, $goa_db_dir, $output_html);
+				if(preg_match('/keep-db-files/', $output)) {
+					$app->system->exec_safe("goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $logfile, $goaccess_conf, $goa_db_dir, $output_html);
 
-				if(!is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
-					if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
-						copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
-					} else {
-						copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+					if(!is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+						if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+							copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+						} else {
+							copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+						}
 					}
-				}
 
-	                        $app->log('Created GoAccess statistics for ' . $domain, LOGLEVEL_DEBUG);
-	                        if(is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
-	                                chown($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_user']);
-	                                chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
-	                        }
+		                        $app->log('Created GoAccess statistics for ' . $domain, LOGLEVEL_DEBUG);
+		                        if(is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+		                                chown($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_user']);
+		                                chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
+		                        }
 
-	                        $app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
+		                        $app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
 
-			} else {
-		                $app->log("Stats not generated. The GoAccess binary was not compiled with btree support. Please recompile/reinstall GoAccess with btree support!", LOGLEVEL_ERROR);
-			}
+				} else {
+			                $app->log("Stats not generated. The GoAccess binary was not compiled with btree support. Please recompile/reinstall GoAccess with btree support!", LOGLEVEL_ERROR);
+				}
 
-			unset($output);
+				unset($output);
 
 		}
 	} else {
-- 
GitLab


From 81d93e4fcc0c7ede1b1b72c4c2a078fd43c2e73f Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Wed, 29 Jul 2020 13:26:28 +0200
Subject: [PATCH 549/571] added GoAccess index file compatiblity to
 awstats_index.php.master

---
 server/conf/awstats_index.php.master | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/server/conf/awstats_index.php.master b/server/conf/awstats_index.php.master
index f7222c9687..b3e694ebbf 100644
--- a/server/conf/awstats_index.php.master
+++ b/server/conf/awstats_index.php.master
@@ -45,10 +45,21 @@ arsort($awprev);
 $options = "";
 foreach ($awprev as $key => $value)
 {
+
+	if(file_exists($value.'/awsindex.html') && file_exists($value.'/goaindex.html')) {
+		$awstatsindex = 'awsindex.html';
+	} elseif(file_exists($value.'/awsindex.html') && !file_exists($value.'/goaindex.html')) {
+                $awstatsindex = 'awsindex.html';
+	} else {
+		$awstatsindex = 'goaindex.html';
+	}
+
 	if($key == $current) $options .= "<option selected=\"selected\" value=\"{$awstatsindex}\">{$value}</option>\n";
 	else $options .= "<option value=\"{$value}/{$awstatsindex}\">{$value}</option>\n";
 }
 
+$awstatsindex = 'awsindex.html';
+
 $html = "<!DOCTYPE html>\n<html>\n<head>\n<title>Stats</title>\n";
 $html .= "<style>\nhtml,body {margin:0px;padding:0px;width:100%;height:100%;background-color: #ccc;}\n";
 $html .= "#header\n{\nwidth:100%;margin:0px auto;\nheight:20px;\nposition:fixed;\npadding:4px;\ntext-align:center;\n}\n";
@@ -60,4 +71,4 @@ $html .= $options;
 $html .= "</select>\n</div>\n<iframe src=\"{$awstatsindex}\" id=\"content\"></iframe>\n";
 $html .= "</body></html>";
 echo $html;
-?>
\ No newline at end of file
+?>
-- 
GitLab


From 5494772cebcef900fc16b7a03212715cc21f40e2 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 29 Jul 2020 11:16:42 -0600
Subject: [PATCH 550/571] installer should store encrypted rspamd password

---
 install/lib/installer_base.lib.php | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 265dd8c583..2121eadeb1 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1805,7 +1805,12 @@ class installer_base {
 
 		$tpl = new tpl();
 		$tpl->newTemplate('rspamd_worker-controller.inc.master');
-		$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
+		$rspamd_password = $mail_config['rspamd_password'];
+		$crypted_password = trim(exec('rspamadm pw -p ' . escapeshellarg($rspamd_password)));
+		if($crypted_password) {
+			$rspamd_password = $crypted_password;
+		}
+		$tpl->setVar('rspamd_password', $rspamd_password);
 		wf('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());
 		chmod('/etc/rspamd/local.d/worker-controller.inc', 0644);
 	}
-- 
GitLab


From cd7df83da3d30619bacbffa82a08d5758ea162e5 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 29 Jul 2020 13:42:29 -0600
Subject: [PATCH 551/571] set server_php_id in ajax_get_json.php

---
 interface/web/sites/ajax_get_json.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/interface/web/sites/ajax_get_json.php b/interface/web/sites/ajax_get_json.php
index 298fbdb019..e896e6fe37 100644
--- a/interface/web/sites/ajax_get_json.php
+++ b/interface/web/sites/ajax_get_json.php
@@ -105,9 +105,9 @@ if($type == 'getphpfastcgi'){
 	if(is_array($php_records) && !empty($php_records)) {
 		foreach( $php_records as $php_record) {
 			if($php_type == 'php-fpm' || ($php_type == 'hhvm' && $server_type == 'nginx')){
-				$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
+				$php_version = $php_version = $php_record['server_php_id'];
 			} else {
-				$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
+				$php_version = $php_version = $php_record['server_php_id'];
 			}
 			if($php_record['name'] != $web_config['php_default_name']) {
 				$json .= '"'.$php_version.'": "'.$php_record['name'].'",';
-- 
GitLab


From 8e4dfea6ce1f5f9a90edc11c0d3754d69234eff2 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 29 Jul 2020 15:33:27 -0600
Subject: [PATCH 552/571] further server_php_id fixing

---
 interface/web/sites/ajax_get_json.php         |  8 ++--
 .../sites/templates/web_vhost_domain_edit.htm | 44 ++++++++++++-------
 2 files changed, 31 insertions(+), 21 deletions(-)

diff --git a/interface/web/sites/ajax_get_json.php b/interface/web/sites/ajax_get_json.php
index e896e6fe37..8ca9cae31d 100644
--- a/interface/web/sites/ajax_get_json.php
+++ b/interface/web/sites/ajax_get_json.php
@@ -63,7 +63,7 @@ if($type == 'getserverid'){
 	$json .= '"}';
 }
 
-if($type == 'getphpfastcgi'){
+if($type == 'getserverphp'){
 	$json = '{';
 
 	$server_type = 'apache';
@@ -105,14 +105,14 @@ if($type == 'getphpfastcgi'){
 	if(is_array($php_records) && !empty($php_records)) {
 		foreach( $php_records as $php_record) {
 			if($php_type == 'php-fpm' || ($php_type == 'hhvm' && $server_type == 'nginx')){
-				$php_version = $php_version = $php_record['server_php_id'];
+				$php_version = $php_record['server_php_id'];
 			} else {
-				$php_version = $php_version = $php_record['server_php_id'];
+				$php_version = $php_record['server_php_id'];
 			}
 			if($php_record['name'] != $web_config['php_default_name']) {
 				$json .= '"'.$php_version.'": "'.$php_record['name'].'",';
 			} else {
-				$json .= '"": "'.$php_record['name'].'",';
+				$json .= '"0": "'.$php_record['name'].'",';
 			}
 		}
 	}
diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index 0b17e38022..8728d9c571 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -280,26 +280,31 @@
             serverId = $(this).val();
             adjustForm();
             reloadWebIP();
-            reloadFastcgiPHPVersions();
+            reloadServerPHPVersions();
 			reloadDirectiveSnippets();
         });
     }
     adjustForm(true);
-    reloadFastcgiPHPVersions(true);
+    reloadServerPHPVersions(true);
 
     jQuery('#client_group_id').change(function(){
         clientGroupId = $(this).val();
         reloadWebIP();
-		reloadFastcgiPHPVersions();
+		reloadServerPHPVersions();
     });
 
     if(jQuery('#php').val() == 'fast-cgi' || jQuery('#php').val() == 'php-fpm' || (jQuery('#php').val() == 'hhvm' && serverType == 'nginx')){
         jQuery('.server_php_id:hidden').show();
+		// This block can be removed?
 		if(jQuery('#php').val() == 'hhvm'){
+			// There is no element with id="server_php_id_txt"
 			jQuery('#server_php_id_txt').hide();
+			// There is no element with id="#fastcgi_php_fallback_version_txt"
 			jQuery('#fastcgi_php_fallback_version_txt').show();
 		} else {
+			// There is no element with id="server_php_id_txt"
 			jQuery('#server_php_id_txt').show();
+			// There is no element with id="#fastcgi_php_fallback_version_txt"
 			jQuery('#fastcgi_php_fallback_version_txt').hide();
 		}
     } else {
@@ -308,14 +313,19 @@
     //ISPConfig.resetFormChanged();
 
     jQuery('#php').change(function(){
-        reloadFastcgiPHPVersions();
+        reloadServerPHPVersions();
         if(jQuery(this).val() == 'fast-cgi' || jQuery(this).val() == 'php-fpm' || (jQuery(this).val() == 'hhvm' && serverType == 'nginx')){
             jQuery('.server_php_id:hidden').show();
+			// This block can be removed?
 			if(jQuery(this).val() == 'hhvm'){
+				// There is no element with id="server_php_id_txt"
 				jQuery('#server_php_id_txt').hide();
+				// There is no element with id="#fastcgi_php_fallback_version_txt"
 				jQuery('#fastcgi_php_fallback_version_txt').show();
 			} else {
+				// There is no element with id="server_php_id_txt"
 				jQuery('#server_php_id_txt').show();
+				// There is no element with id="#fastcgi_php_fallback_version_txt"
 				jQuery('#fastcgi_php_fallback_version_txt').hide();
 			}
         } else {
@@ -348,7 +358,7 @@
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {web_id : parentWebId, type : "getserverid"}, function(data) {
             if(data.serverid) serverId = data.serverid;
             adjustForm(noFormChange);
-            if(noFormChange) reloadFastcgiPHPVersions(noFormChange);
+            if(noFormChange) reloadServerPHPVersions(noFormChange);
         });
     }
 
@@ -438,33 +448,33 @@
 		$('#'+elem).select2();
 	}
 
-    function reloadFastcgiPHPVersions(noFormChange) {
-        jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, php_type : jQuery('#php').val(), type : "getphpfastcgi", client_group_id : clientGroupId}, function(data) {
+    function reloadServerPHPVersions(noFormChange) {
+        jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, php_type : jQuery('#php').val(), type : "getserverphp", client_group_id : clientGroupId}, function(data) {
             //var options = '<option value="">Default</option>';
 			var options = '';
-            var phpfastcgiselected = '';
+            var serverphpidselected = '';
             $.each(data, function(key, val) {
 				<tmpl_if name="id">
                 if($('#server_php_id').val() == key){
-                    phpfastcgiselected = ' selected="selected"';
+                    serverphpidselected = ' selected="selected"';
                 } else {
-                    phpfastcgiselected = '';
+                    serverphpidselected = '';
                 }
 				</tmpl_else>
-					phpfastcgiselected = '';
+					serverphpidselected = '';
 				</tmpl_if>
-                options += '<option value="'+key+'"'+phpfastcgiselected+'>'+val+'</option>';
+                options += '<option value="'+key+'"'+serverphpidselected+'>'+val+'</option>';
             });
 			<tmpl_if name="id">
-			if($('#server_php_id').val() == ''){
-                phpfastcgiselected = ' selected="selected"';
+			if($('#server_php_id').val() == '0'){
+                serverphpidselected = ' selected="selected"';
             } else {
-                phpfastcgiselected = '';
+                serverphpidselected = '';
             }
 			</tmpl_else>
-				phpfastcgiselected = '';
+				serverphpidselected = '';
 			</tmpl_if>
-			//options += '<option value=""'+phpfastcgiselected+'>{tmpl_var name="default_php_txt"}</option>';
+			//options += '<option value=""'+serverphpidselected+'>{tmpl_var name="default_php_txt"}</option>';
             $('#server_php_id').html(options).change();
             if(noFormChange) ISPConfig.resetFormChanged();
         });
-- 
GitLab


From 600a4b0a7f1ee89e8fc14d20ba54598d832b4c3b Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 29 Jul 2020 17:06:26 -0600
Subject: [PATCH 553/571] sender_cc must be optional

---
 interface/web/mail/form/mail_user.tform.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index b46e43b98e..da47041093 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -200,6 +200,7 @@ $form["tabs"]['mailuser'] = array(
 					'type' => 'TOLOWER')
 			),
 			'validators' => array (  0 => array ( 'type' => 'ISEMAIL',
+					'allowempty' => 'y',
 					'errmsg'=> 'sender_cc_error_isemail'),
 			),
 			'default' => '',
-- 
GitLab


From ce345aff685772fed0fe3c67b8c3debc5912ebf3 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Wed, 29 Jul 2020 17:48:56 -0600
Subject: [PATCH 554/571] allow '+' recipient delimiter in sender_cc address

---
 interface/web/mail/form/mail_user.tform.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index da47041093..67330f4658 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -199,7 +199,7 @@ $form["tabs"]['mailuser'] = array(
 				2 => array( 'event' => 'SAVE',
 					'type' => 'TOLOWER')
 			),
-			'validators' => array (  0 => array ( 'type' => 'ISEMAIL',
+			'validators' => array (  0 => array ( 'type' => 'ISEMAILADDRESS',
 					'allowempty' => 'y',
 					'errmsg'=> 'sender_cc_error_isemail'),
 			),
-- 
GitLab


From e98bb168681760e194512f9332af7a61b152aaaf Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 30 Jul 2020 14:12:15 +0200
Subject: [PATCH 555/571] Fixes #5681 mysql-verify_recipients.cf
 owner/permissions

---
 install/dist/lib/fedora.lib.php    |  6 ------
 install/dist/lib/opensuse.lib.php  |  6 ------
 install/lib/installer_base.lib.php | 16 ++++++++++------
 3 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 9ffc7d0ef4..0cf2141f72 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -121,12 +121,6 @@ class installer_dist extends installer_base {
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
 		wf($full_file_name, $content);
 
-		//* Changing mode and group of the new created config files.
-		caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
-
 		//* Creating virtual mail user and group
 		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
 		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 15ab5b6e91..1401614c3f 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -118,12 +118,6 @@ class installer_dist extends installer_base {
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
 		wf($full_file_name, $content);
 
-		//* Changing mode and group of the new created config files.
-		caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
-
 		if(!is_dir($cf['vmail_mailbox_base'])) mkdir($cf['vmail_mailbox_base']);
 
 		//* Creating virtual mail user and group
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 2121eadeb1..c88851acad 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -742,6 +742,9 @@ class installer_base {
 		if(is_file($full_file_name)) {
 			copy($full_file_name, $config_dir.$configfile.'~');
 		}
+		chmod($config_dir.$configfile.'~',0600);
+		
+		//* Replace variables in config file template
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
 		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
@@ -749,6 +752,13 @@ class installer_base {
 		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf($full_file_name, $content);
+		
+		//* Changing mode and group of the new created config file
+		caselog('chmod u=rw,g=r,o= '.$config_dir.'/'.$full_file_name.' &> /dev/null',
+			__FILE__, __LINE__, 'chmod on '.$full_file_name, 'chmod on '.$full_file_name.' failed');
+		caselog('chgrp '.$cf['group'].' '.$config_dir.'/'.$full_file_name.' &> /dev/null',
+			__FILE__, __LINE__, 'chgrp on '.$full_file_name, 'chgrp on '.$full_file_name.' failed');
+		
 	}
 
 	public function configure_jailkit() {
@@ -1028,12 +1038,6 @@ class installer_base {
 		}
 		wf($full_file_name, $content);
 
-		//* Changing mode and group of the new created config files.
-		caselog('chmod u=rw,g=r,o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
-
 		//* Creating virtual mail user and group
 		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
 		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-- 
GitLab


From 54cfa4fa83e26fd1120cc602c166a52641f359f1 Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Thu, 30 Jul 2020 14:18:51 +0200
Subject: [PATCH 556/571] Apply 1 suggestion(s) to 1 file(s)

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 584f313e80..ba1da74354 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -107,7 +107,7 @@ class apache2_plugin {
 				$affected_snippets = $app->db->queryAllRecords('SELECT directive_snippets_id FROM directive_snippets WHERE required_php_snippets RLIKE(?) AND type = ?', $rlike, 'apache');
 				if(is_array($affected_snippets) && !empty($affected_snippets)) {
 					foreach($affected_snippets as $snippet) $sql_in[] = $snippet['directive_snippets_id'];
-					$$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN ?', $conf['server_id'], $sql_in);
+					$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN ?', $conf['server_id'], $sql_in);
 				}
 			}
 			if($snippet['type'] == 'apache') $affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id = ?', $conf['server_id'], $snippet['directive_snippets_id']);
-- 
GitLab


From 2d374afb035093a6b78880c74e936267614d7289 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 30 Jul 2020 14:20:59 +0200
Subject: [PATCH 557/571] Fixed file paths and group in #5681

---
 install/lib/installer_base.lib.php | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index c88851acad..a3e68fcb8d 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -737,6 +737,7 @@ class installer_base {
 		global $conf;
 
 		$config_dir = $conf['postfix']['config_dir'].'/';
+		$postfix_group = $conf['postfix']['group'];
 		$full_file_name = $config_dir.$configfile;
 		//* Backup exiting file
 		if(is_file($full_file_name)) {
@@ -754,9 +755,9 @@ class installer_base {
 		wf($full_file_name, $content);
 		
 		//* Changing mode and group of the new created config file
-		caselog('chmod u=rw,g=r,o= '.$config_dir.'/'.$full_file_name.' &> /dev/null',
+		caselog('chmod u=rw,g=r,o= '.$full_file_name.' &> /dev/null',
 			__FILE__, __LINE__, 'chmod on '.$full_file_name, 'chmod on '.$full_file_name.' failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/'.$full_file_name.' &> /dev/null',
+		caselog('chgrp '.$postfix_group.' '.$full_file_name.' &> /dev/null',
 			__FILE__, __LINE__, 'chgrp on '.$full_file_name, 'chgrp on '.$full_file_name.' failed');
 		
 	}
-- 
GitLab


From 572668e3184bfedb622e188b7bf8ac8766845145 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 30 Jul 2020 14:34:49 +0200
Subject: [PATCH 558/571] Added escapeshellarg to postfix config file chown and
 chgrp in installer.

---
 install/lib/installer_base.lib.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index a3e68fcb8d..6094a527ce 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -755,9 +755,9 @@ class installer_base {
 		wf($full_file_name, $content);
 		
 		//* Changing mode and group of the new created config file
-		caselog('chmod u=rw,g=r,o= '.$full_file_name.' &> /dev/null',
+		caselog('chmod u=rw,g=r,o= '.escapeshellarg($full_file_name).' &> /dev/null',
 			__FILE__, __LINE__, 'chmod on '.$full_file_name, 'chmod on '.$full_file_name.' failed');
-		caselog('chgrp '.$postfix_group.' '.$full_file_name.' &> /dev/null',
+		caselog('chgrp '.escapeshellarg($postfix_group).' '.escapeshellarg($full_file_name).' &> /dev/null',
 			__FILE__, __LINE__, 'chgrp on '.$full_file_name, 'chgrp on '.$full_file_name.' failed');
 		
 	}
-- 
GitLab


From 6b0723dabdd263b0a7627bc5b63bc3123a4cde38 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 30 Jul 2020 14:52:00 +0200
Subject: [PATCH 559/571] Fixed chmod notice in installer.

---
 install/lib/installer_base.lib.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 6094a527ce..10533dd66f 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -739,11 +739,12 @@ class installer_base {
 		$config_dir = $conf['postfix']['config_dir'].'/';
 		$postfix_group = $conf['postfix']['group'];
 		$full_file_name = $config_dir.$configfile;
+
 		//* Backup exiting file
 		if(is_file($full_file_name)) {
 			copy($full_file_name, $config_dir.$configfile.'~');
+			chmod($config_dir.$configfile.'~',0600);
 		}
-		chmod($config_dir.$configfile.'~',0600);
 		
 		//* Replace variables in config file template
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
-- 
GitLab


From 08212a98266284ee0a9bf9568680afd8697bfa84 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Thu, 30 Jul 2020 15:42:14 +0200
Subject: [PATCH 560/571] Go back to user settings on save (#5682)

---
 interface/web/tools/form/user_settings.tform.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/web/tools/form/user_settings.tform.php b/interface/web/tools/form/user_settings.tform.php
index a696d75339..f063634b0c 100644
--- a/interface/web/tools/form/user_settings.tform.php
+++ b/interface/web/tools/form/user_settings.tform.php
@@ -68,7 +68,7 @@ $form['db_table']  = 'sys_user';
 $form['db_table_idx'] = 'userid';
 $form["db_history"]  = "no";
 $form['tab_default'] = 'users';
-$form['list_default'] = 'index.php';
+$form['list_default'] = 'user_settings.php';
 $form['auth']   = 'no';
 
 //* 0 = id of the user, > 0 id must match with id of current user
-- 
GitLab


From bb995db7248807d3ec4c4d6c1ee6bfde37d0c1d0 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 30 Jul 2020 14:54:46 -0600
Subject: [PATCH 561/571] fix webalizer exec to exec_safe

---
 server/lib/classes/cron.d/150-webalizer.inc.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/lib/classes/cron.d/150-webalizer.inc.php b/server/lib/classes/cron.d/150-webalizer.inc.php
index 42aa125e0f..6c68cef183 100644
--- a/server/lib/classes/cron.d/150-webalizer.inc.php
+++ b/server/lib/classes/cron.d/150-webalizer.inc.php
@@ -127,8 +127,8 @@ class cronjob_webalizer extends cronjob {
 			chown($statsdir, $username);
 			chgrp($statsdir, $groupname);
 			$app->system->exec_safe("$webalizer -c ? -n ? -s ? -r ? -q -T -p -o ? ?", $webalizer_conf, $domain, $domain, $domain, $statsdir, $logfile);
-			
-			exec('chown -R ?:? ?', $username, $groupname, $statsdir);
+
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
 		}
 
 
-- 
GitLab


From a11a3106e2ce1196fb0b06d28e1dbb4a19a46c67 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Fri, 31 Jul 2020 14:10:16 +0200
Subject: [PATCH 562/571] - fixed idn encoded domains on dashlets

---
 interface/web/dashboard/dashlets/mailquota.php |  6 +++++-
 interface/web/dashboard/dashlets/quota.php     | 11 ++++++++---
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/interface/web/dashboard/dashlets/mailquota.php b/interface/web/dashboard/dashlets/mailquota.php
index 4629d6a463..a9434e58ea 100644
--- a/interface/web/dashboard/dashlets/mailquota.php
+++ b/interface/web/dashboard/dashlets/mailquota.php
@@ -21,13 +21,17 @@ class dashlet_mailquota {
 
 		$has_mailquota = false;
 		if(is_array($emails) && !empty($emails)){
+			foreach($emails as &$email) {
+				$email['email'] = $app->functions->idn_decode($email['email']);
+			}
+			unset($email);
 			// email username is quoted in quota.lib already, so no htmlentities here to prevent double encoding
 			//$emails = $app->functions->htmlentities($emails);
 			$tpl->setloop('mailquota', $emails);
 			$has_mailquota = isset($emails[0]['used']);
 		}
 		$tpl->setVar('has_mailquota', $has_mailquota);
-		
+
 		return $tpl->grab();
 	}
 
diff --git a/interface/web/dashboard/dashlets/quota.php b/interface/web/dashboard/dashlets/quota.php
index dfb82d5c24..3fd5adbb85 100644
--- a/interface/web/dashboard/dashlets/quota.php
+++ b/interface/web/dashboard/dashlets/quota.php
@@ -7,9 +7,9 @@ class dashlet_quota {
 
 		//* Loading Template
 		$app->uses('tpl,quota_lib');
-               if (!$app->auth->verify_module_permissions('sites')) {
-                       return;
-               }
+		if (!$app->auth->verify_module_permissions('sites')) {
+				return;
+		}
 
 		$tpl = new tpl;
 		$tpl->newTemplate("dashlets/templates/quota.htm");
@@ -24,6 +24,11 @@ class dashlet_quota {
 
 		$has_quota = false;
 		if(is_array($sites) && !empty($sites)){
+			foreach($sites as &$site) {
+				$site['domain'] = $app->functions->idn_decode($site['domain']);
+			}
+			unset($site);
+
 			$sites = $app->functions->htmlentities($sites);
 			$tpl->setloop('quota', $sites);
 			$has_quota = isset($sites[0]['used']);
-- 
GitLab


From 73d3a22ef7adc1b3d5bf3083cdcefcc069518036 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Fri, 31 Jul 2020 14:20:03 +0200
Subject: [PATCH 563/571] misc adjustments

---
 server/lib/classes/.system.inc.php.swp        | Bin 0 -> 16384 bytes
 .../lib/classes/cron.d/150-goaccess.inc.php   |  99 +++++++++++-------
 .../plugins-available/apache2_plugin.inc.php  |  81 ++++++++------
 server/plugins-available/nginx_plugin.inc.php |  86 +++++++++------
 4 files changed, 159 insertions(+), 107 deletions(-)
 create mode 100644 server/lib/classes/.system.inc.php.swp

diff --git a/server/lib/classes/.system.inc.php.swp b/server/lib/classes/.system.inc.php.swp
new file mode 100644
index 0000000000000000000000000000000000000000..ffcf3125ccd5c07ce14da979526066c47c98501c
GIT binary patch
literal 16384
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
PT@b=3o~wz1g0K7s>WYm_

literal 0
HcmV?d00001

diff --git a/server/lib/classes/cron.d/150-goaccess.inc.php b/server/lib/classes/cron.d/150-goaccess.inc.php
index 7c70486317..8f5c2a4323 100644
--- a/server/lib/classes/cron.d/150-goaccess.inc.php
+++ b/server/lib/classes/cron.d/150-goaccess.inc.php
@@ -51,6 +51,7 @@ class cronjob_goaccess extends cronjob {
 	public function onRunJob() {
 		global $app, $conf;
 
+
 		//######################################################################################################
 		// Create goaccess statistics
 		//######################################################################################################
@@ -76,7 +77,7 @@ class cronjob_goaccess extends cronjob {
                 }
 
 
-                /* Check wether the goaccess binary is in path */
+                /* Check if goaccess binary is in path */
                 system("type goaccess 2>&1>/dev/null", $retval);
 		if ($retval === 0) {
 
@@ -113,40 +114,43 @@ class cronjob_goaccess extends cronjob {
 				*/
 
 				if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
-					copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
+					$app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
 				} elseif(!file_exists($goaccess_conf)) {
 					/*
 					 By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
 					 Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
 					*/
-	                        	copy($goaccess_conf_main, $goaccess_conf);
-		                        file_put_contents($goaccess_conf, preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", file_get_contents($goaccess_conf)));
+
+					$app->system->copy($goaccess_conf_main, $goaccess_conf);
+					$content = $app->system->file_get_contents($goaccess_conf, true);
+					$content = preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", $content);
+					$app->system->file_put_contents($goaccess_conf, $content, true);
+					unset($content);
 				}
 
 				/* Update the primary domain name in the title, it could occasionally change */
 				if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
-					$goaccess_content = file_get_contents($goaccess_conf);
-					file_put_contents($goaccess_conf, preg_replace('/^(#)?html-report-title(.*)?/m', "html-report-title $domain", file_get_contents($goaccess_conf)));
-					unset($goaccess_content);
+					$content = $app->system->file_get_contents($goaccess_conf, true);
+					$content = preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", $content);
+					$app->system->file_put_contents($goaccess_conf, $content, true);
+					unset($content);
 				}
 
+                                $username = $rec['system_user'];
+                                $groupname = $rec['system_group'];
+                                $docroot = $rec['document_root'];
 
-
-				if(!@is_dir($statsdir)) mkdir($statsdir);
-				$username = $rec['system_user'];
-				$groupname = $rec['system_group'];
-				$docroot = $rec['document_root'];
+				if(!@is_dir($statsdir)) $app->system->mkdirpath($statsdir, 0755, $username, $groupname);
 
 				$goa_db_dir = $docroot.'/'.$web_folder.'/stats/.db/';
 				$output_html = $docroot.'/'.$web_folder.'/stats/goaindex.html';
-	                        if(!@is_dir($goa_db_dir)) mkdir($goa_db_dir);
+	                        if(!@is_dir($goa_db_dir)) $app->system->mkdirpath($goa_db_dir, 0755, $username, $groupname);
 	
 	                        if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
 	                        symlink($logfile, '/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
 
 
-				chown($statsdir, $username);
-				chgrp($statsdir, $groupname);
+				$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
 
 				$goamonth = date("n");
 				$goayear = date("Y");
@@ -159,7 +163,6 @@ class cronjob_goaccess extends cronjob {
 					}
 				}
 
-	
 				if (date("d") == 2) {
 					$goamonth = date("m")-1;
 					if (date("m") == 1) {
@@ -170,7 +173,7 @@ class cronjob_goaccess extends cronjob {
 					$statsdirold = $statsdir."/".$goayear."-".$goamonth."/";
 
 					if(!is_dir($statsdirold)) {
-						mkdir($statsdirold);
+						 $app->system->mkdirpath($statsdirold, 0755, $username, $groupname);
 					}
 
 					// don't rotate db files per month
@@ -180,39 +183,57 @@ class cronjob_goaccess extends cronjob {
 					$files = scandir($statsdir);
 
 					foreach ($files as $file) {
-						if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") copy("$statsdir"."/"."$file", "$statsdirold"."$file");
+						if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") $app->system->copy("$statsdir"."/"."$file", "$statsdirold"."$file");
 					}
 				}
 
+				// Get the GoAccess version
+				$match = array();
 
-				$output = shell_exec('goaccess --help');
-
-				if(preg_match('/keep-db-files/', $output)) {
-					$app->system->exec_safe("goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $logfile, $goaccess_conf, $goa_db_dir, $output_html);
-
-					if(!is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
-						if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
-							copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
-						} else {
-							copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
-						}
-					}
+				$goaccess_version = $app->system->system_safe('goaccess --version 2>&1');
 
-		                        $app->log('Created GoAccess statistics for ' . $domain, LOGLEVEL_DEBUG);
-		                        if(is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
-		                                chown($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_user']);
-		                                chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
-		                        }
+				if(preg_match('/[0-9]\.[0-9]{1,2}/', $goaccess_version, $match)) {
+					$goaccess_version = $match[0];
+				}
 
-		                        $app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
 
+				/*
+				 * GoAccess removed with 1.4 btree support and supports from this version on only "In-Memory with On-Disk Persitance Storage".
+				 * For versions prior 1.4 you need GoAccess with btree support compiled!
+				 */
+				
+				$cust_lang = $conf['language']."_".strtoupper($conf['language']);
+
+				if(version_compare($goaccess_version,1.4) >= 0) {
+					$app->system->exec_safe("LANG=? goaccess -f ? --config-file ? --restore --persist --db-path=? --output=?", $cust_lang, $logfile, $goaccess_conf, $goa_db_dir, $output_html);
 				} else {
-			                $app->log("Stats not generated. The GoAccess binary was not compiled with btree support. Please recompile/reinstall GoAccess with btree support!", LOGLEVEL_ERROR);
+					$output = $app->system->system_safe('goaccess --help');
+	                                if(preg_match('/keep-db-files/', $output)) {
+						$app->system->exec_safe("LANG=? goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $cust_lang, $logfile, $goaccess_conf, $goa_db_dir, $output_html);
+					} else {
+	                                        $app->log("Stats not generated. The GoAccess binary was not compiled with btree support. Please recompile/reinstall GoAccess with btree support, or install GoAccess version >= 1.4!", LOGLEVEL_ERROR);
+					}
+	                                unset($output);
 				}
+				unset($cust_lang);
+
+				if(!is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+					if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+						$app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+					} else {
+						$app->system->copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+					}
+				}
+
+	                        $app->log('Created GoAccess statistics for ' . $domain, LOGLEVEL_DEBUG);
+	                        if(is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+	                                chown($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_user']);
+	                                chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
+	                        }
 
-				unset($output);
+				$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
+			}
 
-		}
 	} else {
 		$app->log("Stats not generated. The GoAccess binary couldn't be found. Make sure that GoAccess is installed and that it is in \$PATH", LOGLEVEL_ERROR);
 	}
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index aecab199cd..b348c823e6 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1868,7 +1868,6 @@ class apache2_plugin {
                         $this->goaccess_update($data, $web_config);
                 }
 
-
 		//* Remove Stats-Folder when Statistics set to none
 		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
 			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
@@ -2282,6 +2281,11 @@ class apache2_plugin {
 				$this->awstats_delete($data, $web_config);
 			}
 
+			//* Remove the GoAccess configuration file
+			if($data['old']['stats_type'] == 'goaccess') {
+				$this->goaccess_delete($data, $web_config);
+			}
+
 			if($data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') {
 				$app->system->web_folder_protection($parent_web_document_root, true);
 			}
@@ -2979,6 +2983,18 @@ class apache2_plugin {
 		}
 	}
 
+        //* Delete the awstats configuration file
+        private function awstats_delete ($data, $web_config) {
+                global $app;
+
+                $awstats_conf_dir = $web_config['awstats_conf_dir'];
+
+                if ( @is_file($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf') ) {
+                        $app->system->unlink($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf');
+                        $app->log('Removed AWStats config file: '.$awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf', LOGLEVEL_DEBUG);
+                }
+        }
+
 	//* Update the GoAccess configuration file
         private function goaccess_update ($data, $web_config) {
                 global $app;
@@ -2996,34 +3012,44 @@ class apache2_plugin {
                         } else {
                                 $count++;
                                 if($count == 2) {
-                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_ERROR);
+                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_WARN);
                                 }
                         }
                 }
 
-
-                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) mkdir($data['new']['document_root']."/" . $web_folder . "/stats/.db");
-                $goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
-
+                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) $app->system->mkdirpath($data['new']['document_root']."/" . $web_folder . "/stats/.db");
+                $goaccess_conf = $data['new']['document_root'].'/log/goaccess.conf';
 
                 /*
                 In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
                 By default the originaly with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
-                */
-                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
-                        copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
+		*/
+
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master")) {
+                        $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $goaccess_conf);
+
                 } elseif(!file_exists($goaccess_conf)) {
-                        /*
+
+			/*
                          By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
                          Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
-                        */
-                        copy($goaccess_conf_main, $goaccess_conf);
-                        file_put_contents($goaccess_conf, preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", file_get_contents($goaccess_conf)));
+			 */
+
+			$app->system->copy($goaccess_conf_main, $goaccess_conf);
+			$content = $app->system->file_get_contents($goaccess_conf, true);
+			$content = preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", $content);
+			$app->system->file_put_contents($goaccess_conf, $content, true);
+			unset($content);
+
                 }
 
                 if(file_exists($goaccess_conf)) {
-                        $domain = escapeshellcmd($data['new']['domain']);
-                        file_put_contents($goaccess_conf, preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", file_get_contents($goaccess_conf)));
+                        $domain = $data['new']['domain'];
+                        $content = $app->system->file_get_contents($goaccess_conf, true);
+                        $content = preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", $content);
+                        $app->system->file_put_contents($goaccess_conf, $content, true);
+                        unset($content);
+
                 }
 
                 if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
@@ -3040,28 +3066,15 @@ class apache2_plugin {
                 }
         }
 
-        //* Delete the GoAccess configuration file
-        private function goaccess_delete ($data, $web_config) {
-                global $app;
-
-                $goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
-
-                if ( @is_file($goaccess_conf) ) {
-                        $app->system->unlink($goaccess_conf);
-                        $app->log('Removed GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
-                }
-        }
-
-
-	//* Delete the awstats configuration file
-	private function awstats_delete ($data, $web_config) {
+	//* Delete the GoAccess configuration file
+	private function goaccess_delete ($data, $web_config) {
 		global $app;
 
-		$awstats_conf_dir = $web_config['awstats_conf_dir'];
+		$goaccess_conf = $data['old']['document_root'] . "/log/goaccess.conf";
 
-		if ( @is_file($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf') ) {
-			$app->system->unlink($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf');
-			$app->log('Removed AWStats config file: '.$awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf', LOGLEVEL_DEBUG);
+		if ( @is_file($goaccess_conf) ) {
+			$app->system->unlink($goaccess_conf);
+			$app->log('Removed GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
 		}
 	}
 
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 3c59011cbb..2b3223a9d9 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1906,6 +1906,11 @@ class nginx_plugin {
 			$this->awstats_update($data, $web_config);
 		}
 
+                //* Create GoAccess configuration
+                if($data['new']['stats_type'] == 'goaccess' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
+                        $this->goaccess_update($data, $web_config);
+                }
+
 		//* Remove Stats-Folder when Statistics set to none
 		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
 			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
@@ -2292,6 +2297,11 @@ class nginx_plugin {
 				$this->awstats_delete($data, $web_config);
 			}
 
+			//* Remove the GoAccess configuration file
+                        if($data['old']['stats_type'] == 'goaccess') {
+                                $this->goaccess_delete($data, $web_config);
+                        }
+
 			//* Delete the web-backups
 			if($data['old']['type'] == 'vhost') {
 				$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
@@ -2534,8 +2544,8 @@ class nginx_plugin {
 
 
 
-        //* Update the GoAccess configuration file
-        private function goaccess_update ($data, $web_config) {
+	//* Update the GoAccess configuration file
+	private function goaccess_update ($data, $web_config) {
                 global $app;
 
                 $web_folder = $data['new']['web_folder'];
@@ -2549,56 +2559,67 @@ class nginx_plugin {
                                 $goaccess_conf_main = $goa_loc;
                                 break;
                         } else {
-                                $count++;
+                                $count++; 
                                 if($count == 2) {
-                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_ERROR);
+                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_WARN);
                                 }
                         }
                 }
 
+                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) $app->system->mkdirpath($data['new']['document_root']."/" . $web_folder . "/stats/.db");
+                $goaccess_conf = $data['new']['document_root'].'/log/goaccess.conf';
 
-                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) mkdir($data['new']['document_root']."/" . $web_folder . "/stats/.db");
-		$goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
+                /*
+                In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
+                By default the originaly with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
+                */
 
-		/*
-		In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
-		By default the originaly with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
-		*/
-		if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
-			copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
-		} elseif(!file_exists($goaccess_conf)) {
-			/*
-			 By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
-			 Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
-			*/
-			copy($goaccess_conf_main, $goaccess_conf);
-			file_put_contents($goaccess_conf, preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", file_get_contents($goaccess_conf)));
-		}
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master")) {
+                        $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $goaccess_conf);
+
+                } elseif(!file_exists($goaccess_conf)) {
+
+                        /*
+                         By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
+                         Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
+                         */
+
+                        $app->system->copy($goaccess_conf_main, $goaccess_conf);
+                        $content = $app->system->file_get_contents($goaccess_conf, true);
+                        $content = preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", $content);
+                        $app->system->file_put_contents($goaccess_conf, $content, true);
+                        unset($content);
+
+                }
 
                 if(file_exists($goaccess_conf)) {
-                        $domain = escapeshellcmd($data['new']['domain']);
-			file_put_contents($goaccess_conf, preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", file_get_contents($goaccess_conf)));
-		}
+                        $domain = $data['new']['domain'];
+                        $content = $app->system->file_get_contents($goaccess_conf, true);
+                        $content = preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", $content);
+                        $app->system->file_put_contents($goaccess_conf, $content, true);
+                        unset($content);
 
-		if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
-			$app->log('Created GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
-		} else {
-			$app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in ".$goaccess_conf_dir.".", LOGLEVEL_WARN);
-		}
+                }
+
+                if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
+                        $app->log('Created GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
+                } else {
+                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in ".$goaccess_conf_dir.".", LOGLEVEL_WARN);
+                }
 
                 if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html");
                 if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
                         $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
                 } else {
                         $app->system->copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
-                }
-        }
+		}
+	}
 
         //* Delete the GoAccess configuration file
         private function goaccess_delete ($data, $web_config) {
                 global $app;
 
-                $goaccess_conf = escapeshellcmd($data['new']['document_root'].'/log/goaccess.conf');
+                $goaccess_conf = $data['old']['document_root'] . "/log/goaccess.conf";
 
                 if ( @is_file($goaccess_conf) ) {
                         $app->system->unlink($goaccess_conf);
@@ -2606,9 +2627,6 @@ class nginx_plugin {
                 }
         }
 
-
-
-
 	//* Update the awstats configuration file
 	private function awstats_update ($data, $web_config) {
 		global $app;
-- 
GitLab


From 9bc41deca9b2f2eddd9b74ea9c38eb7fb9c09f88 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Fri, 31 Jul 2020 14:20:21 +0200
Subject: [PATCH 564/571] remove swp

---
 server/lib/classes/.system.inc.php.swp | Bin 16384 -> 0 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 server/lib/classes/.system.inc.php.swp

diff --git a/server/lib/classes/.system.inc.php.swp b/server/lib/classes/.system.inc.php.swp
deleted file mode 100644
index ffcf3125ccd5c07ce14da979526066c47c98501c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16384
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
PT@b=3o~wz1g0K7s>WYm_

-- 
GitLab


From 94b093e3fe968abc263e4784b401a01b6f305ab5 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Fri, 31 Jul 2020 14:47:16 +0200
Subject: [PATCH 565/571] removed redundant log warning if goaccess.conf does
 not exist

---
 server/plugins-available/apache2_plugin.inc.php | 4 +---
 server/plugins-available/nginx_plugin.inc.php   | 2 --
 2 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index b348c823e6..582f005e49 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -3054,9 +3054,7 @@ class apache2_plugin {
 
                 if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
                         $app->log('Created GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
-                } else {
-                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in ".$goaccess_conf_dir.".", LOGLEVEL_WARN);
-                }
+                } 
 
                 if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html");
                 if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 2b3223a9d9..9beb579197 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2603,8 +2603,6 @@ class nginx_plugin {
 
                 if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
                         $app->log('Created GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
-                } else {
-                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in ".$goaccess_conf_dir.".", LOGLEVEL_WARN);
                 }
 
                 if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html");
-- 
GitLab


From 8fff80bd140e6cd225c8f6a2118439865a31c93f Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Fri, 31 Jul 2020 16:17:51 +0200
Subject: [PATCH 566/571] fixed fallback for older GoAccess versions

---
 server/lib/classes/cron.d/150-goaccess.inc.php  | 9 +++++----
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 server/plugins-available/nginx_plugin.inc.php   | 4 ++--
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/server/lib/classes/cron.d/150-goaccess.inc.php b/server/lib/classes/cron.d/150-goaccess.inc.php
index 8f5c2a4323..8c9d764442 100644
--- a/server/lib/classes/cron.d/150-goaccess.inc.php
+++ b/server/lib/classes/cron.d/150-goaccess.inc.php
@@ -144,9 +144,9 @@ class cronjob_goaccess extends cronjob {
 
 				$goa_db_dir = $docroot.'/'.$web_folder.'/stats/.db/';
 				$output_html = $docroot.'/'.$web_folder.'/stats/goaindex.html';
-	                        if(!@is_dir($goa_db_dir)) $app->system->mkdirpath($goa_db_dir, 0755, $username, $groupname);
+	                        if(!@is_dir($goa_db_dir)) $app->system->mkdirpath($goa_db_dir);
 	
-	                        if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
+	                        if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) $app->system->unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
 	                        symlink($logfile, '/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
 
 
@@ -207,8 +207,9 @@ class cronjob_goaccess extends cronjob {
 				if(version_compare($goaccess_version,1.4) >= 0) {
 					$app->system->exec_safe("LANG=? goaccess -f ? --config-file ? --restore --persist --db-path=? --output=?", $cust_lang, $logfile, $goaccess_conf, $goa_db_dir, $output_html);
 				} else {
-					$output = $app->system->system_safe('goaccess --help');
-	                                if(preg_match('/keep-db-files/', $output)) {
+					$output = $app->system->system_safe('goaccess --help 2>&1');
+					preg_match('/keep-db-files/', $output, $match);
+					if($match[0] == "keep-db-files") {
 						$app->system->exec_safe("LANG=? goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $cust_lang, $logfile, $goaccess_conf, $goa_db_dir, $output_html);
 					} else {
 	                                        $app->log("Stats not generated. The GoAccess binary was not compiled with btree support. Please recompile/reinstall GoAccess with btree support, or install GoAccess version >= 1.4!", LOGLEVEL_ERROR);
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 582f005e49..b2680561ab 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -3017,7 +3017,7 @@ class apache2_plugin {
                         }
                 }
 
-                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) $app->system->mkdirpath($data['new']['document_root']."/" . $web_folder . "/stats/.db");
+                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/.db")) $app->system->mkdirpath($data['new']['document_root'] . "/" . $web_folder . "/stats/.db");
                 $goaccess_conf = $data['new']['document_root'].'/log/goaccess.conf';
 
                 /*
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 9beb579197..5e008f211f 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -2566,8 +2566,8 @@ class nginx_plugin {
                         }
                 }
 
-                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/")) $app->system->mkdirpath($data['new']['document_root']."/" . $web_folder . "/stats/.db");
-                $goaccess_conf = $data['new']['document_root'].'/log/goaccess.conf';
+                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/.db")) $app->system->mkdirpath($data['new']['document_root'] . "/" . $web_folder . "/stats/.db");
+		$goaccess_conf = $data['new']['document_root'].'/log/goaccess.conf';
 
                 /*
                 In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
-- 
GitLab


From aab9bd3bf5ac55495ed61a5591bca62bb28d74fa Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 4 Aug 2020 14:25:06 -0600
Subject: [PATCH 567/571] log subdomain name in error

---
 server/plugins-available/apache2_plugin.inc.php | 2 +-
 server/plugins-available/nginx_plugin.inc.php   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 8234058714..ca14b737be 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -613,7 +613,7 @@ class apache2_plugin {
 			unset($tmp);
 
 			if($app->system->is_blacklisted_web_path($web_folder)) {
-				$app->log('Vhost is using a blacklisted web folder: ' . $web_folder, LOGLEVEL_ERROR);
+				$app->log('Vhost ' . $subdomain_host . ' is using a blacklisted web folder: ' . $web_folder, LOGLEVEL_ERROR);
 				return 0;
 			}
 
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 6483df4eb9..e4d59a02bb 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -455,7 +455,7 @@ class nginx_plugin {
 			unset($tmp);
 
 			if($app->system->is_blacklisted_web_path($web_folder)) {
-				$app->log('Vhost is using a blacklisted web folder: ' . $web_folder, LOGLEVEL_ERROR);
+				$app->log('Vhost ' . $subdomain_host . ' is using a blacklisted web folder: ' . $web_folder, LOGLEVEL_ERROR);
 				return 0;
 			}
 
-- 
GitLab


From 1c7d6d81a4af3fa99c2a01b1a25242465724e2bf Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 7 Aug 2020 13:25:56 -0600
Subject: [PATCH 568/571] separate mysql-virtual_alias_domains.cf and
 mysql-virtual_alias_maps.cf

---
 install/dist/lib/fedora.lib.php                   | 3 +++
 install/dist/lib/opensuse.lib.php                 | 3 +++
 install/lib/installer_base.lib.php                | 3 +++
 install/tpl/debian_postfix.conf.master            | 2 +-
 install/tpl/fedora_postfix.conf.master            | 2 +-
 install/tpl/gentoo_postfix.conf.master            | 2 +-
 install/tpl/mysql-virtual_alias_domains.cf.master | 5 +++--
 install/tpl/mysql-virtual_alias_maps.cf.master    | 6 ++++++
 install/tpl/opensuse_postfix.conf.master          | 2 +-
 9 files changed, 22 insertions(+), 6 deletions(-)
 create mode 100644 install/tpl/mysql-virtual_alias_maps.cf.master

diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 0cf2141f72..c188ac93a5 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -66,6 +66,9 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_alias_domains.cf
 		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
 
+		//* mysql-virtual_alias_maps.cf
+		$this->process_postfix_config('mysql-virtual_alias_maps.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 1401614c3f..da31ad6b57 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -66,6 +66,9 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_alias_domains.cf
 		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
 
+		//* mysql-virtual_alias_maps.cf
+		$this->process_postfix_config('mysql-virtual_alias_maps.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 10533dd66f..6a4d771e16 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -976,6 +976,9 @@ class installer_base {
 		//* mysql-virtual_alias_domains.cf
 		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
 
+		//* mysql-virtual_alias_maps.cf
+		$this->process_postfix_config('mysql-virtual_alias_maps.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 169826747d..1c1b8187b1 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -1,7 +1,7 @@
 alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
-virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 1c78e858be..58892ef82a 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -1,5 +1,5 @@
 virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
-virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 84d404d15b..c38670f250 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -1,5 +1,5 @@
 virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
-virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
diff --git a/install/tpl/mysql-virtual_alias_domains.cf.master b/install/tpl/mysql-virtual_alias_domains.cf.master
index e55fd8ea8d..26b14ac00d 100644
--- a/install/tpl/mysql-virtual_alias_domains.cf.master
+++ b/install/tpl/mysql-virtual_alias_domains.cf.master
@@ -2,5 +2,6 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = SELECT destination FROM mail_forwarding
-         WHERE source = '@%d' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id}
+query = SELECT SUBSTRING_INDEX(destination, '@', -1) FROM mail_forwarding
+         WHERE source = '@%s' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id}
+
diff --git a/install/tpl/mysql-virtual_alias_maps.cf.master b/install/tpl/mysql-virtual_alias_maps.cf.master
new file mode 100644
index 0000000000..e55fd8ea8d
--- /dev/null
+++ b/install/tpl/mysql-virtual_alias_maps.cf.master
@@ -0,0 +1,6 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
+query = SELECT destination FROM mail_forwarding
+         WHERE source = '@%d' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id}
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index f2d2a4403b..d254e3ccb5 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -1,7 +1,7 @@
 alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
-virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
-- 
GitLab


From 7164c05979c91b6346a944fd3fe366c4ea9298dc Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Sat, 8 Aug 2020 16:21:25 +0200
Subject: [PATCH 569/571] Update SSL params (#5423)

---
 install/tpl/apache_ispconfig.vhost.master |  4 ++--
 install/tpl/debian6_dovecot2.conf.master  |  5 +++--
 install/tpl/debian_dovecot2.conf.master   |  4 +++-
 install/tpl/debian_postfix.conf.master    | 11 +++++++----
 install/tpl/fedora_dovecot2.conf.master   |  4 +++-
 install/tpl/fedora_postfix.conf.master    |  9 ++++++---
 install/tpl/gentoo_postfix.conf.master    |  9 ++++++---
 install/tpl/nginx_apps.vhost.master       |  4 ++--
 install/tpl/nginx_ispconfig.vhost.master  | 10 +++++-----
 install/tpl/opensuse_dovecot2.conf.master |  7 ++++---
 install/tpl/opensuse_postfix.conf.master  |  9 ++++++---
 11 files changed, 47 insertions(+), 29 deletions(-)

diff --git a/install/tpl/apache_ispconfig.vhost.master b/install/tpl/apache_ispconfig.vhost.master
index 61e9a58859..f90876170b 100644
--- a/install/tpl/apache_ispconfig.vhost.master
+++ b/install/tpl/apache_ispconfig.vhost.master
@@ -70,7 +70,7 @@ NameVirtualHost *:<tmpl_var name="vhost_port">
   # SSL Configuration
   <tmpl_var name="ssl_comment">SSLEngine On
   <tmpl_if name='apache_version' op='>=' value='2.3.16' format='version'>
-  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv3
+  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv3 -TLSv1 -TLSv1.1
   <tmpl_else>
   <tmpl_var name="ssl_comment">SSLProtocol All -SSLv2 -SSLv3
   </tmpl_if>
@@ -78,7 +78,7 @@ NameVirtualHost *:<tmpl_var name="vhost_port">
   <tmpl_var name="ssl_comment">SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
   <tmpl_var name="ssl_bundle_comment">SSLCACertificateFile /usr/local/ispconfig/interface/ssl/ispserver.bundle
 
-  <tmpl_var name="ssl_comment">SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
+  <tmpl_var name="ssl_comment">SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
   <tmpl_var name="ssl_comment">SSLHonorCipherOrder On
   <tmpl_if name='apache_version' op='>=' value='2.4.3' format='version'>
   <tmpl_var name="ssl_comment">SSLCompression Off
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 80709cfe36..ce27f2376e 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -7,8 +7,9 @@ mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_dh = </etc/dovecot/dh.pem
-ssl_protocols = !SSLv2 !SSLv3
-ssl_min_protocol = TLSv1
+ssl_min_protocol = TLSv1.2
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+ssl_prefer_server_ciphers = no
 auth_verbose = yes
 mail_max_userip_connections = 100
 mail_plugins = quota
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index a292591372..60a1263e48 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -7,7 +7,9 @@ mail_privileged_group = vmail
 postmaster_address = postmaster@example.com
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
-ssl_protocols = !SSLv2 !SSLv3
+ssl_min_protocol = TLSv1.2
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+ssl_prefer_server_ciphers = no
 auth_verbose = yes
 mail_max_userip_connections = 100
 mail_plugins = $mail_plugins quota
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 1c1b8187b1..8e3fa50f22 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -14,7 +14,7 @@ smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
-greylisting = check_policy_service inet:127.0.0.1:10023 
+greylisting = check_policy_service inet:127.0.0.1:10023
 smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
@@ -39,10 +39,13 @@ nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
 owner_request_special = no
 smtp_tls_security_level = may
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2,!SSLv3
-smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtpd_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+smtpd_tls_mandatory_ciphers = medium
+tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+tls_preempt_cipherlist = no
 # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
 enable_original_recipient = yes
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 2acd757fbd..4b9bb5c6a9 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -6,7 +6,9 @@ log_timestamp = "%Y-%m-%d %H:%M:%S "
 mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
-ssl_protocols = !SSLv2 !SSLv3
+ssl_min_protocol = TLSv1.2
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+ssl_prefer_server_ciphers = no
 auth_verbose = yes
 mail_plugins = quota
 passdb {
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 58892ef82a..ffe831286c 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -35,10 +35,13 @@ nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
 inet_interfaces = all
 smtp_tls_security_level = may
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2,!SSLv3
-smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtpd_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+smtpd_tls_mandatory_ciphers = medium
+tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+tls_preempt_cipherlist = no
 # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
 enable_original_recipient = yes
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index c38670f250..52b48f9274 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -34,10 +34,13 @@ nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
 inet_interfaces = all
 smtp_tls_security_level = may
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2,!SSLv3
-smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtpd_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+smtpd_tls_mandatory_ciphers = medium
+tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+tls_preempt_cipherlist = no
 # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
 enable_original_recipient = yes
diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master
index a22b1aab46..2680b209a2 100644
--- a/install/tpl/nginx_apps.vhost.master
+++ b/install/tpl/nginx_apps.vhost.master
@@ -2,7 +2,7 @@ server {
         listen {apps_vhost_port} {ssl_on};
         listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on;
 
-        {ssl_comment}ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+        {ssl_comment}ssl_protocols TLSv1.2;
         {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt;
         {ssl_comment}ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key;
 
@@ -115,7 +115,7 @@ server {
         location /phpMyAdmin {
                rewrite ^/* /phpmyadmin last;
         }
-		
+
         location /squirrelmail {
                root /usr/share/;
                index index.php index.html index.htm;
diff --git a/install/tpl/nginx_ispconfig.vhost.master b/install/tpl/nginx_ispconfig.vhost.master
index aad670e97a..dbe44d7064 100644
--- a/install/tpl/nginx_ispconfig.vhost.master
+++ b/install/tpl/nginx_ispconfig.vhost.master
@@ -1,13 +1,13 @@
 server {
         listen {vhost_port} {ssl_on};
         listen [::]:{vhost_port} {ssl_on} ipv6only=on;
-		
-		{ssl_comment}ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+
+		{ssl_comment}ssl_protocols TLSv1.2;
         {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt;
         {ssl_comment}ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key;
         {ssl_comment}ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
         {ssl_comment}ssl_prefer_server_ciphers on;
-		
+
 		# redirect to https if accessed with http
 		{ssl_comment}error_page 497 https://$host:{vhost_port}$request_uri;
 
@@ -44,7 +44,7 @@ server {
         location ~ /\. {
                deny  all;
         }
-		
+
 #        location /phpmyadmin {
 #               root /usr/share/;
 #               index index.php index.html index.htm;
@@ -64,7 +64,7 @@ server {
 #        location /phpMyAdmin {
 #               rewrite ^/* /phpmyadmin last;
 #        }
-#		
+#
 #        location /squirrelmail {
 #               root /usr/share/;
 #               index index.php index.html index.htm;
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 62c9939819..9624c05684 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -6,7 +6,9 @@ log_timestamp = "%Y-%m-%d %H:%M:%S "
 mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
-ssl_protocols = !SSLv2 !SSLv3
+ssl_min_protocol = TLSv1.2
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+ssl_prefer_server_ciphers = no
 mail_plugins = quota
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
@@ -79,7 +81,7 @@ mail_plugins = $mail_plugins quota
 #2.3+         group = vmail
 #2.3+         mode = 0660
 #2.3+     }
-#2.3+ 
+#2.3+
 #2.3+     unix_listener stats-writer {
 #2.3+         user = vmail
 #2.3+         group = vmail
@@ -122,4 +124,3 @@ namespace inbox {
     special_use = \Trash
   }
 }
-
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index d254e3ccb5..545dcb1080 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -37,10 +37,13 @@ nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
 inet_interfaces = all
 smtp_tls_security_level = may
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2,!SSLv3
-smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtpd_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+smtpd_tls_mandatory_ciphers = medium
+tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+tls_preempt_cipherlist = no
 # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
 enable_original_recipient = yes
-- 
GitLab


From 4189017a3a443758613ecc2521d01198cd1616e7 Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 10 Aug 2020 12:30:01 +0200
Subject: [PATCH 570/571] Add ssl_protocols for backwards compatibility (#5423)

---
 install/tpl/debian6_dovecot2.conf.master | 1 +
 1 file changed, 1 insertion(+)

diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index ce27f2376e..1080eeb559 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -7,6 +7,7 @@ mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_dh = </etc/dovecot/dh.pem
+ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1
 ssl_min_protocol = TLSv1.2
 ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
 ssl_prefer_server_ciphers = no
-- 
GitLab


From be9d18be9d35e911d8d0c66007c2350577225e8a Mon Sep 17 00:00:00 2001
From: thom <thom@amsterdamtech.nl>
Date: Mon, 10 Aug 2020 12:35:11 +0200
Subject: [PATCH 571/571] Change loglevel to debug if no DB exists for site
 (#5688)

---
 server/lib/classes/backup.inc.php | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php
index ba28cd4c90..485bd996d3 100644
--- a/server/lib/classes/backup.inc.php
+++ b/server/lib/classes/backup.inc.php
@@ -1147,7 +1147,7 @@ class backup
 
         $records = $app->db->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ?", $server_id, $domain_id);
         if (empty($records)){
-            $app->log('Skipping database backup for domain ' . $web_domain['domain_id'] . ', because no related databases found.', LOGLEVEL_ERROR);
+            $app->log('Skipping database backup for domain ' . $web_domain['domain_id'] . ', because no related databases found.', LOGLEVEL_DEBUG);
             return true;
         }
 
@@ -1450,4 +1450,3 @@ class backup
 }
 
 ?>
-
-- 
GitLab